pywcs-1.12/0000755001153600020070000000000012310355732014644 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/CHANGELOG0000644001153600020070000000561712310355627016072 0ustar cslocumSTSCI\science00000000000000Version 1.11 ============ NEW FEATURES: - Updated to wcslib version 4.8.2, which gives much more detailed error messages. Exceptions raised due to invalid WCS keywords should now be more informative. - Undefined values that are the result of p2s and s2p are now set to NaN. Previously, one had to examine the stat result vector to determine which results were invalid. - Added functions get_pc() and get_cdelt(). These provide a way to always get the canonical representation of the linear transformation matrix, whether the header specified it in PC, CD or CROTA form. BROADER COMPATIBILITY: - Supports Python 3.x - Long-running process will now release the Python GIL to better support Python multithreading. - Builds on Microsoft Windows using mingw32, mingw64 and Visual Studio 9.0 and 10.0 without severely patching wcslib. - pywcs will now run without pyfits, though the SIP and distortion lookup table functionality is unavailable. BUG FIXES: - The dimensions of the cd and pc matrices were formerly always returned as 2x2. They now are sized according to naxis. MISCELLANEOUS: - Lots of new unit tests - Setting wcs.wcs.cunit will now verify that the values are valid unit strings. Version 1.10 ============ - Adds a UnitConversion class, which gives access to wcslib's unit conversion functionality. Given two convertible unit strings, pywcs can convert arrays of values from one to the other. - Now uses wcslib 4.7 - Changes to some wcs values would not always calculate secondary values. Version 1.9 =========== - Support binary image arrays and pixel list format WCS by presenting a way to call wcslib's wcsbth() - Updated underlying wcslib to version 4.5, which fixes the following: - Fixed the interpretation of VELREF when translating AIPS-convention spectral types. Such translation is now handled by a new special- purpose function, spcaips(). The wcsprm struct has been augmented with an entry for velref which is filled by wcspih() and wcsbth(). Previously, selection by VELREF of the radio or optical velocity convention for type VELO was not properly handled. BUGS: - The "pc" member is now available with a default "raw" Wcsprm object. - Make properties that return arrays read-only, since modifying a (mutable) array could result in secondary values not being recomputed based on those changes. - float properties can now be set using int values Version 1.3a1 ============= Earlier versions of pywcs had two versions of every conversion method: X(...) -- treats the origin of pixel coordinates at (0, 0) X_fits(...) -- treats the origin of pixel coordinates at (1, 1) From version 1.3 onwards, there is only one method for each conversion, with an 'origin' argument: - 0: places the origin at (0, 0), which is the C/Numpy convention. - 1: places the origin at (1, 1), which is the Fortran/FITS convention. pywcs-1.12/defsetup.py0000644001153600020070000003073012310355627017043 0ustar cslocumSTSCI\science00000000000000#!/usr/bin/env python from __future__ import with_statement, division # confidence high CONTACT = "Michael Droettboom" EMAIL = "mdroe@stsci.edu" from distutils.core import setup, Extension from distutils.dist import Distribution from distutils.errors import DistutilsError import glob from os.path import join import os.path import shutil import sys if os.path.exists("pywcs"): srcroot = 'pywcs' else: srcroot = '.' sys.path.append(join('.', srcroot, "lib/pywcs")) sys.path.append('.') def b(s): return s.encode('ascii') if sys.version_info[0] >= 3: def string_escape(s): s = s.decode('ascii').encode('ascii', 'backslashreplace') s = s.replace(b('\n'), b('\\n')) return s.decode('ascii') from io import StringIO string_types = (str, bytes) else: def string_escape(s): return s.encode('string_escape') from cStringIO import StringIO string_types = (str, unicode) ###################################################################### # CONFIGURATION # BUILD may be 'debug', 'profile', or 'release' BUILD = 'release' OPENMP = False ###################################################################### # Helper class def write_if_different(filename, data): data = data.encode('ascii') if os.path.exists(filename): with open(filename, 'rb') as fd: original_data = fd.read() else: original_data = None if original_data != data: with open(filename, 'wb') as fd: fd.write(data) ###################################################################### # NUMPY try: import numpy except ImportError: print("numpy must be installed to build pywcs.") print("ABORTING.") raise major, minor, rest = numpy.__version__.split(".", 2) if (int(major), int(minor)) < (1, 3): print("numpy version 1.3 or later must be installed to build pywcs.") print("ABORTING.") raise ImportError try: numpy_include = numpy.get_include() except AttributeError: numpy_include = numpy.get_numpy_include() ###################################################################### # WCSLIB WCSVERSION = "4.10" WCSLIB = "wcslib" # Path to wcslib WCSLIB_PATCHED = "wcslib" WCSLIBC = join(WCSLIB_PATCHED, "C") # Path to wcslib source files WCSFILES = [ # List of wcslib files to compile 'flexed/wcsbth.c', 'flexed/wcspih.c', 'flexed/wcsulex.c', 'flexed/wcsutrn.c', 'cel.c', 'lin.c', 'log.c', 'prj.c', 'spc.c', 'sph.c', 'spx.c', 'tab.c', 'wcs.c', 'wcserr.c', 'wcsfix.c', 'wcshdr.c', 'wcsprintf.c', 'wcsunits.c', 'wcsutil.c'] WCSFILES = [join(WCSLIBC, x) for x in WCSFILES] ###################################################################### # WCSLIB CONFIGURATION # The only configuration parameter needed at compile-time is how to # specify a 64-bit signed integer. Python's ctypes module can get us # that information, but it is only available in Python 2.5 or later. # If we can't be absolutely certain, we default to "long long int", # which is correct on most platforms (x86, x86_64). If we find # platforms where this heuristic doesn't work, we may need to hardcode # for them. def determine_64_bit_int(): try: try: import ctypes except ImportError: raise ValueError() if ctypes.sizeof(ctypes.c_longlong) == 8: return "long long int" elif ctypes.sizeof(ctypes.c_long) == 8: return "long int" elif ctypes.sizeof(ctypes.c_int) == 8: return "int" else: raise ValueError() except ValueError: return "long long int" h_file = StringIO() h_file.write(""" /* WCSLIB library version number. */ #define WCSLIB_VERSION %s /* 64-bit integer data type. */ #define WCSLIB_INT64 %s /* Windows needs some other defines */ /* I think the only one we need is _WIN32, but the others don't hurt - Mark S. 2012-02-14 */ #if defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) || defined (__MINGW64__) /* */ #ifndef YY_NO_UNISTD_H #define YY_NO_UNISTD_H #endif #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #ifndef _NO_OLDNAMES /* for mingw32 */ #define _NO_OLDNAMES #endif #ifndef NO_OLDNAMES /* for mingw64 */ #define NO_OLDNAMES #endif #ifndef __STDC__ /* for MS Visual C */ #define __STDC__ 1 #endif #endif """ % (WCSVERSION, determine_64_bit_int())) write_if_different(join(srcroot, 'src', 'wcsconfig.h'), h_file.getvalue()) ###################################################################### # GENERATE DOCSTRINGS IN C docstrings = {} with open(join(srcroot, 'doc', 'docstrings.py'), 'rb') as fd: docstrings_content = fd.read() exec(docstrings_content, docstrings) keys = [key for key in docstrings.keys() if not key.startswith('__') and type(key) in string_types] keys.sort() for key in keys: docstrings[key] = docstrings[key].encode('utf8').lstrip() h_file = StringIO() h_file.write("""/* DO NOT EDIT! This file is autogenerated by setup.py. To edit its contents, edit doc/docstrings.py */ #ifndef __DOCSTRINGS_H__ #define __DOCSTRINGS_H__ void fill_docstrings(void); """) for key in keys: val = docstrings[key] h_file.write('extern char doc_%s[%d];\n' % (key, len(val))) h_file.write("\n#endif\n\n") write_if_different(join(srcroot, 'src', 'docstrings.h'), h_file.getvalue()) c_file = StringIO() c_file.write("""/* DO NOT EDIT! This file is autogenerated by setup.py. To edit its contents, edit doc/docstrings.py The weirdness here with strncpy is because some C compilers, notably MSVC, do not support string literals greater than 256 characters. */ #include #include "docstrings.h" """) for key in keys: val = docstrings[key] c_file.write('char doc_%s[%d];\n' % (key, len(val))) c_file.write("\nvoid fill_docstrings(void)\n{\n") for key in keys: val = docstrings[key] # For portability across various compilers, we need to fill the # docstrings in 256-character chunks for i in range(0, len(val), 256): chunk = string_escape(val[i:i+256]).replace('"', '\\"') c_file.write(' strncpy(doc_%s + %d, "%s", %d);\n' % ( key, i, chunk, min(len(val) - i, 256))) c_file.write("\n") c_file.write("\n}\n\n") write_if_different(join(srcroot, 'src', 'docstrings.c'), c_file.getvalue()) ###################################################################### # PYWCS-SPECIFIC AND WRAPPER SOURCE FILES PYWCS_VERSION = '1.11' VERSION = '%s-%s' % (PYWCS_VERSION, WCSVERSION) PYWCS_SOURCES = [ # List of pywcs files to compile 'distortion.c', 'distortion_wrap.c', 'docstrings.c', 'pipeline.c', 'pyutil.c', 'pywcs.c', 'pywcs_api.c', 'sip.c', 'sip_wrap.c', 'str_list_proxy.c', 'util.c', 'wcslib_wrap.c', 'wcslib_tabprm_wrap.c', 'wcslib_units_wrap.c', 'wcslib_wtbarr_wrap.c'] PYWCS_SOURCES = [join('src', x) for x in PYWCS_SOURCES] ###################################################################### # DISTUTILS SETUP def get_distutils_option(option, commands): """ Returns the value of the given distutils option. Parameters ---------- option : str The name of the option commands : list of str The list of commands on which this option is available Returns ------- val : str or None the value of the given distutils option. If the option is not set, returns None. """ # Pre-parse the Distutils command-line options and config files to # if the option is set. dist = Distribution() try: dist.parse_config_files() dist.parse_command_line() except DistutilsError: # Let distutils handle this itself return None except AttributeError: # This seems to get thrown for ./setup.py --help return None for cmd in commands: if cmd in dist.commands: break else: return None for cmd in commands: cmd_opts = dist.get_option_dict(cmd) if option in cmd_opts: return cmd_opts[option][1] else: return None def adjust_compiler(): """ This function detects broken compilers and switches to another. If the environment variable CC is explicitly set, or a compiler is specified on the commandline, no override is performed -- the purpose here is to only override a default compiler. The specific compilers with problems are: * The default compiler in XCode-4.2, llvm-gcc-4.2, segfaults when compiling wcslib. The set of broken compilers can be updated by changing the compiler_mapping variable. It is a list of 2-tuples where the first in the pair is a regular expression matching the version of the broken compiler, and the second is the compiler to change to. """ if 'CC' in os.environ: return if get_distutils_option( 'compiler', ['build', 'build_ext', 'build_clib']) is not None: return from distutils import ccompiler import subprocess import re compiler_mapping = [ ('i686-apple-darwin[0-9]*-llvm-gcc-4.2', 'clang') ] c = ccompiler.new_compiler() # The MSVC ccompiler class doesn't have a `compiler` member. if not hasattr(c, 'compiler'): return process = subprocess.Popen( c.compiler + ['--version'], stdout=subprocess.PIPE) output = process.communicate()[0].strip().decode('ascii') version = output.split()[0] for broken, fixed in compiler_mapping: if re.match(broken, version): os.environ['CC'] = fixed break adjust_compiler() libraries = [] define_macros = [('ECHO', None), ('WCSTRIG_MACRO', None), ('PYWCS_BUILD', None), ('_GNU_SOURCE', None)] undef_macros = [] extra_compile_args = [] extra_link_args = [] if BUILD.lower() == 'debug': define_macros.append(('DEBUG', None)) undef_macros.append('NDEBUG') if not sys.platform.startswith('sun') and \ not sys.platform == 'win32': extra_compile_args.extend(["-fno-inline", "-O0", "-g"]) elif BUILD.lower() == 'profile': define_macros.append(('NDEBUG', None)) undef_macros.append('DEBUG') if not sys.platform.startswith('sun'): extra_compile_args.extend(["-O3", "-g"]) elif BUILD.lower() == 'release': # Define ECHO as nothing to prevent spurious newlines from # printing within the libwcs parser define_macros.append(('NDEBUG', None)) undef_macros.append('DEBUG') else: raise ValueError("BUILD should be one of 'debug', 'profile', or 'release'") if sys.platform == 'win32': # we are also writing these into wcsconfig.h, but that include # file is not used by wcslib define_macros.extend([ ('YY_NO_UNISTD_H', None), ('_CRT_SECURE_NO_WARNINGS', None), ('_NO_OLDNAMES', None), # for mingw32 ('NO_OLDNAMES', None), # for mingw64 ('__STDC__', None) # for MSVC ]) if sys.platform.startswith('linux'): define_macros.append(('HAVE_SINCOS', None)) if not sys.platform.startswith('sun') and \ not sys.platform == 'win32': if OPENMP: extra_compile_args.append('-fopenmp') libraries.append('gomp') else: extra_compile_args.extend(['-Wno-unknown-pragmas']) PYWCS_EXTENSIONS = [ Extension('pywcs._pywcs', WCSFILES + PYWCS_SOURCES, include_dirs = [numpy_include, join(srcroot, WCSLIBC), WCSLIBC, join(srcroot, "src") ], define_macros=define_macros, undef_macros=undef_macros, extra_compile_args=extra_compile_args, extra_link_args=extra_link_args, libraries=libraries ) ] pkg = ["pywcs", "pywcs.tests"] setupargs = { 'version' : VERSION, 'description': "Python wrappers to WCSLIB", 'author' : CONTACT, 'author_email': EMAIL, 'url' : "http://projects.scipy.org/astropy/astrolib/wiki/WikiStart", 'platforms' : ["unix","windows"], 'ext_modules' : PYWCS_EXTENSIONS, 'data_files' : [ ( 'pywcs/include', ['src/*.h']), ( 'pywcs/include/wcslib', [ WCSLIBC + '/*.h'] ), ( 'pywcs/tests/maps', ['lib/pywcs/tests/maps/*.hdr']), ( 'pywcs/tests/nrao', ['lib/pywcs/tests/nrao/*.hdr']), ( 'pywcs/tests/spectra', ['lib/pywcs/tests/spectra/*.hdr']), ( 'pywcs/tests/data', ['lib/pywcs/tests/data/*.hdr', 'lib/pywcs/tests/data/*.fits']) ], 'package_dir' : { 'pywcs' : 'lib/pywcs', 'pywcs.tests' : 'lib/pywcs/tests'}, } pywcs-1.12/distribute_setup.py0000644001153600020070000003661512310355627020632 0ustar cslocumSTSCI\science00000000000000#!python """Bootstrap distribute installation If you want to use setuptools in your package's setup.py, just include this file in the same directory with it, and add this to the top of your setup.py:: from distribute_setup import use_setuptools use_setuptools() If you want to require a specific version of setuptools, set a download mirror, or use an alternate download directory, you can do so by supplying the appropriate options to ``use_setuptools()``. This file can also be run as a script to install or upgrade setuptools. """ import os import sys import time import fnmatch import tempfile import tarfile from distutils import log try: from site import USER_SITE except ImportError: USER_SITE = None try: import subprocess def _python_cmd(*args): args = (sys.executable,) + args return subprocess.call(args) == 0 except ImportError: # will be used for python 2.3 def _python_cmd(*args): args = (sys.executable,) + args # quoting arguments if windows if sys.platform == 'win32': def quote(arg): if ' ' in arg: return '"%s"' % arg return arg args = [quote(arg) for arg in args] return os.spawnl(os.P_WAIT, sys.executable, *args) == 0 DEFAULT_VERSION = "0.6.19" DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/" SETUPTOOLS_FAKED_VERSION = "0.6c11" SETUPTOOLS_PKG_INFO = """\ Metadata-Version: 1.0 Name: setuptools Version: %s Summary: xxxx Home-page: xxx Author: xxx Author-email: xxx License: xxx Description: xxx """ % SETUPTOOLS_FAKED_VERSION def _install(tarball): # extracting the tarball tmpdir = tempfile.mkdtemp() log.warn('Extracting in %s', tmpdir) old_wd = os.getcwd() try: os.chdir(tmpdir) tar = tarfile.open(tarball) _extractall(tar) tar.close() # going in the directory subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) os.chdir(subdir) log.warn('Now working in %s', subdir) # installing log.warn('Installing Distribute') if not _python_cmd('setup.py', 'install'): log.warn('Something went wrong during the installation.') log.warn('See the error message above.') finally: os.chdir(old_wd) def _build_egg(egg, tarball, to_dir): # extracting the tarball tmpdir = tempfile.mkdtemp() log.warn('Extracting in %s', tmpdir) old_wd = os.getcwd() try: os.chdir(tmpdir) tar = tarfile.open(tarball) _extractall(tar) tar.close() # going in the directory subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) os.chdir(subdir) log.warn('Now working in %s', subdir) # building an egg log.warn('Building a Distribute egg in %s', to_dir) _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) finally: os.chdir(old_wd) # returning the result log.warn(egg) if not os.path.exists(egg): raise IOError('Could not build the egg.') def _do_download(version, download_base, to_dir, download_delay): egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg' % (version, sys.version_info[0], sys.version_info[1])) if not os.path.exists(egg): tarball = download_setuptools(version, download_base, to_dir, download_delay) _build_egg(egg, tarball, to_dir) sys.path.insert(0, egg) import setuptools setuptools.bootstrap_install_from = egg def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, download_delay=15, no_fake=True): # making sure we use the absolute path to_dir = os.path.abspath(to_dir) was_imported = 'pkg_resources' in sys.modules or \ 'setuptools' in sys.modules try: try: import pkg_resources if not hasattr(pkg_resources, '_distribute'): if not no_fake: _fake_setuptools() raise ImportError except ImportError: return _do_download(version, download_base, to_dir, download_delay) try: pkg_resources.require("distribute>="+version) return except pkg_resources.VersionConflict: e = sys.exc_info()[1] if was_imported: sys.stderr.write( "The required version of distribute (>=%s) is not available,\n" "and can't be installed while this script is running. Please\n" "install a more recent version first, using\n" "'easy_install -U distribute'." "\n\n(Currently using %r)\n" % (version, e.args[0])) sys.exit(2) else: del pkg_resources, sys.modules['pkg_resources'] # reload ok return _do_download(version, download_base, to_dir, download_delay) except pkg_resources.DistributionNotFound: return _do_download(version, download_base, to_dir, download_delay) finally: if not no_fake: _create_fake_setuptools_pkg_info(to_dir) def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, delay=15): """Download distribute from a specified location and return its filename `version` should be a valid distribute version number that is available as an egg for download under the `download_base` URL (which should end with a '/'). `to_dir` is the directory where the egg will be downloaded. `delay` is the number of seconds to pause before an actual download attempt. """ # making sure we use the absolute path to_dir = os.path.abspath(to_dir) try: from urllib.request import urlopen except ImportError: from urllib2 import urlopen tgz_name = "distribute-%s.tar.gz" % version url = download_base + tgz_name saveto = os.path.join(to_dir, tgz_name) src = dst = None if not os.path.exists(saveto): # Avoid repeated downloads try: log.warn("Downloading %s", url) src = urlopen(url) # Read/write all in one block, so we don't create a corrupt file # if the download is interrupted. data = src.read() dst = open(saveto, "wb") dst.write(data) finally: if src: src.close() if dst: dst.close() return os.path.realpath(saveto) def _no_sandbox(function): def __no_sandbox(*args, **kw): try: from setuptools.sandbox import DirectorySandbox if not hasattr(DirectorySandbox, '_old'): def violation(*args): pass DirectorySandbox._old = DirectorySandbox._violation DirectorySandbox._violation = violation patched = True else: patched = False except ImportError: patched = False try: return function(*args, **kw) finally: if patched: DirectorySandbox._violation = DirectorySandbox._old del DirectorySandbox._old return __no_sandbox def _patch_file(path, content): """Will backup the file then patch it""" existing_content = open(path).read() if existing_content == content: # already patched log.warn('Already patched.') return False log.warn('Patching...') _rename_path(path) f = open(path, 'w') try: f.write(content) finally: f.close() return True _patch_file = _no_sandbox(_patch_file) def _same_content(path, content): return open(path).read() == content def _rename_path(path): new_name = path + '.OLD.%s' % time.time() log.warn('Renaming %s into %s', path, new_name) os.rename(path, new_name) return new_name def _remove_flat_installation(placeholder): if not os.path.isdir(placeholder): log.warn('Unkown installation at %s', placeholder) return False found = False for file in os.listdir(placeholder): if fnmatch.fnmatch(file, 'setuptools*.egg-info'): found = True break if not found: log.warn('Could not locate setuptools*.egg-info') return log.warn('Removing elements out of the way...') pkg_info = os.path.join(placeholder, file) if os.path.isdir(pkg_info): patched = _patch_egg_dir(pkg_info) else: patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO) if not patched: log.warn('%s already patched.', pkg_info) return False # now let's move the files out of the way for element in ('setuptools', 'pkg_resources.py', 'site.py'): element = os.path.join(placeholder, element) if os.path.exists(element): _rename_path(element) else: log.warn('Could not find the %s element of the ' 'Setuptools distribution', element) return True _remove_flat_installation = _no_sandbox(_remove_flat_installation) def _after_install(dist): log.warn('After install bootstrap.') placeholder = dist.get_command_obj('install').install_purelib _create_fake_setuptools_pkg_info(placeholder) def _create_fake_setuptools_pkg_info(placeholder): if not placeholder or not os.path.exists(placeholder): log.warn('Could not find the install location') return pyver = '%s.%s' % (sys.version_info[0], sys.version_info[1]) setuptools_file = 'setuptools-%s-py%s.egg-info' % \ (SETUPTOOLS_FAKED_VERSION, pyver) pkg_info = os.path.join(placeholder, setuptools_file) if os.path.exists(pkg_info): log.warn('%s already exists', pkg_info) return log.warn('Creating %s', pkg_info) f = open(pkg_info, 'w') try: f.write(SETUPTOOLS_PKG_INFO) finally: f.close() pth_file = os.path.join(placeholder, 'setuptools.pth') log.warn('Creating %s', pth_file) f = open(pth_file, 'w') try: f.write(os.path.join(os.curdir, setuptools_file)) finally: f.close() _create_fake_setuptools_pkg_info = _no_sandbox(_create_fake_setuptools_pkg_info) def _patch_egg_dir(path): # let's check if it's already patched pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') if os.path.exists(pkg_info): if _same_content(pkg_info, SETUPTOOLS_PKG_INFO): log.warn('%s already patched.', pkg_info) return False _rename_path(path) os.mkdir(path) os.mkdir(os.path.join(path, 'EGG-INFO')) pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') f = open(pkg_info, 'w') try: f.write(SETUPTOOLS_PKG_INFO) finally: f.close() return True _patch_egg_dir = _no_sandbox(_patch_egg_dir) def _before_install(): log.warn('Before install bootstrap.') _fake_setuptools() def _under_prefix(location): if 'install' not in sys.argv: return True args = sys.argv[sys.argv.index('install')+1:] for index, arg in enumerate(args): for option in ('--root', '--prefix'): if arg.startswith('%s=' % option): top_dir = arg.split('root=')[-1] return location.startswith(top_dir) elif arg == option: if len(args) > index: top_dir = args[index+1] return location.startswith(top_dir) if arg == '--user' and USER_SITE is not None: return location.startswith(USER_SITE) return True def _fake_setuptools(): log.warn('Scanning installed packages') try: import pkg_resources except ImportError: # we're cool log.warn('Setuptools or Distribute does not seem to be installed.') return ws = pkg_resources.working_set try: setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools', replacement=False)) except TypeError: # old distribute API setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools')) if setuptools_dist is None: log.warn('No setuptools distribution found') return # detecting if it was already faked setuptools_location = setuptools_dist.location log.warn('Setuptools installation detected at %s', setuptools_location) # if --root or --preix was provided, and if # setuptools is not located in them, we don't patch it if not _under_prefix(setuptools_location): log.warn('Not patching, --root or --prefix is installing Distribute' ' in another location') return # let's see if its an egg if not setuptools_location.endswith('.egg'): log.warn('Non-egg installation') res = _remove_flat_installation(setuptools_location) if not res: return else: log.warn('Egg installation') pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO') if (os.path.exists(pkg_info) and _same_content(pkg_info, SETUPTOOLS_PKG_INFO)): log.warn('Already patched.') return log.warn('Patching...') # let's create a fake egg replacing setuptools one res = _patch_egg_dir(setuptools_location) if not res: return log.warn('Patched done.') _relaunch() def _relaunch(): log.warn('Relaunching...') # we have to relaunch the process # pip marker to avoid a relaunch bug if sys.argv[:3] == ['-c', 'install', '--single-version-externally-managed']: sys.argv[0] = 'setup.py' args = [sys.executable] + sys.argv sys.exit(subprocess.call(args)) def _extractall(self, path=".", members=None): """Extract all members from the archive to the current working directory and set owner, modification time and permissions on directories afterwards. `path' specifies a different directory to extract to. `members' is optional and must be a subset of the list returned by getmembers(). """ import copy import operator from tarfile import ExtractError directories = [] if members is None: members = self for tarinfo in members: if tarinfo.isdir(): # Extract directories with a safe mode. directories.append(tarinfo) tarinfo = copy.copy(tarinfo) tarinfo.mode = 448 # decimal for oct 0700 self.extract(tarinfo, path) # Reverse sort directories. if sys.version_info < (2, 4): def sorter(dir1, dir2): return cmp(dir1.name, dir2.name) directories.sort(sorter) directories.reverse() else: directories.sort(key=operator.attrgetter('name'), reverse=True) # Set correct owner, mtime and filemode on directories. for tarinfo in directories: dirpath = os.path.join(path, tarinfo.name) try: self.chown(tarinfo, dirpath) self.utime(tarinfo, dirpath) self.chmod(tarinfo, dirpath) except ExtractError: e = sys.exc_info()[1] if self.errorlevel > 1: raise else: self._dbg(1, "tarfile: %s" % e) def main(argv, version=DEFAULT_VERSION): """Install or upgrade setuptools and EasyInstall""" tarball = download_setuptools() _install(tarball) if __name__ == '__main__': main(sys.argv[1:]) pywcs-1.12/doc/0000755001153600020070000000000012310355732015411 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/doc/docstrings.py0000644001153600020070000016202512310355626020152 0ustar cslocumSTSCI\science00000000000000# Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. # 3. The name of AURA and its representatives may not be used to # endorse or promote products derived from this software without # specific prior written permission. # THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. ########################################################################### from __future__ import division # confidence high del division # We don't want the "division" symbol in the namespace, since it # should have only docstrings # It gets to be really tedious to type long docstrings in ANSI C # syntax (since multi-line string literals are not valid). # Therefore, the docstrings are written here in doc/docstrings.py, # which are then converted by setup.py into docstrings.h, which is # included by pywcs.c import _docutil as __ a = """ ``double array[a_order+1][a_order+1]`` The `SIP`_ ``A_i_j`` matrix used for pixel to focal plane transformation. Its values may be changed in place, but it may not be resized, without creating a new `~pywcs.Sip` object. """ a_order = """ ``int`` (read-only) The order of the polynomial in the `SIP`_ ``A_i_j`` array (``A_ORDER``). """ all_pix2sky = """ all_pix2sky(pixcrd, origin) -> ``double array[ncoord][nelem]`` Transforms pixel coordinates to sky coordinates by doing all of the following: - Detector to image plane correction (optionally) - SIP distortion correction (optionally) - Paper IV distortion correction (optionally) - wcslib WCS transformation The first three (the distortion corrections) are done in parallel. - *pixcrd*: double array[ncoord][nelem]. Array of pixel coordinates. %s Returns an array of sky coordinates. **Exceptions:** - `MemoryError`: Memory allocation failed. - `SingularMatrixError`: Linear transformation matrix is singular. - `InconsistentAxisTypesError`: Inconsistent or unrecognized coordinate axis types. - `ValueError`: Invalid parameter value. - `ValueError`: Invalid coordinate transformation parameters. - `ValueError`: x- and y-coordinate arrays are not the same size. - `InvalidTransformError`: Invalid coordinate transformation. - `InvalidTransformError`: Ill-conditioned coordinate transformation parameters. """ % __.ORIGIN() alt = """ ``str`` Character code for alternate coordinate descriptions. For example, the ``"a"`` in keyword names such as ``CTYPEia``. This is a space character for the primary coordinate description, or one of the 26 upper-case letters, A-Z. """ ap = """ ``double array[ap_order+1][ap_order+1]`` The `SIP`_ ``AP_i_j`` matrix used for focal plane to pixel transformation. Its values may be changed in place, but it may not be resized, without creating a new `~pywcs.Sip` object. """ ap_order = """ ``int`` (read-only) The order of the polynomial in the `SIP`_ ``AP_i_j`` array (``AP_ORDER``). """ axis_types = """ ``int array[naxis]`` An array of four-digit type codes for each axis. - First digit (i.e. 1000s): - 0: Non-specific coordinate type. - 1: Stokes coordinate. - 2: Celestial coordinate (including ``CUBEFACE``). - 3: Spectral coordinate. - Second digit (i.e. 100s): - 0: Linear axis. - 1: Quantized axis (``STOKES``, ``CUBEFACE``). - 2: Non-linear celestial axis. - 3: Non-linear spectral axis. - 4: Logarithmic axis. - 5: Tabular axis. - Third digit (i.e. 10s): - 0: Group number, e.g. lookup table number - The fourth digit is used as a qualifier depending on the axis type. - For celestial axes: - 0: Longitude coordinate. - 1: Latitude coordinate. - 2: ``CUBEFACE`` number. - For lookup tables: the axis number in a multidimensional table. ``CTYPEia`` in ``"4-3"`` form with unrecognized algorithm code will have its type set to -1 and generate an error. """ b = """ ``double array[b_order+1][b_order+1]`` The `SIP`_ ``B_i_j`` matrix used for pixel to focal plane transformation. Its values may be changed in place, but it may not be resized, without creating a new `~pywcs.Sip` object. """ b_order = """ ``int`` (read-only) The order of the polynomial in the `SIP`_ ``B_i_j`` array (``B_ORDER``). """ bp = """ ``double array[bp_order+1][bp_order+1]`` The `SIP`_ ``BP_i_j`` matrix used for focal plane to pixel transformation. Its values may be changed in place, but it may not be resized, without creating a new `~pywcs.Sip` object. """ bp_order = """ ``int`` (read-only) The order of the polynomial in the `SIP`_ ``BP_i_j`` array (``BP_ORDER``). """ cd = """ ``double array[naxis][naxis]`` The ``CDi_ja`` linear transformation matrix. For historical compatibility, three alternate specifications of the linear transforations are available in wcslib. The canonical ``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the deprecated ``CROTAia`` keywords. Although the latter may not formally co-exist with ``PCi_ja``, the approach here is simply to ignore them if given in conjunction with ``PCi_ja``. `~pywcs.Wcsprm.has_pc`, `~pywcs.Wcsprm.has_cd` and `~pywcs.Wcsprm.has_crota` can be used to determine which of these alternatives are present in the header. These alternate specifications of the linear transformation matrix are translated immediately to ``PCi_ja`` by `~pywcs.Wcsprm.set` and are nowhere visible to the lower-level routines. In particular, `~pywcs.Wcsprm.set` resets `~pywcs.Wcsprm.cdelt` to unity if ``CDi_ja`` is present (and no ``PCi_ja``). If no ``CROTAia`` is associated with the latitude axis, `set` reverts to a unity ``PCi_ja`` matrix. """ cdelt = """ ``double array[naxis]`` Coordinate increments (``CDELTia``) for each coord axis. If a ``CDi_ja`` linear transformation matrix is present, a warning is raised and `~pywcs.Wcsprm.cdelt` is ignored. The ``CDi_ja`` matrix may be deleted by:: del wcs.wcs.cd An undefined value is represented by NaN. """ cel_offset = """ ``boolean`` If `True`, an offset will be applied to ``(x, y)`` to force ``(x,y) = (0,0)`` at the fiducial point, (phi_0, theta_0). Default is `False`. """ celfix = """ Translates AIPS-convention celestial projection types, ``-NCP`` and ``-GLS``. Returns ``0`` for success; ``-1`` if no change required. """ cname = """ ``list of strings`` A list of the coordinate axis names, from ``CNAMEia``. """ colax = """ ``int array[naxis]`` An array recording the column numbers for each axis in a pixel list. """ colnum = """ ``int`` Where the coordinate representation is associated with an image-array column in a FITS binary table, this property may be used to record the relevant column number. It should be set to zero for an image header or pixel list. """ convert = """ convert(array) Perform the unit conversion on the elements of the given *array*, returning an array of the same shape. """ coord = """ ``double array[K_M]...[K_2][K_1][M]`` The tabular coordinate array, with the dimensions:: (K_M, ... K_2, K_1, M) (see `~pywcs._pywcs.Tabprm.K`) i.e. with the `M` dimension varying fastest so that the `M` elements of a coordinate vector are stored contiguously in memory. """ copy = """ Creates a deep copy of the WCS object. """ cpdis1 = """ `~pywcs.DistortionLookupTable` The pre-linear transformation distortion lookup table, ``CPDIS1``. """ cpdis2 = """ `~pywcs.DistortionLookupTable` The pre-linear transformation distortion lookup table, ``CPDIS2``. """ crder = """ ``double array[naxis]`` The random error in each coordinate axis, ``CRDERia``. An undefined value is represented by NaN. """ crota = """ ``double array[naxis]`` ``CROTAia`` keyvalues for each coordinate axis. For historical compatibility, three alternate specifications of the linear transforations are available in wcslib. The canonical ``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the deprecated ``CROTAia`` keywords. Although the latter may not formally co-exist with ``PCi_ja``, the approach here is simply to ignore them if given in conjunction with ``PCi_ja``. `~pywcs.Wcsprm.has_pc`, `~pywcs.Wcsprm.has_cd` and `~pywcs.Wcsprm.has_crota` can be used to determine which of these alternatives are present in the header. These alternate specifications of the linear transformation matrix are translated immediately to ``PCi_ja`` by `~pywcs.Wcsprm.set` and are nowhere visible to the lower-level routines. In particular, `~pywcs.Wcsprm.set` resets `~pywcs.Wcsprm.cdelt` to unity if ``CDi_ja`` is present (and no ``PCi_ja``). If no ``CROTAia`` is associated with the latitude axis, `set` reverts to a unity ``PCi_ja`` matrix. """ crpix = """ ``double array[naxis]`` Coordinate reference pixels (``CRPIXja``) for each pixel axis. """ crval = """ ``double array[naxis]`` Coordinate reference values (``CRVALia``) for each coordinate axis. """ crval_tabprm = """ ``double array[M]`` Array whose elements contain the index value for the reference pixel for each of the tabular coordinate axes. """ csyer = """ ``double array[naxis]`` The systematic error in the coordinate value axes, ``CSYERia``. An undefined value is represented by NaN. """ ctype = """ ``list of strings[naxis]`` List of ``CTYPEia`` keyvalues. The `~pywcs.Wcsprm.ctype` keyword values must be in upper case and there must be zero or one pair of matched celestial axis types, and zero or one spectral axis. """ cubeface = """ ``int`` Index into the ``pixcrd`` (pixel coordinate) array for the ``CUBEFACE`` axis. This is used for quadcube projections where the cube faces are stored on a separate axis. The quadcube projections (``TSC``, ``CSC``, ``QSC``) may be represented in FITS in either of two ways: - The six faces may be laid out in one plane and numbered as follows:: 0 4 3 2 1 4 3 2 5 Faces 2, 3 and 4 may appear on one side or the other (or both). The sky-to-pixel routines map faces 2, 3 and 4 to the left but the pixel-to-sky routines accept them on either side. - The ``COBE`` convention in which the six faces are stored in a three-dimensional structure using a ``CUBEFACE`` axis indexed from 0 to 5 as above. These routines support both methods; `~pywcs.Wcsprm.set` determines which is being used by the presence or absence of a ``CUBEFACE`` axis in `~pywcs.Wcsprm.ctype`. `~pywcs.Wcsprm.p2s` and `~pywcs.Wcsprm.s2p` translate the ``CUBEFACE`` axis representation to the single plane representation understood by the lower-level projection routines. """ cunit = """ ``list of strings[naxis]`` List of ``CUNITia`` keyvalues which define the units of measurement of the ``CRVALia``, ``CDELTia`` and ``CDi_ja`` keywords. As ``CUNITia`` is an optional header keyword, `~pywcs.Wcsprm.cunit` may be left blank but otherwise is expected to contain a standard units specification as defined by WCS Paper I. `~pywcs.Wcsprm.unitfix` is available to translate commonly used non-standard units specifications but this must be done as a separate step before invoking `~pywcs.Wcsprm.set`. For celestial axes, if `~pywcs.Wcsprm.cunit` is not blank, `~pywcs.Wcsprm.set` uses `wcsunits` to parse it and scale `~pywcs.Wcsprm.cdelt`, `~pywcs.Wcsprm.crval`, and `~pywcs.Wcsprm.cd` to decimal degrees. It then resets `~pywcs.Wcsprm.cunit` to ``"deg"``. For spectral axes, if `~pywcs.Wcsprm.cunit` is not blank, `~pywcs.Wcsprm.set` uses `wcsunits` to parse it and scale `~pywcs.Wcsprm.cdelt`, `~pywcs.Wcsprm.crval`, and `~pywcs.Wcsprm.cd` to SI units. It then resets `~pywcs.Wcsprm.cunit` accordingly. `~pywcs.Wcsprm.set` ignores `~pywcs.Wcsprm.cunit` for other coordinate types; `~pywcs.Wcsprm.cunit` may be used to label coordinate values. """ cylfix = """ cylfix() Fixes WCS keyvalues for malformed cylindrical projections. Returns ``0`` for success; ``-1`` if no change required. """ data = """ ``float array`` The array data for the `~pywcs.DistortionLookupTable`. """ data_wtbarr = """ ``double array`` The array data for the BINTABLE. """ dateavg = """ ``string`` Representative mid-point of the date of observation in ISO format, ``yyyy-mm-ddThh:mm:ss``. .. seealso:: `~pywcs.Wcsprm.dateobs` """ dateobs = """ ``string`` Start of the date of observation in ISO format, ``yyyy-mm-ddThh:mm:ss``. .. seealso:: `~pywcs.Wcsprm.dateavg` """ datfix = """ datfix() Translates the old ``DATE-OBS`` date format to year-2000 standard form ``(yyyy-mm-ddThh:mm:ss)`` and derives ``MJD-OBS`` from it if not already set. Alternatively, if `~pywcs.Wcsprm.mjdobs` is set and `~pywcs.Wcsprm.dateobs` isn't, then `~pywcs.Wcsprm.datfix` derives `~pywcs.Wcsprm.dateobs` from it. If both are set but disagree by more than half a day then `ValueError` is raised. Returns ``0`` for success; ``-1`` if no change required. """ delta = """ ``double array[M]`` (read-only) Array of interpolated indices into the coordinate array such that Upsilon_m, as defined in Paper III, is equal to (`~pywcs._pywcs.Tabprm.p0` [m] + 1) + delta[m]. """ det2im = """ Convert detector coordinates to image plane coordinates. """ det2im1 = """ A `~pywcs.DistortionLookupTable` object for detector to image plane correction in the *x*-axis. """ det2im2 = """ A `~pywcs.DistortionLookupTable` object for detector to image plane correction in the *y*-axis. """ dims = """ ``int array[ndim]`` (read-only) The dimensions of the tabular array `~pywcs._pywcs.Wtbarr.data`. """ DistortionLookupTable = """ DistortionLookupTable(*table*, *crpix*, *crval*, *cdelt*) - *table*: 2-dimensional array for the distortion lookup table. - *crpix*: the distortion array reference pixel (a 2-tuple) - *crval*: is the image array pixel coordinate (a 2-tuple) - *cdelt*: is the grid step size (a 2-tuple) Represents a single lookup table for a `Paper IV`_ distortion transformation. """ equinox = """ ``double`` The equinox associated with dynamical equatorial or ecliptic coordinate systems, ``EQUINOXa`` (or ``EPOCH`` in older headers). Not applicable to ICRS equatorial or ecliptic coordinates. An undefined value is represented by NaN. """ extlev = """ ``int`` (read-only) ``EXTLEV`` identifying the binary table extension. """ extnam = """ ``str`` (read-only) ``EXTNAME`` identifying the binary table extension. """ extrema = """ ``double array[K_M]...[K_2][2][M]`` (read-only) An array recording the minimum and maximum value of each element of the coordinate vector in each row of the coordinate array, with the dimensions:: (K_M, ... K_2, 2, M) (see `~pywcs._pywcs.Tabprm.K`). The minimum is recorded in the first element of the compressed K_1 dimension, then the maximum. This array is used by the inverse table lookup function to speed up table searches. """ extver = """ ``int`` (read-only) ``EXTVER`` identifying the binary table extension. """ find_all_wcs = """ find_all_wcs(relax=0, keysel=0) Find all WCS transformations in the header. - *header*: A string containing the raw FITS header data. - *relax*: Degree of permissiveness: - `False`: Recognize only FITS keywords defined by the published WCS standard. - `True`: Admit all recognized informal extensions of the WCS standard. - `int`: a bit field selecting specific extensions to accept. See :ref:`relaxread` for details. - *keysel*: Vector of flag bits that may be used to restrict the keyword types considered: - ``WCSHDR_IMGHEAD``: Image header keywords. - ``WCSHDR_BIMGARR``: Binary table image array. - ``WCSHDR_PIXLIST``: Pixel list keywords. If zero, there is no restriction. If -1, wcspih() is called, rather than wcstbh(). Returns a list of `~pywcs._pywcs._Wcsprm` objects. """ fix = """ fix(translate_units='', naxis=0) Applies all of the corrections handled separately by `~pywcs.Wcsprm.datfix`, `~pywcs.Wcsprm.unitfix`, `~pywcs.Wcsprm.celfix`, `~pywcs.Wcsprm.spcfix` and `~pywcs.Wcsprm.cylfix`. - *translate_units*: string. Do potentially unsafe translations of non-standard unit strings. Although ``"S"`` is commonly used to represent seconds, its translation to ``"s"`` is potentially unsafe since the standard recognizes ``"S"`` formally as Siemens, however rarely that may be used. The same applies to ``"H"`` for hours (Henry), and ``"D"`` for days (Debye). This string controls what to do in such cases, and is case-insensitive. - If the string contains ``"s"``, translate ``"S"`` to ``"s"``. - If the string contains ``"h"``, translate ``"H"`` to ``"h"``. - If the string contains ``"d"``, translate ``"D"`` to ``"d"``. Thus ``''`` doesn't do any unsafe translations, whereas ``'shd'`` does all of them. - *naxis*: int array[naxis]. Image axis lengths. If this array is set to zero or ``None``, then `~pywcs.Wcsprm.cylfix` will not be invoked. Returns a dictionary containing the following keys, each referring to a status string for each of the sub-fix functions that were called: - `~pywcs.Wcsprm.datfix` - `~pywcs.Wcsprm.unitfix` - `~pywcs.Wcsprm.celfix` - `~pywcs.Wcsprm.spcfix` - `~pywcs.Wcsprm.cylfix` """ get_offset = """ get_offset(*x, y*) -> (*x, y*) Returns the offset from the distortion table for pixel point (*x, y*). """ get_cdelt = """ get_cdelt() -> double array[naxis] Coordinate increments (``CDELTia``) for each coord axis. Returns the ``CDELT`` offsets in read-only form. Unlike the `~pywcs.Wcsprm.cdelt` property, this works even when the header specifies the linear transformation matrix in one of the alternative ``CDi_ja`` or ``CROTAia`` forms. This is useful when you want access to the linear transformation matrix, but don't care how it was specified in the header. """ get_pc = """ get_pc() -> double array[naxis][naxis] Returns the ``PC`` matrix in read-only form. Unlike the `~pywcs.Wcsprm.pc` property, this works even when the header specifies the linear transformation matrix in one of the alternative ``CDi_ja`` or ``CROTAia`` forms. This is useful when you want access to the linear transformation matrix, but don't care how it was specified in the header. """ get_ps = """ get_ps() -> list of tuples Returns ``PSi_ma`` keywords for each *i* and *m*. Returned as a list of tuples of the form (*i*, *m*, *value*): - *i*: int. Axis number, as in ``PSi_ma``, (i.e. 1-relative) - *m*: int. Parameter number, as in ``PSi_ma``, (i.e. 0-relative) - *value*: string. Parameter value. .. seealso:: `~pywcs.Wcsprm.set_ps` """ get_pv = """ get_pv() -> list of tuples Returns ``PVi_ma`` keywords for each *i* and *m*. Returned as a list of tuples of the form (*i*, *m*, *value*): - *i*: int. Axis number, as in ``PVi_ma``, (i.e. 1-relative) - *m*: int. Parameter number, as in ``PVi_ma``, (i.e. 0-relative) - *value*: string. Parameter value. Note that, if they were not given, `~pywcs.Wcsprm.set` resets the entries for ``PVi_1a``, ``PVi_2a``, ``PVi_3a``, and ``PVi_4a`` for longitude axis *i* to match (``phi_0``, ``theta_0``), the native longitude and latitude of the reference point given by ``LONPOLEa`` and ``LATPOLEa``. .. seealso:: `~pywcs.Wcsprm.set_pv` """ has_cd = """ has_cd() -> bool Returns `True` if ``CDi_ja`` is present. ``CDi_ja`` is an alternate specification of the linear transformation matrix, maintained for historical compatibility. Matrix elements in the IRAF convention are equivalent to the product ``CDi_ja = CDELTia * PCi_ja``, but the defaults differ from that of the ``PCi_ja`` matrix. If one or more ``CDi_ja`` keywords are present then all unspecified ``CDi_ja`` default to zero. If no ``CDi_ja`` (or ``CROTAia``) keywords are present, then the header is assumed to be in ``PCi_ja`` form whether or not any ``PCi_ja`` keywords are present since this results in an interpretation of ``CDELTia`` consistent with the original FITS specification. While ``CDi_ja`` may not formally co-exist with ``PCi_ja``, it may co-exist with ``CDELTia`` and ``CROTAia`` which are to be ignored. .. seealso:: `cd` """ has_cdi_ja = """ has_cdi_ja() -> bool Alias for `~pywcs.Wcsprm.has_cd`. Maintained for backward compatibility. """ has_crota = """ has_crota() -> bool Returns `True` if ``CROTAia`` is present. ``CROTAia`` is an alternate specification of the linear transformation matrix, maintained for historical compatibility. In the AIPS convention, ``CROTAia`` may only be associated with the latitude axis of a celestial axis pair. It specifies a rotation in the image plane that is applied *after* the ``CDELTia``; any other ``CROTAia`` keywords are ignored. ``CROTAia`` may not formally co-exist with ``PCi_ja``. ``CROTAia`` and ``CDELTia`` may formally co-exist with ``CDi_ja`` but if so are to be ignored. .. seealso:: `~pywcs.Wcsprm.crota` """ has_crotaia = """ has_crota_ia() -> bool Alias for `~pywcs.Wcsprm.has_crota`. Maintained for backward compatibility. """ has_pc = """ has_pc() -> bool Returns `True` if ``PCi_ja`` is present. ``PCi_ja`` is the recommended way to specify the linear transformation matrix. .. seealso:: `~pywcs.Wcsprm.pc` """ has_pci_ja = """ has_pci_ja() -> bool Alias for `~pywcs.Wcsprm.has_pc`. Maintained for backward compatibility. """ have = """ The name of the unit being converted from. This value always uses standard unit names, even if the `UnitConverter` was initialized with a non-standard unit name. """ i = """ ``int`` (read-only) Image axis number. """ imgpix_matrix = """ ``double array[2][2]`` (read-only) Inverse of the matrix containing the product of the ``CDELTia`` diagonal matrix and the ``PCi_ja`` matrix. """ is_unity = """ is_unity() -> bool Returns `True` if the linear transformation matrix (`~pywcs.Wcsprm.cd`) is unity. """ K = """ ``int array[M]`` (read-only) An array of length `M` whose elements record the lengths of the axes of the coordinate array and of each indexing vector. """ kind = """ ``str`` (read-only) Character identifying the wcstab array type: - ``'c'``: coordinate array, - ``'i'``: index vector. """ lat = """ ``int`` (read-only) The index into the sky coordinate array containing latitude values. """ latpole = """ ``double`` The native latitude of the celestial pole, ``LATPOLEa`` (deg). """ lattyp = """ ``string`` (read-only) Celestial axis type for latitude, e.g. "RA", "DEC", "GLON", "GLAT", etc. extracted from 'RA--', 'DEC-', 'GLON', 'GLAT', etc. in the first four characters of ``CTYPEia`` but with trailing dashes removed. """ lng = """ ``int`` (read-only) The index into the sky coordinate array containing longitude values. """ lngtyp = """ ``string`` (read-only) Celestial axis type for longitude, e.g. "RA", "DEC", "GLON", "GLAT", etc. extracted from 'RA--', 'DEC-', 'GLON', 'GLAT', etc. in the first four characters of ``CTYPEia`` but with trailing dashes removed. """ lonpole = """ ``double`` The native longitude of the celestial pole, ``LONPOLEa`` (deg). """ M = """ ``int`` (read-only) Number of tabular coordinate axes. """ m = """ ``int`` (read-only) Array axis number for index vectors. """ map = """ ``int array[M]`` A vector of length `~pywcs._pywcs.Tabprm.M` that defines the association between axis *m* in the *M*-dimensional coordinate array (1 <= *m* <= *M*) and the indices of the intermediate world coordinate and world coordinate arrays. When the intermediate and world coordinate arrays contain the full complement of coordinate elements in image-order, as will usually be the case, then ``map[m-1] == i-1`` for axis *i* in the *N*-dimensional image (1 <= *i* <= *N*). In terms of the FITS keywords:: map[PVi_3a - 1] == i - 1. However, a different association may result if the intermediate coordinates, for example, only contains a (relevant) subset of intermediate world coordinate elements. For example, if *M* == 1 for an image with *N* > 1, it is possible to fill the intermediate coordinates with the relevant coordinate element with ``nelem`` set to 1. In this case ``map[0] = 0`` regardless of the value of *i*. """ mix = """ mix(mixpix, mixcel, vspan, vstep, viter, world, pixcrd, origin) Given either the celestial longitude or latitude plus an element of the pixel coordinate, solves for the remaining elements by iterating on the unknown celestial coordinate element using `~pywcs.Wcsprm.s2p`. - *mixpix*: int. Which element on the pixel coordinate is given. - *mixcel*: int. Which element of the celestial coordinate is given. If mixcel* = ``1``, celestial longitude is given in ``world[self.lng]``, latitude returned in ``world[self.lat]``. If *mixcel* = ``2``, celestial latitude is given in ``world[self.lat]``, longitude returned in ``world[self.lng]``. - *vspan*: pair of floats. Solution interval for the celestial coordinate, in degrees. The ordering of the two limits is irrelevant. Longitude ranges may be specified with any convenient normalization, for example ``(-120,+120)`` is the same as ``(240,480)``, except that the solution will be returned with the same normalization, i.e. lie within the interval specified. - *vstep*: float. Step size for solution search, in degrees. If ``0``, a sensible, although perhaps non-optimal default will be used. - *viter*: int. If a solution is not found then the step size will be halved and the search recommenced. *viter* controls how many times the step size is halved. The allowed range is 5 - 10. - *world*: double array[naxis]. World coordinate elements. ``world[self.lng]`` and ``world[self.lat]`` are the celestial longitude and latitude, in degrees. Which is given and which returned depends on the value of *mixcel*. All other elements are given. The results will be written to this array in-place. - *pixcrd*: double array[naxis]. Pixel coordinate. The element indicated by *mixpix* is given and the remaining elements will be written in-place. %s Returns dictionary with the following keys: - *phi* (double array[naxis]) - *theta* (double array[naxis]) - Longitude and latitude in the native coordinate system of the projection, in degrees. - *imgcrd* (double array[naxis]) - Image coordinate elements. ``imgcrd[self.lng]`` and ``imgcrd[self.lat]`` are the projected *x*- and *y*-coordinates, in decimal degrees. - *world* (double array[naxis]) - Another reference to the *world* argument passed in. **Exceptions:** - `MemoryError` Memory allocation failed. - `SingularMatrixError`: Linear transformation matrix is singular. - `InconsistentAxisTypesError`: Inconsistent or unrecognized coordinate axis types. - `ValueError`: Invalid parameter value. - `InvalidTransformError`: Invalid coordinate transformation parameters. - `InvalidTransformError` Ill-conditioned coordinate transformation parameters. - `InvalidCoordinateError`: Invalid world coordinate. - `NoSolutionError`: No solution found in the specified interval. .. seealso:: `~pywcs.Wcsprm.lat`, `~pywcs.Wcsprm.lng` .. note:: Initially, the specified solution interval is checked to see if it's a "crossing" interval. If it isn't, a search is made for a crossing solution by iterating on the unknown celestial coordinate starting at the upper limit of the solution interval and decrementing by the specified step size. A crossing is indicated if the trial value of the pixel coordinate steps through the value specified. If a crossing interval is found then the solution is determined by a modified form of "regula falsi" division of the crossing interval. If no crossing interval was found within the specified solution interval then a search is made for a "non-crossing" solution as may arise from a point of tangency. The process is complicated by having to make allowance for the discontinuities that occur in all map projections. Once one solution has been determined others may be found by subsequent invocations of `~pywcs.Wcsprm.mix` with suitably restricted solution intervals. Note the circumstance that arises when the solution point lies at a native pole of a projection in which the pole is represented as a finite curve, for example the zenithals and conics. In such cases two or more valid solutions may exist but `~pywcs.Wcsprm.mix` only ever returns one. Because of its generality, `~pywcs.Wcsprm.mix` is very compute-intensive. For compute-limited applications, more efficient special-case solvers could be written for simple projections, for example non-oblique cylindrical projections. """ % __.ORIGIN() mjdavg = """ ``double`` Modified Julian Date ``(MJD = JD - 2400000.5)``, ``MJD-AVG``, corresponding to ``DATE-AVG``. An undefined value is represented by NaN. .. seealso:: `~pywcs.Wcsprm.mjdobs` """ mjdobs = """ ``double`` Modified Julian Date ``(MJD = JD - 2400000.5)``, ``MJD-OBS``, corresponding to ``DATE-OBS``. An undefined value is represented by NaN. .. seealso:: `~pywcs.Wcsprm.mjdavg` """ name = """ ``string`` The name given to the coordinate representation ``WCSNAMEa``. """ naxis = """ ``int`` (read-only) The number of axes (pixel and coordinate), given by the ``NAXIS`` or ``WCSAXESa`` keyvalues. The number of coordinate axes is determined at parsing time, and can not be subsequently changed. It is determined from the highest of the following: 1. ``NAXIS`` 2. ``WCSAXESa`` 3. The highest axis number in any parameterized WCS keyword. The keyvalue, as well as the keyword, must be syntactically valid otherwise it will not be considered. If none of these keyword types is present, i.e. if the header only contains auxiliary WCS keywords for a particular coordinate representation, then no coordinate description is constructed for it. This value may differ for different coordinate representations of the same image. """ nc = """ ``int`` (read-only) Total number of coordinate vectors in the coordinate array being the product K_1 * K_2 * ... * K_M. """ ndim = """ ``int`` (read-only) Expected dimensionality of the wcstab array. """ obsgeo = """ ``double array[3]`` Location of the observer in a standard terrestrial reference frame, ``OBSGEO-X``, ``OBSGEO-Y``, ``OBSGEO-Z`` (in meters). An undefined value is represented by NaN. """ offset = """ ``double`` The offset of the unit conversion. """ p0 = """ ``int array[M]`` Vector of length `~pywcs._pywcs.Tabprm.M` of interpolated indices into the coordinate array such that Upsilon_m, as defined in Paper III, is equal to ``(p0[m] + 1) + delta[m]``. """ p2s = """ p2s(pixcrd, origin) Converts pixel to sky coordinates. - *pixcrd*: double array[ncoord][nelem]. Array of pixel coordinates. %s Returns a dictionary with the following keys: - *imgcrd*: double array[ncoord][nelem] - Array of intermediate sky coordinates. For celestial axes, ``imgcrd[][self.lng]`` and ``imgcrd[][self.lat]`` are the projected *x*-, and *y*-coordinates, in pseudo degrees. For spectral axes, ``imgcrd[][self.spec]`` is the intermediate spectral coordinate, in SI units. - *phi*: double array[ncoord] - *theta*: double array[ncoord] - Longitude and latitude in the native coordinate system of the projection, in degrees. - *world*: double array[ncoord][nelem] - Array of sky coordinates. For celestial axes, ``world[][self.lng]`` and ``world[][self.lat]`` are the celestial longitude and latitude, in degrees. For spectral axes, ``world[][self.spec]`` is the intermediate spectral coordinate, in SI units. - *stat*: int array[ncoord] - Status return value for each coordinate. ``0`` for success, ``1+`` for invalid pixel coordinate. **Exceptions:** - `MemoryError`: Memory allocation failed. - `SingularMatrixError`: Linear transformation matrix is singular. - `InconsistentAxisTypesError`: Inconsistent or unrecognized coordinate axis types. - `ValueError`: Invalid parameter value. - `ValueError`: *x*- and *y*-coordinate arrays are not the same size. - `InvalidTransformError`: Invalid coordinate transformation parameters. - `InvalidTransformError`: Ill-conditioned coordinate transformation parameters. .. seealso:: `~pywcs.Wcsprm.lat`, `~pywcs.Wcsprm.lng` """ % __.ORIGIN() p4_pix2foc = """ p4_pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem] Convert pixel coordinates to focal plane coordinates using `Paper IV`_ lookup-table distortion correction. - *pixcrd*: double array[ncoord][nelem]. Array of pixel coordinates. %s Returns an array of focal plane coordinates. - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid coordinate transformation parameters. """ % __.ORIGIN() pc = """ ``double array[naxis][naxis]`` The ``PCi_ja`` (pixel coordinate) transformation matrix. The order is:: [[PC1_1, PC1_2], [PC2_1, PC2_2]] For historical compatibility, three alternate specifications of the linear transforations are available in wcslib. The canonical ``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the deprecated ``CROTAia`` keywords. Although the latter may not formally co-exist with ``PCi_ja``, the approach here is simply to ignore them if given in conjunction with ``PCi_ja``. `~pywcs.Wcsprm.has_pc`, `~pywcs.Wcsprm.has_cd` and `~pywcs.Wcsprm.has_crota` can be used to determine which of these alternatives are present in the header. These alternate specifications of the linear transformation matrix are translated immediately to ``PCi_ja`` by `~pywcs.Wcsprm.set` and are nowhere visible to the lower-level routines. In particular, `~pywcs.Wcsprm.set` resets `~pywcs.Wcsprm.cdelt` to unity if ``CDi_ja`` is present (and no ``PCi_ja``). If no ``CROTAia`` is associated with the latitude axis, `set` reverts to a unity ``PCi_ja`` matrix. """ phi0 = """ ``double`` The native latitude of the fiducial point, i.e. the point whose celestial coordinates are given in ``ref[1:2]``. If undefined (NaN) the initialization routine, `~pywcs.Wcsprm.set`, will set this to a projection-specific default. .. seealso:: `~pywcs.Wcsprm.theta0` """ pix2foc = """ pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem] Perform both `SIP`_ polynomial and `Paper IV`_ lookup-table distortion correction in parallel. - *pixcrd*: double array[ncoord][nelem]. Array of pixel coordinates. %s Returns an array of focal plane coordinates. **Exceptions:** - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid coordinate transformation parameters. """ % __.ORIGIN() piximg_matrix = """ ``double array[2][2]`` (read-only) Matrix containing the product of the ``CDELTia`` diagonal matrix and the ``PCi_ja`` matrix. """ power = """ ``double`` The exponent of the unit conversion. """ print_contents = """ print_contents() Print the contents of the `~pywcs.Wcsprm` object to stdout. Probably only useful for debugging purposes, and may be removed in the future. To get a string of the contents, use `repr`. """ print_contents_tabprm = """ print_contents() Print the contents of the `~pywcs._pywcs.Tabprm` object to stdout. Probably only useful for debugging purposes, and may be removed in the future. To get a string of the contents, use `repr`. """ radesys = """ ``string`` The equatorial or ecliptic coordinate system type, ``RADESYSa``. """ restfrq = """ ``double`` Rest frequency (Hz) from ``RESTFRQa``. An undefined value is represented by NaN. """ restwav = """ ``double`` Rest wavelength (m) from ``RESTWAVa``. An undefined value is represented by NaN. """ row = """ ``int`` (read-only) Table row number. """ s2p = """ s2p(sky, origin) Transforms sky coordinates to pixel coordinates. - *sky*: double array[ncoord][nelem]. Array of sky coordinates, in decimal degrees. %s Returns a dictionary with the following keys: - *phi*: double array[ncoord] - *theta*: double array[ncoord] - Longitude and latitude in the native coordinate system of the projection, in degrees. - *imgcrd*: double array[ncoord][nelem] - Array of intermediate sky coordinates. For celestial axes, ``imgcrd[][self.lng]`` and ``imgcrd[][self.lat]`` are the projected *x*-, and *y*-coordinates, in pseudo "degrees". For quadcube projections with a ``CUBEFACE`` axis, the face number is also returned in ``imgcrd[][self.cubeface]``. For spectral axes, ``imgcrd[][self.spec]`` is the intermediate spectral coordinate, in SI units. - *pixcrd*: double array[ncoord][nelem] - Array of pixel coordinates. Pixel coordinates are zero-based. - *stat*: int array[ncoord] - Status return value for each coordinate. ``0`` for success, ``1+`` for invalid pixel coordinate. **Exceptions:** - `MemoryError`: Memory allocation failed. - `SingularMatrixError`: Linear transformation matrix is singular. - `InconsistentAxisTypesError` Inconsistent or unrecognized coordinate axis types. - `ValueError`: Invalid parameter value. - `InvalidTransformError`: Invalid coordinate transformation parameters. - `InvalidTransformError`: Ill-conditioned coordinate transformation parameters. .. seealso:: `~pywcs.Wcsprm.lat`, `~pywcs.Wcsprm.lng` """ % (__.ORIGIN()) scale = """ ``double`` The scaling factor for the unit conversion. """ sense = """ ``int array[M]`` A vector of length `~pywcs._pywcs.Tabprm.M` whose elements indicate whether the corresponding indexing vector is monotonically increasing (+1), or decreasing (-1). """ set = """ set() Sets up a WCS object for use according to information supplied within it. Note that this routine need not be called directly; it will be invoked by `~pywcs.Wcsprm.p2s` and `~pywcs.Wcsprm.s2p` if necessary. Some attributes that are based on other attributes (such as `~pywcs.Wcsprm.lattyp` on `~pywcs.Wcsprm.ctype`) may not be correct until after `~pywcs.Wcsprm.set` is called. `~pywcs.Wcsprm.set` strips off trailing blanks in all string members. `~pywcs.Wcsprm.set` recognizes the ``NCP`` projection and converts it to the equivalent ``SIN`` projection and it also recognizes ``GLS`` as a synonym for ``SFL``. It does alias translation for the AIPS spectral types (``FREQ-LSR``, ``FELO-HEL``, etc.) but without changing the input header keywords. **Exceptions:** - `MemoryError`: Memory allocation failed. - `SingularMatrixError`: Linear transformation matrix is singular. - `InconsistentAxisTypesError`: Inconsistent or unrecognized coordinate axis types. - `ValueError`: Invalid parameter value. - `InvalidTransformError`: Invalid coordinate transformation parameters. - `InvalidTransformError`: Ill-conditioned coordinate transformation parameters. """ set_tabprm = """ set() Allocates memory for work arrays in the Tabprm class and sets up the class according to information supplied within it. Note that this routine need not be called directly; it will be invoked by functions that need it. **Exceptions:** - `MemoryError`: Memory allocation failed. - `InvalidTabularParameters`: Invalid tabular parameters. """ set_ps = """ set_ps(list) Sets `PSi_ma` keywords for each *i* and *m*. The input must be a sequence of tuples of the form (*i*, *m*, *value*): - *i*: int. Axis number, as in ``PSi_ma``, (i.e. 1-relative) - *m*: int. Parameter number, as in ``PSi_ma``, (i.e. 0-relative) - *value*: string. Parameter value. .. seealso:: `~pywcs.Wcsprm.get_ps` """ set_pv = """ set_pv(list) Sets `PVi_ma` keywords for each *i* and *m*. The input must be a sequence of tuples of the form (*i*, *m*, *value*): - *i*: int. Axis number, as in ``PVi_ma``, (i.e. 1-relative) - *m*: int. Parameter number, as in ``PVi_ma``, (i.e. 0-relative) - *value*: float. Parameter value. .. seealso:: `~pywcs.Wcsprm.get_pv` """ sip = """ Get/set the `~pywcs.Sip` object for performing `SIP`_ distortion correction. """ Sip = """ Sip(*a, b, ap, bp, crpix*) The `~pywcs.Sip` class performs polynomial distortion correction using the `SIP`_ convention in both directions. Shupe, D. L., M. Moshir, J. Li, D. Makovoz and R. Narron. 2005. "The SIP Convention for Representing Distortion in FITS Image Headers." ADASS XIV. - *a*: double array[m+1][m+1]. The ``A_i_j`` polynomial for pixel to focal plane transformation. Its size must be (*m* + 1, *m* + 1) where *m* = ``A_ORDER``. - *b*: double array[m+1][m+1]. The ``B_i_j`` polynomial for pixel to focal plane transformation. Its size must be (*m* + 1, *m* + 1) where *m* = ``B_ORDER``. - *ap*: double array[m+1][m+1]. The ``AP_i_j`` polynomial for pixel to focal plane transformation. Its size must be (*m* + 1, *m* + 1) where *m* = ``AP_ORDER``. - *bp*: double array[m+1][m+1]. The ``BP_i_j`` polynomial for pixel to focal plane transformation. Its size must be (*m* + 1, *m* + 1) where *m* = ``BP_ORDER``. - *crpix*: double array[2]. The reference pixel. """ sip_foc2pix = """ sip_foc2pix(*foccrd, origin*) -> double array[ncoord][nelem] Convert focal plane coordinates to pixel coordinates using the `SIP`_ polynomial distortion convention. - *foccrd*: double array[ncoord][nelem]. Array of focal plane coordinates. %s Returns an array of pixel coordinates. **Exceptions:** - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid coordinate transformation parameters. """ % __.ORIGIN() sip_pix2foc = """ sip_pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem] Convert pixel coordinates to focal plane coordinates using the `SIP`_ polynomial distortion convention. - *pixcrd*: double array[ncoord][nelem]. Array of pixel coordinates. %s Returns an array of focal plane coordinates. **Exceptions:** - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid coordinate transformation parameters. """ % __.ORIGIN() spcfix = """ spcfix() -> int Translates AIPS-convention spectral coordinate types. {``FREQ``, ``VELO``, ``FELO``}-{``OBS``, ``HEL``, ``LSR``} (e.g. ``FREQ-LSR``, ``VELO-OBS``, ``FELO-HEL``) Returns ``0`` for success; ``-1`` if no change required. """ spec = """ ``int`` (read-only) The index containing the spectral axis values. """ specsys = """ ``string`` Spectral reference frame (standard of rest), ``SPECSYSa``. .. seealso:: `~pywcs.Wcsprm.ssysobs`, `~pywcs.Wcsprm.velosys`. """ sptr = """ sptr(ctype, i=-1) Translates the spectral axis in a WCS object. For example, a ``FREQ`` axis may be translated into ``ZOPT-F2W`` and vice versa. - *ctype*: string. Required spectral ``CTYPEia``, maximum of 8 characters. The first four characters are required to be given and are never modified. The remaining four, the algorithm code, are completely determined by, and must be consistent with, the first four characters. Wildcarding may be used, i.e. if the final three characters are specified as ``"???"``, or if just the eighth character is specified as ``"?"``, the correct algorithm code will be substituted and returned. - *i*: int. Index of the spectral axis (0-relative). If ``i < 0`` (or not provided), it will be set to the first spectral axis identified from the ``CTYPE`` keyvalues in the FITS header. **Exceptions:** - `MemoryError`: Memory allocation failed. - `SingularMatrixError`: Linear transformation matrix is singular. - `InconsistentAxisTypesError`: Inconsistent or unrecognized coordinate axis types. - `ValueError`: Invalid parameter value. - `InvalidTransformError`: Invalid coordinate transformation parameters. - `InvalidTransformError`: Ill-conditioned coordinate transformation parameters. - `InvalidSubimageSpecificationError`: Invalid subimage specification (no spectral axis). """ ssysobs = """ ``string`` The actual spectral reference frame in which there is no differential variation in the spectral coordinate across the field-of-view, ``SSYSOBSa``. .. seealso:: `~pywcs.Wcsprm.specsys`, `~pywcs.Wcsprm.velosys` """ ssyssrc = """ ``string`` The spectral reference frame (standard of rest) in which the redshift was measured, ``SSYSSRCa``. """ sub = """ sub(axes) Extracts the coordinate description for a subimage from a `~pywcs.WCS` object. The world coordinate system of the subimage must be separable in the sense that the world coordinates at any point in the subimage must depend only on the pixel coordinates of the axes extracted. In practice, this means that the ``PCi_ja`` matrix of the original image must not contain non-zero off-diagonal terms that associate any of the subimage axes with any of the non-subimage axes. `sub` can also add axes to a wcsprm struct. The new axes will be created using the defaults set by the Wcsprm constructor which produce a simple, unnamed, linear axis with world coordinates equal to the pixel coordinate. These default values can be changed before invoking `set`. No checks are performed to verify that the coordinate axes are consistent, that is done by `set`. - *axes*: int or a sequence. - If an int, include the first *N* axes in their original order. - If a sequence, may contain a combination of image axis numbers (1-relative) or special axis identifiers (see below). Order is significant; ``axes[0]`` is the axis number of the input image that corresponds to the first axis in the subimage, etc. Use an axis number of 0 to create a new axis using the defaults. - If ``0``, ``[]`` or ``None``, do a deep copy. Coordinate axes types may be specified using either strings or special integer constants. The available types are: - ``'longitude'`` / ``WCSSUB_LONGITUDE``: Celestial longitude - ``'latitude'`` / ``WCSSUB_LATITUDE``: Celestial latitude - ``'cubeface'`` / ``WCSSUB_CUBEFACE``: Quadcube ``CUBEFACE`` axis - ``'spectral'`` / ``WCSSUB_SPECTRAL``: Spectral axis - ``'stokes'`` / ``WCSSUB_STOKES``: Stokes axis - ``'celestial'`` / ``WCSSUB_CELESTIAL``: An alias for the combination of ``'longitude'``, ``'latitude'`` and ``'cubeface'``. Returns a `~pywcs.WCS` object, which is a deep copy of the original object. **Exceptions:** - `MemoryError`: Memory allocation failed. - `InvalidSubimageSpecificationError`: Invalid subimage specification (no spectral axis). - `NonseparableSubimageCoordinateSystem`: Non-separable subimage coordinate system. .. note:: Combinations of subimage axes of particular types may be extracted in the same order as they occur in the input image by combining the integer constants with the 'binary or' (``|``) operator. For example:: wcs.sub([WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_SPECTRAL]) would extract the longitude, latitude, and spectral axes in the same order as the input image. If one of each were present, the resulting object would have three dimensions. For convenience, ``WCSSUB_CELESTIAL`` is defined as the combination ``WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_CUBEFACE``. The codes may also be negated to extract all but the types specified, for example:: wcs.sub([ WCSSUB_LONGITUDE, WCSSUB_LATITUDE, WCSSUB_CUBEFACE, -(WCSSUB_SPECTRAL | WCSSUB_STOKES)]) The last of these specifies all axis types other than spectral or Stokes. Extraction is done in the order specified by `axes`, i.e. a longitude axis (if present) would be extracted first (via ``axes[0]``) and not subsequently (via ``axes[3]``). Likewise for the latitude and cubeface axes in this example. The number of dimensions in the returned object may be less than or greater than the length of `axes`. However, it will never exceed the number of axes in the input image. """ tab = """ ``list of Tabprm`` A list of tabular coordinate objects associated with this WCS. """ Tabprm = """ A class to store the information related to tabular coordinates, i.e. coordinates that are defined via a lookup table. This class can not be constructed directly from Python, but instead is returned from `~pywcs.Wcsprm.tab`. """ theta0 = """ ``double`` The native longitude of the fiducial point, i.e. the point whose celestial coordinates are given in ``ref[1:2]``. If undefined (NaN) the initialization routine, `~pywcs.Wcsprm.set`, will set this to a projection-specific default. .. seealso:: `~pywcs.Wcsprm.phi0` """ to_header = """ to_header(relax=False) `to_header` translates a WCS object into a FITS header. - If the `~pywcs.Wcsprm.colnum` member is non-zero then a binary table image array header will be produced. - Otherwise, if the `~pywcs.Wcsprm.colax` member is set non-zero then a pixel list header will be produced. - Otherwise, a primary image or image extension header will be produced. The output header will almost certainly differ from the input in a number of respects: 1. The output header only contains WCS-related keywords. In particular, it does not contain syntactically-required keywords such as ``SIMPLE``, ``NAXIS``, ``BITPIX``, or ``END``. 2. Deprecated (e.g. ``CROTAn``) or non-standard usage will be translated to standard (this is partially dependent on whether `fix` was applied). 3. Quantities will be converted to the units used internally, basically SI with the addition of degrees. 4. Floating-point quantities may be given to a different decimal precision. 5. Elements of the ``PCi_j`` matrix will be written if and only if they differ from the unit matrix. Thus, if the matrix is unity then no elements will be written. 6. Additional keywords such as ``WCSAXES``, ``CUNITia``, ``LONPOLEa`` and ``LATPOLEa`` may appear. 7. The original keycomments will be lost, although `~pywcs.Wcsprm.to_header` tries hard to write meaningful comments. 8. Keyword order may be changed. Keywords can be translated between the image array, binary table, and pixel lists forms by manipulating the `~pywcs.Wcsprm.colnum` or `~pywcs.Wcsprm.colax` members of the `~pywcs.Wcsprm.WCS` object. - *relax*: Degree of permissiveness: - `False`: Recognize only FITS keywords defined by the published WCS standard. - `True`: Admit all recognized informal extensions of the WCS standard. - `int`: a bit field selecting specific extensions to write. See :ref:`relaxwrite` for details. Returns a raw FITS header as a string. """ ttype = """ ``str`` (read-only) ``TTYPEn`` identifying the column of the binary table that contains the wcstab array. """ UnitConverter = """ UnitConverter(have, want, translate_units='') Creates an object for performing conversion from one system of units to another. - *have* string: :ref:`fits-unit` to convert from, with or without surrounding square brackets (for inline specifications); text following the closing bracket is ignored. - *want* string: :ref:`fits-unit` to convert to, with or without surrounding square brackets (for inline specifications); text following the closing bracket is ignored. - *ctrl* string (optional): Do potentially unsafe translations of non-standard unit strings. Although ``"S"`` is commonly used to represent seconds, its recognizes ``"S"`` formally as Siemens, however rarely that may be translation to ``"s"`` is potentially unsafe since the standard used. The same applies to ``"H"`` for hours (Henry), and ``"D"`` for days (Debye). This string controls what to do in such cases, and is case-insensitive. - If the string contains ``"s"``, translate ``"S"`` to ``"s"``. - If the string contains ``"h"``, translate ``"H"`` to ``"h"``. - If the string contains ``"d"``, translate ``"D"`` to ``"d"``. Thus ``''`` doesn't do any unsafe translations, whereas ``'shd'`` does all of them. See :ref:`fits-unit` for more information. Use the returned object's `~pywcs.UnitConverter.convert` method to convert values from *have* to *want*. This function is permissive in accepting whitespace in all contexts in a units specification where it does not create ambiguity (e.g. not between a metric prefix and a basic unit string), including in strings like ``"log (m ** 2)"`` which is formally disallowed. **Exceptions:** - `ValueError`: Invalid numeric multiplier. - `SyntaxError`: Dangling binary operator. - `SyntaxError`: Invalid symbol in INITIAL context. - `SyntaxError`: Function in invalid context. - `SyntaxError`: Invalid symbol in EXPON context. - `SyntaxError`: Unbalanced bracket. - `SyntaxError`: Unbalanced parenthesis. - `SyntaxError`: Consecutive binary operators. - `SyntaxError`: Internal parser error. - `SyntaxError`: Non-conformant unit specifications. - `SyntaxError`: Non-conformant functions. - `ValueError`: Potentially unsafe translation. """ unitfix = """ unitfix(translate_units='') Translates non-standard ``CUNITia`` keyvalues. For example, ``DEG`` -> ``deg``, also stripping off unnecessary whitespace. - *translate_units*: string. Do potentially unsafe translations of non-standard unit strings. Although ``"S"`` is commonly used to represent seconds, its recognizes ``"S"`` formally as Siemens, however rarely that may be translation to ``"s"`` is potentially unsafe since the standard used. The same applies to ``"H"`` for hours (Henry), and ``"D"`` for days (Debye). This string controls what to do in such cases, and is case-insensitive. - If the string contains ``"s"``, translate ``"S"`` to ``"s"``. - If the string contains ``"h"``, translate ``"H"`` to ``"h"``. - If the string contains ``"d"``, translate ``"D"`` to ``"d"``. Thus ``''`` doesn't do any unsafe translations, whereas ``'shd'`` does all of them. See :ref:`fits-unit` for more information. Returns ``0`` for success; ``-1`` if no change required. """ velangl = """ ``double`` The angle in degrees that should be used to decompose an observed velocity into radial and transverse components. An undefined value is represented by NaN. """ velosys = """ ``double`` The relative radial velocity (m/s) between the observer and the selected standard of rest in the direction of the celestial reference coordinate, ``VELOSYSa``. An undefined value is represented by NaN. .. seealso:: `~pywcs.Wcsprm.specsys`, `~pywcs.Wcsprm.ssysobs` """ want = """ The name of the unit being converted to. This value always uses standard unit names, even if the `UnitConverter` was initialized with a non-standard unit name. """ wcs = """ A `~pywcs.Wcsprm` object to perform the basic `wcslib`_ WCS tranformation. """ Wcs = """ Wcs(*sip, cpdis, wcsprm, det2im*) Wcs objects amalgamate basic WCS (as provided by `wcslib`_), with `SIP`_ and `Paper IV`_ distortion operations. To perform all distortion corrections and WCS tranformation, use `all_pix2sky`. - *sip*: A `~pywcs.Sip` object or ``None`` - *cpdis*: A pair of `~pywcs.DistortionLookupTable` objects, or ``(None, None)``. - *wcsprm*: A `~pywcs.Wcsprm` object - *det2im*: A pair of `~pywcs.DistortionLookupTable` objects, or ``(None, None)``. """ Wcsprm = """ Wcsprm(header=None, key=' ', relax=False, naxis=2, keysel=0, colsel=None) `~pywcs.Wcsprm` is a direct wrapper around `wcslib`_, and provides access to the core WCS transformations that it supports. The FITS header parsing enforces correct FITS "keyword = value" syntax with regard to the equals sign occurring in columns 9 and 10. However, it does recognize free-format character (NOST 100-2.0, Sect. 5.2.1), integer (Sect. 5.2.3), and floating-point values (Sect. 5.2.4) for all keywords. - *header*: A PyFITS header object or a string containing the raw FITS header data or ``None``. If ``None``, the object will be initialized to default values. - *key*: The key referring to a particular WCS transform in the header. This may be either ``' '`` or ``'A'``-``'Z'`` and corresponds to the ``"a"`` part of ``"CTYPEia"``. (*key* may only be provided if *header* is also provided.) - *relax*: Degree of permissiveness: - `False`: Recognize only FITS keywords defined by the published WCS standard. - `True`: Admit all recognized informal extensions of the WCS standard. - `int`: a bit field selecting specific extensions to accept. See :ref:`relaxread` for details. - *naxis*: The number of sky coordinates axes for the object. (*naxis* may only be provided if *header* is ``None``.) - *keysel*: Vector of flag bits that may be used to restrict the keyword types considered: - ``WCSHDR_IMGHEAD``: Image header keywords. - ``WCSHDR_BIMGARR``: Binary table image array. - ``WCSHDR_PIXLIST``: Pixel list keywords. If zero, there is no restriction. If -1, the underlying wcslib function ``wcspih()`` is called, rather than ``wcstbh()``. - *colsel*: A sequence of table column numbers used to restrict the keywords considered. ``None`` indicates no restriction. **Exceptions:** - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid key. - `KeyError`: Key not found in FITS header. """ Wtbarr = """ Classes to construct coordinate lookup tables from a binary table extension (BINTABLE). This class can not be constructed directly from Python, but instead is returned from `~pywcs.Wcsprm.wtb`. """ zsource = """ ``double`` The redshift, ``ZSOURCEa``, of the source. An undefined value is represented by NaN. """ pywcs-1.12/doc/make.bat0000644001153600020070000000557312310355626017032 0ustar cslocumSTSCI\science00000000000000@ECHO OFF REM Command file for Sphinx documentation set SPHINXBUILD=sphinx-build set ALLSPHINXOPTS=-d build/doctrees %SPHINXOPTS% source if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (build\*) do rmdir /q /s %%i del /q /s build\* goto end ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% build/html echo. echo.Build finished. The HTML pages are in build/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% build/dirhtml echo. echo.Build finished. The HTML pages are in build/dirhtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% build/pickle echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% build/json echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% build/htmlhelp echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in build/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% build/qthelp echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in build/qthelp, like this: echo.^> qcollectiongenerator build\qthelp\pywcs.qhcp echo.To view the help file: echo.^> assistant -collectionFile build\qthelp\pywcs.ghc goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% build/latex echo. echo.Build finished; the LaTeX files are in build/latex. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% build/changes echo. echo.The overview file is in build/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% build/linkcheck echo. echo.Link check complete; look for any errors in the above output ^ or in build/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% build/doctest echo. echo.Testing of doctests in the sources finished, look at the ^ results in build/doctest/output.txt. goto end ) :end pywcs-1.12/doc/Makefile0000644001153600020070000000563612310355626017065 0ustar cslocumSTSCI\science00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source .PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf build/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html @echo @echo "Build finished. The HTML pages are in build/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) build/dirhtml @echo @echo "Build finished. The HTML pages are in build/dirhtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) build/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in build/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in build/qthelp, like this:" @echo "# qcollectiongenerator build/qthelp/pywcs.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile build/qthelp/pywcs.qhc" latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex @echo @echo "Build finished; the LaTeX files are in build/latex." @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ "run these through (pdf)latex." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes @echo @echo "The overview file is in build/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in build/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) build/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in build/doctest/output.txt." pywcs-1.12/doc/source/0000755001153600020070000000000012310355732016711 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/doc/source/api.rst0000644001153600020070000000072112310355626020216 0ustar cslocumSTSCI\science00000000000000.. include:: references.rst API documentation ================= :mod:`pywcs` ------------ .. automodule:: pywcs Classes ------- .. toctree:: :maxdepth: 2 api_wcs.rst api_wcsprm.rst api_distortion.rst api_sip.rst api_units.rst relax.rst Testing pywcs ============= The unit tests are written for use with `nose `. To run them, install pywcs and then at the commandline:: nosetests pywcs.tests pywcs-1.12/doc/source/api_distortion.rst0000644001153600020070000000026112310355626022473 0ustar cslocumSTSCI\science00000000000000.. include:: references.rst `DistortionLookupTable` ``````````````````````` .. autoclass:: pywcs.DistortionLookupTable :members: :inherited-members: :undoc-members: pywcs-1.12/doc/source/api_sip.rst0000644001153600020070000000017312310355626021072 0ustar cslocumSTSCI\science00000000000000.. include:: references.rst `Sip` ````` .. autoclass:: pywcs.Sip :members: :inherited-members: :undoc-members: pywcs-1.12/doc/source/api_units.rst0000644001153600020070000002746112310355626021452 0ustar cslocumSTSCI\science00000000000000.. include:: references.rst `UnitConverter` ``````````````` .. autoclass:: pywcs.UnitConverter :members: :inherited-members: :undoc-members: .. _fits-unit: FITS unit specification ``````````````````````` Supported units --------------- The following units are supported by the FITS standard: **SI base & supplementary units** ====================== ============ ================= Quantity Unit String Meaning ====================== ============ ================= length m metre mass kg kilogram time s second of time plane angle rad radian solid angle sr steradian temperature K kelvin electric current A ampere amount of substance mol mole luminous intensity cd candela ====================== ============ ================= **IAU-recognized derived units** ====================== ============ ================= ================== Quantity Unit String Meaning Equivalence ====================== ============ ================= ================== frequency Hz hertz s\ :sup:`-1` energy J joule N m power W watt J s\ :sup:`-1` electric potential V volts J C\ :sup:`-1` force N newton kg m s\ :sup:`-2` pressure, stress Pa pascal N m\ :sup:`-2` electric charge C coulomb A s electric resistance ohm ohm (Ω) V A\ :sup:`-1` electric conductance S siemens A V\ :sup:`-1` electric capacitance F farad C V\ :sup:`-1` magnetic flux Wb weber V s magnetic flux density T tesla Wb m\ :sup:`-2` inductance H henry Wb A\ :sup:`-1` luminous flux lm lumen cd sr illuminance lx lux lm m\ :sup:`-2` ====================== ============ ================= ================== **Additional units** ====================== ============ ======================== ============================================ Quantity Unit String Meaning Equivalence ====================== ============ ======================== ============================================ mass u unified atomic mass unit 1.6605387 x 10\ :sup:`-27` kg mass solMass solar mass 1.9891 x 10\ :sup:`30` kg plane angle deg degree of arc 1.745533 x 10\ :sup:`-2` rad plane angle arcsec second of arc 4.848137 x 10\ :sup:`-6` rad plane angle arcmin minute of arc 2.90888 x 10\ :sup:`-4` rad time min minute time h hour time d day 8.64 x 10\ :sup:`4` s time yr year (Julian) 3.15576 x10\ :sup:`-7` s (365.25 d) energy eV electron volt 1.602177 x 10\ :sup:`-19` J energy erg erg 10\ :sup:`-7` J energy Ry Rydberg 13.605692 eV length angstrom angstrom 10\ :sup:`-10` m length AU astronomical unit 1.49598 x 10\ :sup:`11` m length lyr light year 9.460530 x 10\ :sup:`-15` m length pc parsec 3.0857 x 10\ :sup:`-16` m length solRad solar radius 6.9599 x 10\ :sup:`8` m events count counts events photon photons flux density Jy jansky 10\ :sup:`-16` W m\ :sup:`-2` Hz\ :sup:`-1` flux density mag (stellar) magnitude flux density Crab 'crab' flux density beam beam Jy/beam flux density solLum solar luminosity magnetic field G gauss 10\ :sup:`-4` T area pixel (image/detector) pixel area voxel 3-d analog of pixel area barn barn 10\ :sup:`-28` m\ :sup:`2` device chan (detector) channel device byte (computer) byte device bit (computer) bits device adu A/D converter units misc bin numerous applications misc Sun wrt. sun ====================== ============ ======================== ============================================ Potentially unsafe translations of ``"D"``, ``"H"``, and ``"S"``, are optional, using the *translate_units* parameter. .. _unit-aliases: Unit aliases ------------ When converting non-standard units to standard ones, a case-sensitive match is required for the aliases listed below, in particular the only recognized aliases with metric prefixes are ``"KM"``, ``"KHZ"``, ``"MHZ"``, and ``"GHZ"``. ========== ============================================================= Unit Recognized aliases ========== ============================================================= Angstrom angstrom arcmin arcmins, ARCMIN, ARCMINS arcsec arcsecs, ARCSEC, ARCSECS beam BEAM byte Byte count ct d day, days, (D), DAY, DAYS deg degree, degrees, DEG, DEGREE, DEGREES GHz GHZ h hr, (H), HR Hz hz, HZ kHz KHZ Jy JY K kelvin, kelvins, Kelvin, Kelvins, KELVIN, KELVINS km KM m metre, meter, metres, meters, M, METRE, METER, METRES, METERS min MIN MHz MHZ Ohm ohm Pa pascal, pascals, Pascal, Pascals, PASCAL, PASCALS photon ph pixel pixels, PIXEL, PIXELS, pix rad radian, radians, RAD, RADIAN, RADIANS s sec, second, seconds, (S), SEC, SECOND, SECONDS V volt, volts, Volt, Volts, VOLT, VOLTS yr year, years, YR, YEAR, YEARS ========== ============================================================= The aliases ``"angstrom"``, ``"ohm"``, and ``"Byte"`` for (Angstrom, Ohm, and byte) are recognized by pywcs/wcslib itself as an unofficial extension of the standard, but they are converted to the standard form here. Prefixes -------- The following metric prefixes are supported: ======= ======= =================== Prefix String Magnitude ======= ======= =================== yocto y 10\ :sup:`-24` zepto z 10\ :sup:`-21` atto a 10\ :sup:`-18` femto f 10\ :sup:`-15` pico p 10\ :sup:`-12` nano n 10\ :sup:`-9` micro u 10\ :sup:`-6` milli m 10\ :sup:`-3` centi c 10\ :sup:`-2` deci d 10\ :sup:`-1` deka da 10\ :sup:`1` hecto h 10\ :sup:`2` kilo k 10\ :sup:`3` Mega M 10\ :sup:`6` Giga G 10\ :sup:`9` Tera T 10\ :sup:`12` Peta P 10\ :sup:`15` Exa E 10\ :sup:`18` Zetta Z 10\ :sup:`21` Yotta Y 10\ :sup:`24` ======= ======= =================== Table 6 of WCS Paper I lists eleven units for which metric prefixes are allowed. However, in this implementation only prefixes greater than unity are allowed for ``"a"`` (annum), ``"yr"`` (year), ``"pc"`` (parsec), ``"bit"``, and ``"byte"``, and only prefixes less than unity are allowed for ``"mag"`` (stellar magnitude). Metric prefix ``"P"`` (peta) is specifically forbidden for ``"a"`` (annum) to avoid confusion with ``"Pa"`` (Pascal, not peta-annum). Note that metric prefixes are specifically disallowed for ``"h"`` (hour) and ``"d"`` (day) so that ``"ph"`` (photons) cannot be interpreted as pico-hours, nor ``"cd"`` (candela) as centi-days. Operators --------- A compound unit is considered to be formed by a series of sub-strings of component units & mathematical operations. Each of these sub-strings must be separated by at least one space or a mathematical operator (``*`` or ``/``). Multiplication ============== Multiplicative units can be specified either: - by simply using one or more preceding spaces, e.g. ``str1 str2`` (The recommended method). - by the use of a single asterisk (``*``) with optional whitespace, e.g. ``str1 * str2``. Division ======== Units which form the denominator of a compound expression can be specified either: - by using a slash (``/``) with optional whitespace, e.g. ``str1 / str2``. If such a syntax is used, it is recommended that no space is included between the slash and the unit string. - by raising a multiplicative unit to a negative power (see below). It should be stressed that the slash character only effects the sub-string it immediately precedes. Thus, unless brackets are used, subsequent sub-strings which also form part of the denominator of the compound expression must also be preceded by a slash. For example, ``str1 /str2 str3`` is equivalent to ``str1 str3 /str2`` whilst ``str1 /str2 /str3`` is equivalent to ``str1 /(str2 * str3)``. Raising to Powers ================= A unit string raised to the power *y* is specified: - by using two asterisks (``**``) followed by the index enclosed within round brackets and with no preceding or intervening spaces, e.g. ``str1**(y)`` or ``str1**(-y)``. However, if *y* is positive, then the brackets need not be included, but a following space is recommended if additional sub-strings follow. Use of brackets =============== Any number of pairs of round brackets (``()``) may be used within the string for a compound unit in order to prevent ambiguities. As described within this section, a number of rules always/often require their use. However, it is suggested that conservative use is made of such pairs of brackets in order to minimize the total length of compound strings. (It should be remembered that a maximum of 68 characters are allowed in the card image of keywords.) Avoidance of underflows & overflows =================================== The inclusion of numerical factors within the unit string should generally be avoided (by the use of multiples and/or submultiples of component basic units). However, occasionally it may be preferable to include such factors on the grounds of user-friendliness and/or to minimize the risk of computer under- or overflows. In such cases, the numerical factor can simply be considered a basic unit string. The following additional guidelines are suggested: - the numerical factor should precede any unit strings - only powers of 10 are used as numerical factors Mathematical Operations & Functions =================================== A number of mathematical operations are supported. It should be noted that the (round) brackets are mandatory in all cases in which they are included in the table. =============== ================================================== String Meaning =============== ================================================== ``str1*str2`` Multiplication ``str1 /str2`` Division ``str1**(y)`` Raised to the power *y* ``log(str1)`` Common Logarithm (to base 10) ``ln(str1)`` Natural Logarithm ``exp(str1)`` Exponential (exp\ :sup:`str1`\ ) ``sqrt(str1)`` Square root ``sin(str1)`` Sine ``cos(str1)`` Cosine ``tan(str1)`` Tangent ``asin(str1)`` Arc Sine ``acos(str1)`` Arc Cosine ``atan(str1)`` Arc Tangent ``sinh(str1)`` Hyperbolic Sine ``cosh(str1)`` Hyperbolic Cosine ``tanh(str1)`` Hyperbolic Tangent =============== ================================================== Function types ``log()``, ``ln()`` and ``exp()`` may only occur at the start of the units specification. pywcs-1.12/doc/source/api_wcs.rst0000644001153600020070000000026512310355626021075 0ustar cslocumSTSCI\science00000000000000.. include:: references.rst `WCS` ````` .. autoclass:: pywcs.WCS :members: :inherited-members: :undoc-members: functions ````````` .. autofunction:: pywcs.find_all_wcs pywcs-1.12/doc/source/api_wcsprm.rst0000644001153600020070000000056212310355626021614 0ustar cslocumSTSCI\science00000000000000.. include:: references.rst `Wcsprm` ```````` .. autoclass:: pywcs.Wcsprm :members: :inherited-members: :undoc-members: `Tabprm` ```````` .. autoclass:: pywcs._pywcs.Tabprm :members: :inherited-members: :undoc-members: .. `Wtbarr` .. ```````` .. .. autoclass:: pywcs._pywcs.Wtbarr .. :members: .. :inherited-members: .. :undoc-members: pywcs-1.12/doc/source/conf.py0000644001153600020070000001506612310355626020222 0ustar cslocumSTSCI\science00000000000000# -*- coding: utf-8 -*- # # pywcs documentation build configuration file, created by # sphinx-quickstart on Thu Sep 17 12:58:53 2009. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. from stsci.sphinxext.conf import * import sys, os import pywcs from pywcs.version import __version__ # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.append(os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. # extensions = ['sphinx.ext.autodoc', 'sphinx.ext.pngmath'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8' # The master toctree document. master_doc = 'index' # General information about the project. project = u'pywcs' copyright = u'2009, Michael Droettboom (pywcs), 2009 Mark Calabretta (wcslib)' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = __version__ # The full version, including alpha/beta/rc tags. release = __version__ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. #unused_docs = [] # List of directories, relative to source directory, that shouldn't be searched # for source files. exclude_trees = [] # The reST default role (used for this markup: `text`) to use for all documents. # default_role = 'obj' # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] autoclass_content = 'both' # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. # html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_use_modindex = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'pywcsdoc' # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'pywcs.tex', u'pywcs Documentation', u'Michael Droettboom', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True pywcs-1.12/doc/source/examples.rst0000644001153600020070000000117512310355626021267 0ustar cslocumSTSCI\science00000000000000Example Usage ============= Loading WCS information from a FITS file ---------------------------------------- This example loads a FITS file (supplied on the commandline) and uses the WCS cards in its primary header to transform. .. literalinclude:: examples/from_file.py :language: python Building a WCS structure programmatically ----------------------------------------- This example, rather than starting from a FITS header, sets WCS values programmatically, uses those settings to transform some points, and then saves those settings to a new FITS header. .. literalinclude:: examples/programmatic.py :language: python pywcs-1.12/doc/source/index.rst0000644001153600020070000000115612310355626020557 0ustar cslocumSTSCI\science00000000000000.. pywcs documentation master file, created by sphinx-quickstart on Thu Sep 17 12:58:53 2009. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. pywcs documentation =================== Python wrappers, SIP, Paper IV support (BSD License): `Michael Droettboom `_, Nadia Dencheva Space Telescope Science Institute wcslib (LGPL License): Mark Calabretta Australia Telescope National Facility, CSIRO (wcslib) .. automodule:: pywcs Contents: .. toctree:: :maxdepth: 2 examples.rst api.rst pywcs-1.12/doc/source/references.rst0000644001153600020070000000045612310355626021573 0ustar cslocumSTSCI\science00000000000000.. _wcslib: http://www.atnf.csiro.au/~mcalabre/WCS/ .. _pyfits: http://www.stsci.edu/resources/software_hardware/pyfits .. _Paper IV: http://www.atnf.csiro.au/people/mcalabre/WCS/index.html .. _SIP: http://ssc.spitzer.caltech.edu/postbcd/doc/shupeADASS.pdf .. _ds9: http://hea-www.harvard.edu/RD/ds9/ pywcs-1.12/doc/source/relax.rst0000644001153600020070000003434512310355626020571 0ustar cslocumSTSCI\science00000000000000.. include:: references.rst .. _relax: Relax constants ``````````````` .. _relaxread: Header-reading relaxation constants ----------------------------------- `~pywcs.WCS`, `~pywcs.Wcsprm` and `~pywcs.find_all_wcs` have a *relax* argument, which may be either `True`, `False` or an `int`. - If `True`, all non-standard WCS extensions recognized by the parser will be handled. - If `False` (default), none of the extensions (even those in the errata) will be handled. Non-conformant keywords will be handled in the same way as non-WCS keywords in the header, i.e. by simply ignoring them. - If an `int`, is is a bit field to provide fine-grained control over what non-standard WCS keywords to accept. The flag bits are subject to change in future and should be set by using the constants beginning with ``WCSHDR_`` in the `pywcs` module. For example, to accept ``CD00i00j`` and ``PC00i00j`` use:: relax = pywcs.WCSHDR_CD00i00j | pywcs.WCSHDR_PC00i00j The parser always treats ``EPOCH`` as subordinate to ``EQUINOXa`` if both are present, and ``VSOURCEa`` is always subordinate to ``ZSOURCEa``. Likewise, ``VELREF`` is subordinate to the formalism of WCS Paper III. The flag bits are: - `WCSHDR_none`: Don't accept any extensions (not even those in the errata). Treat non-conformant keywords in the same way as non-WCS keywords in the header, i.e. simply ignore them. (This is equivalent to the default behavior or passing `False`) - `WCSHDR_all`: Accept all extensions recognized by the parser. (This is equivalent to passing `True`). - `WCSHDR_CROTAia`: Accept ``CROTAia``, ``iCROTna``, ``TCROTna`` - `WCSHDR_EPOCHa`: Accept ``EPOCHa``. - `WCSHDR_VELREFa`: Accept ``VELREFa``. The constructor always recognizes the AIPS-convention keywords, ``CROTAn``, ``EPOCH``, and ``VELREF`` for the primary representation ``(a = ' ')`` but alternates are non-standard. The constructor accepts ``EPOCHa`` and ``VELREFa`` only if `WCSHDR_AUXIMG` is also enabled. - `WCSHDR_CD00i00j`: Accept ``CD00i00j``. - `WCSHDR_PC00i00j`: Accept ``PC00i00j``. - `WCSHDR_PROJPn`: Accept ``PROJPn`` These appeared in early drafts of WCS Paper I+II (before they were split) and are equivalent to ``CDi_ja``, ``PCi_ja``, and ``PVi_ma`` for the primary representation ``(a = ' ')``. ``PROJPn`` is equivalent to ``PVi_ma`` with ``m`` = ``n`` <= 9, and is associated exclusively with the latitude axis. - `WCSHDR_RADECSYS`: Accept ``RADECSYS``. This appeared in early drafts of WCS Paper I+II and was subsequently replaced by ``RADESYSa``. The construtor accepts ``RADECSYS`` only if `WCSHDR_AUXIMG` is also enabled. - `WCSHDR_VSOURCE`: Accept ``VSOURCEa`` or ``VSOUna``. This appeared in early drafts of WCS Paper III and was subsequently dropped in favour of ``ZSOURCEa`` and ``ZSOUna``. The constructor accepts ``VSOURCEa`` only if `WCSHDR_AUXIMG` is also enabled. - `WCSHDR_DOBSn`: Allow ``DOBSn``, the column-specific analogue of ``DATE-OBS``. By an oversight this was never formally defined in the standard. - `WCSHDR_LONGKEY`: Accept long forms of the alternate binary table and pixel list WCS keywords, i.e. with "a" non- blank. Specifically:: jCRPXna TCRPXna : jCRPXn jCRPna TCRPXn TCRPna CRPIXja - TPCn_ka : - ijPCna - TPn_ka PCi_ja - TCDn_ka : - ijCDna - TCn_ka CDi_ja iCDLTna TCDLTna : iCDLTn iCDEna TCDLTn TCDEna CDELTia iCUNIna TCUNIna : iCUNIn iCUNna TCUNIn TCUNna CUNITia iCTYPna TCTYPna : iCTYPn iCTYna TCTYPn TCTYna CTYPEia iCRVLna TCRVLna : iCRVLn iCRVna TCRVLn TCRVna CRVALia iPVn_ma TPVn_ma : - iVn_ma - TVn_ma PVi_ma iPSn_ma TPSn_ma : - iSn_ma - TSn_ma PSi_ma where the primary and standard alternate forms together with the image-header equivalent are shown rightwards of the colon. The long form of these keywords could be described as quasi- standard. ``TPCn_ka``, ``iPVn_ma``, and ``TPVn_ma`` appeared by mistake in the examples in WCS Paper II and subsequently these and also ``TCDn_ka``, ``iPSn_ma`` and ``TPSn_ma`` were legitimized by the errata to the WCS papers. Strictly speaking, the other long forms are non-standard and in fact have never appeared in any draft of the WCS papers nor in the errata. However, as natural extensions of the primary form they are unlikely to be written with any other intention. Thus it should be safe to accept them provided, of course, that the resulting keyword does not exceed the 8-character limit. If ``WCSHDR_CNAMn`` is enabled then also accept:: iCNAMna TCNAMna : --- iCNAna --- TCNAna CNAMEia iCRDEna TCRDEna : --- iCRDna --- TCRDna CRDERia iCSYEna TCSYEna : --- iCSYna --- TCSYna CSYERia Note that ``CNAMEia``, ``CRDERia``, ``CSYERia``, and their variants are not used by pywcs but are stored as auxiliary information. - `WCSHDR_CNAMn`: Accept ``iCNAMn``, ``iCRDEn``, ``iCSYEn``, ``TCNAMn``, ``TCRDEn``, and ``TCSYEn``, i.e. with ``a`` blank. While non-standard, these are the obvious analogues of ``iCTYPn``, ``TCTYPn``, etc. - `WCSHDR_AUXIMG`: Allow the image-header form of an auxiliary WCS keyword with representation-wide scope to provide a default value for all images. This default may be overridden by the column-specific form of the keyword. For example, a keyword like ``EQUINOXa`` would apply to all image arrays in a binary table, or all pixel list columns with alternate representation ``a`` unless overridden by ``EQUIna``. Specifically the keywords are:: LATPOLEa for LATPna LONPOLEa for LONPna RESTFREQ for RFRQna RESTFRQa for RFRQna RESTWAVa for RWAVna whose keyvalues are actually used by WCSLIB, and also keywords that provide auxiliary information that is simply stored in the wcsprm struct:: EPOCH - ... (No column-specific form.) EPOCHa - ... Only if WCSHDR_EPOCHa is set. EQUINOXa for EQUIna RADESYSa for RADEna RADECSYS for RADEna ... Only if WCSHDR_RADECSYS is set. SPECSYSa for SPECna SSYSOBSa for SOBSna SSYSSRCa for SSRCna VELOSYSa for VSYSna VELANGLa for VANGna VELREF - ... (No column-specific form.) VELREFa - ... Only if WCSHDR_VELREFa is set. VSOURCEa for VSOUna ... Only if WCSHDR_VSOURCE is set. WCSNAMEa for WCSNna ... Or TWCSna (see below). ZSOURCEa for ZSOUna DATE-AVG for DAVGn DATE-OBS for DOBSn MJD-AVG for MJDAn MJD-OBS for MJDOBn OBSGEO-X for OBSGXn OBSGEO-Y for OBSGYn OBSGEO-Z for OBSGZn where the image-header keywords on the left provide default values for the column specific keywords on the right. Keywords in the last group, such as ``MJD-OBS``, apply to all alternate representations, so ``MJD-OBS`` would provide a default value for all images in the header. This auxiliary inheritance mechanism applies to binary table image arrays and pixel lists alike. Most of these keywords have no default value, the exceptions being ``LONPOLEa`` and ``LATPOLEa``, and also ``RADESYSa`` and ``EQUINOXa`` which provide defaults for each other. Thus the only potential difficulty in using `WCSHDR_AUXIMG` is that of erroneously inheriting one of these four keywords. Unlike `WCSHDR_ALLIMG`, the existence of one (or all) of these auxiliary WCS image header keywords will not by itself cause a `~pywcs.Wcsprm` object to be created for alternate representation ``a``. This is because they do not provide sufficient information to create a non-trivial coordinate representation when used in conjunction with the default values of those keywords, such as ``CTYPEia``, that are parameterized by axis number. - `WCSHDR_ALLIMG`: Allow the image-header form of *all* image header WCS keywords to provide a default value for all image arrays in a binary table (n.b. not pixel list). This default may be overridden by the column-specific form of the keyword. For example, a keyword like ``CRPIXja`` would apply to all image arrays in a binary table with alternate representation ``a`` unless overridden by ``jCRPna``. Specifically the keywords are those listed above for `WCSHDR_AUXIMG` plus:: WCSAXESa for WCAXna which defines the coordinate dimensionality, and the following keywords which are parameterized by axis number:: CRPIXja for jCRPna PCi_ja for ijPCna CDi_ja for ijCDna CDELTia for iCDEna CROTAi for iCROTn CROTAia - ... Only if WCSHDR_CROTAia is set. CUNITia for iCUNna CTYPEia for iCTYna CRVALia for iCRVna PVi_ma for iVn_ma PSi_ma for iSn_ma CNAMEia for iCNAna CRDERia for iCRDna CSYERia for iCSYna where the image-header keywords on the left provide default values for the column specific keywords on the right. This full inheritance mechanism only applies to binary table image arrays, not pixel lists, because in the latter case there is no well-defined association between coordinate axis number and column number. Note that ``CNAMEia``, ``CRDERia``, ``CSYERia``, and their variants are not used by pywcs but are stored in the `~pywcs.Wcsprm` object as auxiliary information. Note especially that at least one `~pywcs.Wcsprm` object will be returned for each ``a`` found in one of the image header keywords listed above: - If the image header keywords for ``a`` **are not** inherited by a binary table, then the struct will not be associated with any particular table column number and it is up to the user to provide an association. - If the image header keywords for ``a`` **are** inherited by a binary table image array, then those keywords are considered to be "exhausted" and do not result in a separate `~pywcs.Wcsprm` object. .. _relaxwrite: Header-writing relaxation constants ----------------------------------- `~pywcs.WCS.to_header` and `~pywcs.WCS.to_header_string` has a *relax* argument which may be either `True`, `False` or an `int`. - If `True`, write all recognized extensions. - If `False` (default), none of the extensions (even those in the errata) will be written. - If an `int`, is is a bit field to provide fine-grained control over what non-standard WCS keywords to accept. The flag bits are subject to change in future and should be set by using the constants beginning with ``WCSHDO_`` in the `pywcs` module. The flag bits are: - `WCSHDO_none`: Don't use any extensions. - `WCSHDO_all`: Write all recognized extensions, equivalent to setting each flag bit. - `WCSHDO_safe`: Write all extensions that are considered to be safe and recommended. - `WCSHDO_DOBSn`: Write ``DOBSn``, the column-specific analogue of ``DATE-OBS`` for use in binary tables and pixel lists. WCS Paper III introduced ``DATE-AVG`` and ``DAVGn`` but by an oversight ``DOBSn`` (the obvious analogy) was never formally defined by the standard. The alternative to using ``DOBSn`` is to write ``DATE-OBS`` which applies to the whole table. This usage is considered to be safe and is recommended. - `WCSHDO_TPCn_ka`: WCS Paper I defined - ``TPn_ka`` and ``TCn_ka`` for pixel lists but WCS Paper II uses ``TPCn_ka`` in one example and subsequently the errata for the WCS papers legitimized the use of - ``TPCn_ka`` and ``TCDn_ka`` for pixel lists provided that the keyword does not exceed eight characters. This usage is considered to be safe and is recommended because of the non-mnemonic terseness of the shorter forms. - `WCSHDO_PVn_ma`: WCS Paper I defined - ``iVn_ma`` and ``iSn_ma`` for bintables and - ``TVn_ma`` and ``TSn_ma`` for pixel lists but WCS Paper II uses ``iPVn_ma`` and ``TPVn_ma`` in the examples and subsequently the errata for the WCS papers legitimized the use of - ``iPVn_ma`` and ``iPSn_ma`` for bintables and - ``TPVn_ma`` and ``TPSn_ma`` for pixel lists provided that the keyword does not exceed eight characters. This usage is considered to be safe and is recommended because of the non-mnemonic terseness of the shorter forms. - `WCSHDO_CRPXna`: For historical reasons WCS Paper I defined - ``jCRPXn``, ``iCDLTn``, ``iCUNIn``, ``iCTYPn``, and ``iCRVLn`` for bintables and - ``TCRPXn``, ``TCDLTn``, ``TCUNIn``, ``TCTYPn``, and ``TCRVLn`` for pixel lists for use without an alternate version specifier. However, because of the eight-character keyword constraint, in order to accommodate column numbers greater than 99 WCS Paper I also defined - ``jCRPna``, ``iCDEna``, ``iCUNna``, ``iCTYna`` and ``iCRVna`` for bintables and - ``TCRPna``, ``TCDEna``, ``TCUNna``, ``TCTYna`` and ``TCRVna`` for pixel lists for use with an alternate version specifier (the ``a``). Like the ``PC``, ``CD``, ``PV``, and ``PS`` keywords there is an obvious tendency to confuse these two forms for column numbers up to 99. It is very unlikely that any parser would reject keywords in the first set with a non-blank alternate version specifier so this usage is considered to be safe and is recommended. - `WCSHDO_CNAMna`: WCS Papers I and III defined - ``iCNAna``, ``iCRDna``, and ``iCSYna`` for bintables and - ``TCNAna``, ``TCRDna``, and ``TCSYna`` for pixel lists By analogy with the above, the long forms would be - ``iCNAMna``, ``iCRDEna``, and ``iCSYEna`` for bintables and - ``TCNAMna``, ``TCRDEna``, and ``TCSYEna`` for pixel lists Note that these keywords provide auxiliary information only, none of them are needed to compute world coordinates. This usage is potentially unsafe and is not recommended at this time. - `WCSHDO_WCSNna`: Write ``WCSNna`` instead of ``TWCSna`` for pixel lists. While the constructor treats ``WCSNna`` and ``TWCSna`` as equivalent, other parsers may not. Consequently, this usage is potentially unsafe and is not recommended at this time. - `WCSHDO_SIP`: Write out Simnple Imaging Polynomial (SIP) keywords pywcs-1.12/examples/0000755001153600020070000000000012310355732016462 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/examples/from_file.py0000644001153600020070000000212312310355627020777 0ustar cslocumSTSCI\science00000000000000# Load the WCS information from a fits header, and use it # to convert pixel coordinates to world coordinates. from __future__ import division # confidence high import numpy import pywcs import pyfits import sys # Load the FITS hdulist using pyfits hdulist = pyfits.open(sys.argv[-1]) # Parse the WCS keywords in the primary HDU wcs = pywcs.WCS(hdulist[0].header) # Print out the "name" of the WCS, as defined in the FITS header print wcs.wcs.name # Print out all of the settings that were parsed from the header wcs.wcs.print_contents() # Some pixel coordinates of interest. pixcrd = numpy.array([[0,0],[24,38],[45,98]], numpy.float_) # Convert pixel coordinates to world coordinates # The second argument is "origin" -- in this case we're declaring we # have 1-based (Fortran-like) coordinates. sky = wcs.wcs_pix2sky(pixcrd, 1) print sky # Convert the same coordinates back to pixel coordinates. pixcrd2 = wcs.wcs_sky2pix(sky, 1) print pixcrd2 # These should be the same as the original pixel coordinates, modulo # some floating-point error. assert numpy.max(numpy.abs(pixcrd - pixcrd2)) < 1e-6 pywcs-1.12/examples/programmatic.py0000644001153600020070000000255112310355627021527 0ustar cslocumSTSCI\science00000000000000# Set the WCS information manually by setting properties of the WCS # object. from __future__ import division # confidence high import numpy import pywcs import pyfits import sys # Create a new WCS object. The number of axes must be set # from the start wcs = pywcs.WCS(naxis=2) # Set up an "Airy's zenithal" projection # Vector properties may be set with Python lists, or Numpy arrays wcs.wcs.crpix = [-234.75, 8.3393] wcs.wcs.cdelt = numpy.array([-0.066667, 0.066667]) wcs.wcs.crval = [0, -90] wcs.wcs.ctype = ["RA---AIR", "DEC--AIR"] wcs.wcs.set_pv([(2, 1, 45.0)]) # Print out the "name" of the WCS, as defined in the FITS header print wcs.wcs.name wcs.wcs.print_contents() # Some pixel coordinates of interest. pixcrd = numpy.array([[0,0],[24,38],[45,98]], numpy.float_) # Convert pixel coordinates to world coordinates world = wcs.wcs_pix2sky(pixcrd, 1) print world # Convert the same coordinates back to pixel coordinates. pixcrd2 = wcs.wcs_sky2pix(world, 1) print pixcrd2 # These should be the same as the original pixel coordinates, modulo # some floating-point error. assert numpy.max(numpy.abs(pixcrd - pixcrd2)) < 1e-6 # Now, write out the WCS object as a FITS header header = wcs.to_header() # header is a PyFITS Header object. We can use it to create a new # PrimaryHDU and write it to a file. hdu = pyfits.PrimaryHDU(header=header) hdu.writeto('test.fits') pywcs-1.12/hooks.py0000644001153600020070000001201312310355627016341 0ustar cslocumSTSCI\science00000000000000import os from distutils.dist import Distribution def pywcs_hook(config) : WCSVERSION = config['metadata']['stsci_wcs_version'].strip() ## write wcsconfig.h write_if_different( 'src/wcsconfig.h', wcsconfig_h_proto % ( WCSVERSION, determine_64_bit_int()) ) ## circumvent buggy compilers adjust_compiler() return ###################################################################### def write_if_different(filename, data): data = data.encode('ascii') if os.path.exists(filename): with open(filename, 'rb') as fd: original_data = fd.read() else: original_data = None if original_data != data: with open(filename, 'wb') as fd: fd.write(data) ######################################################################u wcsconfig_h_proto = """ /* WCSLIB library version number. */ #define WCSLIB_VERSION %s /* 64-bit integer data type. */ #define WCSLIB_INT64 %s /* Windows needs some other defines */ /* I think the only one we need is _WIN32, but the others don't hurt - Mark S. 2012-02-14 */ #if defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) || defined (__MINGW64__) /* */ #ifndef YY_NO_UNISTD_H #define YY_NO_UNISTD_H #endif #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #ifndef _NO_OLDNAMES /* for mingw32 */ #define _NO_OLDNAMES #endif #ifndef NO_OLDNAMES /* for mingw64 */ #define NO_OLDNAMES #endif #ifndef __STDC__ /* for MS Visual C */ #define __STDC__ 1 #endif #endif """ # The only configuration parameter needed at compile-time is how to # specify a 64-bit signed integer. Python's ctypes module can get us # that information, but it is only available in Python 2.5 or later. # If we can't be absolutely certain, we default to "long long int", # which is correct on most platforms (x86, x86_64). If we find # platforms where this heuristic doesn't work, we may need to hardcode # for them. def determine_64_bit_int(): try: try: import ctypes except ImportError: raise ValueError() if ctypes.sizeof(ctypes.c_longlong) == 8: return "long long int" elif ctypes.sizeof(ctypes.c_long) == 8: return "long int" elif ctypes.sizeof(ctypes.c_int) == 8: return "int" else: raise ValueError() except ValueError: return "long long int" ###################################################################### def get_distutils_option(option, commands): """ Returns the value of the given distutils option. Parameters ---------- option : str The name of the option commands : list of str The list of commands on which this option is available Returns ------- val : str or None the value of the given distutils option. If the option is not set, returns None. """ # Pre-parse the Distutils command-line options and config files to # if the option is set. dist = Distribution() try: dist.parse_config_files() dist.parse_command_line() except DistutilsError: # Let distutils handle this itself return None except AttributeError: # This seems to get thrown for ./setup.py --help return None for cmd in commands: if cmd in dist.commands: break else: return None for cmd in commands: cmd_opts = dist.get_option_dict(cmd) if option in cmd_opts: return cmd_opts[option][1] else: return None def adjust_compiler(): """ This function detects broken compilers and switches to another. If the environment variable CC is explicitly set, or a compiler is specified on the commandline, no override is performed -- the purpose here is to only override a default compiler. The specific compilers with problems are: * The default compiler in XCode-4.2, llvm-gcc-4.2, segfaults when compiling wcslib. The set of broken compilers can be updated by changing the compiler_mapping variable. It is a list of 2-tuples where the first in the pair is a regular expression matching the version of the broken compiler, and the second is the compiler to change to. """ if 'CC' in os.environ: return if get_distutils_option( 'compiler', ['build', 'build_ext', 'build_clib']) is not None: return from distutils import ccompiler import subprocess import re compiler_mapping = [ ('i686-apple-darwin[0-9]*-llvm-gcc-4.2', 'clang') ] c = ccompiler.new_compiler() # The MSVC ccompiler class doesn't have a `compiler` member. if not hasattr(c, 'compiler'): return process = subprocess.Popen( c.compiler + ['--version'], stdout=subprocess.PIPE) output = process.communicate()[0].strip().decode('ascii') version = output.split()[0] for broken, fixed in compiler_mapping: if re.match(broken, version): os.environ['CC'] = fixed break pywcs-1.12/lib/0000755001153600020070000000000012310355732015412 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/lib/pywcs/0000755001153600020070000000000012310355732016557 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/lib/pywcs/__init__.py0000644001153600020070000000745412310355627020705 0ustar cslocumSTSCI\science00000000000000# Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. # 3. The name of AURA and its representatives may not be used to # endorse or promote products derived from this software without # specific prior written permission. # THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. """ .. _wcslib: http://www.atnf.csiro.au/~mcalabre/WCS/ .. _pyfits: http://www.stsci.edu/resources/software_hardware/pyfits .. _Paper IV: http://www.atnf.csiro.au/people/mcalabre/WCS/index.html .. _SIP: http://ssc.spitzer.caltech.edu/postbcd/doc/shupeADASS.pdf .. _ds9: http://hea-www.harvard.edu/RD/ds9/ Pywcs provides transformations following the `SIP`_ conventions, `Paper IV`_ table lookup distortion, and the core WCS functionality provided by `wcslib`_. Each of these transformations can be used independently or together in a standard pipeline. The basic workflow is as follows: 1. ``import pywcs`` 2. Call the `pywcs.WCS` constructor with a `pyfits`_ header and/or hdulist object. 3. Optionally, if the FITS file uses any deprecated or non-standard features, you may need to call one of the `~pywcs.WCS.fix` methods on the object. 4. Use one of the following transformation methods: - `~WCS.all_pix2sky`: Perform all three transformations from pixel to sky coordinates. - `~WCS.wcs_pix2sky`: Perform just the core WCS transformation from pixel to sky coordinates. - `~WCS.wcs_sky2pix`: Perform just the core WCS transformation from sky to pixel coordinates. - `~WCS.sip_pix2foc`: Convert from pixel to focal plane coordinates using the `SIP`_ polynomial coefficients. - `~WCS.sip_foc2pix`: Convert from focal plane to pixel coordinates using the `SIP`_ polynomial coefficients. - `~WCS.p4_pix2foc`: Convert from pixel to focal plane coordinates using the table lookup distortion method described in `Paper IV`_. - `~WCS.det2im`: Convert from detector coordinates to image coordinates. Commonly used for narrow column correction. """ from __future__ import division # confidence high import sys if sys.version_info[0] >= 3: exec("from .pywcs import *") else: from .core import * def test( verbose=False ) : import os, sys, nose # find the directory where the test package lives from . import tests dir = os.path.dirname( tests.__file__ ) # get the name of the test package argv = [ 'nosetests', '--exe', dir ] # run nose try : return nose.main( argv = argv ) except SystemExit as e : return e.code from .version import * pywcs-1.12/lib/pywcs/_docutil.py0000644001153600020070000000557112310355627020746 0ustar cslocumSTSCI\science00000000000000# Copyright (C) 2008-2012 Association of Universities for Research in # Astronomy (AURA) # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above # copyright notice, this list of conditions and the following # disclaimer. # # 2. Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials # provided with the distribution. # # 3. The name of AURA and its representatives may not be used to # endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED # OF THE POSSIBILITY OF SUCH DAMAGE. """ pywcs-specific utilities for generating boilerplate in docstrings. """ from __future__ import division # confidence high def _fix(content, indent=0): lines = content.split('\n') indent = '\n' + ' ' * indent return indent.join(lines) def TWO_OR_THREE_ARGS(out_type, naxis, indent=0): return _fix( """Either two or three arguments may be provided. - 2 arguments: An *N* x *%s* array of *x*- and *y*-coordinates, and an *origin*. - 3 arguments: 2 one-dimensional arrays of *x* and *y* coordinates, and an *origin*. Here, *origin* is the coordinate in the upper left corner of the image. In FITS and Fortran standards, this is 1. In Numpy and C standards this is 0. Returns the %s. If the input was a single array and origin, a single array is returned, otherwise a tuple of arrays is returned.""" % (naxis, out_type), indent) def ORIGIN(indent=0): return _fix( """ - *origin*: int. Specifies the origin of pixel values. The Fortran and FITS standards use an origin of 1. Numpy and C use array indexing with origin at 0. """, indent) def RA_DEC_ORDER(indent=0): return _fix( """ An optional keyword argument, *ra_dec_order*, may be provided, that when `True` will ensure that sky coordinates are always given and returned in as (*ra*, *dec*) pairs, regardless of the order of the axes specified by the in the ``CTYPE`` keywords. """, indent) pywcs-1.12/lib/pywcs/core.py0000644001153600020070000015155312310355627020076 0ustar cslocumSTSCI\science00000000000000# Copyright (C) 2008-2012 Association of Universities for Research in # Astronomy (AURA) # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above # copyright notice, this list of conditions and the following # disclaimer. # # 2. Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials # provided with the distribution. # # 3. The name of AURA and its representatives may not be used to # endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED # OF THE POSSIBILITY OF SUCH DAMAGE. """ Under the hood, there are 3 separate classes that perform different parts of the transformation: - `~pywcs.Wcsprm`: Is a direct wrapper of the core WCS functionality in `wcslib`_. - `~pywcs.Sip`: Handles polynomial distortion as defined in the `SIP`_ convention. - `~pywcs.DistortionLookupTable`: Handles `Paper IV`_ distortion lookup tables. Additionally, the class `WCS` aggregates all of these transformations together in a pipeline: - Detector to image plane correction (by a pair of `~pywcs.DistortionLookupTable` objects). - `SIP`_ distortion correction (by an underlying `~pywcs.Sip` object) - `Paper IV`_ table-lookup distortion correction (by a pair of `~pywcs.DistortionLookupTable` objects). - `wcslib`_ WCS transformation (by a `~pywcs.Wcsprm` object) """ from __future__ import division # confidence high # stdlib import os import sys import copy import warnings if sys.version_info[0:2] >= (2, 6): from io import BytesIO else: from cStringIO import StringIO as BytesIO # third-party import numpy as np try: import pyfits HAS_PYFITS = True except ImportError: HAS_PYFITS = False # local if sys.version_info[0] >= 3: from . import _docutil as __ from . import _pywcs else: import _docutil as __ import _pywcs assert _pywcs._sanity_check(), \ """PyWcs did not pass its sanity check for your build on your platform. Please send details about your build and platform to mdroe@stsci.edu""" if sys.version_info[0] >= 3: string_types = (bytes,) else: string_types = (str, unicode) # bit flags for relax keyword WCSHDO_SIP = 0x40 # This is here for the sake of epydoc WCSBase = _pywcs._Wcs DistortionLookupTable = _pywcs.DistortionLookupTable Sip = _pywcs.Sip UnitConverter = _pywcs.UnitConverter class Wcsprm(_pywcs._Wcsprm): pass # Copy all the constants from the C extension into this module's namespace for key, val in _pywcs.__dict__.items(): if (key.startswith('WCSSUB') or key.startswith('WCSHDR') or key.startswith('WCSHDO')): locals()[key] = val # A wrapper around the C WCS type def _parse_keysel(keysel): keysel_flags = 0 if keysel is not None: for element in keysel: if element.lower() == 'image': keysel_flags |= _pywcs.WCSHDR_IMGHEAD elif element.lower() == 'binary': keysel_flags |= _pywcs.WCSHDR_BIMGARR elif element.lower() == 'pixel': keysel_flags |= _pywcs.WCSHDR_PIXLIST else: raise ValueError( "keysel must be a list of 'image', 'binary' and/or 'pixel'") else: keysel_flags = -1 return keysel_flags class WCS(WCSBase): """ WCS objects perform standard WCS transformations, and correct for `SIP`_ and `Paper IV`_ table-lookup distortions, based on the WCS keywords and supplementary data read from a FITS file. """ def __init__(self, header=None, fobj=None, key=' ', minerr=0.0, relax=False, naxis=None, keysel=None, colsel=None, fix=True): """ - *header*: A string containing the header content, or a PyFITS header object. If *header* is not provided or None, the object will be initialized to default values. - *fobj*: A PyFITS file (hdulist) object. It is needed when header keywords point to a `Paper IV`_ Lookup table distortion stored in a different extension. - *key*: A string. The name of a particular WCS transform to use. This may be either ``' '`` or ``'A'``-``'Z'`` and corresponds to the ``"a"`` part of the ``CTYPEia`` cards. *key* may only be provided if *header* is also provided. - *minerr*: A floating-point value. The minimum value a distortion correction must have in order to be applied. If the value of ``CQERRja`` is smaller than *minerr*, the corresponding distortion is not applied. - *relax*: Degree of permissiveness: - `False`: Recognize only FITS keywords defined by the published WCS standard. - `True`: Admit all recognized informal extensions of the WCS standard. - `int`: a bit field selecting specific extensions to accept. See :ref:`relaxread` for details. - *naxis*: int or sequence. Extracts specific coordinate axes using :meth:`~pywcs.Wcsprm.sub`. If a header is provided, and *naxis* is not ``None``, *naxis* will be passed to :meth:`~pywcs.Wcsprm.sub` in order to select specific axes from the header. See :meth:`~pywcs.Wcsprm.sub` for more details about this parameter. - *keysel*: A list of flags used to select the keyword types considered by wcslib. When ``None``, only the standard image header keywords are considered (and the underlying wcspih() C function is called). To use binary table image array or pixel list keywords, *keysel* must be set. Each element in the list should be one of the following strings: - 'image': Image header keywords - 'binary': Binary table image array keywords - 'pixel': Pixel list keywords Keywords such as ``EQUIna`` or ``RFRQna`` that are common to binary table image arrays and pixel lists (including ``WCSNna`` and ``TWCSna``) are selected by both 'binary' and 'pixel'. - *colsel*: A sequence of table column numbers used to restrict the WCS transformations considered to only those pertaining to the specified columns. If `None`, there is no restriction. - *fix* : When `True` (default), call `fix` on the resulting object to fix any non-standard uses in the header. .. warning:: pywcs supports arbitrary *n* dimensions for the core WCS (the transformations handled by WCSLIB). However, the Paper IV lookup table and SIP distortions must be two dimensional. Therefore, if you try to create a WCS object where the core WCS has a different number of dimensions than 2 and that object also contains a Paper IV lookup table or SIP distortion, a `ValueError` exception will be raised. To avoid this, consider using the *naxis* kwarg to select two dimensions from the core WCS. **Exceptions:** - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid key. - `KeyError`: Key not found in FITS header. - `AssertionError`: Lookup table distortion present in the header but fobj not provided. """ if header is None: if naxis is None: naxis = 2 wcsprm = _pywcs._Wcsprm(header=None, key=key, relax=relax, naxis=naxis) self.naxis = wcsprm.naxis # Set some reasonable defaults. det2im = (None, None) cpdis = (None, None) sip = None else: keysel_flags = _parse_keysel(keysel) if isinstance(header, string_types): if HAS_PYFITS and os.path.exists(header): hdulist = pyfits.open(header) header = hdulist[0].header header_string = header.tostring() else: header_string = header elif HAS_PYFITS: assert isinstance(header, pyfits.Header) header_string = header.tostring() else: raise TypeError( "header must be a string or a pyfits.Header object") try: wcsprm = _pywcs._Wcsprm(header=header_string, key=key, relax=relax, keysel=keysel_flags, colsel=colsel) except _pywcs.NoWcsKeywordsFoundError: # The header may have SIP or distortions, but no core # WCS. That isn't an error -- we want a "default" # (identity) core Wcs transformation in that case. if colsel is None: wcsprm = _pywcs._Wcsprm(header=None, key=key, relax=relax, keysel=keysel_flags, colsel=colsel) else: raise if naxis is not None: wcsprm = wcsprm.sub(naxis) self.naxis = wcsprm.naxis det2im = self._read_det2im_kw(header, fobj, err=minerr) cpdis = self._read_distortion_kw( header, fobj, dist='CPDIS', err=minerr) sip = self._read_sip_kw(header) if (wcsprm.naxis != 2 and (det2im[0] or det2im[1] or cpdis[0] or cpdis[1] or sip)): raise ValueError( """ Paper IV lookup tables and SIP distortions only work in 2 dimensions. However, WCSLIB has detected %d dimensions in the core WCS keywords. To use core WCS in conjunction with Paper IV lookup tables or SIP distortion, you must select or reduce these to 2 dimensions using the naxis kwarg. """ % wcsprm.naxis) if fix: wcsprm.fix() self.get_naxis(header) WCSBase.__init__(self, sip, cpdis, wcsprm, det2im) def __copy__(self): new_copy = self.__class__() WCSBase.__init__(new_copy, self.sip, (self.cpdis1, self.cpdis2), self.wcs, (self.det2im1, self.det2im2)) new_copy.__dict__.update(self.__dict__) return new_copy def __deepcopy__(self, memo): new_copy = self.__class__() new_copy.naxis = copy.deepcopy(self.naxis, memo) WCSBase.__init__(new_copy, copy.deepcopy(self.sip, memo), (copy.deepcopy(self.cpdis1, memo), copy.deepcopy(self.cpdis2, memo)), copy.deepcopy(self.wcs, memo), (copy.deepcopy(self.det2im1, memo), copy.deepcopy(self.det2im2, memo))) for key in self.__dict__: val = self.__dict__[key] new_copy.__dict__[key] = copy.deepcopy(val, memo) return new_copy def copy(self): """ Return a shallow copy of the object. Convenience method so user doesn't have to import the :mod:`copy` stdlib module. """ return copy.copy(self) def deepcopy(self): """ Return a deep copy of the object. Convenience method so user doesn't have to import the :mod:`copy` stdlib module. """ return copy.deepcopy(self) def sub(self, axes=None): copy = self.deepcopy() copy.wcs = self.wcs.sub(axes) copy.naxis = copy.wcs.naxis return copy sub.__doc__ = _pywcs._Wcsprm.sub.__doc__ def calcFootprint(self, header=None, undistort=True): """ Calculates the footprint of the image on the sky. A footprint is defined as the positions of the corners of the image on the sky after all available distortions have been applied. Returns a (4, 2) array of (*x*, *y*) coordinates. """ if header is None: try: # classes that inherit from WCS and define naxis1/2 # do not require a header parameter naxis1 = self.naxis1 naxis2 = self.naxis2 except AttributeError : print("Need a valid header in order to calculate footprint\n") return None else: naxis1 = header.get('NAXIS1', None) naxis2 = header.get('NAXIS2', None) corners = np.zeros(shape=(4,2),dtype=np.float64) if naxis1 is None or naxis2 is None: return None corners[0,0] = 1. corners[0,1] = 1. corners[1,0] = 1. corners[1,1] = naxis2 corners[2,0] = naxis1 corners[2,1] = naxis2 corners[3,0] = naxis1 corners[3,1] = 1. if undistort: return self.all_pix2sky(corners, 1) else: return self.wcs_pix2sky(corners,1) def _read_det2im_kw(self, header, fobj, err=0.0): """ Create a `Paper IV`_ type lookup table for detector to image plane correction. """ if fobj is None: return (None, None) if not HAS_PYFITS: raise ImportError( "pyfits is required to use Paper IV lookup tables") if not isinstance(fobj, pyfits.HDUList): return (None, None) try: axiscorr = header['AXISCORR'] d2imdis = self._old_style_d2im(header, fobj, axiscorr) return d2imdis except KeyError: pass dist = 'D2IMDIS' d_kw = 'D2IM' err_kw = 'D2IMERR' tables = {} for i in range(1, self.naxis+1): d_error = header.get(err_kw+str(i), 0.0) if d_error < err: tables[i] = None continue distortion = dist+str(i) if distortion in header: dis = header[distortion].lower() if dis == 'lookup': if fobj is not None and not HAS_PYFITS: raise ImportError( "pyfits is required to use Paper IV lookup tables") assert isinstance(fobj, pyfits.HDUList), \ 'A pyfits HDUList is required for Lookup table distortion.' dp = (d_kw+str(i)).strip() d_extver = header.get(dp+'.EXTVER', 1) if i == header[dp+'.AXIS.%s'%i]: d_data = fobj['D2IMARR', d_extver].data else: d_data = (fobj['D2IMARR', d_extver].data).transpose() d_header = fobj['D2IMARR', d_extver].header d_crpix = (d_header.get('CRPIX1', 0.0), d_header.get('CRPIX2', 0.0)) d_crval = (d_header.get('CRVAL1', 0.0), d_header.get('CRVAL2', 0.0)) d_cdelt = (d_header.get('CDELT1', 1.0), d_header.get('CDELT2', 1.0)) d_lookup = DistortionLookupTable(d_data, d_crpix, d_crval, d_cdelt) tables[i] = d_lookup else: print('Polynomial distortion is not implemented.\n') else: tables[i] = None if not tables: return (None, None) else: return (tables.get(1), tables.get(2)) def _old_style_d2im(self, header, fobj, axiscorr): warnings.warn("The use of ``AXISCORR`` for D2IM correction has been deprecated." "The new style of this correction is described at" "" "PyWCS will read in files with ``AXISCORR`` but to_fits() will write" "out files in the new style", DeprecationWarning) cpdis = [None, None] crpix = [0.,0.] crval = [0.,0.] cdelt = [1.,1.] try: d2im_data = fobj[('D2IMARR', 1)].data except KeyError: return (None, None) except AttributeError: return (None, None) d2im_data = np.array([d2im_data]) d2im_hdr = fobj[('D2IMARR', 1)].header naxis = d2im_hdr['NAXIS'] for i in range(1,naxis+1): crpix[i-1] = d2im_hdr.get('CRPIX'+str(i), 0.0) crval[i-1] = d2im_hdr.get('CRVAL'+str(i), 0.0) cdelt[i-1] = d2im_hdr.get('CDELT'+str(i), 1.0) cpdis = DistortionLookupTable(d2im_data, crpix, crval, cdelt) if axiscorr == 1: return (cpdis, None) elif axiscorr == 2: return (None, cpdis) else: print "Expected AXISCORR to be 1 or 2" return (None, None) def _write_det2im(self, hdulist): """ Write out Detector to Image Correction to the given `pyfits.HDUList`. """ if self.det2im1 is None and self.det2im2 is None: return dist = 'D2IMDIS' d_kw = 'D2IM' err_kw = 'D2IMERR' def write_d2i(num, det2im): if det2im is None: return hdulist[0].header.update('%s%d' % (dist, num), value='LOOKUP', comment='Detector to image correction type') hdulist[0].header.update('%s%d.EXTVER' % (d_kw, num), value=num, comment='Version number of WCSDVARR extension') hdulist[0].header.update('%s%d.NAXES' % (d_kw, num), value=len(det2im.data.shape), comment='Number of independent variables in d2im function') for i in range(det2im.data.ndim): hdulist[0].header.update('%s%d.AXIS.%d' % (d_kw, num, i+1), value=i+1, comment='Axis number of the jth independent variable in a d2im function') image = pyfits.ImageHDU(det2im.data, name='D2IMARR') header = image.header header.update('CRPIX1', value=det2im.crpix[0], comment='Coordinate system reference pixel') header.update('CRPIX2', value=det2im.crpix[1], comment='Coordinate system reference pixel') header.update('CRVAL1', value=det2im.crval[0], comment='Coordinate system value at reference pixel') header.update('CRVAL2', value=det2im.crval[1], comment='Coordinate system value at reference pixel') header.update('CDELT1', value=det2im.cdelt[0], comment='Coordinate increment along axis') header.update('CDELT2', value=det2im.cdelt[1], comment='Coordinate increment along axis') image.update_ext_version(int(hdulist[0].header['%s%d.EXTVER' % (d_kw, num)])) hdulist.append(image) write_d2i(1, self.det2im1) write_d2i(2, self.det2im2) def _read_distortion_kw(self, header, fobj, dist='CPDIS', err=0.0): """ Reads `Paper IV`_ table-lookup distortion keywords and data, and returns a 2-tuple of `~pywcs.DistortionLookupTable` objects. If no `Paper IV`_ distortion keywords are found, ``(None, None)`` is returned. """ if isinstance(header, string_types): return (None, None) if dist == 'CPDIS': d_kw = 'DP' err_kw = 'CPERR' else: d_kw = 'DQ' err_kw = 'CQERR' tables = {} for i in range(1, self.naxis+1): d_error = header.get(err_kw+str(i), 0.0) if d_error < err: tables[i] = None continue distortion = dist+str(i) if distortion in header: dis = header[distortion].lower() if dis == 'lookup': if fobj is not None and not HAS_PYFITS: raise ImportError( "pyfits is required to use Paper IV lookup tables") assert isinstance(fobj, pyfits.HDUList), \ 'A pyfits HDUList is required for Lookup table distortion.' dp = (d_kw+str(i)).strip() d_extver = header.get(dp+'.EXTVER', 1) if i == header[dp+'.AXIS.%s'%i]: d_data = fobj['WCSDVARR', d_extver].data else: d_data = (fobj['WCSDVARR', d_extver].data).transpose() d_header = fobj['WCSDVARR', d_extver].header d_crpix = (d_header.get('CRPIX1', 0.0), d_header.get('CRPIX2', 0.0)) d_crval = (d_header.get('CRVAL1', 0.0), d_header.get('CRVAL2', 0.0)) d_cdelt = (d_header.get('CDELT1', 1.0), d_header.get('CDELT2', 1.0)) d_lookup = DistortionLookupTable(d_data, d_crpix, d_crval, d_cdelt) tables[i] = d_lookup else: print('Polynomial distortion is not implemented.\n') else: tables[i] = None if not tables: return (None, None) else: return (tables.get(1), tables.get(2)) def _write_distortion_kw(self, hdulist, dist='CPDIS'): """ Write out Paper IV distortion keywords to the given `pyfits.HDUList`. """ if self.cpdis1 is None and self.cpdis2 is None: return if dist == 'CPDIS': d_kw = 'DP' err_kw = 'CPERR' else: d_kw = 'DQ' err_kw = 'CQERR' def write_dist(num, cpdis): if cpdis is None: return hdulist[0].header.update('%s%d' % (dist, num), value='LOOKUP', comment='Prior distortion function type') hdulist[0].header.update('%s%d.EXTVER' % (d_kw, num), value=num, comment='Version number of WCSDVARR extension') hdulist[0].header.update('%s%d.NAXES' % (d_kw, num), value=len(cpdis.data.shape), comment='Number of independent variables in distortion function') for i in range(cpdis.data.ndim): hdulist[0].header.update('%s%d.AXIS.%d' % (d_kw, num, i+1), value=i+1, comment='Axis number of the jth independent variable in a distortion function') image = pyfits.ImageHDU(cpdis.data, name='WCSDVARR') header = image.header header.update('CRPIX1', value=cpdis.crpix[0], comment='Coordinate system reference pixel') header.update('CRPIX2', value=cpdis.crpix[1], comment='Coordinate system reference pixel') header.update('CRVAL1', value=cpdis.crval[0], comment='Coordinate system value at reference pixel') header.update('CRVAL2', value=cpdis.crval[1], comment='Coordinate system value at reference pixel') header.update('CDELT1', value=cpdis.cdelt[0], comment='Coordinate increment along axis') header.update('CDELT2', value=cpdis.cdelt[1], comment='Coordinate increment along axis') image.update_ext_version(int(hdulist[0].header['%s%d.EXTVER' % (d_kw, num)])) hdulist.append(image) write_dist(1, self.cpdis1) write_dist(2, self.cpdis2) def _read_sip_kw(self, header): """ Reads `SIP`_ header keywords and returns a `~pywcs.Sip` object. If no `SIP`_ header keywords are found, ``None`` is returned. """ if isinstance(header, string_types): # TODO: Parse SIP from a string without pyfits around return None if "A_ORDER" in header and header['A_ORDER'] > 1: if "B_ORDER" not in header: raise ValueError( "A_ORDER provided without corresponding B_ORDER " "keyword for SIP distortion") m = int(header["A_ORDER"]) a = np.zeros((m+1, m+1), np.double) for i in range(m+1): for j in range(m-i+1): a[i, j] = header.get(("A_%d_%d" % (i, j)), 0.0) m = int(header["B_ORDER"]) if m > 1: b = np.zeros((m+1, m+1), np.double) for i in range(m+1): for j in range(m-i+1): b[i, j] = header.get(("B_%d_%d" % (i, j)), 0.0) else: a = None b = None elif "B_ORDER" in header and header['B_ORDER'] > 1: raise ValueError( "B_ORDER provided without corresponding A_ORDER " "keyword for SIP distortion") else: a = None b = None if "AP_ORDER" in header and header['AP_ORDER'] > 1: if "BP_ORDER" not in header: raise ValueError( "AP_ORDER provided without corresponding BP_ORDER " "keyword for SIP distortion") m = int(header["AP_ORDER"]) ap = np.zeros((m+1, m+1), np.double) for i in range(m+1): for j in range(m-i+1): ap[i, j] = header.get("AP_%d_%d" % (i, j), 0.0) m = int(header["BP_ORDER"]) if m > 1: bp = np.zeros((m+1, m+1), np.double) for i in range(m+1): for j in range(m-i+1): bp[i, j] = header.get("BP_%d_%d" % (i, j), 0.0) else: ap = None bp = None elif "BP_ORDER" in header and header['BP_ORDER'] > 1: raise ValueError( "BP_ORDER provided without corresponding AP_ORDER " "keyword for SIP distortion") else: ap = None bp = None if a is None and b is None and ap is None and bp is None: return None if "CRPIX1" not in header or "CRPIX2" not in header: raise ValueError( "Header has SIP keywords without CRPIX keywords") crpix1 = header.get("CRPIX1") crpix2 = header.get("CRPIX2") return Sip(a, b, ap, bp, (crpix1, crpix2)) def _write_sip_kw(self): """ Write out SIP keywords. Returns a dictionary of key-value pairs. """ if self.sip is None: return {} keywords = {} def write_array(name, a): if a is None: return size = a.shape[0] keywords['%s_ORDER' % name] = size - 1 for i in range(size): for j in range(size - i): if a[i, j] != 0.0: keywords['%s_%d_%d' % (name, i, j)] = a[i, j] write_array('A', self.sip.a) write_array('B', self.sip.b) write_array('AP', self.sip.ap) write_array('BP', self.sip.bp) return keywords def _denormalize_sky(self, sky): if self.wcs.lngtyp != 'RA': raise ValueError( "WCS does not have longitude type of 'RA', therefore " + "(ra, dec) data can not be used as input") if self.wcs.lattype != 'DEC': raise ValueError( "WCS does not have longitude type of 'DEC', therefore " + "(ra, dec) data can not be used as input") if self.wcs.naxis == 2: if self.wcs.lng == 0 and self.wcs.lat == 1: return sky elif self.wcs.lng == 1 and self.wcs.lat == 0: # Reverse the order of the columns return sky[:,::-1] else: raise ValueError( "WCS does not have longitude and latitude celestial " + "axes, therefore (ra, dec) data can not be used as input") else: if self.wcs.lng < 0 or self.wcs.lat < 0: raise ValueError( "WCS does not have both longitude and latitude celestial " + "axes, therefore (ra, dec) data can not be used as input") out = np.zeros((sky.shape[0], self.wcs.naxis)) out[:,self.wcs.lng] = sky[:,0] out[:,self.wcs.lat] = sky[:,1] return out def _normalize_sky(self, sky): if self.wcs.lngtyp != 'RA': raise ValueError( "WCS does not have longitude type of 'RA', therefore " + "(ra, dec) data can not be returned") if self.wcs.lattype != 'DEC': raise ValueError( "WCS does not have longitude type of 'DEC', therefore " + "(ra, dec) data can not be returned") if self.wcs.naxis == 2: if self.wcs.lng == 0 and self.wcs.lat == 1: return sky elif self.wcs.lng == 1 and self.wcs.lat == 0: # Reverse the order of the columns return sky[:,::-1] else: raise ValueError( "WCS does not have longitude and latitude celestial " "axes, therefore (ra, dec) data can not be returned") else: if self.wcs.lng < 0 or self.wcs.lat < 0: raise ValueError( "WCS does not have both longitude and latitude celestial " "axes, therefore (ra, dec) data can not be returned") out = np.empty((sky.shape[0], 2)) out[:,0] = sky[:,self.wcs.lng] out[:,1] = sky[:,self.wcs.lat] return out def _array_converter(self, func, sky, *args, **kwargs): """ A helper function to support reading either a pair of arrays or a single Nx2 array. """ ra_dec_order = kwargs.get('ra_dec_order') if len(args) == 2: xy, origin = args try: xy = np.asarray(xy) origin = int(origin) except: raise TypeError( "When providing two arguments, they must be (xy, origin)") if ra_dec_order and sky == 'input': xy = self._denormalize_sky(xy) result = func(xy, origin) if ra_dec_order and sky == 'output': result = self._normalize_sky(result) return result elif len(args) == 3: x, y, origin = args try: x = np.asarray(x) y = np.asarray(y) origin = int(origin) except: raise TypeError( "When providing three arguments, they must be (x, y, origin)") if x.size != y.size: raise ValueError("x and y arrays are not the same size") length = x.size xy = np.hstack((x.reshape((length, 1)), y.reshape((length, 1)))) if ra_dec_order and sky == 'input': xy = self._denormalize_sky(xy) sky = func(xy, origin) if ra_dec_order and sky == 'output': sky = self._normalize_sky_output(sky) return sky[:, 0], sky[:, 1] return [sky[:, i] for i in range(sky.shape[1])] raise TypeError("Expected 2 or 3 arguments, %d given" % len(args)) def all_pix2sky(self, *args, **kwargs): return self._array_converter(self._all_pix2sky, 'output', *args, **kwargs) all_pix2sky.__doc__ = """ Transforms pixel coordinates to sky coordinates by doing all of the following in order: - Detector to image plane correction (optionally) - `SIP`_ distortion correction (optionally) - `Paper IV`_ table-lookup distortion correction (optionally) - `wcslib`_ WCS transformation %s %s For a transformation that is not two-dimensional, the two-argument form must be used. .. note:: The order of the axes for the result is determined by the `CTYPEia` keywords in the FITS header, therefore it may not always be of the form (*ra*, *dec*). The `~pywcs.Wcsprm.lat`, `~pywcs.Wcsprm.lng`, `~pywcs.Wcsprm.lattyp` and `~pywcs.Wcsprm.lngtyp` members can be used to determine the order of the axes. **Exceptions:** - `MemoryError`: Memory allocation failed. - `SingularMatrixError`: Linear transformation matrix is singular. - `InconsistentAxisTypesError`: Inconsistent or unrecognized coordinate axis types. - `ValueError`: Invalid parameter value. - `ValueError`: Invalid coordinate transformation parameters. - `ValueError`: x- and y-coordinate arrays are not the same size. - `InvalidTransformError`: Invalid coordinate transformation parameters. - `InvalidTransformError`: Ill-conditioned coordinate transformation parameters. """ % (__.TWO_OR_THREE_ARGS( 'sky coordinates, in degrees', 'naxis', 8), __.RA_DEC_ORDER(8)) def wcs_pix2sky(self, *args, **kwargs): if self.wcs is None: raise ValueError("No basic WCS settings were created.") return self._array_converter(lambda xy, o: self.wcs.p2s(xy, o)['world'], 'output', *args, **kwargs) wcs_pix2sky.__doc__ = """ Transforms pixel coordinates to sky coordinates by doing only the basic `wcslib`_ transformation. No `SIP`_ or `Paper IV`_ table lookup distortion correction is applied. To perform distortion correction, see `~pywcs.WCS.all_pix2sky`, `~pywcs.WCS.sip_pix2foc`, `~pywcs.WCS.p4_pix2foc`, or `~pywcs.WCS.pix2foc`. %s %s For a transformation that is not two-dimensional, the two-argument form must be used. .. note:: The order of the axes for the result is determined by the `CTYPEia` keywords in the FITS header, therefore it may not always be of the form (*ra*, *dec*). The `~pywcs.Wcsprm.lat`, `~pywcs.Wcsprm.lng`, `~pywcs.Wcsprm.lattyp` and `~pywcs.Wcsprm.lngtyp` members can be used to determine the order of the axes. **Exceptions:** - `MemoryError`: Memory allocation failed. - `SingularMatrixError`: Linear transformation matrix is singular. - `InconsistentAxisTypesError`: Inconsistent or unrecognized coordinate axis types. - `ValueError`: Invalid parameter value. - `ValueError`: Invalid coordinate transformation parameters. - `ValueError`: x- and y-coordinate arrays are not the same size. - `InvalidTransformError`: Invalid coordinate transformation parameters. - `InvalidTransformError`: Ill-conditioned coordinate transformation parameters. """ % (__.TWO_OR_THREE_ARGS('sky coordinates, in degrees.', 'naxis', 8), __.RA_DEC_ORDER(8)) def wcs_sky2pix(self, *args, **kwargs): if self.wcs is None: raise ValueError("No basic WCS settings were created.") return self._array_converter(lambda xy, o: self.wcs.s2p(xy, o)['pixcrd'], 'input', *args, **kwargs) wcs_sky2pix.__doc__ = """ Transforms sky coordinates to pixel coordinates, using only the basic `wcslib`_ WCS transformation. No `SIP`_ or `Paper IV`_ table lookup distortion is applied. %s %s For a transformation that is not two-dimensional, the two-argument form must be used. .. note:: The order of the axes for the input sky array is determined by the `CTYPEia` keywords in the FITS header, therefore it may not always be of the form (*ra*, *dec*). The `~pywcs.Wcsprm.lat`, `~pywcs.Wcsprm.lng`, `~pywcs.Wcsprm.lattyp` and `~pywcs.Wcsprm.lngtyp` members can be used to determine the order of the axes. **Exceptions:** - `MemoryError`: Memory allocation failed. - `SingularMatrixError`: Linear transformation matrix is singular. - `InconsistentAxisTypesError`: Inconsistent or unrecognized coordinate axis types. - `ValueError`: Invalid parameter value. - `InvalidTransformError`: Invalid coordinate transformation parameters. - `InvalidTransformError`: Ill-conditioned coordinate transformation parameters. """ % (__.TWO_OR_THREE_ARGS('pixel coordinates', 'naxis', 8), __.RA_DEC_ORDER(8)) def pix2foc(self, *args, **kwargs): return self._array_converter(self._pix2foc, None, *args, **kwargs) pix2foc.__doc__ = """ Convert pixel coordinates to focal plane coordinates using the `SIP`_ polynomial distortion convention and `Paper IV`_ table-lookup distortion correction. %s **Exceptions:** - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid coordinate transformation parameters. """ % (__.TWO_OR_THREE_ARGS('focal coordinates', '2', 8)) def p4_pix2foc(self, *args, **kwargs): return self._array_converter(self._p4_pix2foc, None, *args, **kwargs) p4_pix2foc.__doc__ = """ Convert pixel coordinates to focal plane coordinates using `Paper IV`_ table-lookup distortion correction. %s **Exceptions:** - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid coordinate transformation parameters. """ % (__.TWO_OR_THREE_ARGS('focal coordinates', '2', 8)) def det2im(self, *args, **kwargs): return self._array_converter(self._det2im, None, *args, **kwargs) det2im.__doc__ = """ Convert detector coordinates to image plane coordinates using `Paper IV`_ table-lookup distortion correction. %s **Exceptions:** - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid coordinate transformation parameters. """ % (__.TWO_OR_THREE_ARGS('pixel coordinates', '2', 8)) def sip_pix2foc(self, *args, **kwargs): if self.sip is None: if len(args) == 2: return args[0] elif len(args) == 3: return args[:2] else: raise TypeError("Wrong number of arguments") return self._array_converter(self.sip.pix2foc, None, *args, **kwargs) sip_pix2foc.__doc__ = """ Convert pixel coordinates to focal plane coordinates using the `SIP`_ polynomial distortion convention. `Paper IV`_ table lookup distortion correction is not applied, even if that information existed in the FITS file that initialized this :class:`~pywcs.WCS` object. To correct for that, use `~pywcs.WCS.pix2foc` or `~pywcs.WCS.p4_pix2foc`. %s **Exceptions:** - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid coordinate transformation parameters. """ % (__.TWO_OR_THREE_ARGS('focal coordinates', '2', 8)) def sip_foc2pix(self, *args, **kwargs): if self.sip is None: if len(args) == 2: return args[0] elif len(args) == 3: return args[:2] else: raise TypeError("Wrong number of arguments") return self._array_converter(self.sip.foc2pix, None, *args, **kwargs) sip_foc2pix.__doc__ = """ Convert focal plane coordinates to pixel coordinates using the `SIP`_ polynomial distortion convention. `Paper IV`_ table lookup distortion correction is not applied, even if that information existed in the FITS file that initialized this `~pywcs.WCS` object. %s **Exceptions:** - `MemoryError`: Memory allocation failed. - `ValueError`: Invalid coordinate transformation parameters. """ % (__.TWO_OR_THREE_ARGS('pixel coordinates', '2', 8)) def to_fits(self, relax=False, wkey=None): """ Generate a `pyfits.HDUList` object with all of the information stored in this object. This should be logically identical to the input FITS file, but it will be normalized in a number of ways. See `WCS.to_header` for some warnings about the output produced. - *relax*: Degree of permissiveness: - `False`: Recognize only FITS keywords defined by the published WCS standard. - `True`: Admit all recognized informal extensions of the WCS standard. - `int`: a bit field selecting specific extensions to write. See :ref:`relaxwrite` for details. Returns a `pyfits.HDUList` object. """ if not HAS_PYFITS: raise ImportError( "pyfits is required to generate a FITS file") header = self.to_header(relax=relax, wkey=wkey) hdu = pyfits.PrimaryHDU(header=header) hdulist = pyfits.HDUList(hdu) self._write_det2im(hdulist) self._write_distortion_kw(hdulist) return hdulist def to_header(self, relax=False, wkey=None): """ Generate a `pyfits.Header` object with the basic WCS and SIP information stored in this object. This should be logically identical to the input FITS file, but it will be normalized in a number of ways. .. warning:: This function does not write out Paper IV distortion information, since that requires multiple FITS header data units. To get a full representation of everything in this object, use `to_fits`. The output header will almost certainly differ from the input in a number of respects: 1. The output header only contains WCS-related keywords. In particular, it does not contain syntactically-required keywords such as ``SIMPLE``, ``NAXIS``, ``BITPIX``, or ``END``. 2. Deprecated (e.g. ``CROTAn``) or non-standard usage will be translated to standard (this is partially dependent on whether `fix` was applied). 3. Quantities will be converted to the units used internally, basically SI with the addition of degrees. 4. Floating-point quantities may be given to a different decimal precision. 5. Elements of the ``PCi_j`` matrix will be written if and only if they differ from the unit matrix. Thus, if the matrix is unity then no elements will be written. 6. Additional keywords such as ``WCSAXES``, ``CUNITia``, ``LONPOLEa`` and ``LATPOLEa`` may appear. 7. The original keycomments will be lost, although `to_header` tries hard to write meaningful comments. 8. Keyword order may be changed. - *relax*: Degree of permissiveness: - `False`: Recognize only FITS keywords defined by the published WCS standard. - `True`: Admit all recognized informal extensions of the WCS standard. - `int`: a bit field selecting specific extensions to write. See :ref:`relaxwrite` for details. - *wkey*: A string. The name of a particular WCS transform to use. This may be either ``' '`` or ``'A'``-``'Z'`` and corresponds to the ``"a"`` part of the ``CTYPEia`` cards. Returns a `pyfits.Header` object. """ if wkey: self.wcs.alt = wkey if not HAS_PYFITS: raise ImportError( "pyfits is required to generate a FITS header") dosip = False if (relax == True or relax == WCSHDO_all or (relax & WCSHDO_SIP)): dosip = True if relax not in (True, False): relax &= ~WCSHDO_SIP if self.wcs is not None: header_string = self.wcs.to_header(relax) cards = pyfits.CardList() for i in range(0, len(header_string), 80): card_string = header_string[i:i+80] if pyfits.__version__[0] >= '3': card = pyfits.Card.fromstring(card_string) else: card = pyfits.Card() card.fromstring(card_string) cards.append(card) header = pyfits.Header(cards) else: header = pyfits.Header() if dosip and self.sip is not None: for key, val in self._write_sip_kw().items(): header.update(key, val) return header def to_header_string(self, relax=False): """ Identical to `to_header`, but returns a string containing the header cards. """ return str(self.to_header(relax)) def __reduce__(self): """ Support pickling of WCS objects. This is done by serializing to an in-memory FITS file and dumping that as a string. """ if not HAS_PYFITS: raise ImportError( "pyfits is required for pickling support") hdulist = self.to_fits(relax=True) buffer = BytesIO() hdulist.writeto(buffer) return (_unpickle_wcs, (self.__class__, self.__dict__, buffer.getvalue(),)) def footprint_to_file(self, filename=None, color='green', width=2): """ Writes out a `ds9`_ style regions file. It can be loaded directly by `ds9`_. - *filename*: string. Output file name - default is ``'footprint.reg'`` - *color*: string. Color to use when plotting the line. - *width*: int. Width of the region line. """ if not filename: filename = 'footprint.reg' comments = '# Region file format: DS9 version 4.0 \n' comments += '# global color=green font="helvetica 12 bold select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source\n' f = open(filename, 'a') f.write(comments) f.write('linear\n') f.write('polygon(') self.footprint.tofile(f, sep=',') f.write(') # color=%s, width=%d \n' % (color, width)) f.close() def get_naxis(self, header=None): self.naxis1 = 0.0 self.naxis2 = 0.0 if header != None and not isinstance(header, string_types): self.naxis1 = header.get('NAXIS1', 0.0) self.naxis2 = header.get('NAXIS2', 0.0) def rotateCD(self, theta): _theta = DEGTORAD(theta) _mrot = np.zeros(shape=(2,2),dtype=np.double) _mrot[0] = (np.cos(_theta),np.sin(_theta)) _mrot[1] = (-np.sin(_theta),np.cos(_theta)) new_cd = np.dot(self.wcs.cd, _mrot) self.wcs.cd = new_cd def printwcs(self): """ Temporary function for internal use. """ print('WCS Keywords\n') if hasattr(self.wcs, 'cd'): print('CD_11 CD_12: %r %r' % (self.wcs.cd[0,0], self.wcs.cd[0,1])) print('CD_21 CD_22: %r %r' % (self.wcs.cd[1,0], self.wcs.cd[1,1])) print('CRVAL : %r %r' % (self.wcs.crval[0], self.wcs.crval[1])) print('CRPIX : %r %r' % (self.wcs.crpix[0], self.wcs.crpix[1])) print('NAXIS : %r %r' % (self.naxis1, self.naxis2)) def get_axis_types(self): """ ``list of dicts`` Similar to `self.wcsprm.axis_types <_pywcs._Wcsprm.axis_types>` but provides the information in a more Python-friendly format. Returns a list of dictionaries, one for each axis, each containing attributes about the type of that axis. Each dictionary has the following keys: - 'coordinate_type': - None: Non-specific coordinate type. - 'stokes': Stokes coordinate. - 'celestial': Celestial coordinate (including ``CUBEFACE``). - 'spectral': Spectral coordinate. - 'scale': - 'linear': Linear axis. - 'quantized': Quantized axis (``STOKES``, ``CUBEFACE``). - 'non-linear celestial': Non-linear celestial axis. - 'non-linear spectral': Non-linear spectral axis. - 'logarithmic': Logarithmic axis. - 'tabular': Tabular axis. - 'group' - Group number, e.g. lookup table number - 'number' - For celestial axes: - 0: Longitude coordinate. - 1: Latitude coordinate. - 2: ``CUBEFACE`` number. - For lookup tables: - the axis number in a multidimensional table. ``CTYPEia`` in ``"4-3"`` form with unrecognized algorithm code will generate an error. """ if self.wcs is None: raise AttributeError( "This WCS object does not have a wcsprm object.") coordinate_type_map = { 0: None, 1: 'stokes', 2: 'celestial', 3: 'spectral' } scale_map = { 0: 'linear', 1: 'quantized', 2: 'non-linear celestial', 3: 'non-linear spectral', 4: 'logarithmic', 5: 'tabular' } result = [] for axis_type in self.wcs.axis_types: subresult = {} coordinate_type = (axis_type // 1000) % 10 subresult['coordinate_type'] = coordinate_type_map[coordinate_type] scale = (axis_type // 100) % 10 subresult['scale'] = scale_map[scale] group = (axis_type // 10) % 10 subresult['group'] = group number = axis_type % 10 subresult['number'] = number result.append(subresult) return result def DEGTORAD(deg): return (deg * np.pi / 180.) def RADTODEG(rad): return (rad * 180. / np.pi) def find_all_wcs(header, relax=False, keysel=None): """ Find all the WCS transformations in the given header. - *header*: A string or PyFITS header object. - *relax*: Degree of permissiveness: - `False`: Recognize only FITS keywords defined by the published WCS standard. - `True`: Admit all recognized informal extensions of the WCS standard. - `int`: a bit field selecting specific extensions to accept. See :ref:`relaxread` for details. - *keysel*: A list of flags used to select the keyword types considered by wcslib. When ``None``, only the standard image header keywords are considered (and the underlying wcspih() C function is called). To use binary table image array or pixel list keywords, *keysel* must be set. Each element in the list should be one of the following strings: - 'image': Image header keywords - 'binary': Binary table image array keywords - 'pixel': Pixel list keywords Keywords such as ``EQUIna`` or ``RFRQna`` that are common to binary table image arrays and pixel lists (including ``WCSNna`` and ``TWCSna``) are selected by both 'binary' and 'pixel'. Returns a list of `WCS` objects. """ if isinstance(header, string_types): header_string = header elif HAS_PYFITS: assert isinstance(header, pyfits.Header) header_string = repr(header.ascard) else: raise TypeError( "header must be a string or pyfits.Header object") keysel_flags = _parse_keysel(keysel) wcsprms = _pywcs.find_all_wcs(header_string, relax, keysel_flags) result = [] for wcsprm in wcsprms: subresult = WCS() subresult.wcs = wcsprm result.append(subresult) return result def _unpickle_wcs(cls, dct, fits_data): """ Unpickles a WCS object from a serialized FITS string. """ if not HAS_PYFITS: raise ImportError( "pyfits is required for pickling support") self = cls.__new__(cls) self.__dict__.update(dct) buffer = BytesIO(fits_data) hdulist = pyfits.open(buffer) WCS.__init__(self, hdulist[0].header, hdulist) return self pywcs-1.12/lib/pywcs/hooks.py0000644001153600020070000000231212310355627020255 0ustar cslocumSTSCI\science00000000000000''' To compile another package that wants to link with the C code in pywcs: [build_ext] pre-hook.pywcs = pywcs.hooks.setup [extension=drizzlepac.cdriz] include_dirs = numpy pywcs libraries = pywcs m ''' import os def setup(command_obj) : # warning if we somehow get called when not building a c extension command_name = command_obj.get_command_name() if command_name != 'build_ext': log.warn('%s is meant to be used with the build_ext command only; ' 'it is not for use with the %s command.' % (__name__, command_name)) # get information from pywcs (ourselves) import pywcs pywcslib = pywcs.__path__[0] includes = [os.path.join(pywcslib, 'include'), os.path.join(pywcslib, 'include', 'wcslib')] # each place where the include directory is named exactly "pywcs", # replace it with the include directories computed above for extension in command_obj.extensions: if 'pywcs' not in extension.include_dirs: continue idx = extension.include_dirs.index('pywcs') for inc in includes: extension.include_dirs.insert(idx, inc) extension.include_dirs.remove('pywcs') pywcs-1.12/lib/pywcs/tests/0000755001153600020070000000000012310355732017721 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/lib/pywcs/tests/__init__.py0000644001153600020070000000000112310355627022024 0ustar cslocumSTSCI\science00000000000000 pywcs-1.12/lib/pywcs/tests/data/0000755001153600020070000000000012310355732020632 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/lib/pywcs/tests/data/3d_cd.hdr0000644001153600020070000000241712310355627022314 0ustar cslocumSTSCI\science00000000000000CD1_2 = -3.72E-05 CD1_3 = 0 CD1_1 = -4.12E-05 CUNIT3 = 'nm ' CUNIT2 = 'deg ' CTYPE1 = 'RA---TAN' NAXIS = 3 CTYPE3 = 'AWAV ' CD2_1 = -3.72E-05 CTYPE2 = 'DEC--TAN' CD2_3 = 0 CD2_2 = 4.12E-05 CUNIT1 = 'deg ' CD3_1 = 0 CD3_2 = 0 CD3_3 = 0.2 pywcs-1.12/lib/pywcs/tests/data/dist.fits0000644001153600020070000005500012310355627022467 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / conforms to FITS standard BITPIX = 8 / array data type NAXIS = 0 / number of array dimensions EXTEND = T WCSAXES = 2 / Number of coordinate axes CRPIX1 = 0 / Pixel coordinate of reference point CRPIX2 = 0 / Pixel coordinate of reference point CDELT1 = 1 / Coordinate increment at reference point CDELT2 = 1 / Coordinate increment at reference point CRVAL1 = 0 / Coordinate value at reference point CRVAL2 = 0 / Coordinate value at reference point LATPOLE = 90 / [deg] Native latitude of celestial pole RESTFRQ = 0 / [Hz] Line rest frequency RESTWAV = 0 / [Hz] Line rest wavelength AXISCORR= 2 D2IMEXT = 'test_d2i.fits' END XTENSION= 'IMAGE ' / Image extension BITPIX = -32 / array data type NAXIS = 1 / number of array dimensions NAXIS1 = 4096 PCOUNT = 0 / number of parameters GCOUNT = 1 / number of groups EXTNAME = 'D2IMARR ' / extension name CRPIX1 = 2048.0 CRPIX2 = 0.0 CRVAL1 = 2048.0 CRVAL2 = 0.0 CDELT1 = 1.0 CDELT2 = 1.0 END ¹}J¹Š!Žºì?º\A8º yݺÈ/jºðÕ¨» ¹b» 6 »ÃD»¾»T9» ¢ñ»‡;»*y^»E»]Bw»k»m C»b£»NØc»6»³}»»#:»?o»_ïn»xõ»ƒï»€Äq»[Gý»¿0ºµ½ºHº˜º(㲺±ý¸»#Ÿ:»E½»1*i»n5Àº©Q§;4Eï;-w¼;+Y;(A ;$úÅ;"˜û;R!;+Ã;(À; 8ž;(H:ú…õ:ñ½e:íÞà:è6<:åõ:ÛâZ:ÏD3:·TÄ:šnÂ:p˜¸:!¿9௴9’ =98 zd¸Óa¹e­²¹åi©ºCÉẓò#º¿p¸ºãw1» ,P» õk»Ô»¾»‡»Xl»X3»$ØY»=KS»X b»gü»n¬»fYM»Tö9»= œ»"ÕÉ»X+»þ°»7»WŽ>»sRÄ»‚·»ƒU»hnû»-Ö{ºÕ±ƒºgaøºÕܺ…ºÀ‚»Ϻ»E,»2í[»Y4±»33y;dÍ;.¦(;+Ì ;)%Ç;%gî;#x¬; 1Ò;O;uš;Zm;ç©:þéÈ:óa :ïžA:é:åõ:ßa:Ó*Ã:¿7[:¢/T:‚Ȧ:3X”9õ¨F9§Ð97ç48|RȸŒÑ.¹=”๾á˺+R‹º…÷º´ôoºØ²k»¦™»Cž»´»0Ÿ».×» “»f軟»5ࣻQÁ^»d}S»n¬»ieŠ»Z–\»C±»)`Ç»4+»ÀŒ»/±Ê»N‡»m4׶»„Q»s^»?…ýº÷ú:ºˆnwºæ#º*ÖºkºöA»>Jq»:O»D/»mlÛ:Áé;1jË;,>‘;*s‰;&GŸ;#åÔ;!‚;°; ~;Ï; ’;¦Î:ôh:ð±Ü:ëS|:åõ:áúÏ:Ö©‡:Æ`:©Nß:ŒÖæ:H˜±:Í9»üb9aØZ8¶–·û«Î¹vF¹¢®Éº¦üºoøº©¦ÊºÏ0ºûR&»°Ç» æz»IJ»¾»ˆ» è$»Ι»/Õ»Jœ »`‰^»l}w»lå»_\*»JAð»0Œd»ÄÌ»jx»(xN»F+>»eñ£»|ãÏ»„e­»|sT»O­“» ûȺ ¥Uº3þÖºùº@b»ºÍq¡»0®¯»B8Ö»5ü»z˜7g©À;4é;,Ïô;*æù;''P;$£‰;!ñ3;7Ð;Õ;Ù0; Øó;Ø·:÷æÔ:ñ–í:ìP:ææ­:äÒH:ÙËC:ËU„:±ß:”®½:_Eè:È›9Ðôö9‚P8îÇ7'ºƒ¸ýZ¹ƒ$pº®hºV#¼ºkºÆOºíW» §» ¥Û»3»¾»äg»û7»o®»(ñÿ»C1Z»\*ì»jsc»mh¾»cº0»P_Ä»7Î_»…»ßÙ»!zÈ»=u »]ÀT»w¥©»ƒ²½»l+»^šC» UIº½*ŠºO1ºø‚º!æzº©A2»â›»F ‘»1*i»i:õºàZÛ;0W;-¯¥;+Y;(yˆ;%;"Ðä;Š ;³¾;˜’; àX;˜:ûe˜:ò-6:îN²:è¤L:åõ:ÜÁþ:Ћ¥:¹ :œ. :uÖ:%ßï9åí‰9—I9š78(nиÃg5¹[2¹Úÿìº=¬hºs–º¼ÑκàÉ»ÜÚ» e=»e»¾»Öž»‰»xŽ»#ˆä»;q0»V…»gu»n¬»g8ò»V}š»>Ëç»$•»Çþ»¯9»5—λU'=»qËf»‚`ú»ƒW2»k\/»2‘;*«r;&ˆ;$¾;!Ik;2;Bf;‰¡; ‰d; :õG¶:ðèe:ëS|:åõ:âÚs:׉+:ÇfÔ:«Q5:þ:N¶*: L9Á:79lT8ÄÌ·§Îm¹y)¹šZFºi%ºhúöº¦˜ ºÌŽº÷Ó˜»†O» VK»ü›»¾»П» »¶–»-ˆw»H¤×»_qÒ»l ¦»l‹¶»`s·»KÉM»2ƒ“»D»Þr»&¹»Cü!»cúp»{”W»„I¹»~H‹»SÓÚ»‘⺧|Õº:MºØ¥º8¢ºÃxo»,ˆg»C¡^»3´*»w{¹Ýê&;5ü;-Ý;+œ;'kº;$£‰;");[;ñ§;I; HÅ;H‰:øÆx:ñ–í:ìÿ!:çV}:åB:Ú;:̤ú:³ÕË:–ÝÖ:ec_:ÄP9Ö2Ë9‡ŽS9$º7§ºƒ¸ï¹z§€¹ö䂺PCºš\bºÃÑ6ºéØŠ» >» ­»¢è»¾»~f»S|»X"»'w“»A:)»ZÞ(»i»“»mØ»d™Ò»Qç"»9¦»ã»ÔŸ»»~»;}Ô»[ª±»vV3»ƒ^ໂ™»aàè»$ëcºÅgºVLº —lºRº „Ñ»ܰ»F c»1-à»cý »R³;,';-çŽ;+…Ä;(±r;%;#Í;Áò;#;ÕÞ; z¯;ë:ü°Œ:ò::è¤L:åõ:Ý¡ :ÑkG:»ä:íP:{a:*> 9ë+]9œ†æ9(E8Dc;¸®oܹP¶Z¹Ð„=º7ŽíºŒõºº2âºÝðÞ»d» Ó¿»ÔÒ»窻ž¶»Ê »l6»"9n»9±ê»Tý¤»f<Ñ»n¬»gåž»W÷!»@‹,»&@»7л_û3 ž»RÔP»pD»ñ(»ƒŸr»n3»6Òeºæ]ºzyƺ(µº ý󺂲z»~ »B}-»6d¾»NI"»UA¬;~ê;/ÑÕ;+òì;*«;%×Á;#¾x; ¡¥;âó;U=;:;¶;„Ð:ówY:ð}å:êW:åõ:ài:Ôê :µè:¥Ïå:ˆz:=Ô=:ø9±x9LÞ…8šиQ½¹-í³¹°ª©º #âº}óõº¯¶šºÔý»( »D÷»ÝŠ»TÓ»¿»xg» § »mÒ»2AÛ»NBλb¸¹»m]5»j÷8»],λG+»,ßX»ós»Óœ»+÷C»J‰ñ»iÊ»G}»„mG»x]õ»G˜t»Î…º“Éκ(—Šº ȺT%ºá‹¸»7öj»>¦»;䟻z«:VŒ™;3*;,`;*ã\;&·r;$U§;!U;¢U;¢;ùt; ù5;±Z:ö'Y:ñX6:믒:æí:ãº:ØhÍ:ȶI:­€M:Ìz:T–ð: Ê©9Æx 9uªË8Ò ·'â¹ | ¹‘ຠ+Pºb` º£‰QºÊ_ºôU »Nf» Æ»SX»¾»˜¶» JÔ»Ÿ »,»FÒÀ»^ZE»kÕ»lÓN»a‹D»MP«»4Og»cº»n¡»$ù½»AÍ »bA»zD⻄'†»€ê»W©»(º®yþºA]º¸Iº0+人¼»(6[»DðÓ»2d´»sÖºc$ñ;5!);-?Æ;+P„;'Û‹;$ÂÐ;"a;ï/;ƒã;¸Ö; ¸™;¸Z:ù¦:ñ–í:ínô:çÆN:å±ê:Û€:Íôo:µ•:˜¯:kY¢:"9Ûpž9ŒÌ'9  c7àþ†¸á ä¹p+Ô¹î(ºIèɺ—M¤ºÁ¢ºæ†¥» ^w» …»,0»¾»F}»ÈX»@–»&(»?Bù»Y޳»hÛð»n¬»eyv»Sn€»;Lî»!» ˆ»Nt»9†¥»Y³‚»tÚ~»ƒ »‚‘`»e'“»)wGºÍcº^£º 6UºÂ}º˜Ÿ»ÖÅ»EÓz»2 „»^«¨»A3;#̘;.6>;+½­;(é[;%/ø;#@·;ùÜ;“c; Ç; êƒ;w¾:þ:ó Ù:ï.U:è¤L:åõ:ÞD:ÒJë:½/ü:Ÿÿ¶:€):.œP9ði19¡Äº9/B38`W§¸šÎ°¹F:­¹Ç <º1qtº‰vxº·“÷ºÛQò»=ï» ¨»D¤»“»fÌ»{»Tª» éù»7ØI»SvF»e].»n¬»hX»YF–»B)Õ»'¥ž»§¡»O»1©o»P¥7»n¼¨»—»ƒ×\»pߨ»;^¾ºï;Ѻ‚¿º†îº _ ºx+Ó»@7»@½å»8Wm»Hþ5»cú:ã’¶;0Šö;,*Ö;*;“;&©;#¾x; Ù;RÅ;Å;©ä;©¨;,:óç-:ð±Ü:ë6©:åõ:áö:ÕÉ­:Äu/:§-:Š¥d:C:N+9¶½L9WZ-8¨¸'Îm¹#r¹©­‹ºæ ºvöÖº¬¶?ºÑº¹ºþÑ…»xÑ» vŽ»Œ¼»¾»@~» Çü»]»0—»Lƒˆ»a¡,»líd»kžò»^D[»Hº3».žŸ»Ó»Y»*7ý»HZØ»géH»~/ð»„mG»z{°»K†Ô» dŸºš‡º-ßóº-%ºJ º×â»4wÝ»@y$»8cŽ»{Ž 9Ü”Â;4 ¸;,—þ;*æù;&ïZ;$;!¹>;ÿÛ;é;iE; i ;Y:÷ÿ:ñ–í:ìf:ævÁ:äb[:ÙHq:Ê¿:¯¯e:’‹Á:YÔÄ:I69˵Þ9|§å8à8²I¹~í¹Š#1ºíyº\B¦º z”ºÈ/íºðÖ{» ¹‰» 5ï»Ã*»¾»TS» £»‡|»*y¹»Ey»]B¸»kF»m 7»b¢Ð»NØ »6­»³/»Ï»#:w»?ñ»_ïï»xõm»ƒï»€ÄJ»[G »¾ºµ»äºHwº—ìº(åBº±ÿ­»# A»E¥»1*i»n6Ôº©ES;4FÐ;-w¯;+Y;(A“;$ú¸;"˜î;R;+ž;(§; 8x;(.:ú…Ã:ñ½K:íÞÆ:è6":åõ:Ûâ):ÏCã:·TY:šnW:p—v:!€²9à®r9’ û9 8 s¯¸Ó¨¹e°(¹åk·ºCËPº“òöº¿qWºãwè» ,ž» õQ»Ó뻾»”»X†»Xg»$ا»=KÇ»X ¼»güN»n¬»fY»TõÞ»= 4»"Õb»X»þÿ»7v»WŽÌ»sS »‚·%»ƒA»hn8»-ÕwºÕ¯–ºg_ñºÕ@º…èºÂF»ÐÚ»Ej»2í(»Y5ê»3/P;g—;.¦;+Ì ;)%¯;%gâ;#xŸ; 1Å;5;u;ZT;ç:þé–:óa :ïž(:éu:åõ:ß`ë:Ó*’:¿6ö:¢.Ï:‚È:3WR9õ§9§Ž97ä±8|L¸ŒÔt¹=–ƒ¹¾ãÖº+Sùº…÷麴õ ºØ³ »§»C‘»´v»0Ÿ».ä» ­»g»Ÿ`»5á»QÁÆ»d}Š»n¬»ieT»Z– »C±3»)`_»3÷»ÀÙ»/²>»N‡‚»m5J»€×Ü»„D»s~û?…º÷ø3ºˆm%ºåº+BºkBºöÅ»>K!»:Nœ»D02»mk :Áð¥;1j˜;,>‘;*s|;&G’;#åÈ;!v;—; q;¶; z;¦´:ôgá:ð±Ü:ëS|:åõ:áú:Ö©T:Æ:©N{:ŒÖi:H—::̸9»û 9aÕÖ8¶;·û¿x¹wê¹¢°nº¨6ºoù¸º©§ºÏͺûR÷»°º» æ_»Ä¥»¾»•» èX»Îæ»/1»Jœ}»`‰ »l}“»lÉ»_[ç»JA‘»0‹ê»Ä»jŸ»(x¶»F+À»eò»|仄e´»|rß»O¬œ» ú¸º £Ðº3ýjºøÍº@eºÍt »0¯®»B8j»5ü»z˜à7m¢;4é\;,Ïè;*æù;''C;$£‰;!ñ';7Ä;»;Ù; ØÛ;Øž:÷æ£:ñ–í:ì7:ææ“:äÒ.:ÙË):ËU9:±Þˆ:”®@:_D‰:ÇÒ9Ðó³9‚O=8íþl7'’@¸ý¡¹ƒ&º¯¤ºV%-ºkÖºÆÒºíWë» λ ¥Á»2ü»¾»ä‚»û^»oð»(ò[»C1Ï»\+,»jsŠ»mh£»c¹û»P_g»7Íõ»'»ßç»!{0»=u}»]ÀÖ»w¥÷»ƒ²Ñ»l»^™‚» T9º½(ѺO’º÷áº!è'º©CK»ãлF v»1*i»i<7ºàN…;0Xp;-¯˜;+Y;(y|;%;"Ð×;‰ý;³¦;˜y; à3;˜:ûef:ò-:îN™:è¤L:åõ:ÜÁË:Ћr:¹§:œ-¥:uÕ`:%Þô9åì[9—Gå9—´8(h¸Ãl ¹[4|¹Û`º=­Õºtgº¼Òkºàf»Ý)» e"»d滾»Ö«»–»xû#‰3»;q›»V…^»gª»n¬»g8½»V}<»>Ë{»$”©»Çã»¯Š»5˜G»U'Ì»qË»‚a»ƒW»k[‡»2;1ºÝü'ºpÛ†ºÉ€º[º‰±B» ½"»CöÞ»4¥ »SÀ.»E¿Ÿ;ôÀ;/)ñ;+Ì ;)•€;%ŸÊ;#°ˆ; i®;s;åS;Ê%;tÖ:ÿÉ8:óa :ð ù:é€F:åõ:ßù:Ô 4:Àö=:¤;:…fú:8•<9úäî9¬@x9B`„8Œ x¸{µ¦¹6™f¹·©kº%bóº‚y[º²V!ºÖ0›»ç»»D÷»5¨»0Ÿ»öú»°]»‡x»‡Ô»4»P~»cæ»mÍ"»jD÷»[å»EVy»+§»š»³v»-»»LS»k‰Â»€0"»„G-»uö`»C©$»ZJºŽ˺#Xºkûº_c+ºë™ø»;‘;*«e;&{;$±;!I^;2i;BZ;‰‡; ‰K;†:õGƒ:ðèL:ëS|:åõ:âÚA:׈ø:Çf‰:«P¸::N´Ë: KS9Á9 9lQ©8Ä ©·§â¹z̹š\Qºj_ºhü›º¦˜ÄºÌŽ¢º÷Ôj»†\» V1»ü»¾»Ь» µ»¶×»-ˆÓ»H¥N»_r»l À»l‹›»`st»KÈï»2ƒ»ô»Þ»&¹o»Cü¨»cúé»{”¨»„I¿»~H!»SÒã»Òº§{6º:âºØpº8 …ºÃz‰»,‰f»C¡ »3´z»wR¹Ý²];5‘;-Ð;+Ž;'k ;$£‰;");B;ñ;Hé; H¬;Hp:øÆG:ñ–í:ìÿ:çVd:åAÿ:Ú:ú:̤¯:³Õh:–ÝX:eb:ÃV9Ö19‡'9"a7§§¹¸ï e¹z©õ¹öæºP³ºš]ºÃѹºéÙ[» >P» “»¢Î»¾»~t»S¤»Xd»'wâ»A: »ZÞw»i»Ç»mØv»d™ž»QæÄ»9;»„»Ô‘»»é»;~N»[«)»vVƒ»ƒ^ó»‚x»aà%»$êSºÅzºV­º –˺”º †ê»Ýä»F q»1-«»cþb»M2;,%;-ç;+…·;(±e;%;#À;Áæ;#w;ÕÑ; z–;Ò:ü°A:òœî:î¾j:è¤L:åõ:Ý¡o:Ñk:»g:ìë:{5:*=&9ë*09œ…¹9(Cˆ8D\ø¸®tǹP¸Ï¹Ð†´º7\ºŒõغº3ºÝñ{»³» Ó²»Ô¸»ç»žÃ»Ê­»lx»"9½»9²S»Tþ»f=»n¬»gåv»WöÓ»@ŠÄ»&â»7µ»`»3¡»RÔÖ»pDd»ñB»ƒŸe»n2Y»6ÑKºæ}Vºzw‹º'±º þ”º‚´'»M»B}˜»6dR»NJp»U>_;è;/Ѭ;+òà;*ž;%׳;#¾x; ¡—;âÙ;U$;9÷;‘;„ª:ów@:ð}Ì:êVÓ:åõ:àhî:ÔéØ:µ„:¥Ï‚:ˆä:=Ó:a9±~L9LÜ+8š®¸QÆõ¹-ð)¹°¬Lº %º}õ˜º¯·7ºÔ€»(t»D÷»Ýc»TÆ»¿»xt» §Ô»n »2BF»NC7»b¸ú»m]O»j÷»],Ž»Gû,Þñ»ó@»ÓÒ»+÷¯»JŠw»iÊ{»GÀ»„mG»x]b»G—ƒ»Íkº“Èqº(–Rº ýºTÞºáŽ"»7÷@»>¥•»;å…»zM:V¡’;3)ß;,`;*ãN;&·d;$Uš;!G;¢;;¡þ;ùY; ù;±5:ö'':ñX:ë¯y:æÕ:ã¹å:Øhœ:ȵþ:­Ï:Ì:T•Ä: Éà9ÆvÞ9u©98Òà·( h¹ }¯¹‘Ÿîº ,ŠºbaŽº£ŠºÊ_‰ºôUÚ»Nt» Æ»S?»¾»˜Ã» Jû»ŸJ»,t»FÓ(»^Z‡»kï»lÓ@»a‹»MPQ»4O»cl»n»»$ú%»AÍ»bº»zE2»„'“»€µ»WÅ»&뺮xQºA®º¸º0-Ǻº¾'»(7u»Dð‚»2e»sýºc ;5!E;-?¹;+Pw;'Ûq;$ÂÃ;"`ø;ï;ƒ»;¸»; ¸~;¸B:ù¥ê:ñ–í:ínÚ:çÆ5:å±Ò:ÛN:Íô$:µ”®:˜®¬:kXv:!‡9Ûor9ŒÊû9 ž 7àñÿ¸á*¹p.J¹î*)ºIê8º—N[ºÁ¢ ºæ‡\» ^¬» …e», »¾»FŠ»Èr»@×»&(l»?Cn»Y»hÜ$»n¬»eyB»Sn&»;L†»!³» {»NÁ»9‡»Y³ú»tÚÜ»ƒ »‚‘>»e&Ë»)v:ºÍa º^¡wº 5´ºÿº˜ æ»×ù»EÓ‡»2 O»^¬ø»;²;#Ζ;.6#;+½Ÿ;(éM;%/ë;#@©;ùÏ;“I; º; êh;w£:ýÿ´:ó À:ï.<:è¤L:åõ:Þ:ÒJ¹:½/~:Ÿÿ8:€(„:.›V9ðh9¡Ã9/@¢8`Qd¸šÑö¹F=#¹Ç¢Gº1r⺉wIº·””ºÛR»>>» ›»DŠ»†»fÚ»{™»Të» êG»7Ø¿»Sv¡»e]b»n¬»h1»YFH»B){»'¥C»§‡»œ»1©ã»P¥¹»n½»¿»ƒ×N»pß7»;]Àºï9¸º‚¾"º…⺠_«ºx.ù»Ay»@¾Q»8Vô»Hÿ\»c¬:ãšÉ;0ŠÁ;,*È;*;†;&œ;#¾x; Ù€;Rª;Äõ;©É;©Œ;,e:óç:ð±Ü:ë6v:åõ:áÅ:ÕÉ|:ÄtË:§ŽÈ:ФÎ:Cä:Mb9¶¼ 9WWÔ8¨ã¸'ØB¹#t|¹©¯/ºçGºvøyº¬¶öºÑ»VºþÒX»xû vs»Œ¯»¾»@‹» È0»«»0—ê»Lƒï»a¡n»lí~»kžÌ»^D»H¹Ù».ž7»Ò㻀»*8d»H[Y»gé½»~02»„mG»z{8»K…â» c…ºšôº-Þ{º-[ºJ\º×‚K»4x³»@x¸»8d!»{«9ÜÇí;4 ƒ;,—ò;*æù;&ïM;$ƒ;!¹0;ÿÏ;Ï;i+; hî;Xï:÷Ê:ñ–í:ìJ:æv¦:äbB:ÙH?:Ês:¯®é:’‹\:YÓ˜:Hn9Ë´²9|¦U8à²I¹€‘¹Š$Ôº\Dº {KºÈ0nºð×L» ¹±» 5Իû¾»Tn» £@»‡¾»*z»Eá»]Bú»kl»m )»b¢»N×®»6E»²á»Ü»#:Þ»?žs»_ðq»xõº»ƒïª»€Ä#»[FC»½ºµººHʺ—·º(æðº²Æ»#¡[»E‰»1*i»n7ûº©8;4GÂ;-w¢;+Y;(A†;$ú«;"˜á;R;+u;(Œ; 8P;(:ú…Ž:ñ½1:íÞ¬:è6:åõ:Ûáò:ÏC˜:·Sõ:šmó:p–J:!¸9à­F9’Ï9±8 mk¸Óï¹e²¹åmúC̾º“óȺ¿qôºãxŸ» ,í» õ6»Óû¾»¢»X¡»X›»$Øö»=L>»X »gü‚»n¬»fXå»Tõ„»= Ì»"Ôú»W÷»ÿM»7ë»W\»sSz»‚·8»ƒ.»hmv»-ÔtºÕ­©ºg]׺ÔŸº†¿ºÄ)»Ò»E®»2ìó»Y7:»3*Ú;j”;.¥ô;+Ì ;)%“;%gÔ;#x’; 1¸;;uf;Z9;çu:þéa:óa :ïž :éY:åõ:ß`´:Ó*[:¿6‹:¢.Q:‚Ço:3V&9õ¥Ø9§a97âW8|EиŒ×»¹=˜'¹¾åäº+Uiº…ø¼º´õªºØ³¦»§k»C„»´[»0Ÿ».ñ» Ç»gQ»Ÿ¢»5á»QÂ/»d}¾»n¬»ie!»Z•½»C°Ù»)_ø»3ûÁ'»/²³»N‡ø»m5¤»€Ø»„7»s~'»?„º÷ö,ºˆkÓºäº+­ºkgºöJ»>KÜ»:N$»D1Y»mi:Áø¸;1jc;,>‘;*so;&G…;#åº;!h;Â|; d;›; ^;¦š:ôgª:ð±Ü:ëS|:åõ:áúh:Ö©:ÆÄ:©N:ŒÕâ:H•Û:Ëð9»ùó9aÓ{8¶·ûÓ!¹y¹¢²º©pºoû\º©¨8ºÏkºûSË»°­» æE»Ę»¾»¢» è»Ï6»/Œ»Jœô»`‰á»l}­»l°»_[¦»JA7»0‹v»Ä1»jÆ»(y»F,A»eò»|äk»„eº»|rk»O«¥» ù¨º ¢Jº3ûÿºø—º@gXºÍvu»0°­»B7þ»5ý!»z™·7tx;4é';,ÏÚ;*æù;''6;$£‰;!ñ;7¶;¡;Øü; Ø¿;؃:÷æm:ñ–í:ì:ææy:äÒ:ÙË:ËTé:±Þ:”­º:_C:Æû9Ðò‡9‚N8íûK7'l«¸ý繃'·º°ÞºV&›ºlŽºÆUºíX½» ö» ¥§»2⻾»䜻û†»p2»(ò·»C2F»\+m»js²»mh‰»c¹Ç»P_ »7ͻ̻ßô»!{˜»=uò»]ÁX»w¦F»ƒ²ä»kÝ»^˜¾» S(º½'ºOóº÷@º!éÕº©Ed»å»F [»1*i»i=xºàAO;0Yb;-¯‹;+Y;(yn;%;"ÐÊ;‰ð;³Š;˜^; à ;—å:ûe0:ò-:îN~:è¤L:åõ:ÜÁ–:Ћ=:¹;:œ-9:uÔ:%Ýè9åë9—F£9•Z8(a׸Ãq ¹[6ò¹ÛÔº=¯Fºu9º¼Óºà‘»Ýw» e»dÌ»¾»Ö¸»£»xø»#‰‚»;r»V…»»gÞ»n¬»g8‰»V|â»>Ë»$”A»ÇÉ»¯Ø»5˜¼»U(Z»qÌ»‚a.»ƒW »kZÞ»2:!ºÝú9ºpÙLºÈ}º2º‰²ï» ¾c»C÷!»4¤¡»SÁ~»E»*;÷¼;/)É;+Ì ;)•e;%Ÿ½;#°z; i¡;rì;å7;Ê ;t®:ÿÉ:óa :ð à:é€+:åõ:ßù:Ô ÿ:ÀõÒ:¤Ï:…fY:8“û9úã¬9¬?59B^8Œ¸{¿z¹6› ¹·«º%d-º‚z-º²V¾ºÖ1»è$»D÷»5»0Ÿ»÷»°j»‡¬»ˆ»4ö»Pè»cž»mÍ<»jDû[å3»EV»+?»f»³ª»-»„»LÉ»kŠ)»€0I»„G »uõÒ»C¨;»YGºŽzº#WGºlfº_eåºëœa»;= »‘;*«X;&n;$¤;!IQ;2M;BL;‰m; ‰0;l:õGN:ðè1:ëS|:åõ:âÚ :׈Á:Çf8:«P1:ú:N³R: J}9Á7È9lO$8Ä N·§õ¿¹|p¹š^_ºkšºhþ>º¦™}ºÌ$º÷Õ;»†i» V»ü€»¾»й» é»·»-‰.»H¥Ä»_rU»l Û»l‹»`s3»KÈ•»2‚¥»¦»Þ§»&¹×»Cý*»cû]»{”õ»„IÆ»~Gº»SÑî»Áº§y—º:wºØ:º8 hºÃ|¡»,Še»C ½»3´Ë»w(¹Ýz•;5‘1;-Ã;+€;'k„;$£‰;");';ñs;HÎ; H‘;HU:øÆ:ñ–í:ìþí:çVI:åAå:Ú:á:̤^:³Ôü:–ÜÒ:e`‰:ÂI9Ö0\9‡‹ä9Ý7§“—¸ï ¬¹z¬i¹ö虺P "ºš]кÃÒ<ºéÚ/» >„» x»¢´»¾»~»SË»X¥»'x0»A;»ZÞÅ»i»ý»mØZ»d™i»Qæj»9ŒÓ»*»Ô„»¼Q»;~»[«Ÿ»vVÑ»ƒ_»‚X»aßc»$éBºÅºVº –)ºÖº ‰»ß»F ~»1-t»cÿ¤»G±;,$;-çt;+…©;(±X;%;#³;ÁØ;#\;ÕÄ; z|;·:ü¯ð:òœÔ:î¾P:è¤L:åõ:Ý¡8:Ñjß:ºÿá:ì€:{ò:*<9ë(î9œ„w9(AÚ8DVB¸®y°¹P»C¹Ð‰(º7‘̺Œöªºº4ºÝò»Ž» Ó¤»Ô»ç»žÐ»ʺ»l¹»": »9²»»Tþ[»f=;»n¬»gåO»Wö‚»@ŠY»&‡»7›»`b»3¡‹»RÕX»pD¾»ñ\»ƒŸX»n1±»6Ð;ºæ{OºzuPº&®º ÿ6º‚µÔ»€»B~»6cè»NKÀ»U;;„å;/Ñ„;+òÒ;*;%צ;#¾x; ¡‰;â¾;U ;9Ý;i;„‚:ów%:ð}±:êV:åõ:àhÓ:Ôé¢:µ:¥Ï:ˆC:=ÑÏ:À9±} 9LÙ§8šS¸QÐɹ-òŸ¹°­ñº &Xº}÷;º¯·ÔºÔ»(Ü»D÷»Ý<»T¹»¿»x» ¨ »no»2B®»NCŸ»b¹;»m]j»jöé»],K»GW»,Þ…»ó »Ô»+ø»JŠø»iÊã»H»„mG»x\Ó»G–™»Ì[º“Ǻ(•º 3ºT ˜ºá‹»7ø»>¥»;æi»zï:V¶Š;3)ª;,_û;*ã@;&·V;$UŒ;!:;¢;¡â;ù>; ù;± :ö&ñ:ñX:ë¯^:æº:㹯:Øhe:ȵ®:­I:Ë«:T”‚: É 9Æuœ9u§8Ò„·(0»¹ R¹‘¡ùº -ĺbbÿº£Š¿ºÊ` ºôV¬»N» Åé»S$»¾»˜Ð» K"»ŸŒ»,лFÓ’»^ZÈ»kž »lÓ3»aŠ¿»MOó»4N”»c»nÕ»$ú»Aλb.»zE€»„' »€»WŽé»%Ûº®v±ºAº·Ýº0/ªººÀA»(8»Dð2»2eV»s%ºbí);5!`;-?«;+Pj;'ÛV;$µ;"`ê;îù;ƒ“;¸ ; ¸c;¸&:ù¥´:ñ–í:ínÀ:çÆ:å±¶:Û:ÍóÓ:µ”B:˜®A:kW4: z9Ûn09ŒÉ¹9 ›…7à䔸ár¹p0¾¹î,4ºI맺—OºÁ£#ºæˆ» ^á» …J»+Ỿ»F—»È»A»&(»»?Cå»YP»hÜZ»n¬»ey »SmÈ»;L»!G» m»O»9‡“»Y´p»tÛ6»ƒ *»‚‘»e&»)u6ºÍ_º^Ÿpº 5ºÅº˜¢Ê»Ù.»EÓ”»2 »^®F»61;#Г;.6;+½’;(é@;%/Þ;#@œ;ùÁ;“.; ­; êM;wˆ:ýÿd:ó ¥:ï.":è¤L:åõ:Þ€Ü:ÒJƒ:½.ù:Ÿþ³:€'ã:.šJ9ðfÂ9¡ÂK9/>õ8`J®¸šÕ=¹F?—¹Ç¤Tº1tSº‰xº·•3ºÛS.»>» Ž»Do»y»fç»{³»U-» ê–»7Ù5»Svý»e]–»n¬»h»YEø»B)»'¤å»§m»í»1ª\»P¦@»n½`»滃×A»pÞ›»;\ɺï7²º‚¼Ñº„Þº `Lºx2»B»»@¾½»8V{»I‚»bý_:ã¢Ü;0ŠŠ;,*»;*;y;&;#¾x; Ùr;R;ÄÛ;©®;©r;,<:óæø:ð±Ü:ë6A:åõ:áŽ:ÕÉF:Ät_:§Ž]:Ф-:C¢:LŒ9¶ºÝ9WUP8¨‰¸'â¹#vò¹©°Òºèºvúº¬·¬ºÑ»óºþÓ*»x¶» vY»Œ¢»¾»@™» Èf»ú»0˜G»L„Y»a¡¯»l혻kž¤»^CÖ»H¹{».̻ҭ»©»*8лH[à»gê5»~0u»„mG»zz»K„ù» buºšoº-ݺ-ŒºJ‚º×„µ»4y‹»@xM»8dµ»{M9Üû;4 L;,—ä;*æù;&ï@;$u;!¹#;ÿÁ;´;i; hÔ;XÇ:÷•:ñ–í:ì1:æv‹:äb':ÙH :Ê#:¯®b:’Šñ:YÒV:G—9˳p9|¤§8ßýº²ëí¹‚5¹Š&xºïîº\E„º |ºÈ0òºðØ» ¹Ø» 5º»Â÷»¾»Tˆ» £h»ˆ»*zr»EJ»]C;»k“»m »b¢O»N×T»6 Ú»²‘»é»#;I»?žø»_ð÷»xö »ƒï¸»€Ãû»[E_»»õºµ¸bºH+º—„º(躲»»#¢b»En»1*i»n9#º©*æ;4H³;-w”;+Y;(Ax;$úž;"˜Ô;Qù;+M;(r; 8(;'ø:ú…W:ñ½:íÞ‘:è5í:åõ:Ûá½:ÏCG:·S‰:šm‡:p•:!~¬9à¬9’Œ9.8 fµ¸Ó6¹eµ¹åoκCÎ.º“ôšº¿r‘ºãyU» -;» õ»Óœ»¾»¯»X»»XÏ»$ÙF»=L´»X u»gü¶»n¬»fX±»Tõ(»= e»"Ô’»WÝ»ÿ»7c»Wï»sSØ»‚·M»ƒ»hl¬»-ÓhºÕ«¬ºg[ѺÔº‡‡ºÅë»Ó.»Eí»2ìÀ»Y8Š»3&f;m‘;.¥Ú;+Ì ;)%y;%gÆ;#x…; 1ª;;uK;Z;çZ:þé*:óa :ïó:é>:åõ:ß`:Ó*&:¿6 :¢-Ë:‚ÆÎ:3Tä9õ¤–9§97ßÒ8|?¸ŒÛ¹=™Ë¹¾çðº+V׺…ùº´öGºØ´C»§Ô»Cv»´A»0Ÿ».þ» á»g…»Ÿã»5â»Q˜»d}ò»n¬»idí»Z•p»C°~»)_»3»Áu»/³,»Nˆp»m6»€Ø,»„*»s}†»?ƒº÷ôºˆjwºãº,ºkWºö ¢»>LŒ»:M³»D2m»mgL:ÂË;1j.;,>‘;*sa;&Gw;#å­;![;Âa; V;€; D;¦:ôgu:ð±Ü:ëS|:åõ:áú2:Ö¨ê:Æt:©M¤:ŒÕ\:H”c:Ë9»ø±9aÐ÷8¶ ¾·ûæË¹{1¹¢³µºª¬ºoýº©¨ñºÏºûTœ»° » æ+»Ä‹»¾»¯» èÁ»σ»/è»Jj»`Š!»l}Æ»l–»_[f»J@Ü»0‹»Ãã»jí»(y†»F,ûeó»|ä»»„eÁ»|qñ»Oª§» øŽº  ¸º3úˆºøeº@iºÍxµ»0±›»B7›»5ý«»zš7yÿ¿;4èô;,ÏÍ;*æù;''(;$£‰;!ñ ;7ª;†;Øá; Ø¥;Øi:÷æ7:ñ–í:ì:ææ^:äÑø:ÙÊô:ËT˜:±Ý{:”­4:_Aš:Æ%9ÐñE9‚LÏ8í÷ð7'Dh¸ý /¹ƒ)[º²ºV( ºmEºÆغíY» » ¥Œ»2È»¾»ä¶»û­»ps»(ó»C2º»\+¯»jsØ»mho»c¹“»P^°»7Í%»r»à»!{ÿ»=vf»]ÁÙ»w¦–»ƒ²ù»kµ»^—ö» Rº½%OºOEºö©º!ëfº©GY»æ%»F B»1*i»i>¦ºà4û;0ZC;-¯~;+Y;(ya;%;"м;‰â;³p;˜C; ßâ;—Ê:ûdû:ò,ç:îNd:è¤L:åõ:ÜÁa:Ћ:¹Ð:œ,Î:uÒÜ:%ÜÜ9åé×9—Ea9’Ö8([!¸Ãuô¹[9f¹ÛKº=°´ºv º¼Ó¥ºà‘¡»ÝÆ» dî»d±»¾»ÖÆ»°»y,»#‰Ð»;rl»V†»g»n¬»g8U»V|†»>Ê«»$“Ù»ǰ»°%»5™0»U(é»qÌw»‚aH»ƒV÷»kZ/»29ºÝø<ºpÖüºÇqºúº‰´€» ¿»C÷`»4¤<»S¶»E·;ú†;/)£;+Ì ;)•L;%Ÿ°;#°m; i“;rÒ;å;Éð;t†:ÿÈÎ:óa :ð Ä:é€:åõ:ßøæ:Ô É:Àõf:¤d:…e¸:8’¹9úâk9¬=ó9B[{8Œ¸{ÉP¹6œ¬¹·¬°º%eiº‚zþº²W[ºÖ1 »è»D÷»5Y»0Ÿ»÷»°w»‡á»ˆW»4]»PP»cžN»mÍV»jD»[äå»EU©»+×»2»³Ý»-»ø»L‘=»kŠ‘»€0p»„G»uõC»C§I»X:ºŽº#Vºlʺ_hpºëž¡»;=л‘;*«L;&a;$—;!IE;23;B?;‰R; ‰;P:õG:ðè:ëS|:åõ:âÙÕ:׈Œ:Çeè:«O«:t:N±Û: I¦9Á6†9lL 8Äô·¨ h¹~¹š`jºlÕºhÿ຦š3ºÌ§º÷Ö »†w» Uý»üs»¾»ÐÇ» »·Z»-‰Š»H¦:»_r–»l õ»l‹g»`rò»KÈ:»2‚1»X»ÞÁ»&º?»Cý«»cûÓ»{•C»„IÌ»~GR»SÐö»ޱº§wéº:ÿºØº8+ºÃ~–»,‹S»C q»3µ»wñ¹ÝFƒ;5‘K;-¶;+t;'kl;$£‰;"(õ;;ñZ;H³; Hw;H::øÅÛ:ñ–í:ìþÓ:çV/:åAÊ:Ú:Å:̤ :³Ô‘:–ÜL:e_:Á=9Ö/9‡Š¢9X7§u¸ïò¹z®ß¹öꧺP ºš^‰ºÃÒ¿ºéÚÿ» >¸» ^»¢š»¾»~Ž»Sò»Xç»'x»A;‹»Zß»i¼1»mØ@»d™5»Qæ»9Œl»ŒÏ»Ôw»¼¹»;7»[¬»vW»ƒ_»‚7»aÞ »$è2ºÅŸºV nº •“ºº Šø»à:»F Š»1-C»dÑ»B;,ÿ;-çg;+…;(±K;%;#¦;ÁÌ;#C;Õ·; zb;œ:ü¯Ÿ:òœ¸:î¾5:è¤L:åõ:Ý¡:Ñjª:ºÿZ:ì:{°:*; 9ë'¬9œƒ49(@,8DOŒ¸®~œ¹P½¹¹Ð‹œº7“;ºŒ÷{ºº4ººÝò·»ŽP» Ó—»Ôƒ»ç‚»žÝ»ÊÈ»lû»":Z»9³%»Tþ·»f=o»n¬»gå'»Wö5»@‰ò»&,»7‚»`¯»3¢»RÕÚ»pE»ñv»ƒŸK»n1»6Ï*ºæyIºzsº%ªº ÿ̺‚·e»¼»B~g»6cƒ»NLú»U7ý;‡¯;/Ñ^;+òÆ;*„;%×™;#¾x; ¡};â¥;Tð;9Ä;C;„Z:ów :ð}•:êVh:åõ:àh¹:Ôél:´­:¥Î«:ˆ¢:=ÐŒ:9±{Ç9L×"8šø¸QÚž¹-õ¹°¯“º '’º}øÝº¯¸qºÔ†»)F»D÷»Ý»T¬»¿,»xŽ» ¨=»n¾»2C»ND »b¹~»m]„»jöÁ»], »Gð»,Þ»òÖ»Ô:»+ø»J‹z»iËK»HB»„mG»x\E»G•°»ËKº“Åκ(“äº eºT %ºá’Ë»7øá»>¤‘»;ç>»z˜:VÊ;3)w;,_î;*ã4;&·J;$U€;!-;¢;¡Ê;ù%; øé;°ç:ö&À:ñWè:ë¯D:æž:ã¹y:Øh0:ȵ]:­~Ã:Ë?:T“@: È39ÆtZ9u¥ß8Ò)·(X ¹ €õ¹‘¤º .ÿºbdmº£‹vºÊ`ŽºôW}»N» ÅÏ»S »¾»˜Ý» KI»ŸÎ»,,»FÓû»^[ »kž#»lÓ'»aŠ»MO˜»4N,»bÍ»nï»$úø»AÎ’»b¤»zEλ„'­»€M»WŽ »$˺®uºApº·«º01mººÂ6»(9•»Dïç»2e¡»s8ºbÓ;5!y;-?Ÿ;+P];'Û=;$©;"`Þ;îà;ƒm;¸‡; ¸J;¸:ù¥‚:ñ–í:ín¦:çÆ:屜:Ûã:Íóƒ:µ“Ø:˜­Õ:kUò:n9Ûlí9ŒÈw9 ™7à×(¸á¸¹p33¹î.@ºIíº—O̺Á£¦ºæˆÊ» _» …0»+º»¾»F¤»ȧ»AZ»&) »?D\»YŸ»hÜ»n¬»exØ»Sml»;K²»!à» `»O`»9ˆ»Y´ä»tÛ‘»ƒ =»‚ý»e%E»)t3ºÍ].º^iº 4}ºÆ.º˜¤»ÚN»EÓ »2 ç»^¯€»1 ;#Òo;.5ï;+½†;(é3;%/Ñ;#@;ùµ;“;  ; ê4;wo:ýÿ:ó Œ:ï.:è¤L:åõ:Þ€¦:ÒJM:½.s:Ÿþ,:€'B:.™=9ðe€9¡Á 9/=G8`C÷¸šØƒ¹FB ¹Ç¦aº1uÁº‰xíº·•кÛSË»>Û» »DU»l»fô»{Í»Un» êä»7Ù©»SwY»e]Ë»n¬»hŒâ»YEª»B(»'¤Š»§S»;»1ªÐ»P¦Â»n½»»€ »ƒ×4»pÞ»;[Òºï5«º‚»€ºƒÛº `âºx5»Cè»@¿!»8V »I–»búJ:ãªe;0ŠY;,*®;*;m;&‚;#¾x; Ùf;Rv;ÄÁ;©•;©X;,:óæÞ:ð±Ü:ë6:åõ:á]:ÕÉ:Äsõ:§ñ:Š£Œ:C`:Kµ9¶¹›9WRË8¨-¸'ëë¹#yf¹©²tº齺vû¾º¬¸eºÑ¼‘ºþÓü»x©» v?»Œ•»¾»@¦» È™»H»0˜¡»L„À»a¡ð»lí²»kž}»^C–»H¹ ».d»Òy»Ï»*98»H\b»gê«»~0µ»„mG»zzN»K„» adºšêº-Û¥º-ºJҺ׆õ»4zR»@wè»8e?»{Œõ9Ý*Û;4 ;,—Ø;*æù;&ï3;$i;!¹;ÿµ;›;h÷; hº;X¡:÷b:ñ–í:ì:ævr:äb:ÙG×:ÊØ:¯­ä:’І:YÑ:FÁ9˲-9|¢ú8ßú_³Ipywcs-1.12/lib/pywcs/tests/data/outside_sky.hdr0000644001153600020070000000267712310355627023712 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / BITPIX = -32 / NAXIS = 2 / NAXIS1 = 2048 / NAXIS2 = 2048 / EXTEND = T / BSCALE = 1.00000000000E+00 / BZERO = 0.00000000000E+00 / CDELT1 = -8.19629704013E-02 / CRPIX1 = 1.02500000000E+03 / CRVAL1 = 79.95701 CTYPE1 = 'RA---SIN' / CDELT2 = 8.19629704013E-02 / CRPIX2 = 1.02500000000E+03 / CRVAL2 = -45.779 CTYPE2 = 'DEC--SIN' / EPOCH = 2.00000000000E+03 / PV2_1 = -0.755124458581295 PV2_2 = 0.209028857410973 pywcs-1.12/lib/pywcs/tests/data/sip.fits0000644001153600020070000001320012310355627022313 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / conforms to FITS standard BITPIX = 8 / array data type NAXIS = 0 / number of array dimensions WCSAXES = 2 / Number of coordinate axes CRPIX1 = 128.0 / Pixel coordinate of reference point CRPIX2 = 128.0 / Pixel coordinate of reference point PC1_1 = 0.000249756880272 / Coordinate transformation matrix element PC1_2 = 0.000230177809744 / Coordinate transformation matrix element PC2_1 = 0.000230428519265 / Coordinate transformation matrix element PC2_2 = -0.000249965770577 / Coordinate transformation matrix element CDELT1 = 1 / [deg] Coordinate increment at reference point CDELT2 = 1 / [deg] Coordinate increment at reference point CUNIT1 = 'deg' / Units of coordinate increment and value CUNIT2 = 'deg' / Units of coordinate increment and value CTYPE1 = 'RA---TAN-SIP' / Right ascension, gnomonic projection CTYPE2 = 'DEC--TAN-SIP' / Declination, gnomonic projection CRVAL1 = 202.482322805 / [deg] Coordinate value at reference point CRVAL2 = 47.17511893 / [deg] Coordinate value at reference point LONPOLE = 180 / [deg] Native longitude of celestial pole LATPOLE = 47.17511893 / [deg] Native latitude of celestial pole RESTFRQ = 0 / [Hz] Line rest frequency RESTWAV = 0 / [Hz] Line rest wavelength CRDER1 = 4.02509762361E-05 / [deg] Random error in coordinate CRDER2 = 3.42746131953E-05 / [deg] Random error in coordinate RADESYS = 'ICRS' / Equatorial coordinate system EQUINOX = 2000 / [yr] Equinox of equatorial coordinates BP_0_1 = -1.6588E-05 BP_0_2 = -2.3424E-05 A_3_0 = -1.4172E-07 B_3_0 = -2.0249E-08 BP_3_0 = 2.0482E-08 B_1_2 = -5.7813E-09 B_1_1 = -2.4386E-05 B_2_1 = -1.6583E-07 B_2_0 = 2.1197E-06 A_ORDER = 3 B_0_3 = -1.6168E-07 B_0_2 = 2.31E-05 BP_0_3 = 1.651E-07 B_ORDER = 3 BP_ORDER= 3 BP_1_2 = 3.8917E-09 AP_ORDER= 3 AP_3_0 = 1.4492E-07 A_1_1 = 2.1886E-05 BP_2_0 = -2.151E-06 A_1_2 = -1.6847E-07 AP_2_1 = 6.709E-09 AP_2_0 = 2.4146E-05 A_0_2 = 2.9656E-06 A_0_3 = 3.7746E-09 BP_1_1 = 2.4753E-05 BP_1_0 = -2.6783E-06 A_2_0 = -2.3863E-05 A_2_1 = -8.561E-09 AP_1_0 = -1.4897E-05 AP_1_1 = -2.225E-05 AP_1_2 = 1.7195E-07 BP_2_1 = 1.7E-07 AP_0_1 = -6.4275E-07 AP_0_3 = -3.582E-09 AP_0_2 = -2.9425E-06 END pywcs-1.12/lib/pywcs/tests/data/sip2.fits0000644001153600020070000001320012310355627022375 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / conforms to FITS standard BITPIX = 8 / array data type NAXIS = 0 / number of array dimensions WCSAXES = 2 / Number of coordinate axes CRPIX1 = 128.0 / Pixel coordinate of reference point CRPIX2 = 128.0 / Pixel coordinate of reference point PC1_1 = 0.000249756880272 / Coordinate transformation matrix element PC1_2 = 0.000230177809744 / Coordinate transformation matrix element PC2_1 = 0.000230428519265 / Coordinate transformation matrix element PC2_2 = -0.000249965770577 / Coordinate transformation matrix element CDELT1 = 1 / [deg] Coordinate increment at reference point CDELT2 = 1 / [deg] Coordinate increment at reference point CUNIT1 = 'deg' / Units of coordinate increment and value CUNIT2 = 'deg' / Units of coordinate increment and value CTYPE1 = 'RA---TAN-SIP' / Right ascension, gnomonic projection CTYPE2 = 'DEC--TAN-SIP' / Declination, gnomonic projection CRVAL1 = 202.482322805 / [deg] Coordinate value at reference point CRVAL2 = 47.17511893 / [deg] Coordinate value at reference point LONPOLE = 180 / [deg] Native longitude of celestial pole LATPOLE = 47.17511893 / [deg] Native latitude of celestial pole RESTFRQ = 0 / [Hz] Line rest frequency RESTWAV = 0 / [Hz] Line rest wavelength CRDER1 = 4.02509762361E-05 / [deg] Random error in coordinate CRDER2 = 3.42746131953E-05 / [deg] Random error in coordinate RADESYS = 'ICRS' / Equatorial coordinate system EQUINOX = 2000 / [yr] Equinox of equatorial coordinates A_3_0 = -1.4172E-07 B_3_0 = -2.0249E-08 B_1_2 = -5.7813E-09 B_1_1 = -2.4386E-05 B_2_1 = -1.6583E-07 B_2_0 = 2.1197E-06 A_ORDER = 3 B_0_3 = -1.6168E-07 B_0_2 = 2.31E-05 B_ORDER = 3 A_1_1 = 2.1886E-05 A_1_2 = -1.6847E-07 A_0_2 = 2.9656E-06 A_0_3 = 3.7746E-09 A_2_0 = -2.3863E-05 A_2_1 = -8.561E-09 END pywcs-1.12/lib/pywcs/tests/maps/0000755001153600020070000000000012310355732020661 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/lib/pywcs/tests/maps/1904-66_AIR.hdr0000644001153600020070000002210012310355626022676 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---AIR' CRPIX1 = -2.347545010835E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--AIR' CRPIX2 = 8.339330824422E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole PV2_1 = 4.500000000000E+01 / Projection parameter 1 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:43:31 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_AIR.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_AIT.hdr0000644001153600020070000002176012310355626022713 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---AIT' CRPIX1 = -2.462317116277E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--AIT' CRPIX2 = 7.115850027049E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:04:34 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_AIT.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_ARC.hdr0000644001153600020070000002176012310355626022703 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---ARC' CRPIX1 = -2.469419019050E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--ARC' CRPIX2 = 5.082274450444E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:35:43 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_ARC.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_AZP.hdr0000644001153600020070000002222012310355627022721 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---AZP' CRPIX1 = -2.541100848779E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--AZP' CRPIX2 = -1.134948542534E+01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole PV2_1 = 2.000000000000E+00 / Projection parameter 1 PV2_2 = 3.000000000000E+01 / Projection parameter 2 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:16:54 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_AZP.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_BON.hdr0000644001153600020070000002210012310355626022701 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---BON' CRPIX1 = -2.431263982441E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--BON' CRPIX2 = -3.307412668190E+01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole PV2_1 = 4.500000000000E+01 / Projection parameter 1 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:17:44 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_BON.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_CAR.hdr0000644001153600020070000002176012310355626022703 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---CAR' CRPIX1 = -2.482173814412E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--CAR' CRPIX2 = 7.527038199745E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:51:20 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_CAR.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_CEA.hdr0000644001153600020070000002210012310355627022654 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---CEA' CRPIX1 = -2.482173814412E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--CEA' CRPIX2 = 7.688571124876E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole PV2_1 = 1.000000000000E+00 / Projection parameter 1 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:48:41 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_CEA.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_COD.hdr0000644001153600020070000002222012310355626022673 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---COD' CRPIX1 = -2.153431714695E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--COD' CRPIX2 = 1.561302682707E+01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -4.500000000000E+01 / Native latitude of celestial pole PV2_1 = 4.500000000000E+01 / Projection parameter 1 PV2_2 = 2.500000000000E+01 / Projection parameter 2 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:12:30 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_COD.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_COE.hdr0000644001153600020070000002222012310355626022674 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---COE' CRPIX1 = -2.230375366798E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--COE' CRPIX2 = -1.435249668783E+01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 4.500000000000E+01 / Native latitude of celestial pole PV2_1 = -4.500000000000E+01 / Projection parameter 1 PV2_2 = 2.500000000000E+01 / Projection parameter 2 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:09:50 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_COE.continuum.fits". HISTORY Noise level of continuum map: 62 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_COO.hdr0000644001153600020070000002222012310355626022706 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---COO' CRPIX1 = -2.136486051767E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--COO' CRPIX2 = 1.292640949564E+01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -4.500000000000E+01 / Native latitude of celestial pole PV2_1 = 4.500000000000E+01 / Projection parameter 1 PV2_2 = 2.500000000000E+01 / Projection parameter 2 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:15:07 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_COO.continuum.fits". HISTORY Noise level of continuum map: 62 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_COP.hdr0000644001153600020070000002222012310355626022707 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---COP' CRPIX1 = -2.151923139086E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--COP' CRPIX2 = 1.505768272737E+01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -4.500000000000E+01 / Native latitude of celestial pole PV2_1 = 4.500000000000E+01 / Projection parameter 1 PV2_2 = 2.500000000000E+01 / Projection parameter 2 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:07:13 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_COP.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_CSC.hdr0000644001153600020070000002176012310355626022706 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---CSC' CRPIX1 = -2.686531829635E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--CSC' CRPIX2 = -7.043520126533E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:25:39 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_CSC.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_CYP.hdr0000644001153600020070000002222012310355627022722 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---CYP' CRPIX1 = -1.471055514007E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--CYP' CRPIX2 = 2.056099939277E+01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole PV2_1 = 1.000000000000E+00 / Projection parameter 1 PV2_2 = 7.071067811870E-01 / Projection parameter 2 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:46:07 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_CYP.continuum.fits". HISTORY Noise level of continuum map: 62 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_HPX.hdr0000644001153600020070000002234012310355626022730 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / file does conform to FITS standard BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 / number of data axes NAXIS1 = 192 / length of data axis 1 NAXIS2 = 192 / length of data axis 2 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H BUNIT = 'Jy/beam ' / Pixel value is flux density CTYPE1 = 'RA---HPX' CRPIX1 = -248.217381441188 CDELT1 = -0.0666666666666667 CRVAL1 = 0. CTYPE2 = 'DEC--HPX' CRPIX2 = -8.21754831338666 CDELT2 = 0.0666666666666667 CRVAL2 = -90. LONPOLE = 180. / Native longitude of celestial pole LATPOLE = 0. / Native latitude of celestial pole RADESYS = 'FK5 ' / Equatorial coordinate system EQUINOX = 2000.0 / Equinox of equatorial coordinates BMAJ = 0.24000 / Beam major axis in degrees BMIN = 0.24000 / Beam minor axis in degrees BPA = 0.0 / Beam position angle in degrees HISTORY Single-dish continuum map HISTORY Formed on Mon 2005/03/07 04:03:52 GMT by "pksgridzilla" which was HISTORY compiled on Mar 6 2005 08:00:15 (local time) within HISTORY AIPS++ version 19.986.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_HPX.continuum.fits". HISTORY Noise level of continuum map: 57 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_MER.hdr0000644001153600020070000002176012310355627022722 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---MER' CRPIX1 = -2.482173814412E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--MER' CRPIX2 = 7.364978412864E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:53:59 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_MER.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_MOL.hdr0000644001153600020070000002176012310355627022726 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---MOL' CRPIX1 = -2.127655947497E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--MOL' CRPIX2 = -2.310670994515E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:01:55 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_MOL.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_NCP.hdr0000644001153600020070000002222012310355626022706 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---SIN' CRPIX1 = -2.371895431541E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--SIN' CRPIX2 = 7.688572009351E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole PV2_1 = 0.000000000000E+00 / Projection parameter 1 PV2_2 = -1.216796447506E-08 / Projection parameter 2 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:33:03 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_NCP.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_PAR.hdr0000644001153600020070000002176012310355626022720 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---PAR' CRPIX1 = -2.465551494284E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--PAR' CRPIX2 = 3.322937769653E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:59:17 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_PAR.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_PCO.hdr0000644001153600020070000002176012310355626022717 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---PCO' CRPIX1 = -2.462486098896E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--PCO' CRPIX2 = 3.620782775517E-01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:20:22 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_PCO.continuum.fits". HISTORY Noise level of continuum map: 62 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_QSC.hdr0000644001153600020070000002176012310355627022725 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---QSC' CRPIX1 = -2.583408175994E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--QSC' CRPIX2 = -8.258194421088E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:28:25 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_QSC.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_SFL.hdr0000644001153600020070000002176012310355627022723 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---SFL' CRPIX1 = -2.463483086237E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--SFL' CRPIX2 = 7.527038199745E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:56:37 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_SFL.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_SIN.hdr0000644001153600020070000002222012310355627022720 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---SIN' CRPIX1 = -2.371895431541E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--SIN' CRPIX2 = 7.688571124876E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole PV2_1 = 0.000000000000E+00 / Projection parameter 1 PV2_2 = 0.000000000000E+00 / Projection parameter 2 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:30:25 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_SIN.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_STG.hdr0000644001153600020070000002176012310355626022733 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---STG' CRPIX1 = -2.519459909290E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--STG' CRPIX2 = 3.744942537739E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:26:55 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_STG.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_SZP.hdr0000644001153600020070000002234012310355626022745 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---SZP' CRPIX1 = -2.478656972779E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--SZP' CRPIX2 = -2.262051956373E+01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole PV2_1 = 2.000000000000E+00 / Projection parameter 1 PV2_2 = 1.800000000000E+02 / Projection parameter 2 PV2_3 = 6.000000000000E+01 / Projection parameter 3 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:20:19 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_SZP.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_TAN.hdr0000644001153600020070000002176012310355626022720 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---TAN' CRPIX1 = -2.680658087122E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--TAN' CRPIX2 = -5.630437201085E-01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:23:37 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_TAN.continuum.fits". HISTORY Noise level of continuum map: 59 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_TSC.hdr0000644001153600020070000002176012310355627022730 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---TSC' CRPIX1 = -1.897220156818E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--TSC' CRPIX2 = 2.037416464676E+01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = 0.000000000000E+00 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 02:23:02 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_TSC.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_ZEA.hdr0000644001153600020070000002176012310355626022715 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---ZEA' CRPIX1 = -2.444880690361E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--ZEA' CRPIX2 = 5.738055949994E+00 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:40:52 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_ZEA.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/maps/1904-66_ZPN.hdr0000644001153600020070000002506012310355626022742 0ustar cslocumSTSCI\science00000000000000SIMPLE = T BITPIX = -32 / IEEE (big-endian) 32-bit floating point data NAXIS = 2 NAXIS1 = 192 NAXIS2 = 192 BUNIT = 'JY/BEAM ' CTYPE1 = 'RA---ZPN' CRPIX1 = -1.832937255632E+02 CDELT1 = -6.666666666667E-02 CRVAL1 = 0.000000000000E+00 CTYPE2 = 'DEC--ZPN' CRPIX2 = 2.209211120575E+01 CDELT2 = 6.666666666667E-02 CRVAL2 = -9.000000000000E+01 LONPOLE = 1.800000000000E+02 / Native longitude of celestial pole LATPOLE = -9.000000000000E+01 / Native latitude of celestial pole PV2_0 = 5.000000000000E-02 / Projection parameter 0 PV2_1 = 9.750000000000E-01 / Projection parameter 1 PV2_2 = -8.070000000000E-01 / Projection parameter 2 PV2_3 = 3.370000000000E-01 / Projection parameter 3 PV2_4 = -6.500000000000E-02 / Projection parameter 4 PV2_5 = 1.000000000000E-02 / Projection parameter 5 PV2_6 = 3.000000000000E-03 / Projection parameter 6 PV2_7 = -1.000000000000E-03 / Projection parameter 7 PV2_8 = 0.000000000000E+00 / Projection parameter 8 PV2_9 = 0.000000000000E+00 / Projection parameter 9 PV2_10 = 0.000000000000E+00 / Projection parameter 10 PV2_11 = 0.000000000000E+00 / Projection parameter 11 PV2_12 = 0.000000000000E+00 / Projection parameter 12 PV2_13 = 0.000000000000E+00 / Projection parameter 13 PV2_14 = 0.000000000000E+00 / Projection parameter 14 PV2_15 = 0.000000000000E+00 / Projection parameter 15 PV2_16 = 0.000000000000E+00 / Projection parameter 16 PV2_17 = 0.000000000000E+00 / Projection parameter 17 PV2_18 = 0.000000000000E+00 / Projection parameter 18 PV2_19 = 0.000000000000E+00 / Projection parameter 19 EQUINOX = 2.000000000000E+03 / Equinox of equatorial coordinates BMAJ = 2.399999936422E-01 / Beam major axis in degrees BMIN = 2.399999936422E-01 / Beam minor axis in degrees BPA = 0.000000000000E+00 / Beam position angle in degrees RESTFRQ = 1.420405750000E+09 / Line rest frequency, Hz HISTORY Parkes Multibeam continuum map HISTORY Formed on Mon 2004/02/09 01:38:20 GMT by "pksgridzilla" which was HISTORY compiled on Feb 9 2004 12:08:02 (local time) within HISTORY AIPS++ version 19.405.00 dated . HISTORY Polarization mode: A and B aggregated HISTORY Gridding parameters: HISTORY Method: WGTMED HISTORY Clip fraction: 0.000 HISTORY Tsys weighting: applied HISTORY Beam weight order: 1 HISTORY Beam FWHM: 14.4 arcmin HISTORY Beam normalization: applied HISTORY Smoothing kernel type: TOP-HAT HISTORY Kernel FWHM: 12.0 arcmin HISTORY Cutoff radius: 6.0 arcmin HISTORY Beam RSS cutoff: 0.0 HISTORY Input data sets: HISTORY 97-10-09_0356_193558-66_206a.sdfits HISTORY 97-10-12_0142_182123-66_193a.sdfits HISTORY 97-10-12_0151_182707-66_194a.sdfits HISTORY 97-10-12_0200_183252-66_195a.sdfits HISTORY 97-11-07_0510_183836-66_196a.sdfits HISTORY 97-11-07_0519_184420-66_197a.sdfits HISTORY 97-11-07_0528_185004-66_198a.sdfits HISTORY 97-11-07_0537_185548-66_199a.sdfits HISTORY 97-11-07_0546_190132-66_200a.sdfits HISTORY 97-11-07_0556_190717-66_201a.sdfits HISTORY 97-11-07_0645_191301-66_202a.sdfits HISTORY 97-11-07_0654_191845-66_203a.sdfits HISTORY 97-11-07_0703_192429-66_204a.sdfits HISTORY 97-11-07_0712_193013-66_205a.sdfits HISTORY 97-11-07_0724_194142-66_207a.sdfits HISTORY 97-11-18_0256_193815-66_206c.sdfits HISTORY 97-11-18_0306_194359-66_207c.sdfits HISTORY 97-11-19_0447_182341-66_193c.sdfits HISTORY 97-11-19_0456_182925-66_194c.sdfits HISTORY 97-11-19_0507_190350-66_200c.sdfits HISTORY 97-11-19_0516_190934-66_201c.sdfits HISTORY 97-11-19_0525_191519-66_202c.sdfits HISTORY 97-11-19_0534_192103-66_203c.sdfits HISTORY 97-11-19_0544_192647-66_204c.sdfits HISTORY 97-11-19_0553_193231-66_205c.sdfits HISTORY 97-11-19_0602_183509-66_195c.sdfits HISTORY 97-11-19_0612_184053-66_196c.sdfits HISTORY 97-11-19_0622_184638-66_197c.sdfits HISTORY 97-11-19_0631_185222-66_198c.sdfits HISTORY 97-11-19_0640_185806-66_199c.sdfits HISTORY 98-03-24_2107_193706-66_206b.sdfits HISTORY 98-03-24_2116_194251-66_207b.sdfits HISTORY 98-03-25_2020_190826-66_201b.sdfits HISTORY 98-03-25_2029_191410-66_202b.sdfits HISTORY 98-03-25_2038_191954-66_203b.sdfits HISTORY 98-03-25_2047_192538-66_204b.sdfits HISTORY 98-03-25_2056_193122-66_205b.sdfits HISTORY 98-03-26_2048_190459-66_200d.sdfits HISTORY 98-03-27_2034_191627-66_202d.sdfits HISTORY 98-03-27_2043_192212-66_203d.sdfits HISTORY 98-03-27_2052_192756-66_204d.sdfits HISTORY 98-03-27_2102_193340-66_205d.sdfits HISTORY 98-03-27_2111_193924-66_206d.sdfits HISTORY 98-03-27_2120_194508-66_207d.sdfits HISTORY 98-03-27_2130_191043-66_201d.sdfits HISTORY 98-05-10_2123_182232-66_193b.sdfits HISTORY 98-05-10_2133_182816-66_194b.sdfits HISTORY 98-05-10_2142_183400-66_195b.sdfits HISTORY 98-05-10_2151_183945-66_196b.sdfits HISTORY 98-05-10_2200_184529-66_197b.sdfits HISTORY 98-05-10_2209_185113-66_198b.sdfits HISTORY 98-05-10_2219_185657-66_199b.sdfits HISTORY 98-05-10_2228_190241-66_200b.sdfits HISTORY 98-05-13_2132_182450-66_193d.sdfits HISTORY 98-05-13_2151_183034-66_194d.sdfits HISTORY 98-05-13_2200_183618-66_195d.sdfits HISTORY 98-05-13_2210_184202-66_196d.sdfits HISTORY 98-05-13_2219_184746-66_197d.sdfits HISTORY 98-05-13_2228_185331-66_198d.sdfits HISTORY 98-05-13_2237_185915-66_199d.sdfits HISTORY 98-05-25_1711_182559-66_193e.sdfits HISTORY 98-05-25_1720_183143-66_194e.sdfits HISTORY 98-05-25_1729_183727-66_195e.sdfits HISTORY 98-05-25_1738_184311-66_196e.sdfits HISTORY 98-05-25_1747_184855-66_197e.sdfits HISTORY 98-05-25_1756_185439-66_198e.sdfits HISTORY 98-05-25_1806_190024-66_199e.sdfits HISTORY 98-05-25_1815_190608-66_200e.sdfits HISTORY 98-05-25_1824_191152-66_201e.sdfits HISTORY 98-05-25_1833_191736-66_202e.sdfits HISTORY 98-05-25_1842_192320-66_203e.sdfits HISTORY 98-05-25_1851_192905-66_204e.sdfits HISTORY 98-05-25_1901_193449-66_205e.sdfits HISTORY 98-05-25_1910_194033-66_206e.sdfits HISTORY 98-05-25_1919_194617-66_207e.sdfits HISTORY Original FITS filename "1904-66_ZPN.continuum.fits". HISTORY Noise level of continuum map: 61 mJy (RMS) pywcs-1.12/lib/pywcs/tests/nrao/0000755001153600020070000000000012310355732020660 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/lib/pywcs/tests/nrao/gls.hdr0000644001153600020070000000300212310355626022141 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / Written by GBES1: 8-Mar-1994 11:29:18.00 BITPIX = -32 / NAXIS = 2 / NAXIS1 = 640 / NAXIS2 = 512 / DATE = '08/03/94' / Creation date (DD/MM/YY) of FITS header CTYPE1 = 'RA---GLS' / Coordinate system and projection CRPIX1 = 352.000 / Reference pixel CRVAL1 = 0.00000 / value at reference CDELT1 = -1.40500 / increment at reference CD001001= 1.00000 / no rotation, skew CTYPE2 = 'DEC--GLS' / Coordinate system and projection CRPIX2 = 267.000 / Reference pixel CRVAL2 = 0.00000 / value at reference CDELT2 = 2.26000 / increment at reference CD002002= 1.00000 / no rotation, skew RADECSYS= 'FK5 ' / fundamental coordinate system EQUINOX = 2000.00 / equinox for coordinate system LONGPOLE= 180.000 / Projection system north pole pywcs-1.12/lib/pywcs/tests/nrao/m28opt.hdr0000644001153600020070000002643012310355626022517 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / BITPIX = 16 / NAXIS = 3 / NAXIS1 = 558 / NAXIS2 = 262 / NAXIS3 = 1 / EXTEND = T /Tables following main image BLOCKED = T /Tape may be blocked OBJECT = 'NONE ' TELESCOP= ' ' INSTRUME= ' ' OBSERVER= ' ' DATE-OBS= ' ' DATE-MAP= '13/09/94' BSCALE = 2.78159340659E-03 /REAL = TAPE * BSCALE + BZERO BZERO = 1.08125000000E+02 / BUNIT = ' ' EPOCH = 0.000000000E+00 /EPOCH OF RA DEC DATAMAX = 1.992500000E+02 /MAX PIXEL VALUE DATAMIN = 1.700000000E+01 /MIN PIXEL VALUE CTYPE1 = 'RA---ARC' CRVAL1 = 1.47927100003E+02 / CDELT1 = -2.247777738E-04 / CRPIX1 = 3.015000000E+02 / CROTA1 = 0.000000000E+00 / CTYPE2 = 'DEC--ARC' CRVAL2 = 6.99079999924E+01 / CDELT2 = 2.273333375E-04 / CRPIX2 = 9.550000000E+01 / CROTA2 = 2.426000023E+01 / CTYPE3 = 'FREQ ' CRVAL3 = 6.67000032461E+14 / CDELT3 = 1.000000000E+00 / CRPIX3 = 1.000000000E+00 / CROTA3 = 0.000000000E+00 / HISTORY -------------------------------------------------------------------- HISTORY /Begin "HISTORY" information found in fits tape header by IMLOD HISTORY BLOCKED = T /Tape may be blocked HISTORY -------------------------------------------------------------------- HISTORY /Begin "HISTORY" information found in fits tape header by IMLOD HISTORY Created by fitstopgm. HISTORY /END FITS tape header "HISTORY" information HISTORY -------------------------------------------------------------------- HISTORY IMLOD OUTNAME =' HISTORY IMLOD OUTSEQ = 0 INTAPE = 1 OUTDISK= 2 HISTORY IMLOD INFILE = 'FITS2:M82BLUE.FITS ' HISTORY IMLOD RELEASE = '15JUL94' HISTORY TRANS RELEASE ='15JUL94 ' /********* Start 23-MAR-1994 09:33:39 HISTORY TRANS INNAME='M82 MW blue ' INCLASS='IMAP ' HISTORY TRANS INSEQ= 1 INDISK= 2 HISTORY TRANS OUTNAME='M82 in blue ' OUTCLASS='TRANS ' HISTORY TRANS OUTSEQ= 2 OUTDISK= 2 HISTORY TRANS BLC= 1., 1., 1., 1., 1., 1., 1. / Input image HISTORY TRANS TRC= 847.,1292., 1., 1., 1., 1., 1. / Input image HISTORY TRANS TRANCOD='-2-1 HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE3 = 'X ' / NEW Axis type HISTORY AXDEF CRVAL3 = 0.000000000E+00 / NEW Reference pixel value HISTORY AXDEF CDELT3 = -2.77778E-04 / NEW Axis increment HISTORY AXDEF CRPIX3 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE1 = ' ' / OLD Axis type HISTORY AXDEF CRVAL1 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT1 = -1.00000E+00 / OLD Axis increment HISTORY AXDEF CRPIX1 = 647.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE1 = 'X ' / NEW Axis type HISTORY AXDEF CRVAL1 = 0.000000000E+00 / NEW Reference pixel value HISTORY AXDEF CDELT1 = -2.77778E-04 / NEW Axis increment HISTORY AXDEF CRPIX1 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE2 = ' ' / OLD Axis type HISTORY AXDEF CRVAL2 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT2 = -1.00000E+00 / OLD Axis increment HISTORY AXDEF CRPIX2 = 425.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE2 = 'Y ' / NEW Axis type HISTORY AXDEF CRVAL2 = 0.000000000E+00 / NEW Reference pixel value HISTORY AXDEF CDELT2 = 2.77778E-04 / NEW Axis increment HISTORY AXDEF CRPIX2 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE3 = 'X ' / OLD Axis type HISTORY AXDEF CRVAL3 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT3 = -2.77778E-04 / OLD Axis increment HISTORY AXDEF CRPIX3 = 1.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE3 = 'FREQ ' / NEW Axis type HISTORY AXDEF CRVAL3 = 9.999999870E+14 / NEW Reference pixel value HISTORY AXDEF CDELT3 = 2.77778E-04 / NEW Axis increment HISTORY AXDEF CRPIX3 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE3 = 'FREQ ' / OLD Axis type HISTORY AXDEF CRVAL3 = 9.999999870E+14 / OLD Reference pixel value HISTORY AXDEF CDELT3 = 2.77778E-04 / OLD Axis increment HISTORY AXDEF CRPIX3 = 1.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE3 = 'FREQ ' / NEW Axis type HISTORY AXDEF CRVAL3 = 9.999999870E+14 / NEW Reference pixel value HISTORY AXDEF CDELT3 = 1.00000E+00 / NEW Axis increment HISTORY AXDEF CRPIX3 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE1 = 'X ' / OLD Axis type HISTORY AXDEF CRVAL1 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT1 = -2.77778E-04 / OLD Axis increment HISTORY AXDEF CRPIX1 = 1.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE1 = 'X ' / NEW Axis type HISTORY AXDEF CRVAL1 = 0.000000000E+00 / NEW Reference pixel value HISTORY AXDEF CDELT1 = 2.77778E-04 / NEW Axis increment HISTORY AXDEF CRPIX1 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE1 = 'X ' / OLD Axis type HISTORY AXDEF CRVAL1 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT1 = 2.77778E-04 / OLD Axis increment HISTORY AXDEF CRPIX1 = 1.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE1 = 'RA---ARC' / NEW Axis type HISTORY AXDEF CRVAL1 = 1.479284000E+02 / NEW Reference pixel value HISTORY AXDEF CDELT1 = -1.06583E-04 / NEW Axis increment HISTORY AXDEF CRPIX1 = 577.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE2 = 'Y ' / OLD Axis type HISTORY AXDEF CRVAL2 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT2 = 2.77778E-04 / OLD Axis increment HISTORY AXDEF CRPIX2 = 1.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE2 = 'RA---ARC' / NEW Axis type HISTORY AXDEF CRVAL2 = 6.992031002E+01 / NEW Reference pixel value HISTORY AXDEF CDELT2 = 1.13917E-04 / NEW Axis increment HISTORY AXDEF CRPIX2 = 502.000 / NEW Reference pixel loc HISTORY PUTHEAD CROTA2 = 0.00000E+00 / old HISTORY PUTHEAD CROTA2 = 2.40000E+01 / new HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE2 = 'RA---ARC' / OLD Axis type HISTORY AXDEF CRVAL2 = 6.992031002E+01 / OLD Reference pixel value HISTORY AXDEF CDELT2 = 1.13917E-04 / OLD Axis increment HISTORY AXDEF CRPIX2 = 502.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE2 = 'DEC--SIN' / NEW Axis type HISTORY AXDEF CRVAL2 = 6.992031002E+01 / NEW Reference pixel value HISTORY AXDEF CDELT2 = 1.13917E-04 / NEW Axis increment HISTORY AXDEF CRPIX2 = 502.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE2 = 'DEC--SIN' / OLD Axis type HISTORY AXDEF CRVAL2 = 6.992031002E+01 / OLD Reference pixel value HISTORY AXDEF CDELT2 = 1.13917E-04 / OLD Axis increment HISTORY AXDEF CRPIX2 = 502.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE2 = 'DEC--ARC' / NEW Axis type HISTORY AXDEF CRVAL2 = 6.992031002E+01 / NEW Reference pixel value HISTORY AXDEF CDELT2 = 1.13917E-04 / NEW Axis increment HISTORY AXDEF CRPIX2 = 502.000 / NEW Reference pixel loc HISTORY PUTHEAD CROTA2 = 2.40000E+01 / old HISTORY PUTHEAD CROTA2 = -2.40000E+01 / new HISTORY PUTHEAD CROTA2 = -2.40000E+01 / old HISTORY PUTHEAD CROTA2 = 2.40000E+01 / new HISTORY PUTHEAD CROTA2 = 2.40000E+01 / old HISTORY PUTHEAD CROTA2 = 0.00000E+00 / new HISTORY PUTHEAD CROTA2 = 0.00000E+00 / old HISTORY PUTHEAD CROTA2 = 2.40000E+01 / new HISTORY PUTHEAD CRVAL3 = 9.999999870E+14 / old HISTORY PUTHEAD CRVAL3 = 6.670000325E+14 / new HISTORY PUTHEAD CROTA2 = 2.40000E+01 / old HISTORY PUTHEAD CROTA2 = 2.64000E+01 / new HISTORY PUTHEAD CDELT1 = -1.06583E-04 / old HISTORY PUTHEAD CDELT1 = -1.09861E-04 / new HISTORY PUTHEAD CDELT2 = 1.13917E-04 / old HISTORY PUTHEAD CDELT2 = 1.13667E-04 / new HISTORY PUTHEAD CDELT1 = -1.09861E-04 / old HISTORY PUTHEAD CDELT1 = -1.12389E-04 / new HISTORY PUTHEAD CROTA2 = 2.64000E+01 / old HISTORY PUTHEAD CROTA2 = 2.42600E+01 / new HISTORY PUTHEAD CRVAL1 = 1.479284000E+02 / old HISTORY PUTHEAD CRVAL1 = 1.479271000E+02 / new HISTORY PUTHEAD CRPIX1 = 5.77000E+02 / old HISTORY PUTHEAD CRPIX1 = 6.46000E+02 / new HISTORY PUTHEAD CRPIX2 = 5.02000E+02 / old HISTORY PUTHEAD CRPIX2 = 4.24000E+02 / new HISTORY PUTHEAD CRVAL2 = 6.992031002E+01 / old HISTORY PUTHEAD CRVAL2 = 6.990799999E+01 / new HISTORY SUBIM RELEASE ='15JUL94 ' /********* Start 25-MAR-1994 09:30:57 HISTORY SUBIM INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY SUBIM INSEQ= 2 INDISK= 2 HISTORY SUBIM INTYPE ='MA' USERID= 103 HISTORY SUBIM OUTNAME='M82 in blue ' OUTCLASS='SUBIM ' HISTORY SUBIM OUTSEQ= 1 OUTDISK= 2 HISTORY SUBIM BLC = 45, 235, 1, 1, 1, 1, 1 HISTORY SUBIM TRC = 1159, 759, 1, 1, 1, 1, 1 HISTORY SUBIM XINC = 2 YINC = 2 HISTORY SUBIM OPCODE = 'AVE ' HISTORY AIPS IMNAME='M82 in blue ' IMCLASS='SUBIM ' IMSEQ= 1 / HISTORY AIPS USERNO= 103 / HISTORY /END FITS tape header "HISTORY" information HISTORY -------------------------------------------------------------------- HISTORY IMLOD OUTNAME =' HISTORY IMLOD OUTSEQ = 0 INTAPE = 1 OUTDISK= 4 HISTORY IMLOD INFILE = 'FITS2:M82BLUE.FITS ' HISTORY IMLOD RELEASE = '15JAN95' HISTORY SUBIM RELEASE ='15JAN95 ' /********* Start 13-SEP-1994 12:59:44 HISTORY SUBIM INNAME='M82 in blue ' INCLASS='SUBIM ' HISTORY SUBIM INSEQ= 1 INDISK= 4 HISTORY SUBIM INTYPE ='MA' USERID= 103 HISTORY SUBIM OUTNAME='M82 ' OUTCLASS='Blue ' HISTORY SUBIM OUTSEQ= 3 OUTDISK= 4 HISTORY SUBIM BLC = 1, 1, 1, 1, 1, 1, 1 HISTORY SUBIM TRC = 558, 262, 1, 1, 1, 1, 1 HISTORY SUBIM XINC = 1 YINC = 1 HISTORY SUBIM OPCODE = ' ' ORIGIN = 'AIPSGorilla (NRAOCV IPX) 15JAN95' / DATE = '13/09/94' / File written on dd/mm/yy HISTORY AIPS IMNAME='M82 ' IMCLASS='Blue ' IMSEQ= 3 / HISTORY AIPS USERNO= 103 / ENDpywcs-1.12/lib/pywcs/tests/nrao/m82opt.hdr0000644001153600020070000004154412310355626022522 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / BITPIX = 16 / NAXIS = 3 / NAXIS1 = 558 / NAXIS2 = 262 / NAXIS3 = 1 / EXTEND = T /Tables following main image BLOCKED = T /Tape may be blocked OBJECT = 'NONE ' TELESCOP= ' ' INSTRUME= ' ' OBSERVER= ' ' DATE-OBS= ' ' DATE-MAP= '13/09/94' BSCALE = 2.78159340659E-03 /REAL = TAPE * BSCALE + BZERO BZERO = 1.08125000000E+02 / BUNIT = ' ' EPOCH = 0.000000000E+00 /EPOCH OF RA DEC DATAMAX = 1.992500000E+02 /MAX PIXEL VALUE DATAMIN = 1.700000000E+01 /MIN PIXEL VALUE CTYPE1 = 'RA---ARC' CRVAL1 = 1.47927100003E+02 / CDELT1 = -2.247777738E-04 / CRPIX1 = 3.015000000E+02 / CROTA1 = 0.000000000E+00 / CTYPE2 = 'DEC--ARC' CRVAL2 = 6.99079999924E+01 / CDELT2 = 2.273333375E-04 / CRPIX2 = 9.550000000E+01 / CROTA2 = 2.426000023E+01 / CTYPE3 = 'FREQ ' CRVAL3 = 6.67000032461E+14 / CDELT3 = 1.000000000E+00 / CRPIX3 = 1.000000000E+00 / CROTA3 = 0.000000000E+00 / HISTORY -------------------------------------------------------------------- HISTORY /Begin "HISTORY" information found in fits tape header by IMLOD HISTORY BLOCKED = T /Tape may be blocked HISTORY -------------------------------------------------------------------- HISTORY /Begin "HISTORY" information found in fits tape header by IMLOD HISTORY Created by fitstopgm. HISTORY /END FITS tape header "HISTORY" information HISTORY -------------------------------------------------------------------- HISTORY IMLOD OUTNAME =' HISTORY IMLOD OUTSEQ = 0 INTAPE = 1 OUTDISK= 2 HISTORY IMLOD INFILE = 'FITS2:M82BLUE.FITS ' HISTORY IMLOD RELEASE = '15JUL94' HISTORY TRANS RELEASE ='15JUL94 ' /********* Start 23-MAR-1994 09:33:39 HISTORY TRANS INNAME='M82 MW blue ' INCLASS='IMAP ' HISTORY TRANS INSEQ= 1 INDISK= 2 HISTORY TRANS OUTNAME='M82 in blue ' OUTCLASS='TRANS ' HISTORY TRANS OUTSEQ= 2 OUTDISK= 2 HISTORY TRANS BLC= 1., 1., 1., 1., 1., 1., 1. / Input image HISTORY TRANS TRC= 847.,1292., 1., 1., 1., 1., 1. / Input image HISTORY TRANS TRANCOD='-2-1 HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE3 = 'X ' / NEW Axis type HISTORY AXDEF CRVAL3 = 0.000000000E+00 / NEW Reference pixel value HISTORY AXDEF CDELT3 = -2.77778E-04 / NEW Axis increment HISTORY AXDEF CRPIX3 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE1 = ' ' / OLD Axis type HISTORY AXDEF CRVAL1 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT1 = -1.00000E+00 / OLD Axis increment HISTORY AXDEF CRPIX1 = 647.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE1 = 'X ' / NEW Axis type HISTORY AXDEF CRVAL1 = 0.000000000E+00 / NEW Reference pixel value HISTORY AXDEF CDELT1 = -2.77778E-04 / NEW Axis increment HISTORY AXDEF CRPIX1 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE2 = ' ' / OLD Axis type HISTORY AXDEF CRVAL2 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT2 = -1.00000E+00 / OLD Axis increment HISTORY AXDEF CRPIX2 = 425.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE2 = 'Y ' / NEW Axis type HISTORY AXDEF CRVAL2 = 0.000000000E+00 / NEW Reference pixel value HISTORY AXDEF CDELT2 = 2.77778E-04 / NEW Axis increment HISTORY AXDEF CRPIX2 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE3 = 'X ' / OLD Axis type HISTORY AXDEF CRVAL3 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT3 = -2.77778E-04 / OLD Axis increment HISTORY AXDEF CRPIX3 = 1.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE3 = 'FREQ ' / NEW Axis type HISTORY AXDEF CRVAL3 = 9.999999870E+14 / NEW Reference pixel value HISTORY AXDEF CDELT3 = 2.77778E-04 / NEW Axis increment HISTORY AXDEF CRPIX3 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE3 = 'FREQ ' / OLD Axis type HISTORY AXDEF CRVAL3 = 9.999999870E+14 / OLD Reference pixel value HISTORY AXDEF CDELT3 = 2.77778E-04 / OLD Axis increment HISTORY AXDEF CRPIX3 = 1.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE3 = 'FREQ ' / NEW Axis type HISTORY AXDEF CRVAL3 = 9.999999870E+14 / NEW Reference pixel value HISTORY AXDEF CDELT3 = 1.00000E+00 / NEW Axis increment HISTORY AXDEF CRPIX3 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE1 = 'X ' / OLD Axis type HISTORY AXDEF CRVAL1 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT1 = -2.77778E-04 / OLD Axis increment HISTORY AXDEF CRPIX1 = 1.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE1 = 'X ' / NEW Axis type HISTORY AXDEF CRVAL1 = 0.000000000E+00 / NEW Reference pixel value HISTORY AXDEF CDELT1 = 2.77778E-04 / NEW Axis increment HISTORY AXDEF CRPIX1 = 1.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE1 = 'X ' / OLD Axis type HISTORY AXDEF CRVAL1 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT1 = 2.77778E-04 / OLD Axis increment HISTORY AXDEF CRPIX1 = 1.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE1 = 'RA---ARC' / NEW Axis type HISTORY AXDEF CRVAL1 = 1.479284000E+02 / NEW Reference pixel value HISTORY AXDEF CDELT1 = -1.06583E-04 / NEW Axis increment HISTORY AXDEF CRPIX1 = 577.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE2 = 'Y ' / OLD Axis type HISTORY AXDEF CRVAL2 = 0.000000000E+00 / OLD Reference pixel value HISTORY AXDEF CDELT2 = 2.77778E-04 / OLD Axis increment HISTORY AXDEF CRPIX2 = 1.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE2 = 'RA---ARC' / NEW Axis type HISTORY AXDEF CRVAL2 = 6.992031002E+01 / NEW Reference pixel value HISTORY AXDEF CDELT2 = 1.13917E-04 / NEW Axis increment HISTORY AXDEF CRPIX2 = 502.000 / NEW Reference pixel loc HISTORY PUTHEAD CROTA2 = 0.00000E+00 / old HISTORY PUTHEAD CROTA2 = 2.40000E+01 / new HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE2 = 'RA---ARC' / OLD Axis type HISTORY AXDEF CRVAL2 = 6.992031002E+01 / OLD Reference pixel value HISTORY AXDEF CDELT2 = 1.13917E-04 / OLD Axis increment HISTORY AXDEF CRPIX2 = 502.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE2 = 'DEC--SIN' / NEW Axis type HISTORY AXDEF CRVAL2 = 6.992031002E+01 / NEW Reference pixel value HISTORY AXDEF CDELT2 = 1.13917E-04 / NEW Axis increment HISTORY AXDEF CRPIX2 = 502.000 / NEW Reference pixel loc HISTORY AXDEF INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY AXDEF INSEQ= 2 INDISK= 2 HISTORY AXDEF CTYPE2 = 'DEC--SIN' / OLD Axis type HISTORY AXDEF CRVAL2 = 6.992031002E+01 / OLD Reference pixel value HISTORY AXDEF CDELT2 = 1.13917E-04 / OLD Axis increment HISTORY AXDEF CRPIX2 = 502.000 / OLD Reference pixel loc HISTORY AXDEF CTYPE2 = 'DEC--ARC' / NEW Axis type HISTORY AXDEF CRVAL2 = 6.992031002E+01 / NEW Reference pixel value HISTORY AXDEF CDELT2 = 1.13917E-04 / NEW Axis increment HISTORY AXDEF CRPIX2 = 502.000 / NEW Reference pixel loc HISTORY PUTHEAD CROTA2 = 2.40000E+01 / old HISTORY PUTHEAD CROTA2 = -2.40000E+01 / new HISTORY PUTHEAD CROTA2 = -2.40000E+01 / old HISTORY PUTHEAD CROTA2 = 2.40000E+01 / new HISTORY PUTHEAD CROTA2 = 2.40000E+01 / old HISTORY PUTHEAD CROTA2 = 0.00000E+00 / new HISTORY PUTHEAD CROTA2 = 0.00000E+00 / old HISTORY PUTHEAD CROTA2 = 2.40000E+01 / new HISTORY PUTHEAD CRVAL3 = 9.999999870E+14 / old HISTORY PUTHEAD CRVAL3 = 6.670000325E+14 / new HISTORY PUTHEAD CROTA2 = 2.40000E+01 / old HISTORY PUTHEAD CROTA2 = 2.64000E+01 / new HISTORY PUTHEAD CDELT1 = -1.06583E-04 / old HISTORY PUTHEAD CDELT1 = -1.09861E-04 / new HISTORY PUTHEAD CDELT2 = 1.13917E-04 / old HISTORY PUTHEAD CDELT2 = 1.13667E-04 / new HISTORY PUTHEAD CDELT1 = -1.09861E-04 / old HISTORY PUTHEAD CDELT1 = -1.12389E-04 / new HISTORY PUTHEAD CROTA2 = 2.64000E+01 / old HISTORY PUTHEAD CROTA2 = 2.42600E+01 / new HISTORY PUTHEAD CRVAL1 = 1.479284000E+02 / old HISTORY PUTHEAD CRVAL1 = 1.479271000E+02 / new HISTORY PUTHEAD CRPIX1 = 5.77000E+02 / old HISTORY PUTHEAD CRPIX1 = 6.46000E+02 / new HISTORY PUTHEAD CRPIX2 = 5.02000E+02 / old HISTORY PUTHEAD CRPIX2 = 4.24000E+02 / new HISTORY PUTHEAD CRVAL2 = 6.992031002E+01 / old HISTORY PUTHEAD CRVAL2 = 6.990799999E+01 / new HISTORY SUBIM RELEASE ='15JUL94 ' /********* Start 25-MAR-1994 09:30:57 HISTORY SUBIM INNAME='M82 in blue ' INCLASS='TRANS ' HISTORY SUBIM INSEQ= 2 INDISK= 2 HISTORY SUBIM INTYPE ='MA' USERID= 103 HISTORY SUBIM OUTNAME='M82 in blue ' OUTCLASS='SUBIM ' HISTORY SUBIM OUTSEQ= 1 OUTDISK= 2 HISTORY SUBIM BLC = 45, 235, 1, 1, 1, 1, 1 HISTORY SUBIM TRC = 1159, 759, 1, 1, 1, 1, 1 HISTORY SUBIM XINC = 2 YINC = 2 HISTORY SUBIM OPCODE = 'AVE ' HISTORY AIPS IMNAME='M82 in blue ' IMCLASS='SUBIM ' IMSEQ= 1 / HISTORY AIPS USERNO= 103 / HISTORY /END FITS tape header "HISTORY" information HISTORY -------------------------------------------------------------------- HISTORY IMLOD OUTNAME =' HISTORY IMLOD OUTSEQ = 0 INTAPE = 1 OUTDISK= 4 HISTORY IMLOD INFILE = 'FITS2:M82BLUE.FITS ' HISTORY IMLOD RELEASE = '15JAN95' HISTORY SUBIM RELEASE ='15JAN95 ' /********* Start 13-SEP-1994 12:59:44 HISTORY SUBIM INNAME='M82 in blue ' INCLASS='SUBIM ' HISTORY SUBIM INSEQ= 1 INDISK= 4 HISTORY SUBIM INTYPE ='MA' USERID= 103 HISTORY SUBIM OUTNAME='M82 ' OUTCLASS='Blue ' HISTORY SUBIM OUTSEQ= 3 OUTDISK= 4 HISTORY SUBIM BLC = 1, 1, 1, 1, 1, 1, 1 HISTORY SUBIM TRC = 558, 262, 1, 1, 1, 1, 1 HISTORY SUBIM XINC = 1 YINC = 1 HISTORY SUBIM OPCODE = ' ' ORIGIN = 'AIPSGorilla (NRAOCV IPX) 15JAN95' / DATE = '13/09/94' / File written on dd/mm/yy HISTORY AIPS IMNAME='M82 ' IMCLASS='Blue ' IMSEQ= 3 / HISTORY AIPS USERNO= 103 / pywcs-1.12/lib/pywcs/tests/nrao/m82rad.hdr0000644001153600020070000002155712310355626022470 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / BITPIX = 16 / NAXIS = 4 / NAXIS1 = 558 / NAXIS2 = 262 / NAXIS3 = 1 / NAXIS4 = 1 / EXTEND = T /Tables following main image BLOCKED = T /Tape may be blocked OBJECT = 'U05322 ' TELESCOP= 'VLA ' INSTRUME= 'VLA ' OBSERVER= 'AC243 ' DATE-OBS= '06/02/89' DATE-MAP= '13/09/94' BSCALE = 1.95069823037E-06 /REAL = TAPE * BSCALE + BZERO BZERO = 5.48100471497E-02 / BUNIT = 'JY/BEAM ' EPOCH = 1.950000000E+03 /EPOCH OF RA DEC BLANK = -32768 / Blanked pixel tape value VELREF = 3 />256 RADIO, 1 LSR 2 HEL 3 OBS ALTRVAL = 1.00000000000E+05 /ALTENATE FREQ/VEL REF VALUE ALTRPIX = 1.000000000E+00 /ALTENATE FREQ/VEL REF PIXEL YSHIFT = 1.421085472E-14 /NET SHIFT OF PHASE CENTER INY DATAMAX = 1.187149212E-01 /MAX PIXEL VALUE DATAMIN = -9.094826877E-03 /MIN PIXEL VALUE CTYPE1 = 'RA---ARC' CRVAL1 = 1.47927100003E+02 / CDELT1 = -2.247777738E-04 / CRPIX1 = 3.015000000E+02 / CROTA1 = 0.000000000E+00 / CTYPE2 = 'DEC--ARC' CRVAL2 = 6.99079999924E+01 / CDELT2 = 2.273333375E-04 / CRPIX2 = 9.550000000E+01 / CROTA2 = 2.426000023E+01 / CTYPE3 = 'FREQ ' CRVAL3 = 1.49000000000E+09 / CDELT3 = 5.000000000E+07 / CRPIX3 = 1.000000000E+00 / CROTA3 = 0.000000000E+00 / CTYPE4 = 'STOKES ' CRVAL4 = 1.00000000000E+00 / CDELT4 = 1.000000000E+00 / CRPIX4 = 1.000000000E+00 / CROTA4 = 0.000000000E+00 / HISTORY -------------------------------------------------------------------- HISTORY /Begin "HISTORY" information found in fits tape header by IMLOD HISTORY BLOCKED = T /Tape may be blocked HISTORY -------------------------------------------------------------------- HISTORY /Begin "HISTORY" information found in fits tape header by IMLOD HISTORY BLOCKED = T /Tape may be blocked HISTORY AIPS IMNAME='NGC3034 ' IMCLASS='SUBIM ' IMSEQ= 1 / HISTORY AIPS USERNO= 135 / HISTORY AIPS CLEAN BMAJ= 5.0000E-04 BMIN= 5.0000E-04 BPA= 0.00 HISTORY AIPS CLEAN NITER= 2000 PRODUCT=1 / NORMAL HISTORY /END FITS tape header "HISTORY" information HISTORY -------------------------------------------------------------------- HISTORY IMLOD OUTNAME =' HISTORY IMLOD OUTSEQ = 0 INTAPE = 1 OUTDISK= 2 HISTORY IMLOD INFILE = 'FITS2:NGC3034.A ' HISTORY IMLOD RELEASE = '15JUL94' HISTORY SUBIM RELEASE ='15JUL94 ' /********* Start 25-MAR-1994 09:37:01 HISTORY SUBIM INNAME='M82 in radio' INCLASS='SUBIM ' HISTORY SUBIM INSEQ= 1 INDISK= 2 HISTORY SUBIM INTYPE ='MA' USERID= 103 HISTORY SUBIM OUTNAME='M82 in radio' OUTCLASS='SUBIM ' HISTORY SUBIM OUTSEQ= 2 OUTDISK= 2 HISTORY SUBIM BLC = 1, 1, 1, 1, 1, 1, 1 HISTORY SUBIM TRC = 256, 256, 1, 1, 1, 1, 1 HISTORY SUBIM XINC = 2 YINC = 2 HISTORY SUBIM OPCODE = 'AVE ' HISTORY HGEOM RELEASE ='15JUL94 ' /********* Start 25-MAR-1994 09:37:24 HISTORY HGEOM INNAME='M82 in radio' INCLASS='SUBIM ' HISTORY HGEOM INSEQ= 2 INDISK= 2 HISTORY HGEOM IN2NAME='M82 in blue ' IN2CLASS='SUBIM ' HISTORY HGEOM IN2SEQ= 1 IN2DISK= 2 HISTORY HGEOM OUTNAME='M82 in radio' OUTCLASS=' ' HISTORY HGEOM OUTSEQ= 1 OUTDISK= 2 HISTORY HGEOM BLC = 1, 1, 1, 1, 1, 1, 1 HISTORY HGEOM TRC = 128, 128, 1, 1, 1, 1, 1 HISTORY HGEOM IMSIZE = 558, 263 / Output image size HISTORY HGEOM / Interpolation order used was BiCubic HISTORY HGEOM / Indeterminate pixels filled with magic values HISTORY HGEOM / 131164 Pixels blanked due to memory limits or geometry HISTORY HGEOM / 0 Pixels blanked due to input blanked pixels HISTORY AIPS IMNAME='M82 in radio' IMCLASS='HGEOM ' IMSEQ= 1 / HISTORY AIPS USERNO= 103 / HISTORY AIPS CLEAN BMAJ= 5.0000E-04 BMIN= 5.0000E-04 BPA= 0.00 HISTORY AIPS CLEAN NITER= 2000 PRODUCT=1 / NORMAL HISTORY /END FITS tape header "HISTORY" information HISTORY -------------------------------------------------------------------- HISTORY IMLOD OUTNAME =' HISTORY IMLOD OUTSEQ = 0 INTAPE = 1 OUTDISK= 4 HISTORY IMLOD INFILE = 'FITS2:M82RADIO.FITS ' HISTORY IMLOD RELEASE = '15JAN95' HISTORY SUBIM RELEASE ='15JAN95 ' /********* Start 13-SEP-1994 13:00:09 HISTORY SUBIM INNAME='M82 in radio' INCLASS='HGEOM ' HISTORY SUBIM INSEQ= 1 INDISK= 4 HISTORY SUBIM INTYPE ='MA' USERID= 103 HISTORY SUBIM OUTNAME='M82 ' OUTCLASS='Radio ' HISTORY SUBIM OUTSEQ= 3 OUTDISK= 4 HISTORY SUBIM BLC = 1, 1, 1, 1, 1, 1, 1 HISTORY SUBIM TRC = 558, 262, 1, 1, 1, 1, 1 HISTORY SUBIM XINC = 1 YINC = 1 HISTORY SUBIM OPCODE = ' ' ORIGIN = 'AIPSGorilla (NRAOCV IPX) 15JAN95' / DATE = '13/09/94' / File written on dd/mm/yy HISTORY AIPS IMNAME='M82 ' IMCLASS='Radio ' IMSEQ= 3 / HISTORY AIPS USERNO= 103 / HISTORY AIPS CLEAN BMAJ= 5.0000E-04 BMIN= 5.0000E-04 BPA= 0.00 HISTORY AIPS CLEAN NITER= 2000 PRODUCT=1 / NORMAL pywcs-1.12/lib/pywcs/tests/nrao/ngc1316o.hdr0000644001153600020070000002514512310355626022631 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / BITPIX = 16 / NAXIS = 2 / NAXIS1 = 512 / NAXIS2 = 512 / EXTEND = T /Tables following main image BLOCKED = T /Tape may be blocked OBJECT = 'NONE ' TELESCOP= ' ' INSTRUME= ' ' OBSERVER= ' ' DATE-OBS= ' ' DATE-MAP= '24/03/94' BSCALE = 1.59240089202E-02 /REAL = TAPE * BSCALE + BZERO BZERO = 5.16219848633E+02 / BUNIT = ' ' EPOCH = 0.000000000E+00 /EPOCH OF RA DEC BLANK = -32768 / Blanked pixel tape value DATAMAX = 1.037890381E+03 /MAX PIXEL VALUE DATAMIN = -5.450668335E+00 /MIN PIXEL VALUE CTYPE1 = 'RA---SIN' CRVAL1 = 5.01966661513E+01 / CDELT1 = -1.944444492E-03 / CRPIX1 = 2.560000000E+02 / CROTA1 = 0.000000000E+00 / CTYPE2 = 'DEC--SIN' CRVAL2 = -3.73856168315E+01 / CDELT2 = 1.944444492E-03 / CRPIX2 = 2.570000000E+02 / CROTA2 = 0.000000000E+00 / HISTORY -------------------------------------------------------------------- HISTORY /Begin "HISTORY" information found in fits tape header by IMLOD HISTORY BLOCKED = T /TAPE MAY BE BLOCKED HISTORY /-------------------------------------------------------------------- HISTORY /BEGIN "HISTORY" INFORMATION FOUND IN FITS TAPE HEADER BY IMLOD HISTORY /END FITS TAPE HEADER "HISTORY" INFORMATION HISTORY /-------------------------------------------------------------------- HISTORY IMLOD OUTNAME ='NGC1316 ' OUTCLASS ='OPT ' HISTORY IMLOD OUTSEQ = 1 INTAPE = 3 OUTDISK= 1 HISTORY IMLOD RELEASE = '15APR89' HISTORY TRANS RELEASE ='15APR89 ' /********* START 17-FEB-1989 08:47:28 HISTORY TRANS INNAME='NGC1316 ' INCLASS='OPT ' HISTORY TRANS INSEQ= 1 INDISK= 1 HISTORY TRANS OUTNAME='NGC1316/G ' OUTCLASS='OPT ' HISTORY TRANS OUTSEQ= 1 OUTDISK= 1 HISTORY TRANS BLC= 1., 1., 1., 1., 1., 1., 1. / INPUT IMAGE HISTORY TRANS TRC= 2001.,1401., 1., 1., 1., 1., 1. / INPUT IMAGE HISTORY TRANS TRANCOD='1-2 ' / OUTPUT AXIS ORDER HISTORY CNTR VERSION= 1 / PLOT FILE CREATED 17-FEB-1989 14:03:52 HISTORY CNTR VERSION= 2 / PLOT FILE CREATED 17-FEB-1989 14:07:08 HISTORY CNTR VERSION= 3 / PLOT FILE CREATED 17-FEB-1989 14:08:35 HISTORY PUTHEAD CTYPE1 =' ' / OLD HISTORY PUTHEAD CTYPE1 ='RA--TAN ' / NEW HISTORY PUTHEAD CTYPE1 ='RA--TAN ' / OLD HISTORY PUTHEAD CTYPE1 ='RA---TAN' / NEW HISTORY PUTHEAD CTYPE2 =' ' / OLD HISTORY PUTHEAD CTYPE2 ='DEC--TAN' / NEW HISTORY PUTHEAD CRVAL1 = 0.000000000E+00 / OLD HISTORY PUTHEAD CRVAL1 = 5.019667053E+01 / NEW HISTORY PUTHEAD CRVAL2 = 0.000000000E+00 / OLD HISTORY PUTHEAD CRVAL2 = -3.738555908E+01 / NEW HISTORY PUTHEAD CRPIX1 = 1.00000E+03 / OLD HISTORY PUTHEAD CRPIX1 = 7.02000E+02 / NEW HISTORY PUTHEAD CRPIX1 = 7.02000E+02 / OLD HISTORY PUTHEAD CRPIX1 = 9.97000E+02 / NEW HISTORY PUTHEAD CDELT1 = 1.00000E+00 / OLD HISTORY PUTHEAD CDELT1 = 3.05600E-02 / NEW HISTORY PUTHEAD CDELT2 = -1.00000E+00 / OLD HISTORY PUTHEAD CDELT2 = 3.05600E-02 / NEW HISTORY PUTHEAD CDELT2 = 3.05600E-02 / OLD HISTORY PUTHEAD CDELT2 = 5.09333E-04 / NEW HISTORY PUTHEAD CDELT2 = 5.09333E-04 / OLD HISTORY PUTHEAD CDELT2 = 5.09333E-04 / NEW HISTORY PUTHEAD CDELT1 = 3.05600E-02 / OLD HISTORY PUTHEAD CDELT1 = -5.09333E-04 / NEW HISTORY PUTHEAD CROTA1 = 0.00000E+00 / OLD HISTORY PUTHEAD CROTA1 = 3.00000E-01 / NEW HISTORY PUTHEAD CROTA1 = 3.00000E-01 / OLD HISTORY PUTHEAD CROTA1 = 0.00000E+00 / NEW HISTORY PUTHEAD CROTA1 = 0.00000E+00 / OLD HISTORY PUTHEAD CROTA1 = 3.00000E-01 / NEW HISTORY PUTHEAD CROTA1 = 3.00000E-01 / OLD HISTORY PUTHEAD CROTA1 = 5.00000E+00 / NEW HISTORY PUTHEAD CROTA2 = 0.00000E+00 / OLD HISTORY PUTHEAD CROTA2 = 5.00000E+00 / NEW HISTORY PUTHEAD CROTA1 = 5.00000E+00 / OLD HISTORY PUTHEAD CROTA1 = 0.00000E+00 / NEW HISTORY PUTHEAD CROTA1 = 0.00000E+00 / OLD HISTORY PUTHEAD CROTA1 = 0.00000E+00 / NEW HISTORY PUTHEAD CROTA2 = 5.00000E+00 / OLD HISTORY PUTHEAD CROTA2 = 0.00000E+00 / NEW HISTORY PUTHEAD CROTA1 = 0.00000E+00 / OLD HISTORY PUTHEAD CROTA1 = 1.00000E+00 / NEW HISTORY PUTHEAD CROTA1 = 1.00000E+00 / OLD HISTORY PUTHEAD CROTA1 = 0.00000E+00 / NEW HISTORY PUTHEAD CROTA2 = 0.00000E+00 / OLD HISTORY PUTHEAD CROTA2 = 1.00000E+00 / NEW HISTORY PUTHEAD CROTA2 = 1.00000E+00 / OLD HISTORY PUTHEAD CROTA2 = 3.00000E-01 / NEW HISTORY AIPS IMNAME='NGC1316/G ' IMCLASS='OPT ' IMSEQ= 1 / HISTORY AIPS USERNO= 51 / HISTORY /END FITS tape header "HISTORY" information HISTORY -------------------------------------------------------------------- HISTORY IMLOD OUTNAME =' HISTORY IMLOD OUTSEQ = 0 INTAPE = 1 OUTDISK= 3 HISTORY IMLOD RELEASE = '15JUL94' HISTORY SUBIM RELEASE ='15JUL94 ' /********* Start 24-MAR-1994 10:58:33 HISTORY SUBIM INNAME='NGC1316/G ' INCLASS='OPT ' HISTORY SUBIM INSEQ= 1 INDISK= 1 HISTORY SUBIM INTYPE ='MA' USERID= 100 HISTORY SUBIM OUTNAME='NGC1316/G ' OUTCLASS='SMOOTH' HISTORY SUBIM OUTSEQ= 1 OUTDISK= 1 HISTORY SUBIM BLC = 1, 1, 1, 1, 1, 1, 1 HISTORY SUBIM TRC = 2001, 1401, 1, 1, 1, 1, 1 HISTORY SUBIM XINC = 4 YINC = 4 HISTORY SUBIM OPCODE = 'AVE ' HISTORY HGEOM RELEASE ='15JUL94 ' /********* Start 24-MAR-1994 10:59:29 HISTORY HGEOM INNAME='NGC1316/G ' INCLASS='SMOOTH' HISTORY HGEOM INSEQ= 1 INDISK= 1 HISTORY HGEOM IN2NAME='FORNAX ' IN2CLASS='I ' HISTORY HGEOM IN2SEQ= 2 IN2DISK= 1 HISTORY HGEOM OUTNAME=' ' OUTCLASS='Optic ' HISTORY HGEOM OUTSEQ= 1 OUTDISK= 1 HISTORY HGEOM BLC = 1, 1, 1, 1, 1, 1, 1 HISTORY HGEOM TRC = 501, 351, 1, 1, 1, 1, 1 HISTORY HGEOM IMSIZE = 512, 512 / Output image size HISTORY HGEOM / Interpolation order used was BiCubic HISTORY HGEOM / Indeterminate pixels filled with magic values HISTORY HGEOM / 74383 Pixels blanked due to memory limits or geometry HISTORY HGEOM / 0 Pixels blanked due to input blanked pixels ORIGIN = 'AIPSGorilla (NRAOCV IPX) 15JUL94' / DATE = '24/03/94' / File written on dd/mm/yy HISTORY AIPS IMNAME='NGC1316/G ' IMCLASS='Optic ' IMSEQ= 1 / HISTORY AIPS USERNO= 100 / pywcs-1.12/lib/pywcs/tests/nrao/ngc1316r.hdr0000644001153600020070000002553012310355626022632 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / BITPIX = 16 / NAXIS = 4 / NAXIS1 = 512 / NAXIS2 = 512 / NAXIS3 = 1 / NAXIS4 = 1 / EXTEND = T /Tables following main image BLOCKED = T /Tape may be blocked OBJECT = 'F1 ' TELESCOP= ' ' INSTRUME= ' ' OBSERVER= 'INA ' DATE-OBS= '07/10/86' DATE-MAP= '06/09/88' BSCALE = 1.94159674120E-06 /REAL = TAPE * BSCALE + BZERO BZERO = 5.97180128098E-02 / BUNIT = 'JY/BEAM ' EPOCH = 1.950000000E+03 /EPOCH OF RA DEC OBSRA = 5.01966661513E+01 /ANTENNA POINTING RA OBSDEC = -3.73856168315E+01 /ANTENNA POINTING DEC YSHIFT = 7.105427358E-15 /NET SHIFT OF PHASE CENTER INY DATAMAX = 1.233247221E-01 /MAX PIXEL VALUE DATAMIN = -3.888696432E-03 /MIN PIXEL VALUE CTYPE1 = 'RA---SIN' CRVAL1 = 5.01966661513E+01 / CDELT1 = -1.944444492E-03 / CRPIX1 = 2.560000000E+02 / CROTA1 = 0.000000000E+00 / CTYPE2 = 'DEC--SIN' CRVAL2 = -3.73856168315E+01 / CDELT2 = 1.944444492E-03 / CRPIX2 = 2.570000000E+02 / CROTA2 = 0.000000000E+00 / CTYPE3 = 'FREQ ' CRVAL3 = 1.51000000000E+09 / CDELT3 = 1.690734863E+03 / CRPIX3 = 1.000000000E+00 / CROTA3 = 0.000000000E+00 / CTYPE4 = 'STOKES ' CRVAL4 = 1.00000000000E+00 / CDELT4 = 1.000000000E+00 / CRPIX4 = 1.000000000E+00 / CROTA4 = 0.000000000E+00 / HISTORY -------------------------------------------------------------------- HISTORY /Begin "HISTORY" information found in fits tape header by IMLOD HISTORY BLOCKED = T /Tape may be blocked HISTORY -------------------------------------------------------------------- HISTORY /Begin "HISTORY" information found in fits tape header by IMLOD HISTORY BLOCKED = T /TAPE MAY BE BLOCKED HISTORY /-------------------------------------------------------------------- HISTORY /BEGIN "HISTORY" INFORMATION FOUND IN FITS TAPE HEADER BY IMLOD HISTORY BLOCKED = T /TAPE MAY BE BLOCKED HISTORY PUTHEAD OBSRA = 4.991666615E+01 / OLD HISTORY PUTHEAD OBSRA = 5.019666615E+01 / NEW HISTORY PUTHEAD OBSDEC = -3.736666683E+01 / OLD HISTORY PUTHEAD OBSDEC = -3.738561683E+01 / NEW HISTORY CNTR VERSION= 1 / PLOT FILE CREATED 08-SEP-1988 12:22:10 HISTORY GREYS VERSION= 2 / PLOT FILE CREATED 12-SEP-1988 19:08:19 HISTORY GREYS VERSION= 3 / PLOT FILE CREATED 13-SEP-1988 11:44:07 HISTORY GREYS VERSION= 4 / PLOT FILE CREATED 13-SEP-1988 12:40:37 HISTORY GREYS VERSION= 5 / PLOT FILE CREATED 13-SEP-1988 12:42:34 HISTORY GREYS VERSION= 6 / PLOT FILE CREATED 13-SEP-1988 12:44:28 HISTORY GREYS VERSION= 7 / PLOT FILE CREATED 13-SEP-1988 12:59:18 HISTORY GREYS VERSION= 8 / PLOT FILE CREATED 13-SEP-1988 13:03:15 HISTORY GREYS VERSION= 9 / PLOT FILE CREATED 13-SEP-1988 13:07:23 HISTORY GREYS VERSION= 10 / PLOT FILE CREATED 13-SEP-1988 13:25:50 HISTORY GREYS VERSION= 11 / PLOT FILE CREATED 13-SEP-1988 13:26:20 HISTORY GREYS VERSION= 12 / PLOT FILE CREATED 13-SEP-1988 13:32:00 HISTORY GREYS VERSION= 13 / PLOT FILE CREATED 13-SEP-1988 13:57:57 HISTORY GREYS VERSION= 14 / PLOT FILE CREATED 13-SEP-1988 14:00:53 HISTORY GREYS VERSION= 15 / PLOT FILE CREATED 13-SEP-1988 14:28:51 HISTORY GREYS VERSION= 16 / PLOT FILE CREATED 14-SEP-1988 12:00:40 HISTORY GREYS VERSION= 17 / PLOT FILE CREATED 14-SEP-1988 12:13:51 HISTORY GREYS VERSION= 18 / PLOT FILE CREATED 14-SEP-1988 12:15:36 HISTORY GREYS VERSION= 19 / PLOT FILE CREATED 15-SEP-1988 07:52:43 HISTORY GREYS VERSION= 20 / PLOT FILE CREATED 15-SEP-1988 08:11:42 HISTORY GREYS VERSION= 21 / PLOT FILE CREATED 15-SEP-1988 08:18:17 HISTORY GREYS VERSION= 22 / PLOT FILE CREATED 15-SEP-1988 08:44:40 HISTORY GREYS VERSION= 23 / PLOT FILE CREATED 15-SEP-1988 21:02:47 HISTORY GREYS VERSION= 24 / PLOT FILE CREATED 15-SEP-1988 21:09:45 HISTORY GREYS VERSION= 25 / PLOT FILE CREATED 15-SEP-1988 21:19:53 HISTORY GREYS VERSION= 26 / PLOT FILE CREATED 15-SEP-1988 21:28:01 HISTORY GREYS VERSION= 27 / PLOT FILE CREATED 15-SEP-1988 21:32:44 HISTORY GREYS VERSION= 28 / PLOT FILE CREATED 15-SEP-1988 21:38:55 HISTORY GREYS VERSION= 29 / PLOT FILE CREATED 15-SEP-1988 21:40:20 HISTORY GREYS VERSION= 30 / PLOT FILE CREATED 15-SEP-1988 21:42:44 HISTORY GREYS VERSION= 31 / PLOT FILE CREATED 15-SEP-1988 21:49:18 HISTORY GREYS VERSION= 32 / PLOT FILE CREATED 15-SEP-1988 21:53:40 HISTORY GREYS VERSION= 33 / PLOT FILE CREATED 15-SEP-1988 22:09:40 HISTORY GREYS VERSION= 1 / PLOT FILE CREATED 16-SEP-1988 14:54:15 HISTORY GREYS VERSION= 2 / PLOT FILE CREATED 16-SEP-1988 14:55:07 HISTORY GREYS VERSION= 3 / PLOT FILE CREATED 17-SEP-1988 17:17:18 HISTORY GREYS VERSION= 4 / PLOT FILE CREATED 17-SEP-1988 18:29:54 HISTORY GREYS VERSION= 5 / PLOT FILE CREATED 17-SEP-1988 18:30:43 HISTORY GREYS VERSION= 6 / PLOT FILE CREATED 17-SEP-1988 18:33:27 HISTORY GREYS VERSION= 7 / PLOT FILE CREATED 17-SEP-1988 18:35:44 HISTORY AIPS IMNAME='FORNAX/NOBL ' IMCLASS='I ' IMSEQ= 1 / HISTORY AIPS USERNO= 51 / HISTORY AIPS CLEAN BMAJ= 3.8889E-03 BMIN= 3.8889E-03 BPA= 0.00 HISTORY AIPS CLEAN NITER= 21 PRODUCT=4 / POINTS HISTORY /END FITS TAPE HEADER "HISTORY" INFORMATION HISTORY /-------------------------------------------------------------------- HISTORY IMLOD OUTNAME =' ' OUTCLASS =' ' HISTORY IMLOD OUTSEQ = -1 INTAPE = 3 OUTDISK= 2 HISTORY IMLOD RELEASE = '15JAN89' HISTORY RENAM INNAME='FORNAX/NOBL ' INCLASS='I ' HISTORY RENAM INSEQ= 1 INDISK= 2 HISTORY RENAM OUTNAME='FORNAX ' OUTCLASS='I ' HISTORY RENAM OUTSEQ= 1 OUTDISK= 2 HISTORY PUTHEAD CRVAL3 = 1.384000000E+09 / OLD HISTORY PUTHEAD CRVAL3 = 1.510000000E+09 / NEW HISTORY AIPS IMNAME='FORNAX ' IMCLASS='I ' IMSEQ= 1 / HISTORY AIPS USERNO= 51 / HISTORY AIPS CLEAN BMAJ= 3.8889E-03 BMIN= 3.8889E-03 BPA= 0.00 HISTORY AIPS CLEAN NITER= 21 PRODUCT=4 / POINTS HISTORY /END FITS tape header "HISTORY" information HISTORY -------------------------------------------------------------------- HISTORY IMLOD OUTNAME ='FORNAX/NOBL ' OUTCLASS ='P ' HISTORY IMLOD OUTSEQ = 1 INTAPE = 1 OUTDISK= 2 HISTORY IMLOD RELEASE = '15OCT92' HISTORY AIPS IMNAME='FORNAX ' IMCLASS='I ' IMSEQ= 1 / HISTORY AIPS USERNO= 51 / HISTORY AIPS CLEAN BMAJ= 3.8889E-03 BMIN= 3.8889E-03 BPA= .00 HISTORY AIPS CLEAN NITER= 21 PRODUCT=4 / POINTS HISTORY /END FITS tape header "HISTORY" information HISTORY -------------------------------------------------------------------- HISTORY IMLOD OUTNAME =' HISTORY IMLOD OUTSEQ = 0 INTAPE = 1 OUTDISK= 1 HISTORY IMLOD INFILE = 'FITS2:FORNAXI ' HISTORY IMLOD RELEASE = '15JUL94' ORIGIN = 'AIPSGorilla (NRAOCV IPX) 15JUL94' / DATE = '24/03/94' / File written on dd/mm/yy HISTORY AIPS IMNAME='FORNAX ' IMCLASS='I ' IMSEQ= 1 / HISTORY AIPS USERNO= 100 / HISTORY AIPS CLEAN BMAJ= 3.8889E-03 BMIN= 3.8889E-03 BPA= 0.00 HISTORY AIPS CLEAN NITER= 21 PRODUCT=4 / POINTS pywcs-1.12/lib/pywcs/tests/spectra/0000755001153600020070000000000012310355732021362 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/lib/pywcs/tests/spectra/orion-freq-1.hdr0000644001153600020070000007330012310355627024306 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / file does conform to FITS standard BITPIX = -32 / number of bits per data pixel NAXIS = 1 / number of data axes NAXIS1 = 4096 / length of data axis 1 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H COMMENT COMMENT This FITS file contains an example spectral WCS header constructed by COMMENT Mark Calabretta (ATNF) and Dirk Petry (ESO) based on an observation COMMENT of the Orion Kleinmann-Low nebula made by Andrew Walsh (JCU) and COMMENT Sven Thorwirth (MPIfR) using the Mopra radio telescope. COMMENT COMMENT The 110GHz 13CO 1-0 spectrum in this file is linear in frequency, as COMMENT observed, it being the Fourier transform of a lag spectrum produced COMMENT by a correlating spectrometer. COMMENT COMMENT The reference pixel has been placed deliberately well outside the COMMENT the spectrum in order to test spectral-WCS-interpreting software. COMMENT COMMENT Spectral representations are: COMMENT Frequency (default) ...frequency-like COMMENT E: Photon energy ...frequency-like COMMENT N: Wave number ...frequency-like COMMENT R: Radio velocity ...frequency-like COMMENT W: Wavelength ...wavelength-like COMMENT O: Optical velocity ...wavelength-like COMMENT Z: Redshift ...wavelength-like COMMENT V: Relativistic velocity ...velocity-like COMMENT B: Relativistic beta ...velocity-like COMMENT COMMENT The Mopra radio telescope is operated by the Australia Telescope COMMENT National Facility. COMMENT COMMENT Author: Mark Calabretta, Australia Telescope National Facility COMMENT http://www.atnf.csiro.au/~mcalabre/index.html COMMENT 2009-04-22 COMMENT ---------------------------------------------------------------------- COMMENT OBJECT = 'Orion-KL' / Orion Kleinmann-Low nebula MOLECULE= '13CO ' / Carbon(13) monoxide TRANSITI= '1-0 ' / 1-0 transition DATE-OBS= '2006-07-09T20:29:00' / Date of observation TELESCOP= 'ATNF Mopra' / 22m mm-wave telescope OBSERVER= 'Walsh/Thorwirth' / Observers BUNIT = 'K ' / Brightness units, Kelvin COMMENT COMMENT ------------------------------------------------------------ Frequency COMMENT CRPIX1 = 32768.0 / Pixel coordinate of reference point CTYPE1 = 'FREQ ' / Linear frequency axis (FFT of lag spectrum) CRVAL1 = 102.1189414E+9 / [Hz] Frequency of reference channel CDELT1 = -2.695372970E+5 / [Hz] Channel spacing (lower sideband) CUNIT1 = 'Hz ' / Units of coordinate increment and value COMMENT RESTFRQ = 110201353000.0 / [Hz] 13CO line rest frequency RESTWAV = 0.00272040633 / [m] 13CO line rest wavelength SPECSYS = 'LSRK ' / Reference frame of spectral coordinates SSYSOBS = 'TOPOCENT' / Reference frame of observation VELOSYS = 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRC = 'LSRK ' / Reference frame of source redshift ZSOURCE = 0.0000 / Redshift of the source COMMENT CRPIX2 = 1 CDELT2 = 1.0 CTYPE2 = 'RA ' CRVAL2 = 83.81042 / [deg] (05h35m14.5s) CUNIT2 = 'deg ' COMMENT CRPIX3 = 1 CDELT3 = 1.0 CTYPE3 = 'DEC ' CRVAL3 = -5.375222 / [deg] (-05:22:30.8) CUNIT3 = 'deg ' COMMENT RADESYS = 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOX = 2000.0 / Equinox J2000.0 COMMENT CRPIX4 = 1 CDELT4 = 1.0 CTYPE4 = 'STOKES ' CRVAL4 = 1 / Stokes I (total intensity) COMMENT COMMENT -------------------------------------------------------- Photon energy COMMENT CRPIX1E = 32768.0 / Pixel coordinate of reference point CTYPE1E = 'ENER ' / Photon energy, linear frequency axis CRVAL1E = 4.223303869E-4 / [eV] Photon energy of reference channel CDELT1E = -1.114717695E-9 / [eV] Channel spacing CUNIT1E = 'eV ' / Units of coordinate increment and value COMMENT RESTFRQE= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVE= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSE= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSE= 'TOPOCENT' / Reference frame of observation VELOSYSE= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCE= 'LSRK ' / Reference frame of source redshift ZSOURCEE= 0.0000 / Redshift of the source COMMENT CRPIX2E = 1 CDELT2E = 1.0 CTYPE2E = 'RA ' CRVAL2E = 83.81042 / [deg] (05h35m14.5s) CUNIT2E = 'deg ' COMMENT CRPIX3E = 1 CDELT3E = 1.0 CTYPE3E = 'DEC ' CRVAL3E = -5.375222 / [deg] (-05:22:30.8) CUNIT3E = 'deg ' COMMENT RADESYSE= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXE= 2000.0 / Equinox J2000.0 COMMENT CRPIX4E = 1 CDELT4E = 1.0 CTYPE4E = 'STOKES ' CRVAL4E = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------------------- Wave number COMMENT N: Wave number COMMENT CRPIX1N = 32768.0 / Pixel coordinate of reference point CTYPE1N = 'WAVN ' / Wave number, linear frequency axis CRVAL1N = 3.406321229E+2 / [/m] Wave number of reference channel CDELT1N = -8.990796460E-4 / [/m] Channel spacing CUNIT1N = '/m ' / Units of coordinate increment and value COMMENT RESTFRQN= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVN= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSN= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSN= 'TOPOCENT' / Reference frame of observation VELOSYSN= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCN= 'LSRK ' / Reference frame of source redshift ZSOURCEN= 0.0000 / Redshift of the source COMMENT CRPIX2N = 1 CDELT2N = 1.0 CTYPE2N = 'RA ' CRVAL2N = 83.81042 / [deg] (05h35m14.5s) CUNIT2N = 'deg ' COMMENT CRPIX3N = 1 CDELT3N = 1.0 CTYPE3N = 'DEC ' CRVAL3N = -5.375222 / [deg] (-05:22:30.8) CUNIT3N = 'deg ' COMMENT RADESYSN= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXN= 2000.0 / Equinox J2000.0 COMMENT CRPIX4N = 1 CDELT4N = 1.0 CTYPE4N = 'STOKES ' CRVAL4N = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------- Radio velocity COMMENT N: Wave number COMMENT R: Radio velocity COMMENT CRPIX1R = 32768.0 / Pixel coordinate of reference point CTYPE1R = 'VRAD ' / Radio velocity, linear frequency axis CRVAL1R = 2.198744369E+7 / [m/s] Radio velocity of reference channel CDELT1R = 7.332509683E+2 / [m/s] Channel spacing CUNIT1R = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQR= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVR= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSR= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSR= 'TOPOCENT' / Reference frame of observation VELOSYSR= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCR= 'LSRK ' / Reference frame of source redshift ZSOURCER= 0.0000 / Redshift of the source COMMENT CRPIX2R = 1 CDELT2R = 1.0 CTYPE2R = 'RA ' CRVAL2R = 83.81042 / [deg] (05h35m14.5s) CUNIT2R = 'deg ' COMMENT CRPIX3R = 1 CDELT3R = 1.0 CTYPE3R = 'DEC ' CRVAL3R = -5.375222 / [deg] (-05:22:30.8) CUNIT3R = 'deg ' COMMENT RADESYSR= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXR= 2000.0 / Equinox J2000.0 COMMENT CRPIX4R = 1 CDELT4R = 1.0 CTYPE4R = 'STOKES ' CRVAL4R = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------------- Wavelength COMMENT N: Wave number COMMENT R: Radio velocity COMMENT W: Wavelength COMMENT CRPIX1W = 32768.0 / Pixel coordinate of reference point CTYPE1W = 'WAVE-F2W' / Wavelength in vacuuo, non-linear axis CRVAL1W = 2.935718427E-3 / [m] Wavelength of reference channel CDELT1W = 7.748666397E-9 / [m] Channel spacing CUNIT1W = 'm ' / Units of coordinate increment and value COMMENT SPECSYSW= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSW= 'TOPOCENT' / Reference frame of observation VELOSYSW= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCW= 'LSRK ' / Reference frame of source redshift ZSOURCEW= 0.0000 / Redshift of the source COMMENT CRPIX2W = 1 CDELT2W = 1.0 CTYPE2W = 'RA ' CRVAL2W = 83.81042 / [deg] (05h35m14.5s) CUNIT2W = 'deg ' COMMENT CRPIX3W = 1 CDELT3W = 1.0 CTYPE3W = 'DEC ' CRVAL3W = -5.375222 / [deg] (-05:22:30.8) CUNIT3W = 'deg ' COMMENT RADESYSW= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXW= 2000.0 / Equinox J2000.0 COMMENT CRPIX4W = 1 CDELT4W = 1.0 CTYPE4W = 'STOKES ' CRVAL4W = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------- Optical velocity COMMENT CRPIX1O = 32768.0 / Pixel coordinate of reference point CTYPE1O = 'VOPT-F2W' / Optical velocity, non-linear axis CRVAL1O = 2.372768470E+7 / [m/s] Optical velocity of reference channel CDELT1O = 8.539135209E+2 / [m/s] Channel spacing CUNIT1O = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQO= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVO= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSO= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSO= 'TOPOCENT' / Reference frame of observation VELOSYSO= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCO= 'LSRK ' / Reference frame of source redshift ZSOURCEO= 0.0000 / Redshift of the source COMMENT CRPIX2O = 1 CDELT2O = 1.0 CTYPE2O = 'RA ' CRVAL2O = 83.81042 / [deg] (05h35m14.5s) CUNIT2O = 'deg ' COMMENT CRPIX3O = 1 CDELT3O = 1.0 CTYPE3O = 'DEC ' CRVAL3O = -5.375222 / [deg] (-05:22:30.8) CUNIT3O = 'deg ' COMMENT RADESYSO= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXO= 2000.0 / Equinox J2000.0 COMMENT CRPIX4O = 1 CDELT4O = 1.0 CTYPE4O = 'STOKES ' CRVAL4O = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------------- Redshift COMMENT N: Wave number COMMENT R: Radio velocity COMMENT W: Wavelength COMMENT O: Optical velocity COMMENT Z: Redshift COMMENT CRPIX1Z = 32768.0 / Pixel coordinate of reference point CTYPE1Z = 'ZOPT-F2W' / Redshift, non-linear axis CRVAL1Z = 7.914703679E-2 / [] Redshift of reference channel CDELT1Z = 2.848348910E-6 / [] Channel spacing COMMENT RESTFRQZ= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVZ= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSZ= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSZ= 'TOPOCENT' / Reference frame of observation VELOSYSZ= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCZ= 'LSRK ' / Reference frame of source redshift ZSOURCEZ= 0.0000 / Redshift of the source COMMENT CRPIX2Z = 1 CDELT2Z = 1.0 CTYPE2Z = 'RA ' CRVAL2Z = 83.81042 / [deg] (05h35m14.5s) CUNIT2Z = 'deg ' COMMENT CRPIX3Z = 1 CDELT3Z = 1.0 CTYPE3Z = 'DEC ' CRVAL3Z = -5.375222 / [deg] (-05:22:30.8) CUNIT3Z = 'deg ' COMMENT RADESYSZ= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXZ= 2000.0 / Equinox J2000.0 COMMENT CRPIX4Z = 1 CDELT4Z = 1.0 CTYPE4Z = 'STOKES ' CRVAL4Z = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------ Relativistic velocity COMMENT CRPIX1V = 32768.0 / Pixel coordinate of reference point CTYPE1V = 'VELO-F2V' / Relativistic velocity, non-linear axis CRVAL1V = 2.279141418E+7 / [m/s] Velocity of reference channel CDELT1V = 7.867122599E+2 / [m/s] Channel spacing CUNIT1V = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQV= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVV= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSV= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSV= 'TOPOCENT' / Reference frame of observation VELOSYSV= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCV= 'LSRK ' / Reference frame of source redshift ZSOURCEV= 0.0000 / Redshift of the source COMMENT CRPIX2V = 1 CDELT2V = 1.0 CTYPE2V = 'RA ' CRVAL2V = 83.81042 / [deg] (05h35m14.5s) CUNIT2V = 'deg ' COMMENT CRPIX3V = 1 CDELT3V = 1.0 CTYPE3V = 'DEC ' CRVAL3V = -5.375222 / [deg] (-05:22:30.8) CUNIT3V = 'deg ' COMMENT RADESYSV= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXV= 2000.0 / Equinox J2000.0 COMMENT CRPIX4V = 1 CDELT4V = 1.0 CTYPE4V = 'STOKES ' CRVAL4V = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------- Relativistic beta (v/c) COMMENT CRPIX1B = 32768.0 / Pixel coordinate of reference point CTYPE1B = 'BETA-F2V' / Relativistic beta (v/c), non-linear axis CRVAL1B = 7.602397448E-2 / [] Relativistic beta of reference channel CDELT1B = 2.624189632E-6 / [] Channel spacing COMMENT RESTFRQB= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVB= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSB= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSB= 'TOPOCENT' / Reference frame of observation VELOSYSB= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCB= 'LSRK ' / Reference frame of source redshift ZSOURCEB= 0.0000 / Redshift of the source COMMENT CRPIX2B = 1 CDELT2B = 1.0 CTYPE2B = 'RA ' CRVAL2B = 83.81042 / [deg] (05h35m14.5s) CUNIT2B = 'deg ' COMMENT CRPIX3B = 1 CDELT3B = 1.0 CTYPE3B = 'DEC ' CRVAL3B = -5.375222 / [deg] (-05:22:30.8) CUNIT3B = 'deg ' COMMENT RADESYSB= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXB= 2000.0 / Equinox J2000.0 COMMENT CRPIX4B = 1 CDELT4B = 1.0 CTYPE4B = 'STOKES ' CRVAL4B = 1 / Stokes I (total intensity) COMMENT HISTORY fimgcreate 1.0b at 2009-04-22T04:27:55 DATE = '2009-04-22T04:27:55' / file creation date (YYYY-MM-DDThh:mm:ss UT) pywcs-1.12/lib/pywcs/tests/spectra/orion-freq-4.hdr0000644001153600020070000007366012310355627024322 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / file does conform to FITS standard BITPIX = -32 / number of bits per data pixel NAXIS = 4 / number of data axes NAXIS1 = 4096 / length of data axis 1 NAXIS2 = 1 / length of data axis 2 NAXIS3 = 1 / length of data axis 3 NAXIS4 = 1 / length of data axis 4 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H COMMENT COMMENT This FITS file contains an example spectral WCS header constructed by COMMENT Mark Calabretta (ATNF) and Dirk Petry (ESO) based on an observation COMMENT of the Orion Kleinmann-Low nebula made by Andrew Walsh (JCU) and COMMENT Sven Thorwirth (MPIfR) using the Mopra radio telescope. COMMENT COMMENT The 110GHz 13CO 1-0 spectrum in this file is linear in frequency, as COMMENT observed, it being the Fourier transform of a lag spectrum produced COMMENT by a correlating spectrometer. COMMENT COMMENT The reference pixel has been placed deliberately well outside the COMMENT the spectrum in order to test spectral-WCS-interpreting software. COMMENT COMMENT Spectral representations are: COMMENT Frequency (default) ...frequency-like COMMENT E: Photon energy ...frequency-like COMMENT N: Wave number ...frequency-like COMMENT R: Radio velocity ...frequency-like COMMENT W: Wavelength ...wavelength-like COMMENT O: Optical velocity ...wavelength-like COMMENT Z: Redshift ...wavelength-like COMMENT V: Relativistic velocity ...velocity-like COMMENT B: Relativistic beta ...velocity-like COMMENT COMMENT The Mopra radio telescope is operated by the Australia Telescope COMMENT National Facility. COMMENT COMMENT Author: Mark Calabretta, Australia Telescope National Facility COMMENT http://www.atnf.csiro.au/~mcalabre/index.html COMMENT 2009-04-22 COMMENT ---------------------------------------------------------------------- COMMENT OBJECT = 'Orion-KL' / Orion Kleinmann-Low nebula MOLECULE= '13CO ' / Carbon(13) monoxide TRANSITI= '1-0 ' / 1-0 transition DATE-OBS= '2006-07-09T20:29:00' / Date of observation TELESCOP= 'ATNF Mopra' / 22m mm-wave telescope OBSERVER= 'Walsh/Thorwirth' / Observers BUNIT = 'K ' / Brightness units, Kelvin COMMENT COMMENT ------------------------------------------------------------ Frequency COMMENT CRPIX1 = 32768.0 / Pixel coordinate of reference point CTYPE1 = 'FREQ ' / Linear frequency axis (FFT of lag spectrum) CRVAL1 = 102.1189414E+9 / [Hz] Frequency of reference channel CDELT1 = -2.695372970E+5 / [Hz] Channel spacing (lower sideband) CUNIT1 = 'Hz ' / Units of coordinate increment and value COMMENT RESTFRQ = 110201353000.0 / [Hz] 13CO line rest frequency RESTWAV = 0.00272040633 / [m] 13CO line rest wavelength SPECSYS = 'LSRK ' / Reference frame of spectral coordinates SSYSOBS = 'TOPOCENT' / Reference frame of observation VELOSYS = 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRC = 'LSRK ' / Reference frame of source redshift ZSOURCE = 0.0000 / Redshift of the source COMMENT CRPIX2 = 1 CDELT2 = 1.0 CTYPE2 = 'RA ' CRVAL2 = 83.81042 / [deg] (05h35m14.5s) CUNIT2 = 'deg ' COMMENT CRPIX3 = 1 CDELT3 = 1.0 CTYPE3 = 'DEC ' CRVAL3 = -5.375222 / [deg] (-05:22:30.8) CUNIT3 = 'deg ' COMMENT RADESYS = 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOX = 2000.0 / Equinox J2000.0 COMMENT CRPIX4 = 1 CDELT4 = 1.0 CTYPE4 = 'STOKES ' CRVAL4 = 1 / Stokes I (total intensity) COMMENT COMMENT -------------------------------------------------------- Photon energy COMMENT CRPIX1E = 32768.0 / Pixel coordinate of reference point CTYPE1E = 'ENER ' / Photon energy, linear frequency axis CRVAL1E = 4.223303869E-4 / [eV] Photon energy of reference channel CDELT1E = -1.114717695E-9 / [eV] Channel spacing CUNIT1E = 'eV ' / Units of coordinate increment and value COMMENT RESTFRQE= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVE= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSE= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSE= 'TOPOCENT' / Reference frame of observation VELOSYSE= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCE= 'LSRK ' / Reference frame of source redshift ZSOURCEE= 0.0000 / Redshift of the source COMMENT CRPIX2E = 1 CDELT2E = 1.0 CTYPE2E = 'RA ' CRVAL2E = 83.81042 / [deg] (05h35m14.5s) CUNIT2E = 'deg ' COMMENT CRPIX3E = 1 CDELT3E = 1.0 CTYPE3E = 'DEC ' CRVAL3E = -5.375222 / [deg] (-05:22:30.8) CUNIT3E = 'deg ' COMMENT RADESYSE= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXE= 2000.0 / Equinox J2000.0 COMMENT CRPIX4E = 1 CDELT4E = 1.0 CTYPE4E = 'STOKES ' CRVAL4E = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------------------- Wave number COMMENT N: Wave number COMMENT CRPIX1N = 32768.0 / Pixel coordinate of reference point CTYPE1N = 'WAVN ' / Wave number, linear frequency axis CRVAL1N = 3.406321229E+2 / [/m] Wave number of reference channel CDELT1N = -8.990796460E-4 / [/m] Channel spacing CUNIT1N = '/m ' / Units of coordinate increment and value COMMENT RESTFRQN= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVN= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSN= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSN= 'TOPOCENT' / Reference frame of observation VELOSYSN= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCN= 'LSRK ' / Reference frame of source redshift ZSOURCEN= 0.0000 / Redshift of the source COMMENT CRPIX2N = 1 CDELT2N = 1.0 CTYPE2N = 'RA ' CRVAL2N = 83.81042 / [deg] (05h35m14.5s) CUNIT2N = 'deg ' COMMENT CRPIX3N = 1 CDELT3N = 1.0 CTYPE3N = 'DEC ' CRVAL3N = -5.375222 / [deg] (-05:22:30.8) CUNIT3N = 'deg ' COMMENT RADESYSN= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXN= 2000.0 / Equinox J2000.0 COMMENT CRPIX4N = 1 CDELT4N = 1.0 CTYPE4N = 'STOKES ' CRVAL4N = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------- Radio velocity COMMENT N: Wave number COMMENT R: Radio velocity COMMENT CRPIX1R = 32768.0 / Pixel coordinate of reference point CTYPE1R = 'VRAD ' / Radio velocity, linear frequency axis CRVAL1R = 2.198744369E+7 / [m/s] Radio velocity of reference channel CDELT1R = 7.332509683E+2 / [m/s] Channel spacing CUNIT1R = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQR= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVR= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSR= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSR= 'TOPOCENT' / Reference frame of observation VELOSYSR= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCR= 'LSRK ' / Reference frame of source redshift ZSOURCER= 0.0000 / Redshift of the source COMMENT CRPIX2R = 1 CDELT2R = 1.0 CTYPE2R = 'RA ' CRVAL2R = 83.81042 / [deg] (05h35m14.5s) CUNIT2R = 'deg ' COMMENT CRPIX3R = 1 CDELT3R = 1.0 CTYPE3R = 'DEC ' CRVAL3R = -5.375222 / [deg] (-05:22:30.8) CUNIT3R = 'deg ' COMMENT RADESYSR= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXR= 2000.0 / Equinox J2000.0 COMMENT CRPIX4R = 1 CDELT4R = 1.0 CTYPE4R = 'STOKES ' CRVAL4R = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------------- Wavelength COMMENT N: Wave number COMMENT R: Radio velocity COMMENT W: Wavelength COMMENT CRPIX1W = 32768.0 / Pixel coordinate of reference point CTYPE1W = 'WAVE-F2W' / Wavelength in vacuuo, non-linear axis CRVAL1W = 2.935718427E-3 / [m] Wavelength of reference channel CDELT1W = 7.748666397E-9 / [m] Channel spacing CUNIT1W = 'm ' / Units of coordinate increment and value COMMENT SPECSYSW= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSW= 'TOPOCENT' / Reference frame of observation VELOSYSW= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCW= 'LSRK ' / Reference frame of source redshift ZSOURCEW= 0.0000 / Redshift of the source COMMENT CRPIX2W = 1 CDELT2W = 1.0 CTYPE2W = 'RA ' CRVAL2W = 83.81042 / [deg] (05h35m14.5s) CUNIT2W = 'deg ' COMMENT CRPIX3W = 1 CDELT3W = 1.0 CTYPE3W = 'DEC ' CRVAL3W = -5.375222 / [deg] (-05:22:30.8) CUNIT3W = 'deg ' COMMENT RADESYSW= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXW= 2000.0 / Equinox J2000.0 COMMENT CRPIX4W = 1 CDELT4W = 1.0 CTYPE4W = 'STOKES ' CRVAL4W = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------- Optical velocity COMMENT CRPIX1O = 32768.0 / Pixel coordinate of reference point CTYPE1O = 'VOPT-F2W' / Optical velocity, non-linear axis CRVAL1O = 2.372768470E+7 / [m/s] Optical velocity of reference channel CDELT1O = 8.539135209E+2 / [m/s] Channel spacing CUNIT1O = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQO= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVO= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSO= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSO= 'TOPOCENT' / Reference frame of observation VELOSYSO= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCO= 'LSRK ' / Reference frame of source redshift ZSOURCEO= 0.0000 / Redshift of the source COMMENT CRPIX2O = 1 CDELT2O = 1.0 CTYPE2O = 'RA ' CRVAL2O = 83.81042 / [deg] (05h35m14.5s) CUNIT2O = 'deg ' COMMENT CRPIX3O = 1 CDELT3O = 1.0 CTYPE3O = 'DEC ' CRVAL3O = -5.375222 / [deg] (-05:22:30.8) CUNIT3O = 'deg ' COMMENT RADESYSO= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXO= 2000.0 / Equinox J2000.0 COMMENT CRPIX4O = 1 CDELT4O = 1.0 CTYPE4O = 'STOKES ' CRVAL4O = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------------- Redshift COMMENT N: Wave number COMMENT R: Radio velocity COMMENT W: Wavelength COMMENT O: Optical velocity COMMENT Z: Redshift COMMENT CRPIX1Z = 32768.0 / Pixel coordinate of reference point CTYPE1Z = 'ZOPT-F2W' / Redshift, non-linear axis CRVAL1Z = 7.914703679E-2 / [] Redshift of reference channel CDELT1Z = 2.848348910E-6 / [] Channel spacing COMMENT RESTFRQZ= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVZ= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSZ= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSZ= 'TOPOCENT' / Reference frame of observation VELOSYSZ= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCZ= 'LSRK ' / Reference frame of source redshift ZSOURCEZ= 0.0000 / Redshift of the source COMMENT CRPIX2Z = 1 CDELT2Z = 1.0 CTYPE2Z = 'RA ' CRVAL2Z = 83.81042 / [deg] (05h35m14.5s) CUNIT2Z = 'deg ' COMMENT CRPIX3Z = 1 CDELT3Z = 1.0 CTYPE3Z = 'DEC ' CRVAL3Z = -5.375222 / [deg] (-05:22:30.8) CUNIT3Z = 'deg ' COMMENT RADESYSZ= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXZ= 2000.0 / Equinox J2000.0 COMMENT CRPIX4Z = 1 CDELT4Z = 1.0 CTYPE4Z = 'STOKES ' CRVAL4Z = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------ Relativistic velocity COMMENT CRPIX1V = 32768.0 / Pixel coordinate of reference point CTYPE1V = 'VELO-F2V' / Relativistic velocity, non-linear axis CRVAL1V = 2.279141418E+7 / [m/s] Velocity of reference channel CDELT1V = 7.867122599E+2 / [m/s] Channel spacing CUNIT1V = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQV= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVV= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSV= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSV= 'TOPOCENT' / Reference frame of observation VELOSYSV= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCV= 'LSRK ' / Reference frame of source redshift ZSOURCEV= 0.0000 / Redshift of the source COMMENT CRPIX2V = 1 CDELT2V = 1.0 CTYPE2V = 'RA ' CRVAL2V = 83.81042 / [deg] (05h35m14.5s) CUNIT2V = 'deg ' COMMENT CRPIX3V = 1 CDELT3V = 1.0 CTYPE3V = 'DEC ' CRVAL3V = -5.375222 / [deg] (-05:22:30.8) CUNIT3V = 'deg ' COMMENT RADESYSV= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXV= 2000.0 / Equinox J2000.0 COMMENT CRPIX4V = 1 CDELT4V = 1.0 CTYPE4V = 'STOKES ' CRVAL4V = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------- Relativistic beta (v/c) COMMENT CRPIX1B = 32768.0 / Pixel coordinate of reference point CTYPE1B = 'BETA-F2V' / Relativistic beta (v/c), non-linear axis CRVAL1B = 7.602397448E-2 / [] Relativistic beta of reference channel CDELT1B = 2.624189632E-6 / [] Channel spacing COMMENT RESTFRQB= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVB= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSB= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSB= 'TOPOCENT' / Reference frame of observation VELOSYSB= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCB= 'LSRK ' / Reference frame of source redshift ZSOURCEB= 0.0000 / Redshift of the source COMMENT CRPIX2B = 1 CDELT2B = 1.0 CTYPE2B = 'RA ' CRVAL2B = 83.81042 / [deg] (05h35m14.5s) CUNIT2B = 'deg ' COMMENT CRPIX3B = 1 CDELT3B = 1.0 CTYPE3B = 'DEC ' CRVAL3B = -5.375222 / [deg] (-05:22:30.8) CUNIT3B = 'deg ' COMMENT RADESYSB= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXB= 2000.0 / Equinox J2000.0 COMMENT CRPIX4B = 1 CDELT4B = 1.0 CTYPE4B = 'STOKES ' CRVAL4B = 1 / Stokes I (total intensity) COMMENT HISTORY fimgcreate 1.0b at 2009-04-22T04:28:02 DATE = '2009-04-22T04:28:02' / file creation date (YYYY-MM-DDThh:mm:ss UT) pywcs-1.12/lib/pywcs/tests/spectra/orion-velo-1.hdr0000644001153600020070000007176012310355627024326 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / file does conform to FITS standard BITPIX = -32 / number of bits per data pixel NAXIS = 1 / number of data axes NAXIS1 = 4096 / length of data axis 1 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H COMMENT COMMENT This FITS file contains an example spectral WCS header constructed by COMMENT Mark Calabretta (ATNF) and Dirk Petry (ESO) based on an observation COMMENT of the Orion Kleinmann-Low nebula made by Andrew Walsh (JCU) and COMMENT Sven Thorwirth (MPIfR) using the Mopra radio telescope. COMMENT COMMENT The 110GHz 13CO 1-0 spectrum in this file is linear in relativistic COMMENT velocity having been regridded from a linear frequency axis, as COMMENT observed. COMMENT COMMENT The reference pixel has been placed deliberately well outside the COMMENT the spectrum in order to test spectral-WCS-interpreting software. COMMENT COMMENT Spectral representations are: COMMENT F: Frequency ...frequency-like COMMENT E: Photon energy ...frequency-like COMMENT N: Wave number ...frequency-like COMMENT R: Radio velocity ...frequency-like COMMENT W: Wavelength ...wavelength-like COMMENT O: Optical velocity ...wavelength-like COMMENT Z: Redshift ...wavelength-like COMMENT Relativistic velocity (default) ...velocity-like COMMENT B: Relativistic beta ...velocity-like COMMENT COMMENT The Mopra radio telescope is operated by the Australia Telescope COMMENT National Facility. COMMENT COMMENT Author: Mark Calabretta, Australia Telescope National Facility COMMENT http://www.atnf.csiro.au/~mcalabre/index.html COMMENT 2009-04-22 COMMENT ---------------------------------------------------------------------- COMMENT OBJECT = 'Orion-KL' / Orion Kleinmann-Low nebula MOLECULE= '13CO ' / Carbon(13) monoxide TRANSITI= '1-0 ' / 1-0 transition DATE-OBS= '2006-07-09T20:29:00' / Date of observation TELESCOP= 'ATNF Mopra' / 22m mm-wave telescope OBSERVER= 'Walsh/Thorwirth' / Observers BUNIT = 'K ' / Brightness units, Kelvin COMMENT COMMENT ------------------------------------------------------------ Frequency COMMENT CRPIX1F = 32768.0 / Pixel coordinate of reference point CTYPE1F = 'FREQ-V2F' / Frequency, non-linear axis CRVAL1F = 102.4071237E+9 / [Hz] Frequency of reference channel CDELT1F = -2.513721996E+5 / [Hz] Channel spacing CUNIT1F = 'Hz ' / Units of coordinate increment and value COMMENT RESTFRQF= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVF= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSF= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSF= 'TOPOCENT' / Reference frame of observation VELOSYSF= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCF= 'LSRK ' / Reference frame of source redshift ZSOURCEF= 0.0000 / Redshift of the source COMMENT CRPIX2F = 1 CDELT2F = 1.0 CTYPE2F = 'RA ' CRVAL2F = 83.81042 / [deg] (05h35m14.5s) CUNIT2F = 'deg ' COMMENT CRPIX3F = 1 CDELT3F = 1.0 CTYPE3F = 'DEC ' CRVAL3F = -5.375222 / [deg] (-05:22:30.8) CUNIT3F = 'deg ' COMMENT RADESYSF= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXF= 2000.0 / Equinox J2000.0 COMMENT CRPIX4F = 1 CDELT4F = 1.0 CTYPE4F = 'STOKES ' CRVAL4F = 1 / Stokes I (total intensity) COMMENT COMMENT -------------------------------------------------------- Photon energy COMMENT CRPIX1E = 32768.0 / Pixel coordinate of reference point CTYPE1E = 'ENER-V2F' / Photon energy, non-linear axis CRVAL1E = 4.235222141E-4 / [eV] Photon energy of reference channel CDELT1E = -1.039592821E-9 / [eV] Channel spacing CUNIT1E = 'eV ' / Units of coordinate increment and value COMMENT RESTFRQE= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVE= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSE= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSE= 'TOPOCENT' / Reference frame of observation VELOSYSE= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCE= 'LSRK ' / Reference frame of source redshift ZSOURCEE= 0.0000 / Redshift of the source COMMENT CRPIX2E = 1 CDELT2E = 1.0 CTYPE2E = 'RA ' CRVAL2E = 83.81042 / [deg] (05h35m14.5s) CUNIT2E = 'deg ' COMMENT CRPIX3E = 1 CDELT3E = 1.0 CTYPE3E = 'DEC ' CRVAL3E = -5.375222 / [deg] (-05:22:30.8) CUNIT3E = 'deg ' COMMENT RADESYSE= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXE= 2000.0 / Equinox J2000.0 COMMENT CRPIX4E = 1 CDELT4E = 1.0 CTYPE4E = 'STOKES ' CRVAL4E = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------------------- Wave number COMMENT CRPIX1N = 32768.0 / Pixel coordinate of reference point CTYPE1N = 'WAVN-V2F' / Wave number, non-linear axis CRVAL1N = 3.415933955E+2 / [/m] Wave number of reference channel CDELT1N = -8.384874032E-4 / [/m] Channel spacing CUNIT1N = '/m ' / Units of coordinate increment and value COMMENT RESTFRQN= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVN= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSN= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSN= 'TOPOCENT' / Reference frame of observation VELOSYSN= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCN= 'LSRK ' / Reference frame of source redshift ZSOURCEN= 0.0000 / Redshift of the source COMMENT CRPIX2N = 1 CDELT2N = 1.0 CTYPE2N = 'RA ' CRVAL2N = 83.81042 / [deg] (05h35m14.5s) CUNIT2N = 'deg ' COMMENT CRPIX3N = 1 CDELT3N = 1.0 CTYPE3N = 'DEC ' CRVAL3N = -5.375222 / [deg] (-05:22:30.8) CUNIT3N = 'deg ' COMMENT RADESYSN= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXN= 2000.0 / Equinox J2000.0 COMMENT CRPIX4N = 1 CDELT4N = 1.0 CTYPE4N = 'STOKES ' CRVAL4N = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------- Radio velocity COMMENT CRPIX1R = 32768.0 / Pixel coordinate of reference point CTYPE1R = 'VRAD-V2F' / Radio velocity, non-linear axis CRVAL1R = 2.120347082E+7 / [m/s] Radio velocity of reference channel CDELT1R = 6.838345224E+2 / [m/s] Channel spacing CUNIT1R = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQR= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVR= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSR= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSR= 'TOPOCENT' / Reference frame of observation VELOSYSR= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCR= 'LSRK ' / Reference frame of source redshift ZSOURCER= 0.0000 / Redshift of the source COMMENT CRPIX2R = 1 CDELT2R = 1.0 CTYPE2R = 'RA ' CRVAL2R = 83.81042 / [deg] (05h35m14.5s) CUNIT2R = 'deg ' COMMENT CRPIX3R = 1 CDELT3R = 1.0 CTYPE3R = 'DEC ' CRVAL3R = -5.375222 / [deg] (-05:22:30.8) CUNIT3R = 'deg ' COMMENT RADESYSR= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXR= 2000.0 / Equinox J2000.0 COMMENT CRPIX4R = 1 CDELT4R = 1.0 CTYPE4R = 'STOKES ' CRVAL4R = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------------- Wavelength COMMENT CRPIX1W = 32768.0 / Pixel coordinate of reference point CTYPE1W = 'WAVE-V2W' / Wavelength in vacuuo, linear axis CRVAL1W = 2.927457068E-3 / [m] Wavelength of reference channel CDELT1W = 7.185841143E-9 / [m] Channel spacing CUNIT1W = 'm ' / Units of coordinate increment and value COMMENT RESTFRQW= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVW= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSW= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSW= 'TOPOCENT' / Reference frame of observation VELOSYSW= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCW= 'LSRK ' / Reference frame of source redshift ZSOURCEW= 0.0000 / Redshift of the source COMMENT CRPIX2W = 1 CDELT2W = 1.0 CTYPE2W = 'RA ' CRVAL2W = 83.81042 / [deg] (05h35m14.5s) CUNIT2W = 'deg ' COMMENT CRPIX3W = 1 CDELT3W = 1.0 CTYPE3W = 'DEC ' CRVAL3W = -5.375222 / [deg] (-05:22:30.8) CUNIT3W = 'deg ' COMMENT RADESYSW= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXW= 2000.0 / Equinox J2000.0 COMMENT CRPIX4W = 1 CDELT4W = 1.0 CTYPE4W = 'STOKES ' CRVAL4W = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------- Optical velocity COMMENT CRPIX1O = 32768.0 / Pixel coordinate of reference point CTYPE1O = 'VOPT-V2W' / Optical velocity, linear axis CRVAL1O = 2.281727178E+7 / [m/s] Optical velocity of reference channel CDELT1O = 7.918894164E+2 / [m/s] Channel spacing CUNIT1O = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQO= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVO= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSO= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSO= 'TOPOCENT' / Reference frame of observation VELOSYSO= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCO= 'LSRK ' / Reference frame of source redshift ZSOURCEO= 0.0000 / Redshift of the source COMMENT CRPIX2O = 1 CDELT2O = 1.0 CTYPE2O = 'RA ' CRVAL2O = 83.81042 / [deg] (05h35m14.5s) CUNIT2O = 'deg ' COMMENT CRPIX3O = 1 CDELT3O = 1.0 CTYPE3O = 'DEC ' CRVAL3O = -5.375222 / [deg] (-05:22:30.8) CUNIT3O = 'deg ' COMMENT RADESYSO= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXO= 2000.0 / Equinox J2000.0 COMMENT CRPIX4O = 1 CDELT4O = 1.0 CTYPE4O = 'STOKES ' CRVAL4O = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------------- Redshift COMMENT CRPIX1Z = 32768.0 / Pixel coordinate of reference point CTYPE1Z = 'ZOPT-V2W' / Redshift, linear axis CRVAL1Z = 7.611022615E-2 / [] Redshift of reference channel CDELT1Z = 2.641458767E-6 / [] Channel spacing COMMENT RESTFRQZ= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVZ= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSZ= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSZ= 'TOPOCENT' / Reference frame of observation VELOSYSZ= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCZ= 'LSRK ' / Reference frame of source redshift ZSOURCEZ= 0.0000 / Redshift of the source COMMENT CRPIX2Z = 1 CDELT2Z = 1.0 CTYPE2Z = 'RA ' CRVAL2Z = 83.81042 / [deg] (05h35m14.5s) CUNIT2Z = 'deg ' COMMENT CRPIX3Z = 1 CDELT3Z = 1.0 CTYPE3Z = 'DEC ' CRVAL3Z = -5.375222 / [deg] (-05:22:30.8) CUNIT3Z = 'deg ' COMMENT RADESYSZ= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXZ= 2000.0 / Equinox J2000.0 COMMENT CRPIX4Z = 1 CDELT4Z = 1.0 CTYPE4Z = 'STOKES ' CRVAL4Z = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------ Relativistic velocity COMMENT CRPIX1 = 32768.0 / Pixel coordinate of reference point CTYPE1 = 'VELO ' / Relativistic velocity, non-linear axis CRVAL1 = 2.195128874E+7 / [m/s] Velocity of reference channel CDELT1 = 7.319359645E+2 / [m/s] Channel spacing CUNIT1 = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQ = 110201353000.0 / [Hz] 13CO line rest frequency RESTWAV = 0.00272040633 / [m] 13CO line rest wavelength SPECSYS = 'LSRK ' / Reference frame of spectral coordinates SSYSOBS = 'TOPOCENT' / Reference frame of observation VELOSYS = 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRC = 'LSRK ' / Reference frame of source redshift ZSOURCE = 0.0000 / Redshift of the source COMMENT CRPIX2 = 1 CDELT2 = 1.0 CTYPE2 = 'RA ' CRVAL2 = 83.81042 / [deg] (05h35m14.5s) CUNIT2 = 'deg ' COMMENT CRPIX3 = 1 CDELT3 = 1.0 CTYPE3 = 'DEC ' CRVAL3 = -5.375222 / [deg] (-05:22:30.8) CUNIT3 = 'deg ' COMMENT RADESYS = 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOX = 2000.0 / Equinox J2000.0 COMMENT CRPIX4 = 1 CDELT4 = 1.0 CTYPE4 = 'STOKES ' CRVAL4 = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------- Relativistic beta (v/c) COMMENT CRPIX1B = 32768.0 / Pixel coordinate of reference point CTYPE1B = 'BETA ' / Relativistic beta (v/c), non-linear axis CRVAL1B = 7.322161766E-2 / [] Relativistic beta of reference channel CDELT1B = 2.441475578E-6 / [] Channel spacing COMMENT RESTFRQB= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVB= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSB= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSB= 'TOPOCENT' / Reference frame of observation VELOSYSB= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCB= 'LSRK ' / Reference frame of source redshift ZSOURCEB= 0.0000 / Redshift of the source COMMENT CRPIX2B = 1 CDELT2B = 1.0 CTYPE2B = 'RA ' CRVAL2B = 83.81042 / [deg] (05h35m14.5s) CUNIT2B = 'deg ' COMMENT CRPIX3B = 1 CDELT3B = 1.0 CTYPE3B = 'DEC ' CRVAL3B = -5.375222 / [deg] (-05:22:30.8) CUNIT3B = 'deg ' COMMENT RADESYSB= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXB= 2000.0 / Equinox J2000.0 COMMENT CRPIX4B = 1 CDELT4B = 1.0 CTYPE4B = 'STOKES ' CRVAL4B = 1 / Stokes I (total intensity) COMMENT HISTORY fimgcreate 1.0b at 2009-04-22T04:28:25 DATE = '2009-04-22T04:28:25' / file creation date (YYYY-MM-DDThh:mm:ss UT) pywcs-1.12/lib/pywcs/tests/spectra/orion-velo-4.hdr0000644001153600020070000007234012310355627024324 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / file does conform to FITS standard BITPIX = -32 / number of bits per data pixel NAXIS = 4 / number of data axes NAXIS1 = 4096 / length of data axis 1 NAXIS2 = 1 / length of data axis 2 NAXIS3 = 1 / length of data axis 3 NAXIS4 = 1 / length of data axis 4 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H COMMENT COMMENT This FITS file contains an example spectral WCS header constructed by COMMENT Mark Calabretta (ATNF) and Dirk Petry (ESO) based on an observation COMMENT of the Orion Kleinmann-Low nebula made by Andrew Walsh (JCU) and COMMENT Sven Thorwirth (MPIfR) using the Mopra radio telescope. COMMENT COMMENT The 110GHz 13CO 1-0 spectrum in this file is linear in relativistic COMMENT velocity having been regridded from a linear frequency axis, as COMMENT observed. COMMENT COMMENT The reference pixel has been placed deliberately well outside the COMMENT the spectrum in order to test spectral-WCS-interpreting software. COMMENT COMMENT Spectral representations are: COMMENT F: Frequency ...frequency-like COMMENT E: Photon energy ...frequency-like COMMENT N: Wave number ...frequency-like COMMENT R: Radio velocity ...frequency-like COMMENT W: Wavelength ...wavelength-like COMMENT O: Optical velocity ...wavelength-like COMMENT Z: Redshift ...wavelength-like COMMENT Relativistic velocity (default) ...velocity-like COMMENT B: Relativistic beta ...velocity-like COMMENT COMMENT The Mopra radio telescope is operated by the Australia Telescope COMMENT National Facility. COMMENT COMMENT Author: Mark Calabretta, Australia Telescope National Facility COMMENT http://www.atnf.csiro.au/~mcalabre/index.html COMMENT 2009-04-22 COMMENT ---------------------------------------------------------------------- COMMENT OBJECT = 'Orion-KL' / Orion Kleinmann-Low nebula MOLECULE= '13CO ' / Carbon(13) monoxide TRANSITI= '1-0 ' / 1-0 transition DATE-OBS= '2006-07-09T20:29:00' / Date of observation TELESCOP= 'ATNF Mopra' / 22m mm-wave telescope OBSERVER= 'Walsh/Thorwirth' / Observers BUNIT = 'K ' / Brightness units, Kelvin COMMENT COMMENT ------------------------------------------------------------ Frequency COMMENT CRPIX1F = 32768.0 / Pixel coordinate of reference point CTYPE1F = 'FREQ-V2F' / Frequency, non-linear axis CRVAL1F = 102.4071237E+9 / [Hz] Frequency of reference channel CDELT1F = -2.513721996E+5 / [Hz] Channel spacing CUNIT1F = 'Hz ' / Units of coordinate increment and value COMMENT RESTFRQF= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVF= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSF= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSF= 'TOPOCENT' / Reference frame of observation VELOSYSF= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCF= 'LSRK ' / Reference frame of source redshift ZSOURCEF= 0.0000 / Redshift of the source COMMENT CRPIX2F = 1 CDELT2F = 1.0 CTYPE2F = 'RA ' CRVAL2F = 83.81042 / [deg] (05h35m14.5s) CUNIT2F = 'deg ' COMMENT CRPIX3F = 1 CDELT3F = 1.0 CTYPE3F = 'DEC ' CRVAL3F = -5.375222 / [deg] (-05:22:30.8) CUNIT3F = 'deg ' COMMENT RADESYSF= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXF= 2000.0 / Equinox J2000.0 COMMENT CRPIX4F = 1 CDELT4F = 1.0 CTYPE4F = 'STOKES ' CRVAL4F = 1 / Stokes I (total intensity) COMMENT COMMENT -------------------------------------------------------- Photon energy COMMENT CRPIX1E = 32768.0 / Pixel coordinate of reference point CTYPE1E = 'ENER-V2F' / Photon energy, non-linear axis CRVAL1E = 4.235222141E-4 / [eV] Photon energy of reference channel CDELT1E = -1.039592821E-9 / [eV] Channel spacing CUNIT1E = 'eV ' / Units of coordinate increment and value COMMENT RESTFRQE= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVE= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSE= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSE= 'TOPOCENT' / Reference frame of observation VELOSYSE= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCE= 'LSRK ' / Reference frame of source redshift ZSOURCEE= 0.0000 / Redshift of the source COMMENT CRPIX2E = 1 CDELT2E = 1.0 CTYPE2E = 'RA ' CRVAL2E = 83.81042 / [deg] (05h35m14.5s) CUNIT2E = 'deg ' COMMENT CRPIX3E = 1 CDELT3E = 1.0 CTYPE3E = 'DEC ' CRVAL3E = -5.375222 / [deg] (-05:22:30.8) CUNIT3E = 'deg ' COMMENT RADESYSE= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXE= 2000.0 / Equinox J2000.0 COMMENT CRPIX4E = 1 CDELT4E = 1.0 CTYPE4E = 'STOKES ' CRVAL4E = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------------------- Wave number COMMENT CRPIX1N = 32768.0 / Pixel coordinate of reference point CTYPE1N = 'WAVN-V2F' / Wave number, non-linear axis CRVAL1N = 3.415933955E+2 / [/m] Wave number of reference channel CDELT1N = -8.384874032E-4 / [/m] Channel spacing CUNIT1N = '/m ' / Units of coordinate increment and value COMMENT RESTFRQN= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVN= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSN= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSN= 'TOPOCENT' / Reference frame of observation VELOSYSN= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCN= 'LSRK ' / Reference frame of source redshift ZSOURCEN= 0.0000 / Redshift of the source COMMENT CRPIX2N = 1 CDELT2N = 1.0 CTYPE2N = 'RA ' CRVAL2N = 83.81042 / [deg] (05h35m14.5s) CUNIT2N = 'deg ' COMMENT CRPIX3N = 1 CDELT3N = 1.0 CTYPE3N = 'DEC ' CRVAL3N = -5.375222 / [deg] (-05:22:30.8) CUNIT3N = 'deg ' COMMENT RADESYSN= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXN= 2000.0 / Equinox J2000.0 COMMENT CRPIX4N = 1 CDELT4N = 1.0 CTYPE4N = 'STOKES ' CRVAL4N = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------- Radio velocity COMMENT CRPIX1R = 32768.0 / Pixel coordinate of reference point CTYPE1R = 'VRAD-V2F' / Radio velocity, non-linear axis CRVAL1R = 2.120347082E+7 / [m/s] Radio velocity of reference channel CDELT1R = 6.838345224E+2 / [m/s] Channel spacing CUNIT1R = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQR= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVR= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSR= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSR= 'TOPOCENT' / Reference frame of observation VELOSYSR= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCR= 'LSRK ' / Reference frame of source redshift ZSOURCER= 0.0000 / Redshift of the source COMMENT CRPIX2R = 1 CDELT2R = 1.0 CTYPE2R = 'RA ' CRVAL2R = 83.81042 / [deg] (05h35m14.5s) CUNIT2R = 'deg ' COMMENT CRPIX3R = 1 CDELT3R = 1.0 CTYPE3R = 'DEC ' CRVAL3R = -5.375222 / [deg] (-05:22:30.8) CUNIT3R = 'deg ' COMMENT RADESYSR= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXR= 2000.0 / Equinox J2000.0 COMMENT CRPIX4R = 1 CDELT4R = 1.0 CTYPE4R = 'STOKES ' CRVAL4R = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------------- Wavelength COMMENT CRPIX1W = 32768.0 / Pixel coordinate of reference point CTYPE1W = 'WAVE-V2W' / Wavelength in vacuuo, linear axis CRVAL1W = 2.927457068E-3 / [m] Wavelength of reference channel CDELT1W = 7.185841143E-9 / [m] Channel spacing CUNIT1W = 'm ' / Units of coordinate increment and value COMMENT RESTFRQW= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVW= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSW= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSW= 'TOPOCENT' / Reference frame of observation VELOSYSW= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCW= 'LSRK ' / Reference frame of source redshift ZSOURCEW= 0.0000 / Redshift of the source COMMENT CRPIX2W = 1 CDELT2W = 1.0 CTYPE2W = 'RA ' CRVAL2W = 83.81042 / [deg] (05h35m14.5s) CUNIT2W = 'deg ' COMMENT CRPIX3W = 1 CDELT3W = 1.0 CTYPE3W = 'DEC ' CRVAL3W = -5.375222 / [deg] (-05:22:30.8) CUNIT3W = 'deg ' COMMENT RADESYSW= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXW= 2000.0 / Equinox J2000.0 COMMENT CRPIX4W = 1 CDELT4W = 1.0 CTYPE4W = 'STOKES ' CRVAL4W = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------- Optical velocity COMMENT CRPIX1O = 32768.0 / Pixel coordinate of reference point CTYPE1O = 'VOPT-V2W' / Optical velocity, linear axis CRVAL1O = 2.281727178E+7 / [m/s] Optical velocity of reference channel CDELT1O = 7.918894164E+2 / [m/s] Channel spacing CUNIT1O = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQO= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVO= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSO= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSO= 'TOPOCENT' / Reference frame of observation VELOSYSO= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCO= 'LSRK ' / Reference frame of source redshift ZSOURCEO= 0.0000 / Redshift of the source COMMENT CRPIX2O = 1 CDELT2O = 1.0 CTYPE2O = 'RA ' CRVAL2O = 83.81042 / [deg] (05h35m14.5s) CUNIT2O = 'deg ' COMMENT CRPIX3O = 1 CDELT3O = 1.0 CTYPE3O = 'DEC ' CRVAL3O = -5.375222 / [deg] (-05:22:30.8) CUNIT3O = 'deg ' COMMENT RADESYSO= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXO= 2000.0 / Equinox J2000.0 COMMENT CRPIX4O = 1 CDELT4O = 1.0 CTYPE4O = 'STOKES ' CRVAL4O = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------------- Redshift COMMENT CRPIX1Z = 32768.0 / Pixel coordinate of reference point CTYPE1Z = 'ZOPT-V2W' / Redshift, linear axis CRVAL1Z = 7.611022615E-2 / [] Redshift of reference channel CDELT1Z = 2.641458767E-6 / [] Channel spacing COMMENT RESTFRQZ= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVZ= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSZ= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSZ= 'TOPOCENT' / Reference frame of observation VELOSYSZ= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCZ= 'LSRK ' / Reference frame of source redshift ZSOURCEZ= 0.0000 / Redshift of the source COMMENT CRPIX2Z = 1 CDELT2Z = 1.0 CTYPE2Z = 'RA ' CRVAL2Z = 83.81042 / [deg] (05h35m14.5s) CUNIT2Z = 'deg ' COMMENT CRPIX3Z = 1 CDELT3Z = 1.0 CTYPE3Z = 'DEC ' CRVAL3Z = -5.375222 / [deg] (-05:22:30.8) CUNIT3Z = 'deg ' COMMENT RADESYSZ= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXZ= 2000.0 / Equinox J2000.0 COMMENT CRPIX4Z = 1 CDELT4Z = 1.0 CTYPE4Z = 'STOKES ' CRVAL4Z = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------ Relativistic velocity COMMENT CRPIX1 = 32768.0 / Pixel coordinate of reference point CTYPE1 = 'VELO ' / Relativistic velocity, non-linear axis CRVAL1 = 2.195128874E+7 / [m/s] Velocity of reference channel CDELT1 = 7.319359645E+2 / [m/s] Channel spacing CUNIT1 = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQ = 110201353000.0 / [Hz] 13CO line rest frequency RESTWAV = 0.00272040633 / [m] 13CO line rest wavelength SPECSYS = 'LSRK ' / Reference frame of spectral coordinates SSYSOBS = 'TOPOCENT' / Reference frame of observation VELOSYS = 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRC = 'LSRK ' / Reference frame of source redshift ZSOURCE = 0.0000 / Redshift of the source COMMENT CRPIX2 = 1 CDELT2 = 1.0 CTYPE2 = 'RA ' CRVAL2 = 83.81042 / [deg] (05h35m14.5s) CUNIT2 = 'deg ' COMMENT CRPIX3 = 1 CDELT3 = 1.0 CTYPE3 = 'DEC ' CRVAL3 = -5.375222 / [deg] (-05:22:30.8) CUNIT3 = 'deg ' COMMENT RADESYS = 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOX = 2000.0 / Equinox J2000.0 COMMENT CRPIX4 = 1 CDELT4 = 1.0 CTYPE4 = 'STOKES ' CRVAL4 = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------- Relativistic beta (v/c) COMMENT CRPIX1B = 32768.0 / Pixel coordinate of reference point CTYPE1B = 'BETA ' / Relativistic beta (v/c), non-linear axis CRVAL1B = 7.322161766E-2 / [] Relativistic beta of reference channel CDELT1B = 2.441475578E-6 / [] Channel spacing COMMENT RESTFRQB= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVB= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSB= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSB= 'TOPOCENT' / Reference frame of observation VELOSYSB= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCB= 'LSRK ' / Reference frame of source redshift ZSOURCEB= 0.0000 / Redshift of the source COMMENT CRPIX2B = 1 CDELT2B = 1.0 CTYPE2B = 'RA ' CRVAL2B = 83.81042 / [deg] (05h35m14.5s) CUNIT2B = 'deg ' COMMENT CRPIX3B = 1 CDELT3B = 1.0 CTYPE3B = 'DEC ' CRVAL3B = -5.375222 / [deg] (-05:22:30.8) CUNIT3B = 'deg ' COMMENT RADESYSB= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXB= 2000.0 / Equinox J2000.0 COMMENT CRPIX4B = 1 CDELT4B = 1.0 CTYPE4B = 'STOKES ' CRVAL4B = 1 / Stokes I (total intensity) COMMENT HISTORY fimgcreate 1.0b at 2009-04-22T04:28:33 DATE = '2009-04-22T04:28:33' / file creation date (YYYY-MM-DDThh:mm:ss UT) pywcs-1.12/lib/pywcs/tests/spectra/orion-wave-1.hdr0000644001153600020070000007164012310355627024320 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / file does conform to FITS standard BITPIX = -32 / number of bits per data pixel NAXIS = 1 / number of data axes NAXIS1 = 4096 / length of data axis 1 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H COMMENT COMMENT This FITS file contains an example spectral WCS header constructed by COMMENT Mark Calabretta (ATNF) and Dirk Petry (ESO) based on an observation COMMENT of the Orion Kleinmann-Low nebula made by Andrew Walsh (JCU) and COMMENT Sven Thorwirth (MPIfR) using the Mopra radio telescope. COMMENT COMMENT The 110GHz 13CO 1-0 spectrum in this file is linear in wavelength, COMMENT having been regridded from a linear frequency axis, as observed. COMMENT COMMENT The reference pixel has been placed deliberately well outside the COMMENT the spectrum in order to test spectral-WCS-interpreting software. COMMENT COMMENT Spectral representations are: COMMENT F: Frequency ...frequency-like COMMENT E: Photon energy ...frequency-like COMMENT N: Wave number ...frequency-like COMMENT R: Radio velocity ...frequency-like COMMENT Wavelength (default) ...wavelength-like COMMENT O: Optical velocity ...wavelength-like COMMENT Z: Redshift ...wavelength-like COMMENT V: Relativistic velocity ...velocity-like COMMENT B: Relativistic beta ...velocity-like COMMENT COMMENT The Mopra radio telescope is operated by the Australia Telescope COMMENT National Facility. COMMENT COMMENT Author: Mark Calabretta, Australia Telescope National Facility COMMENT http://www.atnf.csiro.au/~mcalabre/index.html COMMENT 2009-04-22 COMMENT ---------------------------------------------------------------------- COMMENT OBJECT = 'Orion-KL' / Orion Kleinmann-Low nebula MOLECULE= '13CO ' / Carbon(13) monoxide TRANSITI= '1-0 ' / 1-0 transition DATE-OBS= '2006-07-09T20:29:00' / Date of observation TELESCOP= 'ATNF Mopra' / 22m mm-wave telescope OBSERVER= 'Walsh/Thorwirth' / Observers BUNIT = 'K ' / Brightness units, Kelvin COMMENT COMMENT ------------------------------------------------------------ Frequency COMMENT CRPIX1F = 32768.0 / Pixel coordinate of reference point CTYPE1F = 'FREQ-W2F' / Frequency, non-linear axis CRVAL1F = 102.6940613E+9 / [Hz] Frequency of reference channel CDELT1F = -2.332330873E+5 / [Hz] Channel spacing CUNIT1F = 'Hz ' / Units of coordinate increment and value COMMENT RESTFRQF= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVF= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSF= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSF= 'TOPOCENT' / Reference frame of observation VELOSYSF= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCF= 'LSRK ' / Reference frame of source redshift ZSOURCEF= 0.0000 / Redshift of the source COMMENT CRPIX2F = 1 CDELT2F = 1.0 CTYPE2F = 'RA ' CRVAL2F = 83.81042 / [deg] (05h35m14.5s) CUNIT2F = 'deg ' COMMENT CRPIX3F = 1 CDELT3F = 1.0 CTYPE3F = 'DEC ' CRVAL3F = -5.375222 / [deg] (-05:22:30.8) CUNIT3F = 'deg ' COMMENT RADESYSF= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXF= 2000.0 / Equinox J2000.0 COMMENT CRPIX4F = 1 CDELT4F = 1.0 CTYPE4F = 'STOKES ' CRVAL4F = 1 / Stokes I (total intensity) COMMENT COMMENT -------------------------------------------------------- Photon energy COMMENT CRPIX1E = 32768.0 / Pixel coordinate of reference point CTYPE1E = 'ENER-W2F' / Photon energy, non-linear axis CRVAL1E = 4.247088937E-4 / [eV] Photon energy of reference channel CDELT1E = -0.9645754124E-9 / [eV] Channel spacing CUNIT1E = 'eV ' / Units of coordinate increment and value COMMENT RESTFRQE= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVE= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSE= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSE= 'TOPOCENT' / Reference frame of observation VELOSYSE= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCE= 'LSRK ' / Reference frame of source redshift ZSOURCEE= 0.0000 / Redshift of the source COMMENT CRPIX2E = 1 CDELT2E = 1.0 CTYPE2E = 'RA ' CRVAL2E = 83.81042 / [deg] (05h35m14.5s) CUNIT2E = 'deg ' COMMENT CRPIX3E = 1 CDELT3E = 1.0 CTYPE3E = 'DEC ' CRVAL3E = -5.375222 / [deg] (-05:22:30.8) CUNIT3E = 'deg ' COMMENT RADESYSE= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXE= 2000.0 / Equinox J2000.0 COMMENT CRPIX4E = 1 CDELT4E = 1.0 CTYPE4E = 'STOKES ' CRVAL4E = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------------------- Wave number COMMENT CRPIX1N = 32768.0 / Pixel coordinate of reference point CTYPE1N = 'WAVN-W2F' / Wave number, non-linear axis CRVAL1N = 3.425505162E+2 / [/m] Wave number of reference channel CDELT1N = -7.779818375E-4 / [/m] Channel spacing CUNIT1N = '/m ' / Units of coordinate increment and value COMMENT RESTFRQN= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVN= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSN= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSN= 'TOPOCENT' / Reference frame of observation VELOSYSN= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCN= 'LSRK ' / Reference frame of source redshift ZSOURCEN= 0.0000 / Redshift of the source COMMENT CRPIX2N = 1 CDELT2N = 1.0 CTYPE2N = 'RA ' CRVAL2N = 83.81042 / [deg] (05h35m14.5s) CUNIT2N = 'deg ' COMMENT CRPIX3N = 1 CDELT3N = 1.0 CTYPE3N = 'DEC ' CRVAL3N = -5.375222 / [deg] (-05:22:30.8) CUNIT3N = 'deg ' COMMENT RADESYSN= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXN= 2000.0 / Equinox J2000.0 COMMENT CRPIX4N = 1 CDELT4N = 1.0 CTYPE4N = 'STOKES ' CRVAL4N = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------- Radio velocity COMMENT CRPIX1R = 32768.0 / Pixel coordinate of reference point CTYPE1R = 'VRAD-W2F' / Radio velocity, non-linear axis CRVAL1R = 2.042288396E+7 / [m/s] Radio velocity of reference channel CDELT1R = 6.344887666E+2 / [m/s] Channel spacing CUNIT1R = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQR= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVR= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSR= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSR= 'TOPOCENT' / Reference frame of observation VELOSYSR= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCR= 'LSRK ' / Reference frame of source redshift ZSOURCER= 0.0000 / Redshift of the source COMMENT CRPIX2R = 1 CDELT2R = 1.0 CTYPE2R = 'RA ' CRVAL2R = 83.81042 / [deg] (05h35m14.5s) CUNIT2R = 'deg ' COMMENT CRPIX3R = 1 CDELT3R = 1.0 CTYPE3R = 'DEC ' CRVAL3R = -5.375222 / [deg] (-05:22:30.8) CUNIT3R = 'deg ' COMMENT RADESYSR= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXR= 2000.0 / Equinox J2000.0 COMMENT CRPIX4R = 1 CDELT4R = 1.0 CTYPE4R = 'STOKES ' CRVAL4R = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------------- Wavelength COMMENT CRPIX1 = 32768.0 / Pixel coordinate of reference point CTYPE1 = 'WAVE ' / Wavelength in vacuuo, linear axis CRVAL1 = 2.919277457E-3 / [m] Wavelength of reference channel CDELT1 = 6.630101933E-9 / [m] Channel spacing CUNIT1 = 'm ' / Units of coordinate increment and value COMMENT RESTFRQ = 110201353000.0 / [Hz] 13CO line rest frequency RESTWAV = 0.00272040633 / [m] 13CO line rest wavelength SPECSYS = 'LSRK ' / Reference frame of spectral coordinates SSYSOBS = 'TOPOCENT' / Reference frame of observation VELOSYS = 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRC = 'LSRK ' / Reference frame of source redshift ZSOURCE = 0.0000 / Redshift of the source COMMENT CRPIX2 = 1 CDELT2 = 1.0 CTYPE2 = 'RA ' CRVAL2 = 83.81042 / [deg] (05h35m14.5s) CUNIT2 = 'deg ' COMMENT CRPIX3 = 1 CDELT3 = 1.0 CTYPE3 = 'DEC ' CRVAL3 = -5.375222 / [deg] (-05:22:30.8) CUNIT3 = 'deg ' COMMENT RADESYS = 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOX = 2000.0 / Equinox J2000.0 COMMENT CRPIX4 = 1 CDELT4 = 1.0 CTYPE4 = 'STOKES ' CRVAL4 = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------- Optical velocity COMMENT CRPIX1O = 32768.0 / Pixel coordinate of reference point CTYPE1O = 'VOPT ' / Optical velocity, linear axis CRVAL1O = 2.191586755E+7 / [m/s] Optical velocity of reference channel CDELT1O = 7.306462036E+2 / [m/s] Channel spacing CUNIT1O = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQO= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVO= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSO= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSO= 'TOPOCENT' / Reference frame of observation VELOSYSO= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCO= 'LSRK ' / Reference frame of source redshift ZSOURCEO= 0.0000 / Redshift of the source COMMENT CRPIX2O = 1 CDELT2O = 1.0 CTYPE2O = 'RA ' CRVAL2O = 83.81042 / [deg] (05h35m14.5s) CUNIT2O = 'deg ' COMMENT CRPIX3O = 1 CDELT3O = 1.0 CTYPE3O = 'DEC ' CRVAL3O = -5.375222 / [deg] (-05:22:30.8) CUNIT3O = 'deg ' COMMENT RADESYSO= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXO= 2000.0 / Equinox J2000.0 COMMENT CRPIX4O = 1 CDELT4O = 1.0 CTYPE4O = 'STOKES ' CRVAL4O = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------------- Redshift COMMENT CRPIX1Z = 32768.0 / Pixel coordinate of reference point CTYPE1Z = 'ZOPT ' / Redshift, linear axis CRVAL1Z = 7.310346531E-2 / [] Redshift of reference channel CDELT1Z = 2.437173398E-6 / [] Channel spacing COMMENT RESTFRQZ= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVZ= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSZ= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSZ= 'TOPOCENT' / Reference frame of observation VELOSYSZ= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCZ= 'LSRK ' / Reference frame of source redshift ZSOURCEZ= 0.0000 / Redshift of the source COMMENT CRPIX2Z = 1 CDELT2Z = 1.0 CTYPE2Z = 'RA ' CRVAL2Z = 83.81042 / [deg] (05h35m14.5s) CUNIT2Z = 'deg ' COMMENT CRPIX3Z = 1 CDELT3Z = 1.0 CTYPE3Z = 'DEC ' CRVAL3Z = -5.375222 / [deg] (-05:22:30.8) CUNIT3Z = 'deg ' COMMENT RADESYSZ= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXZ= 2000.0 / Equinox J2000.0 COMMENT CRPIX4Z = 1 CDELT4Z = 1.0 CTYPE4Z = 'STOKES ' CRVAL4Z = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------ Relativistic velocity COMMENT CRPIX1V = 32768.0 / Pixel coordinate of reference point CTYPE1V = 'VELO-W2V' / Relativistic velocity, non-linear axis CRVAL1V = 2.111679434E+7 / [m/s] Velocity of reference channel CDELT1V = 6.774939349E+2 / [m/s] Channel spacing CUNIT1V = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQV= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVV= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSV= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSV= 'TOPOCENT' / Reference frame of observation VELOSYSV= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCV= 'LSRK ' / Reference frame of source redshift ZSOURCEV= 0.0000 / Redshift of the source COMMENT CRPIX2V = 1 CDELT2V = 1.0 CTYPE2V = 'RA ' CRVAL2V = 83.81042 / [deg] (05h35m14.5s) CUNIT2V = 'deg ' COMMENT CRPIX3V = 1 CDELT3V = 1.0 CTYPE3V = 'DEC ' CRVAL3V = -5.375222 / [deg] (-05:22:30.8) CUNIT3V = 'deg ' COMMENT RADESYSV= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXV= 2000.0 / Equinox J2000.0 COMMENT CRPIX4V = 1 CDELT4V = 1.0 CTYPE4V = 'STOKES ' CRVAL4V = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------- Relativistic beta (v/c) COMMENT CRPIX1B = 32768.0 / Pixel coordinate of reference point CTYPE1B = 'BETA-W2V' / Relativistic beta (v/c), non-linear axis CRVAL1B = 7.043804396E-2 / [] Relativistic beta of reference channel CDELT1B = 2.259876514E-6 / [] Channel spacing COMMENT RESTFRQB= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVB= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSB= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSB= 'TOPOCENT' / Reference frame of observation VELOSYSB= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCB= 'LSRK ' / Reference frame of source redshift ZSOURCEB= 0.0000 / Redshift of the source COMMENT CRPIX2B = 1 CDELT2B = 1.0 CTYPE2B = 'RA ' CRVAL2B = 83.81042 / [deg] (05h35m14.5s) CUNIT2B = 'deg ' COMMENT CRPIX3B = 1 CDELT3B = 1.0 CTYPE3B = 'DEC ' CRVAL3B = -5.375222 / [deg] (-05:22:30.8) CUNIT3B = 'deg ' COMMENT RADESYSB= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXB= 2000.0 / Equinox J2000.0 COMMENT CRPIX4B = 1 CDELT4B = 1.0 CTYPE4B = 'STOKES ' CRVAL4B = 1 / Stokes I (total intensity) COMMENT HISTORY fimgcreate 1.0b at 2009-04-22T04:28:10 DATE = '2009-04-22T04:28:10' / file creation date (YYYY-MM-DDThh:mm:ss UT) pywcs-1.12/lib/pywcs/tests/spectra/orion-wave-4.hdr0000644001153600020070000007222012310355627024316 0ustar cslocumSTSCI\science00000000000000SIMPLE = T / file does conform to FITS standard BITPIX = -32 / number of bits per data pixel NAXIS = 4 / number of data axes NAXIS1 = 4096 / length of data axis 1 NAXIS2 = 1 / length of data axis 2 NAXIS3 = 1 / length of data axis 3 NAXIS4 = 1 / length of data axis 4 EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H COMMENT COMMENT This FITS file contains an example spectral WCS header constructed by COMMENT Mark Calabretta (ATNF) and Dirk Petry (ESO) based on an observation COMMENT of the Orion Kleinmann-Low nebula made by Andrew Walsh (JCU) and COMMENT Sven Thorwirth (MPIfR) using the Mopra radio telescope. COMMENT COMMENT The 110GHz 13CO 1-0 spectrum in this file is linear in wavelength, COMMENT having been regridded from a linear frequency axis, as observed. COMMENT COMMENT The reference pixel has been placed deliberately well outside the COMMENT the spectrum in order to test spectral-WCS-interpreting software. COMMENT COMMENT Spectral representations are: COMMENT F: Frequency ...frequency-like COMMENT E: Photon energy ...frequency-like COMMENT N: Wave number ...frequency-like COMMENT R: Radio velocity ...frequency-like COMMENT Wavelength (default) ...wavelength-like COMMENT O: Optical velocity ...wavelength-like COMMENT Z: Redshift ...wavelength-like COMMENT V: Relativistic velocity ...velocity-like COMMENT B: Relativistic beta ...velocity-like COMMENT COMMENT The Mopra radio telescope is operated by the Australia Telescope COMMENT National Facility. COMMENT COMMENT Author: Mark Calabretta, Australia Telescope National Facility COMMENT http://www.atnf.csiro.au/~mcalabre/index.html COMMENT 2009-04-22 COMMENT ---------------------------------------------------------------------- COMMENT OBJECT = 'Orion-KL' / Orion Kleinmann-Low nebula MOLECULE= '13CO ' / Carbon(13) monoxide TRANSITI= '1-0 ' / 1-0 transition DATE-OBS= '2006-07-09T20:29:00' / Date of observation TELESCOP= 'ATNF Mopra' / 22m mm-wave telescope OBSERVER= 'Walsh/Thorwirth' / Observers BUNIT = 'K ' / Brightness units, Kelvin COMMENT COMMENT ------------------------------------------------------------ Frequency COMMENT CRPIX1F = 32768.0 / Pixel coordinate of reference point CTYPE1F = 'FREQ-W2F' / Frequency, non-linear axis CRVAL1F = 102.6940613E+9 / [Hz] Frequency of reference channel CDELT1F = -2.332330873E+5 / [Hz] Channel spacing CUNIT1F = 'Hz ' / Units of coordinate increment and value COMMENT RESTFRQF= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVF= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSF= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSF= 'TOPOCENT' / Reference frame of observation VELOSYSF= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCF= 'LSRK ' / Reference frame of source redshift ZSOURCEF= 0.0000 / Redshift of the source COMMENT CRPIX2F = 1 CDELT2F = 1.0 CTYPE2F = 'RA ' CRVAL2F = 83.81042 / [deg] (05h35m14.5s) CUNIT2F = 'deg ' COMMENT CRPIX3F = 1 CDELT3F = 1.0 CTYPE3F = 'DEC ' CRVAL3F = -5.375222 / [deg] (-05:22:30.8) CUNIT3F = 'deg ' COMMENT RADESYSF= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXF= 2000.0 / Equinox J2000.0 COMMENT CRPIX4F = 1 CDELT4F = 1.0 CTYPE4F = 'STOKES ' CRVAL4F = 1 / Stokes I (total intensity) COMMENT COMMENT -------------------------------------------------------- Photon energy COMMENT CRPIX1E = 32768.0 / Pixel coordinate of reference point CTYPE1E = 'ENER-W2F' / Photon energy, non-linear axis CRVAL1E = 4.247088937E-4 / [eV] Photon energy of reference channel CDELT1E = -0.9645754124E-9 / [eV] Channel spacing CUNIT1E = 'eV ' / Units of coordinate increment and value COMMENT RESTFRQE= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVE= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSE= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSE= 'TOPOCENT' / Reference frame of observation VELOSYSE= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCE= 'LSRK ' / Reference frame of source redshift ZSOURCEE= 0.0000 / Redshift of the source COMMENT CRPIX2E = 1 CDELT2E = 1.0 CTYPE2E = 'RA ' CRVAL2E = 83.81042 / [deg] (05h35m14.5s) CUNIT2E = 'deg ' COMMENT CRPIX3E = 1 CDELT3E = 1.0 CTYPE3E = 'DEC ' CRVAL3E = -5.375222 / [deg] (-05:22:30.8) CUNIT3E = 'deg ' COMMENT RADESYSE= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXE= 2000.0 / Equinox J2000.0 COMMENT CRPIX4E = 1 CDELT4E = 1.0 CTYPE4E = 'STOKES ' CRVAL4E = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------------------- Wave number COMMENT CRPIX1N = 32768.0 / Pixel coordinate of reference point CTYPE1N = 'WAVN-W2F' / Wave number, non-linear axis CRVAL1N = 3.425505162E+2 / [/m] Wave number of reference channel CDELT1N = -7.779818375E-4 / [/m] Channel spacing CUNIT1N = '/m ' / Units of coordinate increment and value COMMENT RESTFRQN= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVN= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSN= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSN= 'TOPOCENT' / Reference frame of observation VELOSYSN= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCN= 'LSRK ' / Reference frame of source redshift ZSOURCEN= 0.0000 / Redshift of the source COMMENT CRPIX2N = 1 CDELT2N = 1.0 CTYPE2N = 'RA ' CRVAL2N = 83.81042 / [deg] (05h35m14.5s) CUNIT2N = 'deg ' COMMENT CRPIX3N = 1 CDELT3N = 1.0 CTYPE3N = 'DEC ' CRVAL3N = -5.375222 / [deg] (-05:22:30.8) CUNIT3N = 'deg ' COMMENT RADESYSN= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXN= 2000.0 / Equinox J2000.0 COMMENT CRPIX4N = 1 CDELT4N = 1.0 CTYPE4N = 'STOKES ' CRVAL4N = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------- Radio velocity COMMENT CRPIX1R = 32768.0 / Pixel coordinate of reference point CTYPE1R = 'VRAD-W2F' / Radio velocity, non-linear axis CRVAL1R = 2.042288396E+7 / [m/s] Radio velocity of reference channel CDELT1R = 6.344887666E+2 / [m/s] Channel spacing CUNIT1R = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQR= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVR= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSR= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSR= 'TOPOCENT' / Reference frame of observation VELOSYSR= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCR= 'LSRK ' / Reference frame of source redshift ZSOURCER= 0.0000 / Redshift of the source COMMENT CRPIX2R = 1 CDELT2R = 1.0 CTYPE2R = 'RA ' CRVAL2R = 83.81042 / [deg] (05h35m14.5s) CUNIT2R = 'deg ' COMMENT CRPIX3R = 1 CDELT3R = 1.0 CTYPE3R = 'DEC ' CRVAL3R = -5.375222 / [deg] (-05:22:30.8) CUNIT3R = 'deg ' COMMENT RADESYSR= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXR= 2000.0 / Equinox J2000.0 COMMENT CRPIX4R = 1 CDELT4R = 1.0 CTYPE4R = 'STOKES ' CRVAL4R = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------------- Wavelength COMMENT CRPIX1 = 32768.0 / Pixel coordinate of reference point CTYPE1 = 'WAVE ' / Wavelength in vacuuo, linear axis CRVAL1 = 2.919277457E-3 / [m] Wavelength of reference channel CDELT1 = 6.630101933E-9 / [m] Channel spacing CUNIT1 = 'm ' / Units of coordinate increment and value COMMENT RESTFRQ = 110201353000.0 / [Hz] 13CO line rest frequency RESTWAV = 0.00272040633 / [m] 13CO line rest wavelength SPECSYS = 'LSRK ' / Reference frame of spectral coordinates SSYSOBS = 'TOPOCENT' / Reference frame of observation VELOSYS = 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRC = 'LSRK ' / Reference frame of source redshift ZSOURCE = 0.0000 / Redshift of the source COMMENT CRPIX2 = 1 CDELT2 = 1.0 CTYPE2 = 'RA ' CRVAL2 = 83.81042 / [deg] (05h35m14.5s) CUNIT2 = 'deg ' COMMENT CRPIX3 = 1 CDELT3 = 1.0 CTYPE3 = 'DEC ' CRVAL3 = -5.375222 / [deg] (-05:22:30.8) CUNIT3 = 'deg ' COMMENT RADESYS = 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOX = 2000.0 / Equinox J2000.0 COMMENT CRPIX4 = 1 CDELT4 = 1.0 CTYPE4 = 'STOKES ' CRVAL4 = 1 / Stokes I (total intensity) COMMENT COMMENT ----------------------------------------------------- Optical velocity COMMENT CRPIX1O = 32768.0 / Pixel coordinate of reference point CTYPE1O = 'VOPT ' / Optical velocity, linear axis CRVAL1O = 2.191586755E+7 / [m/s] Optical velocity of reference channel CDELT1O = 7.306462036E+2 / [m/s] Channel spacing CUNIT1O = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQO= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVO= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSO= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSO= 'TOPOCENT' / Reference frame of observation VELOSYSO= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCO= 'LSRK ' / Reference frame of source redshift ZSOURCEO= 0.0000 / Redshift of the source COMMENT CRPIX2O = 1 CDELT2O = 1.0 CTYPE2O = 'RA ' CRVAL2O = 83.81042 / [deg] (05h35m14.5s) CUNIT2O = 'deg ' COMMENT CRPIX3O = 1 CDELT3O = 1.0 CTYPE3O = 'DEC ' CRVAL3O = -5.375222 / [deg] (-05:22:30.8) CUNIT3O = 'deg ' COMMENT RADESYSO= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXO= 2000.0 / Equinox J2000.0 COMMENT CRPIX4O = 1 CDELT4O = 1.0 CTYPE4O = 'STOKES ' CRVAL4O = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------------------- Redshift COMMENT CRPIX1Z = 32768.0 / Pixel coordinate of reference point CTYPE1Z = 'ZOPT ' / Redshift, linear axis CRVAL1Z = 7.310346531E-2 / [] Redshift of reference channel CDELT1Z = 2.437173398E-6 / [] Channel spacing COMMENT RESTFRQZ= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVZ= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSZ= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSZ= 'TOPOCENT' / Reference frame of observation VELOSYSZ= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCZ= 'LSRK ' / Reference frame of source redshift ZSOURCEZ= 0.0000 / Redshift of the source COMMENT CRPIX2Z = 1 CDELT2Z = 1.0 CTYPE2Z = 'RA ' CRVAL2Z = 83.81042 / [deg] (05h35m14.5s) CUNIT2Z = 'deg ' COMMENT CRPIX3Z = 1 CDELT3Z = 1.0 CTYPE3Z = 'DEC ' CRVAL3Z = -5.375222 / [deg] (-05:22:30.8) CUNIT3Z = 'deg ' COMMENT RADESYSZ= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXZ= 2000.0 / Equinox J2000.0 COMMENT CRPIX4Z = 1 CDELT4Z = 1.0 CTYPE4Z = 'STOKES ' CRVAL4Z = 1 / Stokes I (total intensity) COMMENT COMMENT ------------------------------------------------ Relativistic velocity COMMENT CRPIX1V = 32768.0 / Pixel coordinate of reference point CTYPE1V = 'VELO-W2V' / Relativistic velocity, non-linear axis CRVAL1V = 2.111679434E+7 / [m/s] Velocity of reference channel CDELT1V = 6.774939349E+2 / [m/s] Channel spacing CUNIT1V = 'm/s ' / Units of coordinate increment and value COMMENT RESTFRQV= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVV= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSV= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSV= 'TOPOCENT' / Reference frame of observation VELOSYSV= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCV= 'LSRK ' / Reference frame of source redshift ZSOURCEV= 0.0000 / Redshift of the source COMMENT CRPIX2V = 1 CDELT2V = 1.0 CTYPE2V = 'RA ' CRVAL2V = 83.81042 / [deg] (05h35m14.5s) CUNIT2V = 'deg ' COMMENT CRPIX3V = 1 CDELT3V = 1.0 CTYPE3V = 'DEC ' CRVAL3V = -5.375222 / [deg] (-05:22:30.8) CUNIT3V = 'deg ' COMMENT RADESYSV= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXV= 2000.0 / Equinox J2000.0 COMMENT CRPIX4V = 1 CDELT4V = 1.0 CTYPE4V = 'STOKES ' CRVAL4V = 1 / Stokes I (total intensity) COMMENT COMMENT ---------------------------------------------- Relativistic beta (v/c) COMMENT CRPIX1B = 32768.0 / Pixel coordinate of reference point CTYPE1B = 'BETA-W2V' / Relativistic beta (v/c), non-linear axis CRVAL1B = 7.043804396E-2 / [] Relativistic beta of reference channel CDELT1B = 2.259876514E-6 / [] Channel spacing COMMENT RESTFRQB= 110201353000.0 / [Hz] 13CO line rest frequency RESTWAVB= 0.00272040633 / [m] 13CO line rest wavelength SPECSYSB= 'LSRK ' / Reference frame of spectral coordinates SSYSOBSB= 'TOPOCENT' / Reference frame of observation VELOSYSB= 0.0 / [m/s] Bary-topo velocity towards the source SSYSSRCB= 'LSRK ' / Reference frame of source redshift ZSOURCEB= 0.0000 / Redshift of the source COMMENT CRPIX2B = 1 CDELT2B = 1.0 CTYPE2B = 'RA ' CRVAL2B = 83.81042 / [deg] (05h35m14.5s) CUNIT2B = 'deg ' COMMENT CRPIX3B = 1 CDELT3B = 1.0 CTYPE3B = 'DEC ' CRVAL3B = -5.375222 / [deg] (-05:22:30.8) CUNIT3B = 'deg ' COMMENT RADESYSB= 'FK5 ' / FK5 (IAU 1984) equatorial coordinates EQUINOXB= 2000.0 / Equinox J2000.0 COMMENT CRPIX4B = 1 CDELT4B = 1.0 CTYPE4B = 'STOKES ' CRVAL4B = 1 / Stokes I (total intensity) COMMENT HISTORY fimgcreate 1.0b at 2009-04-22T04:28:18 DATE = '2009-04-22T04:28:18' / file creation date (YYYY-MM-DDThh:mm:ss UT) pywcs-1.12/lib/pywcs/tests/test.py0000755001153600020070000002256512310355627021272 0ustar cslocumSTSCI\science00000000000000import glob import os import sys import numpy as np from numpy.testing import assert_array_almost_equal import pywcs ROOT_DIR = None def setup_module(): global ROOT_DIR # do not use __file__ here - we want to find the data files that # belong to the pywcs that we are testing, even if we are not running # this test from the installed copy of this file. Use pywcs.__file__ ROOT_DIR = os.path.join(os.path.dirname(pywcs.__file__), "tests") # test_maps() is a generator def test_maps(): # test_map() is the function that is called to perform the generated test def test_map(filename): # the test parameter is the base name of the file to use; find # the file in the installed pywcs test directory filename = os.path.join(ROOT_DIR, "maps", filename) fd = open(filename, 'rb') header = fd.read() fd.close() wcs = pywcs.WCS(header) world = wcs.wcs_pix2sky([[97, 97]], 1) assert_array_almost_equal(world, [[285.0, -66.25]], decimal=1) pix = wcs.wcs_sky2pix([[285.0, -66.25]], 1) assert_array_almost_equal(pix, [[97, 97]], decimal=0) # get the list of the hdr files that we want to test hdr_file_list = [ x for x in glob.glob(os.path.join(ROOT_DIR, "maps", "*.hdr")) ] # actually perform a test for each one for filename in hdr_file_list : # use the base name of the file, because everything we yield # will show up in the test name in the pandokia report filename = os.path.basename( filename ) # yield a function name and parameters to make a generated test yield test_map, filename # AFTER we tested with every file that we found, check to see that we # actually have the list we expect. If N=0, we will not have performed # any tests at all. If N < n_data_files, we are missing some files, # so we will have skipped some tests. Without this check, both cases # happen silently! # how many do we expect to see? n_data_files = 28 if len(hdr_file_list) != n_data_files : assert False, ( "test_maps has wrong number data files: found %d, expected " " %d, looking in %s" % ( len(hdr_file_list), n_data_files, ROOT_DIR ) ) # b.t.w. If this assert happens, nose reports one more test # than it would have otherwise. # test_spectra() is a generator def test_spectra(): # test_spectrum() is the function that is called to perform the generated test def test_spectrum(filename): # the test parameter is the base name of the file to use; find # the file in the installed pywcs test directory filename = os.path.join(ROOT_DIR, "spectra", filename) fd = open(filename, 'rb') header = fd.read() fd.close() wcs = pywcs.WCS(header) all = pywcs.find_all_wcs(header) assert len(all) == 9 # get the list of the hdr files that we want to test hdr_file_list = [ x for x in glob.glob(os.path.join(ROOT_DIR, "spectra", "*.hdr")) ] # actually perform a test for each one for filename in hdr_file_list : # use the base name of the file, because everything we yield # will show up in the test name in the pandokia report filename = os.path.basename( filename ) # yield a function name and parameters to make a generated test yield test_spectrum, filename # AFTER we tested with every file that we found, check to see that we # actually have the list we expect. If N=0, we will not have performed # any tests at all. If N < n_data_files, we are missing some files, # so we will have skipped some tests. Without this check, both cases # happen silently! # how many do we expect to see? n_data_files = 6 if len(hdr_file_list) != n_data_files : assert False, ( "test_spectra has wrong number data files: found %d, expected " " %d, looking in %s" % ( len(hdr_file_list), n_data_files, ROOT_DIR ) ) # b.t.w. If this assert happens, nose reports one more test # than it would have otherwise. # test_nraos() is a generator def test_nrao(): # test_nrao() is the function that is called to perform the generated test def test_nrao_file(filename): # the test parameter is the base name of the file to use; find # the file in the installed pywcs test directory filename = os.path.join(ROOT_DIR, "nrao", filename) fd = open(filename, 'rb') header = fd.read() fd.close() wcs = pywcs.WCS(header) wcs.wcs.set() # get the list of the hdr files that we want to test hdr_file_list = [ x for x in glob.glob(os.path.join(ROOT_DIR, "nrao", "*.hdr")) ] # actually perform a test for each one for filename in hdr_file_list : # use the base name of the file, because everything we yield # will show up in the test name in the pandokia report filename = os.path.basename( filename ) # yield a function name and parameters to make a generated test yield test_nrao_file, filename # AFTER we tested with every file that we found, check to see that we # actually have the list we expect. If N=0, we will not have performed # any tests at all. If N < n_data_files, we are missing some files, # so we will have skipped some tests. Without this check, both cases # happen silently! # how many do we expect to see? n_data_files = 6 if len(hdr_file_list) != n_data_files : assert False, ( "test_nraos has wrong number data files: found %d, expected " " %d, looking in %s" % ( len(hdr_file_list), n_data_files, ROOT_DIR ) ) # b.t.w. If this assert happens, nose reports one more test # than it would have otherwise. def test_units(): u = pywcs.UnitConverter("log(MHz)", "ln(Hz)") print(u.convert([1,2,3,4])) basic_units = "m s g rad sr K A mol cd".split() derived_units = "Hz J W V N Pa C Ohm ohm S F Wb T H lm lx".split() add_all_units = "eV Jy R G barn".split() add_sup_units = "a yr pc bit byte Byte".split() add_sub_units = "mag".split() general_units = "deg arcmin arcsec mas d h min erg Ry u D DEGREE DEGREES".split() astro_units = "Angstrom angstrom AU lyr beam solRad solMass solLum Sun".split() device_units = "adu bin chan count ct photon ph pixel pix voxel".split() sub_prefixes = "y z a f p n u m c d".split() sup_prefixes = "da h k M G T P E Z Y".split() def test_all_units(): def test_self(x): # x appears in the test name. If we would have had an ambiguous # test name, we had -xxx added to the unit name. Remove it if # necessary. if '-' in x : x = x.split('-')[0] # here is the test: try: u = pywcs.UnitConverter(x, x) except ValueError: e = sys.exc_info()[1] if str(e).startswith("ERROR 12 in wcsutrne") and \ x in ("S", "H", "D"): return else: raise assert u.scale == 1.0 assert u.offset == 0.0 assert u.power == 1.0 # list of all the units to test all = sorted(basic_units + derived_units + add_all_units + add_sup_units + add_sub_units + general_units + astro_units + device_units) # Pandokia has non-case-sensitve test names; since the unit name is # showing up in the test name, we want to disambiguate any name collisions. # Here is a list of all the lower-cased unit name names. all_lower = [ x.lower() for x in all ] # here are serial numbers to use to disambiguate unique_tags = { } for unit in all : # disambiguate the test name, if necessary l_unit = unit.lower() if unit != l_unit and l_unit in all_lower : n = unique_tags.get(l_unit, 1) unique_tags[n] = n + 1 # the test will tear off the part after the '-' unit = '%s-%d' % ( unit, n) # perform the test yield test_self, unit def test_unit_prefixes(): def test_self(x, p): unit = p + x try: u = pywcs.UnitConverter(unit, unit) except ValueError: e = sys.exc_info()[1] if str(e) == "Potentially unsafe translation" and \ x in ("S", "H", "D"): return else: raise assert u.scale == 1.0 assert u.offset == 0.0 assert u.power == 1.0 for unit in (basic_units + derived_units + add_all_units): for prefix in (sub_prefixes + sup_prefixes): yield test_self, unit, prefix for unit in add_sup_units: for prefix in sup_prefixes: yield test_self, unit, prefix for unit in add_sub_units: for prefix in sub_prefixes: yield test_self, unit, prefix def test_outside_sky(): """ From github issue #107 """ filename = os.path.join(ROOT_DIR, "data", "outside_sky.hdr") fd = open(filename, 'rb') header = fd.read() fd.close() w = pywcs.WCS(header) assert np.all(np.isnan(w.wcs_pix2sky([[100.,500.]], 0))) # outside sky assert np.all(np.isnan(w.wcs_pix2sky([[200.,200.]], 0))) # outside sky assert not np.any(np.isnan(w.wcs_pix2sky([[1000.,1000.]], 0))) pywcs-1.12/lib/pywcs/tests/test_pickle.py0000644001153600020070000000515512310355627022612 0ustar cslocumSTSCI\science00000000000000# TODO: Test that this works for subclasses import os try: import cPickle as pickle except ImportError: import pickle import numpy as np from numpy.testing import assert_array_almost_equal import pywcs ROOT_DIR = None def setup(): global ROOT_DIR ROOT_DIR = os.path.join(os.path.dirname(pywcs.__file__), "tests") def test_basic(): wcs = pywcs.WCS() s = pickle.dumps(wcs) wcs2 = pickle.loads(s) def test_dist(): try: import pyfits except ImportError: pass hdulist = pyfits.open(os.path.join(ROOT_DIR, "data", "dist.fits")) wcs1 = pywcs.WCS(hdulist[0].header, hdulist) assert wcs1.det2im2 is not None s = pickle.dumps(wcs1) wcs2 = pickle.loads(s) x = np.random.rand(2 ** 16, wcs1.wcs.naxis) world1 = wcs1.all_pix2sky(x, 1) world2 = wcs2.all_pix2sky(x, 1) assert_array_almost_equal(world1, world2) def test_sip(): try: import pyfits except ImportError: pass hdulist = pyfits.open(os.path.join(ROOT_DIR, "data", "sip.fits"), ignore_missing_end=True) wcs1 = pywcs.WCS(hdulist[0].header) assert wcs1.sip is not None s = pickle.dumps(wcs1) wcs2 = pickle.loads(s) x = np.random.rand(2 ** 16, wcs1.wcs.naxis) world1 = wcs1.all_pix2sky(x, 1) world2 = wcs2.all_pix2sky(x, 1) assert_array_almost_equal(world1, world2) def test_sip2(): try: import pyfits except ImportError: pass hdulist = pyfits.open(os.path.join(ROOT_DIR, "data", "sip2.fits"), ignore_missing_end=True) wcs1 = pywcs.WCS(hdulist[0].header) assert wcs1.sip is not None s = pickle.dumps(wcs1) wcs2 = pickle.loads(s) x = np.random.rand(2 ** 16, wcs1.wcs.naxis) world1 = wcs1.all_pix2sky(x, 1) world2 = wcs2.all_pix2sky(x, 1) assert_array_almost_equal(world1, world2) def test_wcs(): try: import pyfits except ImportError: pass filename = os.path.join(ROOT_DIR, "data", "outside_sky.hdr") fd = open(filename, 'rb') header = fd.read() fd.close() wcs1 = pywcs.WCS(header) s = pickle.dumps(wcs1) wcs2 = pickle.loads(s) x = np.random.rand(2 ** 16, wcs1.wcs.naxis) world1 = wcs1.all_pix2sky(x, 1) world2 = wcs2.all_pix2sky(x, 1) assert_array_almost_equal(world1, world2) class Sub(pywcs.WCS): def __init__(self, *args, **kwargs): self.foo = 42 def test_subclass(): wcs = Sub() s = pickle.dumps(wcs) wcs2 = pickle.loads(s) assert isinstance(wcs2, Sub) assert wcs.foo == 42 assert wcs2.foo == 42 assert wcs2.wcs is not None pywcs-1.12/lib/pywcs/tests/test_profiling.py0000644001153600020070000000723412310355627023334 0ustar cslocumSTSCI\science00000000000000import glob import os import sys import numpy as np from numpy.testing import assert_array_almost_equal import pywcs ROOT_DIR = None def setup(): global ROOT_DIR # do not use __file__ here - we want to find the data files that # belong to the pywcs that we are testing, even if we are not running # this test from the installed copy of this file. Use pywcs.__file__ ROOT_DIR = os.path.join(os.path.dirname(pywcs.__file__), 'tests') def test_maps(): def test_map(filename): filename = os.path.join(ROOT_DIR, "maps", filename) fd = open(filename, 'rb') header = fd.read() fd.close() wcs = pywcs.WCS(header) x = np.random.rand(2 ** 16, wcs.wcs.naxis) world = wcs.wcs_pix2sky(x, 1) pix = wcs.wcs_sky2pix(x, 1) # get the list of the hdr files that we want to test hdr_file_list = [ x for x in glob.glob(os.path.join(ROOT_DIR, "maps", "*.hdr")) ] # actually perform a test for each one for filename in hdr_file_list : # use the base name of the file, because everything we yield # will show up in the test name in the pandokia report filename = os.path.basename( filename ) # yield a function name and parameters to make a generated test yield test_map, filename # AFTER we tested with every file that we found, check to see that we # actually have the list we expect. If N=0, we will not have performed # any tests at all. If N < n_data_files, we are missing some files, # so we will have skipped some tests. Without this check, both cases # happen silently! # how many do we expect to see? n_data_files = 28 if len(hdr_file_list) != n_data_files : assert False, ( "test_maps has wrong number data files: found %d, expected " " %d, looking in %s" % ( len(hdr_file_list), n_data_files, ROOT_DIR ) ) # b.t.w. If this assert happens, nose reports one more test # than it would have otherwise. def test_spectra(): def test_spectrum(filename): filename = os.path.join(ROOT_DIR, "spectra", filename) fd = open(filename, 'rb') header = fd.read() fd.close() wcs = pywcs.WCS(header) x = np.random.rand(2 ** 16, wcs.wcs.naxis) world = wcs.wcs_pix2sky(x, 1) pix = wcs.wcs_sky2pix(x, 1) # get the list of the hdr files that we want to test hdr_file_list = [ x for x in glob.glob(os.path.join(ROOT_DIR, "spectra", "*.hdr")) ] # actually perform a test for each one for filename in hdr_file_list : # use the base name of the file, because everything we yield # will show up in the test name in the pandokia report filename = os.path.basename( filename ) # yield a function name and parameters to make a generated test yield test_spectrum, filename # AFTER we tested with every file that we found, check to see that we # actually have the list we expect. If N=0, we will not have performed # any tests at all. If N < n_data_files, we are missing some files, # so we will have skipped some tests. Without this check, both cases # happen silently! # how many do we expect to see? n_data_files = 6 if len(hdr_file_list) != n_data_files : assert False, ( "test_spectra has wrong number data files: found %d, expected " " %d, looking in %s" % ( len(hdr_file_list), n_data_files, ROOT_DIR ) ) # b.t.w. If this assert happens, nose reports one more test # than it would have otherwise. pywcs-1.12/lib/pywcs/tests/test_wcsprm.py0000644001153600020070000003240212310355627022651 0ustar cslocumSTSCI\science00000000000000import os import sys from nose.tools import raises from numpy.testing import assert_array_equal import numpy as np import pywcs from pywcs import _pywcs def b(s): return s.encode('ascii') ###################################################################### ROOT_DIR = None def setup(): global ROOT_DIR ROOT_DIR = os.path.join(os.path.dirname(pywcs.__file__), "tests") def test_alt(): w = _pywcs._Wcsprm() assert w.alt == b(" ") w.alt = b("X") assert w.alt == b("X") del w.alt assert w.alt == b(" ") @raises(ValueError) def test_alt_invalid1(): w = _pywcs._Wcsprm() w.alt = b("$") @raises(ValueError) def test_alt_invalid2(): w = _pywcs._Wcsprm() w.alt = b(" ") def test_axis_types(): w = _pywcs._Wcsprm() assert_array_equal(w.axis_types, [0, 0]) def test_cd(): w = _pywcs._Wcsprm() w.cd = [[1, 0], [0, 1]] assert w.cd.dtype == np.float assert w.has_cd() == True assert_array_equal(w.cd, [[1, 0], [0, 1]]) del w.cd assert w.has_cd() == False @raises(AttributeError) def test_cd_missing(): w = _pywcs._Wcsprm() assert w.has_cd() == False w.cd @raises(AttributeError) def test_cd_missing2(): w = _pywcs._Wcsprm() w.cd = [[1, 0], [0, 1]] assert w.has_cd() == True del w.cd assert w.has_cd() == False w.cd @raises(ValueError) def test_cd_invalid(): w = _pywcs._Wcsprm() w.cd = [1, 0, 0, 1] def test_cdelt(): w = _pywcs._Wcsprm() assert_array_equal(w.cdelt, [1, 1]) w.cdelt = [42, 54] assert_array_equal(w.cdelt, [42, 54]) @raises(TypeError) def test_cdelt_delete(): w = _pywcs._Wcsprm() del w.cdelt def test_cel_offset(): w = _pywcs._Wcsprm() assert w.cel_offset is False w.cel_offset = 'foo' assert w.cel_offset is True w.cel_offset = 0 assert w.cel_offset is False def test_celfix(): # TODO: We need some data with -NCP or -GLS projections to test # with. For now, this is just a smoke test w = _pywcs._Wcsprm() assert w.celfix() == -1 def test_cname(): w = _pywcs._Wcsprm() # Test that this works as an iterator for x in w.cname: assert x == b('') assert list(w.cname) == [b(''), b('')] w.cname = [b('foo'), b('bar')] assert list(w.cname) == [b('foo'), b('bar')] @raises(TypeError) def test_cname_invalid(): w = _pywcs._Wcsprm() w.cname = [42, 54] def test_colax(): w = _pywcs._Wcsprm() assert w.colax.dtype == np.intc assert_array_equal(w.colax, [0, 0]) w.colax = [42, 54] assert_array_equal(w.colax, [42, 54]) w.colax[0] = 0 assert_array_equal(w.colax, [0, 54]) def test_colnum(): w = _pywcs._Wcsprm() assert w.colnum == 0 w.colnum = 42 assert w.colnum == 42 @raises(TypeError) def test_colnum_invalid(): w = _pywcs._Wcsprm() w.colnum = 'foo' def test_crder(): w = _pywcs._Wcsprm() assert w.crder.dtype == np.float assert np.all(np.isnan(w.crder)) w.crder[0] = 0 assert np.isnan(w.crder[1]) assert w.crder[0] == 0 def test_crota(): w = _pywcs._Wcsprm() w.crota = [1, 0] assert w.crota.dtype == np.float assert w.has_crota() == True assert_array_equal(w.crota, [1, 0]) del w.crota assert w.has_crota() == False @raises(AttributeError) def test_crota_missing(): w = _pywcs._Wcsprm() assert w.has_crota() == False w.crota @raises(AttributeError) def test_crota_missing2(): w = _pywcs._Wcsprm() w.crota = [1, 0] assert w.has_crota() == True del w.crota assert w.has_crota() == False w.crota def test_crpix(): w = _pywcs._Wcsprm() assert w.crpix.dtype == np.float assert_array_equal(w.crpix, [0, 0]) w.crpix = [42, 54] assert_array_equal(w.crpix, [42, 54]) w.crpix[0] = 0 assert_array_equal(w.crpix, [0, 54]) def test_crval(): w = _pywcs._Wcsprm() assert w.crval.dtype == np.float assert_array_equal(w.crval, [0, 0]) w.crval = [42, 54] assert_array_equal(w.crval, [42, 54]) w.crval[0] = 0 assert_array_equal(w.crval, [0, 54]) def test_csyer(): w = _pywcs._Wcsprm() assert w.crder.dtype == np.float assert np.all(np.isnan(w.crder)) w.crder[0] = 0 assert np.isnan(w.crder[1]) assert w.crder[0] == 0 def test_ctype(): w = _pywcs._Wcsprm() assert list(w.ctype) == [b(''), b('')] w.ctype = [b('RA---TAN'), b('DEC--TAN')] assert_array_equal(w.axis_types, [2200, 2201]) assert w.lat == 1 assert w.lng == 0 assert w.lattyp == b('DEC') assert w.lngtyp == b('RA') assert list(w.ctype) == [b('RA---TAN'), b('DEC--TAN')] w.ctype = [b('foo'), b('bar')] assert_array_equal(w.axis_types, [0, 0]) assert list(w.ctype) == [b('foo'), b('bar')] assert w.lat == -1 assert w.lng == -1 assert w.lattyp == b('DEC') assert w.lngtyp == b('RA') def test_cubeface(): w = _pywcs._Wcsprm() assert w.cubeface == -1 def test_cunit(): w = _pywcs._Wcsprm() assert list(w.cunit) == [b(''), b('')] w.cunit = [b('m'), b('km')] @raises(ValueError) def test_cunit_invalid(): w = _pywcs._Wcsprm() w.cunit[0] = b('foo') @raises(ValueError) def test_cunit_invalid2(): w = _pywcs._Wcsprm() w.cunit = [b('foo'), b('bar')] def test_cylfix(): # TODO: We need some data with broken cylindrical projections to # test with. For now, this is just a smoke test. w = _pywcs._Wcsprm() assert w.cylfix() == -1 def test_dateavg(): w = _pywcs._Wcsprm() assert w.dateavg == b('') # TODO: When dateavg is verified, check that it works def test_dateobs(): w = _pywcs._Wcsprm() assert w.dateobs == b('') # TODO: When dateavg is verified, check that it works def test_datfix(): w = _pywcs._Wcsprm() w.dateobs = b('31/12/99') status = w.datfix() assert status == 0 assert w.dateobs == b('1999-12-31') assert w.mjdobs == 51543.0 def test_equinox(): w = _pywcs._Wcsprm() assert np.isnan(w.equinox) w.equinox = 0 assert w.equinox == 0 del w.equinox assert np.isnan(w.equinox) def test_fix(): w = _pywcs._Wcsprm() assert w.fix() == { 'cylfix': 'No change', 'datfix': 'No change', 'spcfix': 'No change', 'unitfix':'No change', 'celfix': 'No change'} def test_fix2(): w = _pywcs._Wcsprm() w.dateobs = b('31/12/99') status = w.fix() assert status == { 'cylfix': 'No change', 'datfix': "Changed '31/12/99' to '1999-12-31'", 'spcfix': 'No change', 'unitfix': 'No change', 'celfix': 'No change'} assert w.dateobs == b('1999-12-31') assert w.mjdobs == 51543.0 def test_fix3(): w = _pywcs._Wcsprm() w.dateobs = b('31/12/F9') assert w.fix() == { 'cylfix': 'No change', 'datfix': "Invalid parameter value: invalid date '31/12/F9'", 'spcfix': 'No change', 'unitfix':'No change', 'celfix': 'No change'} assert w.dateobs == b('31/12/F9') assert np.isnan(w.mjdobs) def test_get_ps(): # TODO: We need some data with PSi_ma keywords w = _pywcs._Wcsprm() assert len(w.get_ps()) == 0 def test_get_pv(): # TODO: We need some data with PVi_ma keywords w = _pywcs._Wcsprm() assert len(w.get_pv()) == 0 @raises(AssertionError) def test_imgpix_matrix(): w = _pywcs._Wcsprm() w.imgpix_matrix @raises(AttributeError) def test_imgpix_matrix(): w = _pywcs._Wcsprm() w.imgpix_matrix = None def test_isunity(): w = _pywcs._Wcsprm() assert(w.is_unity()) def test_lat(): w = _pywcs._Wcsprm() assert w.lat == -1 @raises(AttributeError) def test_lat_set(): w = _pywcs._Wcsprm() w.lat = 0 def test_latpole(): w = _pywcs._Wcsprm() assert w.latpole == 90.0 w.latpole = 45.0 assert w.latpole == 45.0 del w.latpole assert w.latpole == 90.0 def test_lattyp(): w = _pywcs._Wcsprm() print(repr(w.lattyp)) assert w.lattyp == b(" ") @raises(AttributeError) def test_lattyp_set(): w = _pywcs._Wcsprm() w.lattyp = 0 def test_lng(): w = _pywcs._Wcsprm() assert w.lng == -1 @raises(AttributeError) def test_lng_set(): w = _pywcs._Wcsprm() w.lng = 0 def test_lngtyp(): w = _pywcs._Wcsprm() assert w.lngtyp == b(" ") @raises(AttributeError) def test_lngtyp_set(): w = _pywcs._Wcsprm() w.lngtyp = 0 def test_lonpole(): w = _pywcs._Wcsprm() assert np.isnan(w.lonpole) w.lonpole = 45.0 assert w.lonpole == 45.0 del w.lonpole assert np.isnan(w.lonpole) def test_mjdavg(): w = _pywcs._Wcsprm() assert np.isnan(w.mjdavg) w.mjdavg = 45.0 assert w.mjdavg == 45.0 del w.mjdavg assert np.isnan(w.mjdavg) def test_mjdobs(): w = _pywcs._Wcsprm() assert np.isnan(w.mjdobs) w.mjdobs = 45.0 assert w.mjdobs == 45.0 del w.mjdobs assert np.isnan(w.mjdobs) def test_name(): w = _pywcs._Wcsprm() assert w.name == b('') w.name = b('foo') assert w.name == b('foo') def test_naxis(): w = _pywcs._Wcsprm() assert w.naxis == 2 @raises(AttributeError) def test_naxis_set(): w = _pywcs._Wcsprm() w.naxis = 4 def test_obsgeo(): w = _pywcs._Wcsprm() assert np.all(np.isnan(w.obsgeo)) w.obsgeo = [1,2,3] assert_array_equal(w.obsgeo, [1,2,3]) del w.obsgeo assert np.all(np.isnan(w.obsgeo)) def test_pc(): w = _pywcs._Wcsprm() assert w.has_pc() assert_array_equal(w.pc, [[1, 0], [0, 1]]) w.cd = [[1, 0], [0, 1]] assert not w.has_pc() del w.cd assert w.has_pc() assert_array_equal(w.pc, [[1, 0], [0, 1]]) @raises(AttributeError) def test_pc_missing(): w = _pywcs._Wcsprm() w.cd = [[1, 0], [0, 1]] assert not w.has_pc() w.pc def test_phi0(): w = _pywcs._Wcsprm() assert np.isnan(w.phi0) w.phi0 = 42.0 assert w.phi0 == 42.0 del w.phi0 assert np.isnan(w.phi0) @raises(AssertionError) def test_piximg_matrix(): w = _pywcs._Wcsprm() w.piximg_matrix @raises(AttributeError) def test_piximg_matrix(): w = _pywcs._Wcsprm() w.piximg_matrix = None def test_print_contents(): # In general, this is human-consumable, so we don't care if the # content changes, just check the type w = _pywcs._Wcsprm() assert isinstance(str(w), str) def test_radesys(): w = _pywcs._Wcsprm() assert w.radesys == b('') w.radesys = b('foo') assert w.radesys == b('foo') def test_restfrq(): w = _pywcs._Wcsprm() assert w.restfrq == 0.0 w.restfrq = np.nan assert np.isnan(w.restfrq) def test_restwav(): w = _pywcs._Wcsprm() assert w.restwav == 0.0 w.restwav = np.nan assert np.isnan(w.restwav) def test_set_ps(): w = _pywcs._Wcsprm() data = [(0, 0, "param1"), (1, 1, "param2")] w.set_ps(data) assert w.get_ps() == data def test_set_ps_realloc(): w = _pywcs._Wcsprm() w.set_ps([(0, 0, "param1")] * 16) def test_set_pv(): w = _pywcs._Wcsprm() data = [(0, 0, 42.), (1, 1, 54.)] w.set_pv(data) assert w.get_pv() == data def test_set_pv_realloc(): w = _pywcs._Wcsprm() w.set_pv([(0, 0, 42.)] * 16) def test_spcfix(): # TODO: We need some data with broken spectral headers here to # really test header = open(os.path.join(ROOT_DIR, 'spectra', 'orion-velo-1.hdr'), 'rb').read() w = _pywcs._Wcsprm(header) assert w.spcfix() == -1 def test_spec(): w = _pywcs._Wcsprm() assert w.spec == -1 @raises(AttributeError) def test_spec_set(): w = _pywcs._Wcsprm() w.spec = 0 def test_specsys(): w = _pywcs._Wcsprm() assert w.specsys == b('') w.specsys = b('foo') assert w.specsys == b('foo') def test_sptr(): #TODO: Write me pass def test_ssysobs(): w = _pywcs._Wcsprm() assert w.ssysobs == b('') w.ssysobs = b('foo') assert w.ssysobs == b('foo') def test_ssyssrc(): w = _pywcs._Wcsprm() assert w.ssyssrc == b('') w.ssyssrc = b('foo') assert w.ssyssrc == b('foo') def test_tab(): w = _pywcs._Wcsprm() assert len(w.tab) == 0 # TODO: Inject some headers that have tables and test def test_theta0(): w = _pywcs._Wcsprm() assert np.isnan(w.theta0) w.theta0 = 42.0 assert w.theta0 == 42.0 del w.theta0 assert np.isnan(w.theta0) def test_toheader(): w = _pywcs._Wcsprm() if sys.version_info[0] >= 3: assert isinstance(w.to_header(), bytes) else: assert isinstance(w.to_header(), str) def test_velangl(): w = _pywcs._Wcsprm() assert w.velangl == 0.0 w.velangl = 42.0 assert w.velangl == 42.0 del w.velangl assert np.isnan(w.velangl) def test_velosys(): w = _pywcs._Wcsprm() assert np.isnan(w.velosys) w.velosys = 42.0 assert w.velosys == 42.0 del w.velosys assert np.isnan(w.velosys) def test_zsource(): w = _pywcs._Wcsprm() assert np.isnan(w.zsource) w.zsource = 42.0 assert w.zsource == 42.0 del w.zsource assert np.isnan(w.zsource) def test_cd_3d(): header = open(os.path.join(ROOT_DIR, 'data', '3d_cd.hdr'), 'rb').read() w = _pywcs._Wcsprm(header) assert w.cd.shape == (3, 3) assert w.get_pc().shape == (3, 3) assert w.get_cdelt().shape == (3,) @raises(RuntimeError) def test_get_pc(): header = open(os.path.join(ROOT_DIR, 'data', '3d_cd.hdr'), 'rb').read() w = _pywcs._Wcsprm(header) w.get_pc()[0,0] = 42 @raises(_pywcs.SingularMatrixError) def test_detailed_err(): w = _pywcs._Wcsprm() w.pc = [[0,0],[0,0]] w.set() pywcs-1.12/lib/pywcs/version.py0000644001153600020070000000613012310355730020614 0ustar cslocumSTSCI\science00000000000000"""This is an automatically generated file created by stsci.distutils.hooks.version_setup_hook. Do not modify this file by hand. """ __all__ = ['__version__', '__vdate__', '__svn_revision__', '__svn_full_info__', '__setup_datetime__'] import datetime __version__ = '1.12' __vdate__ = 'unspecified' __svn_revision__ = '3949:3950' __svn_full_info__ = 'Path: pywcs\nURL: https://aeon.stsci.edu/ssb/svn/astrolib/tags/release_1.12/pywcs\nRepository Root: https://aeon.stsci.edu/ssb/svn/astrolib\nRepository UUID: 90a0a646-be8a-0410-bb88-9290da87bc01\nRevision: 3949\nNode Kind: directory\nSchedule: normal\nLast Changed Author: cslocum\nLast Changed Rev: 3945\nLast Changed Date: 2014-03-13 12:16:54 -0400 (Thu, 13 Mar 2014)' __setup_datetime__ = datetime.datetime(2014, 3, 13, 12, 24, 56, 925642) # what version of stsci.distutils created this version.py stsci_distutils_version = '0.3.7' if '.dev' in __version__: def update_svn_info(): """Update the SVN info if running out of an SVN working copy.""" import os import string import subprocess global __svn_revision__ global __svn_full_info__ path = os.path.abspath(os.path.dirname(__file__)) run_svnversion = True try: pipe = subprocess.Popen(['svn', 'info', path], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, _ = pipe.communicate() if pipe.returncode == 0: lines = [] for line in stdout.splitlines(): line = line.decode('latin1').strip() if not line: continue lines.append(line) if not lines: __svn_full_info__ = ['unknown'] else: __svn_full_info__ = lines else: run_svnversion = False except OSError: run_svnversion = False if run_svnversion: # If updating the __svn_full_info__ succeeded then use its output # to find the base of the working copy and use svnversion to get # the svn revision. for line in __svn_full_info__: if line.startswith('Working Copy Root Path'): path = line.split(':', 1)[1].strip() break try: pipe = subprocess.Popen(['svnversion', path], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, _ = pipe.communicate() if pipe.returncode == 0: stdout = stdout.decode('latin1').strip() if stdout and stdout[0] in string.digits: __svn_revision__ = stdout except OSError: pass # Convert __svn_full_info__ back to a string if isinstance(__svn_full_info__, list): __svn_full_info__ = '\n'.join(__svn_full_info__) update_svn_info() del update_svn_info pywcs-1.12/lib/pywcs.egg-info/0000755001153600020070000000000012310355732020251 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/lib/pywcs.egg-info/dependency_links.txt0000644001153600020070000000000112310355731024316 0ustar cslocumSTSCI\science00000000000000 pywcs-1.12/lib/pywcs.egg-info/not-zip-safe0000644001153600020070000000000112310355701022473 0ustar cslocumSTSCI\science00000000000000 pywcs-1.12/lib/pywcs.egg-info/PKG-INFO0000644001153600020070000001316712310355731021355 0ustar cslocumSTSCI\science00000000000000Metadata-Version: 1.1 Name: pywcs Version: 1.12 Summary: Python wrappers to WCSLIB Home-page: http://www.scipy.org/AstroLib Author: Michael Droettboom Author-email: mdroe@stsci.edu License: UNKNOWN Description: Introduction ------------ pywcs is a set of routines for handling the FITS World Coordinate System (WCS) standard. It is a thin wrapper around the high- and mid-level interfaces of Dr. Mark Calabretta's WCSLIB available here: http://www.atnf.csiro.au/people/mcalabre/WCS/ In addition, there are extensions (written in C) to support Spitzer Simple Imaging Polynomial (SIP) convention keywords and Paper IV table lookup distortion. Please direct any questions to: help@stsci.edu Build instructions ------------------ pywcs includes its own copy of WCSLIB. pywcs requires: - Numpy 1.3 or later - pyfits 1.4 or later pywcs uses the standard Python distutils system to build and install itself. From the command line run:: python setup.py install to install pywcs. Building documentation ---------------------- Optionally, the documentation can be built using Sphinx (http://sphinx.pocoo.org). After installing pywcs, 'cd' into the 'doc' directory and:: make html The documentation is also available online at: http://stsdas.stsci.edu/astrolib/pywcs/index.html Version 1.11 ============ NEW FEATURES: - Updated to wcslib version 4.8.2, which gives much more detailed error messages. Exceptions raised due to invalid WCS keywords should now be more informative. - Undefined values that are the result of p2s and s2p are now set to NaN. Previously, one had to examine the stat result vector to determine which results were invalid. - Added functions get_pc() and get_cdelt(). These provide a way to always get the canonical representation of the linear transformation matrix, whether the header specified it in PC, CD or CROTA form. BROADER COMPATIBILITY: - Supports Python 3.x - Long-running process will now release the Python GIL to better support Python multithreading. - Builds on Microsoft Windows using mingw32, mingw64 and Visual Studio 9.0 and 10.0 without severely patching wcslib. - pywcs will now run without pyfits, though the SIP and distortion lookup table functionality is unavailable. BUG FIXES: - The dimensions of the cd and pc matrices were formerly always returned as 2x2. They now are sized according to naxis. MISCELLANEOUS: - Lots of new unit tests - Setting wcs.wcs.cunit will now verify that the values are valid unit strings. Version 1.10 ============ - Adds a UnitConversion class, which gives access to wcslib's unit conversion functionality. Given two convertible unit strings, pywcs can convert arrays of values from one to the other. - Now uses wcslib 4.7 - Changes to some wcs values would not always calculate secondary values. Version 1.9 =========== - Support binary image arrays and pixel list format WCS by presenting a way to call wcslib's wcsbth() - Updated underlying wcslib to version 4.5, which fixes the following: - Fixed the interpretation of VELREF when translating AIPS-convention spectral types. Such translation is now handled by a new special- purpose function, spcaips(). The wcsprm struct has been augmented with an entry for velref which is filled by wcspih() and wcsbth(). Previously, selection by VELREF of the radio or optical velocity convention for type VELO was not properly handled. BUGS: - The "pc" member is now available with a default "raw" Wcsprm object. - Make properties that return arrays read-only, since modifying a (mutable) array could result in secondary values not being recomputed based on those changes. - float properties can now be set using int values Version 1.3a1 ============= Earlier versions of pywcs had two versions of every conversion method: X(...) -- treats the origin of pixel coordinates at (0, 0) X_fits(...) -- treats the origin of pixel coordinates at (1, 1) From version 1.3 onwards, there is only one method for each conversion, with an 'origin' argument: - 0: places the origin at (0, 0), which is the C/Numpy convention. - 1: places the origin at (1, 1), which is the Fortran/FITS convention. Platform: UNKNOWN Classifier: Intended Audience :: Science/Research Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: Scientific/Engineering :: Astronomy Classifier: Topic :: Software Development :: Libraries :: Python Modules pywcs-1.12/lib/pywcs.egg-info/requires.txt0000644001153600020070000000003212310355731022643 0ustar cslocumSTSCI\science00000000000000pyfits>=2.4.0 numpy>=1.5.1pywcs-1.12/lib/pywcs.egg-info/SOURCES.txt0000644001153600020070000003323712310355732022145 0ustar cslocumSTSCI\science00000000000000CHANGELOG LICENSE MANIFEST.in README defsetup.py distribute_setup.py hooks.py patch_wcslib.sh setup.cfg setup.py stsci_distutils_hack.py doc/Makefile doc/docstrings.py doc/make.bat doc/source/api.rst doc/source/api_distortion.rst doc/source/api_sip.rst doc/source/api_units.rst doc/source/api_wcs.rst doc/source/api_wcsprm.rst doc/source/conf.py doc/source/examples doc/source/examples.rst doc/source/index.rst doc/source/references.rst doc/source/relax.rst examples/from_file.py examples/programmatic.py lib/pywcs_setup.py lib/pywcs/__init__.py lib/pywcs/_docutil.py lib/pywcs/core.py lib/pywcs/hooks.py lib/pywcs/version.py lib/pywcs.egg-info/PKG-INFO lib/pywcs.egg-info/SOURCES.txt lib/pywcs.egg-info/dependency_links.txt lib/pywcs.egg-info/not-zip-safe lib/pywcs.egg-info/requires.txt lib/pywcs.egg-info/top_level.txt lib/pywcs/tests/__init__.py lib/pywcs/tests/test.py lib/pywcs/tests/test_pickle.py lib/pywcs/tests/test_profiling.py lib/pywcs/tests/test_wcsprm.py lib/pywcs/tests/data/3d_cd.hdr lib/pywcs/tests/data/dist.fits lib/pywcs/tests/data/outside_sky.hdr lib/pywcs/tests/data/sip.fits lib/pywcs/tests/data/sip2.fits lib/pywcs/tests/maps/1904-66_AIR.hdr lib/pywcs/tests/maps/1904-66_AIT.hdr lib/pywcs/tests/maps/1904-66_ARC.hdr lib/pywcs/tests/maps/1904-66_AZP.hdr lib/pywcs/tests/maps/1904-66_BON.hdr lib/pywcs/tests/maps/1904-66_CAR.hdr lib/pywcs/tests/maps/1904-66_CEA.hdr lib/pywcs/tests/maps/1904-66_COD.hdr lib/pywcs/tests/maps/1904-66_COE.hdr lib/pywcs/tests/maps/1904-66_COO.hdr lib/pywcs/tests/maps/1904-66_COP.hdr lib/pywcs/tests/maps/1904-66_CSC.hdr lib/pywcs/tests/maps/1904-66_CYP.hdr lib/pywcs/tests/maps/1904-66_HPX.hdr lib/pywcs/tests/maps/1904-66_MER.hdr lib/pywcs/tests/maps/1904-66_MOL.hdr lib/pywcs/tests/maps/1904-66_NCP.hdr lib/pywcs/tests/maps/1904-66_PAR.hdr lib/pywcs/tests/maps/1904-66_PCO.hdr lib/pywcs/tests/maps/1904-66_QSC.hdr lib/pywcs/tests/maps/1904-66_SFL.hdr lib/pywcs/tests/maps/1904-66_SIN.hdr lib/pywcs/tests/maps/1904-66_STG.hdr lib/pywcs/tests/maps/1904-66_SZP.hdr lib/pywcs/tests/maps/1904-66_TAN.hdr lib/pywcs/tests/maps/1904-66_TSC.hdr lib/pywcs/tests/maps/1904-66_ZEA.hdr lib/pywcs/tests/maps/1904-66_ZPN.hdr lib/pywcs/tests/nrao/gls.hdr lib/pywcs/tests/nrao/m28opt.hdr lib/pywcs/tests/nrao/m82opt.hdr lib/pywcs/tests/nrao/m82rad.hdr lib/pywcs/tests/nrao/ngc1316o.hdr lib/pywcs/tests/nrao/ngc1316r.hdr lib/pywcs/tests/spectra/orion-freq-1.hdr lib/pywcs/tests/spectra/orion-freq-4.hdr lib/pywcs/tests/spectra/orion-velo-1.hdr lib/pywcs/tests/spectra/orion-velo-4.hdr lib/pywcs/tests/spectra/orion-wave-1.hdr lib/pywcs/tests/spectra/orion-wave-4.hdr patches/extended_ctype.patch src/distortion.c src/distortion.h src/distortion_wrap.c src/distortion_wrap.h src/docstrings.c src/docstrings.h src/isnan.h src/pipeline.c src/pipeline.h src/pyutil.c src/pyutil.h src/pywcs.c src/pywcs.h src/pywcs_api.c src/pywcs_api.h src/sip.c src/sip.h src/sip_wrap.c src/sip_wrap.h src/str_list_proxy.c src/str_list_proxy.h src/util.c src/util.h src/wcsconfig.h src/wcslib_tabprm_wrap.c src/wcslib_tabprm_wrap.h src/wcslib_units_wrap.c src/wcslib_units_wrap.h src/wcslib_wrap.c src/wcslib_wrap.h src/wcslib_wtbarr_wrap.c src/wcslib_wtbarr_wrap.h wcslib/CHANGES wcslib/COPYING wcslib/COPYING.LESSER wcslib/GNUmakefile wcslib/INSTALL wcslib/README wcslib/THANKS wcslib/VALIDATION wcslib/configure wcslib/configure.ac wcslib/flavours wcslib/makedefs.in wcslib/wcsconfig.h.in wcslib/wcsconfig_f77.h.in wcslib/wcsconfig_tests.h.in wcslib/wcsconfig_utils.h.in wcslib/wcslib.pc.in wcslib/wcslib.pdf wcslib/C/GNUmakefile wcslib/C/cel.c wcslib/C/cel.h wcslib/C/fitshdr.h wcslib/C/fitshdr.l wcslib/C/getwcstab.c wcslib/C/getwcstab.h wcslib/C/lin.c wcslib/C/lin.h wcslib/C/log.c wcslib/C/log.h wcslib/C/prj.c wcslib/C/prj.h wcslib/C/spc.c wcslib/C/spc.h wcslib/C/sph.c wcslib/C/sph.h wcslib/C/spx.c wcslib/C/spx.h wcslib/C/tab.c wcslib/C/tab.h wcslib/C/wcs.c wcslib/C/wcs.h wcslib/C/wcsbth.l wcslib/C/wcserr.c wcslib/C/wcserr.h wcslib/C/wcsfix.c wcslib/C/wcsfix.h wcslib/C/wcshdr.c wcslib/C/wcshdr.h wcslib/C/wcslib.h wcslib/C/wcsmath.h wcslib/C/wcspih.l wcslib/C/wcsprintf.c wcslib/C/wcsprintf.h wcslib/C/wcstrig.c wcslib/C/wcstrig.h wcslib/C/wcsulex.l wcslib/C/wcsunits.c wcslib/C/wcsunits.h wcslib/C/wcsutil.c wcslib/C/wcsutil.h wcslib/C/wcsutrn.l wcslib/C/flexed/README wcslib/C/flexed/fitshdr.c wcslib/C/flexed/wcsbth.c wcslib/C/flexed/wcspih.c wcslib/C/flexed/wcsulex.c wcslib/C/flexed/wcsutrn.c wcslib/C/test/bth.keyrec wcslib/C/test/pih.keyrec wcslib/C/test/tbth1.c wcslib/C/test/tcel1.c wcslib/C/test/tcel2.c wcslib/C/test/tfitshdr.c wcslib/C/test/tlin.c wcslib/C/test/tlog.c wcslib/C/test/tofits.c wcslib/C/test/tpih1.c wcslib/C/test/tpih2.c wcslib/C/test/tprj1.c wcslib/C/test/tprj2.c wcslib/C/test/tspc.c wcslib/C/test/tsph.c wcslib/C/test/tsphdpa.c wcslib/C/test/tspx.c wcslib/C/test/ttab1.c wcslib/C/test/ttab2.c wcslib/C/test/ttab3.c wcslib/C/test/tunits.c wcslib/C/test/twcs.c wcslib/C/test/twcsfix.c wcslib/C/test/twcshdr.c wcslib/C/test/twcsmix.c wcslib/C/test/twcssub.c wcslib/C/test/twcstab.c wcslib/C/test/units_test wcslib/C/test/wcstab.keyrec wcslib/Fortran/GNUmakefile wcslib/Fortran/cel.inc wcslib/Fortran/cel_f.c wcslib/Fortran/fitshdr.inc wcslib/Fortran/fitshdr_f.c wcslib/Fortran/getwcstab.inc wcslib/Fortran/getwcstab_f.c wcslib/Fortran/lin.inc wcslib/Fortran/lin_f.c wcslib/Fortran/log.inc wcslib/Fortran/log_f.c wcslib/Fortran/prj.inc wcslib/Fortran/prj_f.c wcslib/Fortran/spc.inc wcslib/Fortran/spc_f.c wcslib/Fortran/sph.inc wcslib/Fortran/sph_f.c wcslib/Fortran/spx.inc wcslib/Fortran/spx_f.c wcslib/Fortran/tab.inc wcslib/Fortran/tab_f.c wcslib/Fortran/wcs.inc wcslib/Fortran/wcs_f.c wcslib/Fortran/wcsfix.inc wcslib/Fortran/wcsfix_f.c wcslib/Fortran/wcshdr.inc wcslib/Fortran/wcshdr_f.c wcslib/Fortran/wcsunits.inc wcslib/Fortran/wcsunits_f.c wcslib/Fortran/test/tcel1.f wcslib/Fortran/test/tfitshdr.f wcslib/Fortran/test/tlin.f wcslib/Fortran/test/tlog.f wcslib/Fortran/test/tpih1.f wcslib/Fortran/test/tpih2.f wcslib/Fortran/test/tprj1.f wcslib/Fortran/test/tprj2.f wcslib/Fortran/test/tspc.f wcslib/Fortran/test/tsph.f wcslib/Fortran/test/tspx.f wcslib/Fortran/test/ttab1.f wcslib/Fortran/test/ttab2.f wcslib/Fortran/test/ttab3.f wcslib/Fortran/test/tunits.f wcslib/Fortran/test/twcs.f wcslib/Fortran/test/twcsfix.f wcslib/Fortran/test/twcsmix.f wcslib/Fortran/test/twcssub.f wcslib/Fortran/test/twcstab.f wcslib/config/config.guess wcslib/config/config.sub wcslib/config/elisp-comp wcslib/config/install-sh wcslib/config/mdate-sh wcslib/config/missing wcslib/config/mkinstalldirs wcslib/config/move-if-change wcslib/doxygen/Bonne.gif wcslib/doxygen/Doxyfile wcslib/doxygen/GNUmakefile wcslib/doxygen/README wcslib/doxygen/cel.sed wcslib/doxygen/cel_extras.dox wcslib/doxygen/doxextr.l wcslib/doxygen/doxextr.sed wcslib/doxygen/fitshdr.sed wcslib/doxygen/fitshdr_extras.dox wcslib/doxygen/getwcstab.sed wcslib/doxygen/lin.sed wcslib/doxygen/lin_extras.dox wcslib/doxygen/mainpage.dox wcslib/doxygen/prj.sed wcslib/doxygen/prj_extras.dox wcslib/doxygen/spc.sed wcslib/doxygen/spc_extras.dox wcslib/doxygen/sph.sed wcslib/doxygen/spx.sed wcslib/doxygen/spx_extras.dox wcslib/doxygen/tab.sed wcslib/doxygen/tab_extras.dox wcslib/doxygen/wcs.sed wcslib/doxygen/wcs_extras.dox wcslib/doxygen/wcsfix.sed wcslib/doxygen/wcsfix_extras.dox wcslib/doxygen/wcshdr.sed wcslib/doxygen/wcshdr_extras.dox wcslib/doxygen/wcsmath_extras.dox wcslib/doxygen/wcstrig.sed wcslib/doxygen/wcstrig_extras.dox wcslib/doxygen/wcsunits.sed wcslib/doxygen/wcsunits_extras.dox wcslib/html/Bonne.gif wcslib/html/annotated.html wcslib/html/cel_8h-source.html wcslib/html/cel_8h.html wcslib/html/deprecated.html wcslib/html/doxygen.css wcslib/html/doxygen.png wcslib/html/files.html wcslib/html/fitshdr_8h-source.html wcslib/html/fitshdr_8h.html wcslib/html/form_0.png wcslib/html/form_1.png wcslib/html/form_10.png wcslib/html/form_11.png wcslib/html/form_12.png wcslib/html/form_13.png wcslib/html/form_14.png wcslib/html/form_15.png wcslib/html/form_16.png wcslib/html/form_17.png wcslib/html/form_18.png wcslib/html/form_19.png wcslib/html/form_2.png wcslib/html/form_20.png wcslib/html/form_21.png wcslib/html/form_22.png wcslib/html/form_23.png wcslib/html/form_24.png wcslib/html/form_25.png wcslib/html/form_26.png wcslib/html/form_27.png wcslib/html/form_28.png wcslib/html/form_29.png wcslib/html/form_3.png wcslib/html/form_30.png wcslib/html/form_31.png wcslib/html/form_32.png wcslib/html/form_33.png wcslib/html/form_34.png wcslib/html/form_35.png wcslib/html/form_36.png wcslib/html/form_37.png wcslib/html/form_38.png wcslib/html/form_39.png wcslib/html/form_4.png wcslib/html/form_40.png wcslib/html/form_41.png wcslib/html/form_42.png wcslib/html/form_43.png wcslib/html/form_44.png wcslib/html/form_45.png wcslib/html/form_46.png wcslib/html/form_47.png wcslib/html/form_48.png wcslib/html/form_49.png wcslib/html/form_5.png wcslib/html/form_50.png wcslib/html/form_51.png wcslib/html/form_52.png wcslib/html/form_53.png wcslib/html/form_54.png wcslib/html/form_55.png wcslib/html/form_56.png wcslib/html/form_57.png wcslib/html/form_58.png wcslib/html/form_59.png wcslib/html/form_6.png wcslib/html/form_60.png wcslib/html/form_61.png wcslib/html/form_62.png wcslib/html/form_63.png wcslib/html/form_64.png wcslib/html/form_65.png wcslib/html/form_66.png wcslib/html/form_67.png wcslib/html/form_68.png wcslib/html/form_69.png wcslib/html/form_7.png wcslib/html/form_70.png wcslib/html/form_71.png wcslib/html/form_72.png wcslib/html/form_73.png wcslib/html/form_8.png wcslib/html/form_9.png wcslib/html/formula.repository wcslib/html/fortran.html wcslib/html/functions.html wcslib/html/functions_0x62.html wcslib/html/functions_0x63.html wcslib/html/functions_0x64.html wcslib/html/functions_0x65.html wcslib/html/functions_0x66.html wcslib/html/functions_0x67.html wcslib/html/functions_0x69.html wcslib/html/functions_0x6b.html wcslib/html/functions_0x6c.html wcslib/html/functions_0x6d.html wcslib/html/functions_0x6e.html wcslib/html/functions_0x6f.html wcslib/html/functions_0x70.html wcslib/html/functions_0x72.html wcslib/html/functions_0x73.html wcslib/html/functions_0x74.html wcslib/html/functions_0x75.html wcslib/html/functions_0x76.html wcslib/html/functions_0x77.html wcslib/html/functions_0x78.html wcslib/html/functions_0x79.html wcslib/html/functions_0x7a.html wcslib/html/functions_vars.html wcslib/html/functions_vars_0x62.html wcslib/html/functions_vars_0x63.html wcslib/html/functions_vars_0x64.html wcslib/html/functions_vars_0x65.html wcslib/html/functions_vars_0x66.html wcslib/html/functions_vars_0x67.html wcslib/html/functions_vars_0x69.html wcslib/html/functions_vars_0x6b.html wcslib/html/functions_vars_0x6c.html wcslib/html/functions_vars_0x6d.html wcslib/html/functions_vars_0x6e.html wcslib/html/functions_vars_0x6f.html wcslib/html/functions_vars_0x70.html wcslib/html/functions_vars_0x72.html wcslib/html/functions_vars_0x73.html wcslib/html/functions_vars_0x74.html wcslib/html/functions_vars_0x75.html wcslib/html/functions_vars_0x76.html wcslib/html/functions_vars_0x77.html wcslib/html/functions_vars_0x78.html wcslib/html/functions_vars_0x79.html wcslib/html/functions_vars_0x7a.html wcslib/html/getwcstab_8h-source.html wcslib/html/getwcstab_8h.html wcslib/html/globals.html wcslib/html/globals_0x62.html wcslib/html/globals_0x63.html wcslib/html/globals_0x64.html wcslib/html/globals_0x65.html wcslib/html/globals_0x66.html wcslib/html/globals_0x68.html wcslib/html/globals_0x69.html wcslib/html/globals_0x6b.html wcslib/html/globals_0x6c.html wcslib/html/globals_0x6d.html wcslib/html/globals_0x6e.html wcslib/html/globals_0x70.html wcslib/html/globals_0x71.html wcslib/html/globals_0x72.html wcslib/html/globals_0x73.html wcslib/html/globals_0x74.html wcslib/html/globals_0x75.html wcslib/html/globals_0x76.html wcslib/html/globals_0x77.html wcslib/html/globals_0x7a.html wcslib/html/globals_defs.html wcslib/html/globals_func.html wcslib/html/globals_type.html wcslib/html/globals_vars.html wcslib/html/index.html wcslib/html/intro.html wcslib/html/lin_8h-source.html wcslib/html/lin_8h.html wcslib/html/log_8h-source.html wcslib/html/log_8h.html wcslib/html/memory.html wcslib/html/overview.html wcslib/html/pages.html wcslib/html/pgsbox.html wcslib/html/prj_8h-source.html wcslib/html/prj_8h.html wcslib/html/software.html wcslib/html/spc_8h-source.html wcslib/html/spc_8h.html wcslib/html/sph_8h-source.html wcslib/html/sph_8h.html wcslib/html/spx_8h-source.html wcslib/html/spx_8h.html wcslib/html/structcelprm.html wcslib/html/structfitskey.html wcslib/html/structfitskeyid.html wcslib/html/structlinprm.html wcslib/html/structprjprm.html wcslib/html/structpscard.html wcslib/html/structpvcard.html wcslib/html/structs.html wcslib/html/structspcprm.html wcslib/html/structspxprm.html wcslib/html/structtabprm.html wcslib/html/structwcsprm.html wcslib/html/structwtbarr.html wcslib/html/tab_8h-source.html wcslib/html/tab_8h.html wcslib/html/tab_b.gif wcslib/html/tab_l.gif wcslib/html/tab_r.gif wcslib/html/tabs.css wcslib/html/testing.html wcslib/html/threads.html wcslib/html/vector.html wcslib/html/wcs_8h-source.html wcslib/html/wcs_8h.html wcslib/html/wcsfix_8h-source.html wcslib/html/wcsfix_8h.html wcslib/html/wcshdr_8h-source.html wcslib/html/wcshdr_8h.html wcslib/html/wcslib_8h-source.html wcslib/html/wcslib_8h.html wcslib/html/wcsmath_8h-source.html wcslib/html/wcsmath_8h.html wcslib/html/wcstrig_8h-source.html wcslib/html/wcstrig_8h.html wcslib/html/wcsunits_8h-source.html wcslib/html/wcsunits_8h.html wcslib/html/wcsutil_8h-source.html wcslib/html/wcsutil_8h.html wcslib/pgsbox/GNUmakefile wcslib/pgsbox/cpgsbox.c wcslib/pgsbox/cpgsbox.h wcslib/pgsbox/cpgtest.c wcslib/pgsbox/fscan.f wcslib/pgsbox/lngvel.f wcslib/pgsbox/pgcrfn.f wcslib/pgsbox/pgcrvl.f wcslib/pgsbox/pgsbox.f wcslib/pgsbox/pgtest.f wcslib/pgsbox/pgwcsl.c wcslib/pgsbox/pgwcsl.h wcslib/utils/GNUmakefile wcslib/utils/HPXcvt.c wcslib/utils/fitshdr.c wcslib/utils/wcsgrid.c wcslib/utils/wcsware.cpywcs-1.12/lib/pywcs.egg-info/top_level.txt0000644001153600020070000000000612310355731022776 0ustar cslocumSTSCI\science00000000000000pywcs pywcs-1.12/lib/pywcs_setup.py0000644001153600020070000003001112310355627020347 0ustar cslocumSTSCI\science00000000000000from __future__ import with_statement, division import glob import os import shutil import sys import textwrap from distutils.dist import Distribution from stsci.distutils.hooks import is_display_option if sys.version_info[0] >= 3: def b(s): return s.encode('ascii') def string_escape(s): s = s.decode('ascii').encode('ascii', 'backslashreplace') s = s.replace(b('\n'), b('\\n')) return s.decode('ascii') from io import StringIO else: def string_escape(s): return s.encode('string_escape') from cStringIO import StringIO # BUILD should be 'debug', 'profile' or 'release' # TODO: How often is this actually mucked with? Would it be worth adding a # custom command that adds a command-line option for this? BUILD = 'release' OPENMP = False def setup_hook(config): if is_display_option(): return WCSLIB_VERSION = config['metadata']['stsci_wcs_version'].strip() # Ensure that headers are copied to the correct location for installation # purposes if 'packages_root' in config['files']: root = config['files']['packages_root'] else: root = '' include_dir = os.path.join(root, 'pywcs', 'include') wcslib_include_dir = os.path.join(include_dir, 'wcslib') for d in [include_dir, wcslib_include_dir]: if not os.path.exists(d): os.mkdir(d) for header in glob.glob(os.path.join('src', '*.h')): shutil.copy2(header, include_dir) for header in glob.glob(os.path.join('wcslib', 'C', '*.h')): shutil.copy2(header, wcslib_include_dir) # WCSLIB CONFIGURATION wcsconfig_h = StringIO() wcsconfig_h.write( wcsconfig_h_proto % ( WCSLIB_VERSION, _determine_64_bit_int() )) _write_if_different(os.path.join('src', 'wcsconfig.h'), wcsconfig_h.getvalue()) _generate_c_docstrings(config) # Some compilers don't work - work around that. _adjust_compiler() # Add/remove macros and compile args based on the build type libraries = [] define_macros = [] undef_macros = [] extra_compile_args = [] if BUILD.lower() == 'debug': define_macros.append(('DEBUG', None)) undef_macros.append('NDEBUG') if not sys.platform.startswith('sun') and not sys.platform == 'win32': extra_compile_args.extend(["-fno-inline", "-O0", "-g"]) elif BUILD.lower() == 'profile': define_macros.append(('NDEBUG', None)) undef_macros.append('DEBUG') if not sys.platform.startswith('sun'): extra_compile_args.extend(["-O3", "-g"]) elif BUILD.lower() == 'release': # Define ECHO as nothing to prevent spurious newlines from # printing within the libwcs parser define_macros.append(('NDEBUG', None)) undef_macros.append('DEBUG') else: raise ValueError("BUILD should be one of 'debug', 'profile', or " "'release'; got %s" % BUILD) if sys.platform == 'win32': # This duplicates a bunch of macros defined in wcsconfig_h_proto # (below). When compiling wcslib, not everything includes that # include file, so we also define these macros on the command line. define_macros.append(('YY_NO_UNISTD_H', None)) define_macros.append(('_CRT_SECURE_NO_WARNINGS', None)) define_macros.append(('_NO_OLDNAMES', None)) define_macros.append(('NO_OLDNAMES', None)) define_macros.append(('__STDC__', None)) if sys.platform.startswith('linux'): define_macros.append(('HAVE_SINCOS', None)) if not sys.platform.startswith('sun') and not sys.platform == 'win32': if OPENMP: extra_compile_args.append('-fopenmp') libraries.append('gomp') else: extra_compile_args.extend(['-Wno-unknown-pragmas']) for idx, m in enumerate(define_macros): if m[1] is not None: define_macros[idx] = '%s = %s' % m else: define_macros[idx] = m[0] ext_opts = [('libraries', libraries), ('define_macros', define_macros), ('undef_macros', undef_macros), ('extra_compile_args', extra_compile_args)] ext = config['extension=pywcs._pywcs'] for opt, value in ext_opts: if opt in ext: ext[opt] += '\n' + '\n'.join(value) else: ext[opt] = '\n'.join(value) def _generate_c_docstrings(config): # GENERATE DOCSTRINGS IN C docstrings = {} # We need to temporarily add lib/pywcs to the path for this to work if 'packages_root' in config['files']: root = config['files']['packages_root'] else: root = '' pywcs_path = os.path.join(root, 'pywcs') if not pywcs_path in sys.path: clean_path = True sys.path.insert(0, pywcs_path) else: clean_path = False try: with open(os.path.join('doc', 'docstrings.py')) as f: exec(f.read(), docstrings) finally: if clean_path: sys.path.remove(pywcs_path) for key, val in list(docstrings.items()): if not (isinstance(key, str) and not key.startswith('__')): del docstrings[key] for key, val in docstrings.items(): docstrings[key] = val.encode('utf8').lstrip() docstrings = sorted(docstrings.items()) docstrings_h = StringIO() docstrings_h.write(textwrap.dedent(""" /* DO NOT EDIT! This file is autogenerated by setup.p. To edit its contents, edit doc/docstrings.py */ #ifndef __DOCSTRINGS_H__ #define __DOCSTRINGS_H__ void fill_docstrings(void); """)) for key, val in docstrings: docstrings_h.write('extern char doc_%s[%d];\n' % (key, len(val))) docstrings_h.write('\n#endif\n\n') _write_if_different(os.path.join('src', 'docstrings.h'), docstrings_h.getvalue()) docstrings_c = StringIO() docstrings_c.write(textwrap.dedent(""" /* DO NOT EDIT! This file is autogenerated by setup.py. To edit its contents, edit doc/docstrings.py The weirdness here with strncpy is because some C compilers, notably MSVC, do not support string literals greater than 256 characters. */ #include #include "docstrings.h" """)) for key, val in docstrings: docstrings_c.write('char doc_%s[%d];\n' % (key, len(val))) docstrings_c.write('\nvoid fill_docstrings(void)\n{\n') for key, val in docstrings: # For portability across various compilers, we need to fill the # docstrings in 256-character chunks for idx in range(0, len(val), 256): chunk = string_escape(val[idx:idx + 256]).replace('"', '\\"') docstrings_c.write(' strncpy(doc_%s + %d, "%s", %d);\n' % (key, idx, chunk, min(len(val) - idx, 256))) docstrings_c.write('\n') docstrings_c.write('\n}\n\n') _write_if_different(os.path.join('src', 'docstrings.c'), docstrings_c.getvalue()) # The only configuration parameter needed at compile-time is how to # specify a 64-bit signed integer. Python's ctypes module can get us # that information, but it is only available in Python 2.5 or later. # If we can't be absolutely certain, we default to "long long int", # which is correct on most platforms (x86, x86_64). If we find # platforms where this heuristic doesn't work, we may need to hardcode # for them. def _determine_64_bit_int(): try: try: import ctypes except ImportError: raise ValueError if ctypes.sizeof(ctypes.c_longlong) == 8: return 'long long int' elif ctypes.sizeof(ctypes.c_long) == 8: return 'long int' elif ctypes.sizeof(ctypes.c_int) == 8: return 'int' else: raise ValueError except ValueError: return 'long long int' def _write_if_different(filename, data): data = data.encode('ascii') if os.path.exists(filename): fd = open(filename, 'rb') original_data = fd.read() fd.close() else: original_data = None if original_data != data: fd = open(filename, 'wb') fd.write(data) fd.close() # def _adjust_compiler(): """ This function detects broken compilers and switches to another. If the environment variable CC is explicitly set, or a compiler is specified on the commandline, no override is performed -- the purpose here is to only override a default compiler. The specific compilers with problems are: * The default compiler in XCode-4.2, llvm-gcc-4.2, segfaults when compiling wcslib. The set of broken compilers can be updated by changing the compiler_mapping variable. It is a list of 2-tuples where the first in the pair is a regular expression matching the version of the broken compiler, and the second is the compiler to change to. """ if 'CC' in os.environ: return if get_distutils_option( 'compiler', ['build', 'build_ext', 'build_clib']) is not None: return from distutils import ccompiler import subprocess import re compiler_mapping = [ ('i686-apple-darwin[0-9]*-llvm-gcc-4.2', 'clang') ] c = ccompiler.new_compiler() # The MSVC ccompiler class doesn't have a `compiler` member. if not hasattr(c, 'compiler'): return process = subprocess.Popen( c.compiler + ['--version'], stdout=subprocess.PIPE) output = process.communicate()[0].strip().decode('ascii') version = output.split()[0] for broken, fixed in compiler_mapping: if re.match(broken, version): os.environ['CC'] = fixed break def get_distutils_option(option, commands): """ Returns the value of the given distutils option. Parameters ---------- option : str The name of the option commands : list of str The list of commands on which this option is available Returns ------- val : str or None the value of the given distutils option. If the option is not set, returns None. """ # Pre-parse the Distutils command-line options and config files to # if the option is set. dist = Distribution() try: dist.parse_config_files() dist.parse_command_line() except DistutilsError: # Let distutils handle this itself return None except AttributeError: # This seems to get thrown for ./setup.py --help return None for cmd in commands: if cmd in dist.commands: break else: return None for cmd in commands: cmd_opts = dist.get_option_dict(cmd) if option in cmd_opts: return cmd_opts[option][1] else: return None # The prototype for the standard header file wcsconfig_h_proto = """ /* WCSLIB library version number. */ #define WCSLIB_VERSION %s /* 64-bit integer data type. */ #define WCSLIB_INT64 %s /* Windows needs some other defines */ /* I think the only one we need is _WIN32, but the others don't hurt - Mark S. 2012-02-14 */ #if defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) || defined (__MINGW64__) /* * There is a lexical analyzer that was generated by flex. Tell it * that we don't have unistd.h */ #ifndef YY_NO_UNISTD_H #define YY_NO_UNISTD_H #endif /* * Visual C++ will warn you about certain functions that have a * high risk of buffer overflows, such as strcpy(). This * tells the compiler to shut up about it. */ #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif /* * Suppress definition of wcsset() by system include files. * I don't know what's up with mingw. * In Visual C, the __STDC__ excludes non-standard things that * would otherwise be defined in the header files. */ #ifndef _NO_OLDNAMES /* for mingw32 */ #define _NO_OLDNAMES #endif #ifndef NO_OLDNAMES /* for mingw64 */ #define NO_OLDNAMES #endif #ifndef __STDC__ /* for MS Visual C */ #define __STDC__ 1 #endif #endif """ pywcs-1.12/LICENSE0000644001153600020070000000267512310355627015666 0ustar cslocumSTSCI\science00000000000000Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. pywcs-1.12/MANIFEST.in0000644001153600020070000000041612310355627016406 0ustar cslocumSTSCI\science00000000000000include CHANGELOG defsetup.py LICENSE MANIFEST.in README stsci_distutils_hack.py recursive-include wcslib * recursive-include src *.c *.h include doc/docstrings.py doc/make.bat doc/Makefile recursive-include doc/source *.rst *.py recursive-include lib/pywcs/tests *.hdr pywcs-1.12/patch_wcslib.sh0000755001153600020070000000006612310355627017652 0ustar cslocumSTSCI\science00000000000000#!/bin/sh cat patches/*.patch | patch -p0 -b -d wcslibpywcs-1.12/patches/0000755001153600020070000000000012310355732016273 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/patches/extended_ctype.patch0000644001153600020070000000072012310355626022321 0ustar cslocumSTSCI\science00000000000000Index: C/wcs.c =================================================================== --- C/wcs.c +++ C/wcs.c @@ -1688,7 +1688,8 @@ } /* Process linear axes. */ - if (!(strlen(ctypei) == 8 && ctypei[4] == '-')) { + if (!(strlen(ctypei) == 8 && ctypei[4] == '-') || + (strlen(ctypei) > 8 && ctypei[8] == '-')) { /* Identify Stokes, celestial and spectral types. */ if (strcmp(ctypei, "STOKES") == 0) { /* STOKES axis. */ pywcs-1.12/PKG-INFO0000644001153600020070000001316712310355732015751 0ustar cslocumSTSCI\science00000000000000Metadata-Version: 1.1 Name: pywcs Version: 1.12 Summary: Python wrappers to WCSLIB Home-page: http://www.scipy.org/AstroLib Author: Michael Droettboom Author-email: mdroe@stsci.edu License: UNKNOWN Description: Introduction ------------ pywcs is a set of routines for handling the FITS World Coordinate System (WCS) standard. It is a thin wrapper around the high- and mid-level interfaces of Dr. Mark Calabretta's WCSLIB available here: http://www.atnf.csiro.au/people/mcalabre/WCS/ In addition, there are extensions (written in C) to support Spitzer Simple Imaging Polynomial (SIP) convention keywords and Paper IV table lookup distortion. Please direct any questions to: help@stsci.edu Build instructions ------------------ pywcs includes its own copy of WCSLIB. pywcs requires: - Numpy 1.3 or later - pyfits 1.4 or later pywcs uses the standard Python distutils system to build and install itself. From the command line run:: python setup.py install to install pywcs. Building documentation ---------------------- Optionally, the documentation can be built using Sphinx (http://sphinx.pocoo.org). After installing pywcs, 'cd' into the 'doc' directory and:: make html The documentation is also available online at: http://stsdas.stsci.edu/astrolib/pywcs/index.html Version 1.11 ============ NEW FEATURES: - Updated to wcslib version 4.8.2, which gives much more detailed error messages. Exceptions raised due to invalid WCS keywords should now be more informative. - Undefined values that are the result of p2s and s2p are now set to NaN. Previously, one had to examine the stat result vector to determine which results were invalid. - Added functions get_pc() and get_cdelt(). These provide a way to always get the canonical representation of the linear transformation matrix, whether the header specified it in PC, CD or CROTA form. BROADER COMPATIBILITY: - Supports Python 3.x - Long-running process will now release the Python GIL to better support Python multithreading. - Builds on Microsoft Windows using mingw32, mingw64 and Visual Studio 9.0 and 10.0 without severely patching wcslib. - pywcs will now run without pyfits, though the SIP and distortion lookup table functionality is unavailable. BUG FIXES: - The dimensions of the cd and pc matrices were formerly always returned as 2x2. They now are sized according to naxis. MISCELLANEOUS: - Lots of new unit tests - Setting wcs.wcs.cunit will now verify that the values are valid unit strings. Version 1.10 ============ - Adds a UnitConversion class, which gives access to wcslib's unit conversion functionality. Given two convertible unit strings, pywcs can convert arrays of values from one to the other. - Now uses wcslib 4.7 - Changes to some wcs values would not always calculate secondary values. Version 1.9 =========== - Support binary image arrays and pixel list format WCS by presenting a way to call wcslib's wcsbth() - Updated underlying wcslib to version 4.5, which fixes the following: - Fixed the interpretation of VELREF when translating AIPS-convention spectral types. Such translation is now handled by a new special- purpose function, spcaips(). The wcsprm struct has been augmented with an entry for velref which is filled by wcspih() and wcsbth(). Previously, selection by VELREF of the radio or optical velocity convention for type VELO was not properly handled. BUGS: - The "pc" member is now available with a default "raw" Wcsprm object. - Make properties that return arrays read-only, since modifying a (mutable) array could result in secondary values not being recomputed based on those changes. - float properties can now be set using int values Version 1.3a1 ============= Earlier versions of pywcs had two versions of every conversion method: X(...) -- treats the origin of pixel coordinates at (0, 0) X_fits(...) -- treats the origin of pixel coordinates at (1, 1) From version 1.3 onwards, there is only one method for each conversion, with an 'origin' argument: - 0: places the origin at (0, 0), which is the C/Numpy convention. - 1: places the origin at (1, 1), which is the Fortran/FITS convention. Platform: UNKNOWN Classifier: Intended Audience :: Science/Research Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: Scientific/Engineering :: Astronomy Classifier: Topic :: Software Development :: Libraries :: Python Modules pywcs-1.12/README0000644001153600020070000000211012310355627015521 0ustar cslocumSTSCI\science00000000000000Introduction ------------ pywcs is a set of routines for handling the FITS World Coordinate System (WCS) standard. It is a thin wrapper around the high- and mid-level interfaces of Dr. Mark Calabretta's WCSLIB available here: http://www.atnf.csiro.au/people/mcalabre/WCS/ In addition, there are extensions (written in C) to support Spitzer Simple Imaging Polynomial (SIP) convention keywords and Paper IV table lookup distortion. Please direct any questions to: help@stsci.edu Build instructions ------------------ pywcs includes its own copy of WCSLIB. pywcs requires: - Numpy 1.3 or later - pyfits 1.4 or later pywcs uses the standard Python distutils system to build and install itself. From the command line run:: python setup.py install to install pywcs. Building documentation ---------------------- Optionally, the documentation can be built using Sphinx (http://sphinx.pocoo.org). After installing pywcs, 'cd' into the 'doc' directory and:: make html The documentation is also available online at: http://stsdas.stsci.edu/astrolib/pywcs/index.html pywcs-1.12/setup.cfg0000644001153600020070000000417012310355732016467 0ustar cslocumSTSCI\science00000000000000[metadata] name = pywcs version = 1.12 stsci_wcs_version = 4.10 author = Michael Droettboom author-email = mdroe@stsci.edu home-page = http://www.scipy.org/AstroLib summary = Python wrappers to WCSLIB description-file = README CHANGELOG classifier = Intended Audience :: Science/Research License :: OSI Approved :: BSD License Operating System :: OS Independent Programming Language :: Python Topic :: Scientific/Engineering :: Astronomy Topic :: Software Development :: Libraries :: Python Modules requires-python = >=2.6 requires-dist = pyfits (>=2.4.0) numpy (>=1.5.1) [files] packages_root = lib packages = pywcs pywcs.tests data_files = pywcs/include = src/*.h pywcs/include/wcslib = wcslib/C/*.h pywcs/tests/maps = lib/pywcs/tests/maps/*.hdr pywcs/tests/nrao = lib/pywcs/tests/nrao/*.hdr pywcs/tests/spectra = lib/pywcs/tests/spectra/*.hdr pywcs/tests/data = lib/pywcs/tests/data/*.hdr pywcs/tests/data = lib/pywcs/tests/data/*.fits [install_data] pre-hook.glob-data-files = stsci.distutils.hooks.glob_data_files [global] setup_hooks = stsci.distutils.hooks.tag_svn_revision stsci.distutils.hooks.version_setup_hook hooks.pywcs_hook stsci.distutils.hooks.use_packages_root pywcs_setup.setup_hook [extension=pywcs._pywcs] sources = src/distortion.c src/distortion_wrap.c src/docstrings.c src/pipeline.c src/pyutil.c src/pywcs.c src/pywcs_api.c src/sip.c src/sip_wrap.c src/str_list_proxy.c src/util.c src/wcslib_tabprm_wrap.c src/wcslib_units_wrap.c src/wcslib_wrap.c src/wcslib_wtbarr_wrap.c wcslib/C/flexed/wcsbth.c wcslib/C/flexed/wcspih.c wcslib/C/flexed/wcsulex.c wcslib/C/flexed/wcsutrn.c wcslib/C/cel.c wcslib/C/lin.c wcslib/C/log.c wcslib/C/prj.c wcslib/C/spc.c wcslib/C/sph.c wcslib/C/spx.c wcslib/C/tab.c wcslib/C/wcs.c wcslib/C/wcserr.c wcslib/C/wcsfix.c wcslib/C/wcshdr.c wcslib/C/wcsprintf.c wcslib/C/wcsunits.c wcslib/C/wcsutil.c include_dirs = src wcslib/C numpy define_macros = ECHO WCSTRIG_MACRO PYWCS_BUILD _GNU_SOURCE [build_ext] pre-hook.numpy-extension-hook = stsci.distutils.hooks.numpy_extension_hook [egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 pywcs-1.12/setup.py0000644001153600020070000000046612310355627016367 0ustar cslocumSTSCI\science00000000000000#!/usr/bin/env python try: from setuptools import setup except ImportError: from distribute_setup import use_setuptools use_setuptools() from setuptools import setup setup( setup_requires=['d2to1>=0.2.3', 'stsci.distutils>=0.3.2'], d2to1=True, use_2to3=True, zip_safe=False ) pywcs-1.12/src/0000755001153600020070000000000012310355732015433 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/src/distortion.c0000644001153600020070000001605112310355626020002 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #include "distortion.h" #include #include #include #include /* TODO: n-dimensional support */ int distortion_lookup_t_init( distortion_lookup_t* lookup) { unsigned int i; for (i = 0; i < NAXES; ++i) { lookup->naxis[i] = 0; lookup->crpix[i] = 0.0; lookup->crval[i] = 0.0; lookup->cdelt[i] = 1.0; } lookup->data = NULL; return 0; } void distortion_lookup_t_free( /*@unused@*/ distortion_lookup_t* lookup) { /*@empty@*/ } /** * Get a value at a specific integral location in the lookup table. * (This is nothing more special than an array lookup with range * checking.) */ static pywcs_inline float get_dist_clamp( const float* const data, const unsigned int* const naxis, const int x, const int y) { return data[ ((naxis[0] * CLAMP(y, 0, naxis[1] - 1)) + CLAMP(x, 0, naxis[0] - 1))]; } static pywcs_inline float get_dist( const float* const data, const unsigned int* const naxis, const int x, const int y) { return data[(naxis[0] * y) + x]; } /** * Converts a pixel coordinate to a fractional coordinate in the * lookup table on a single axis */ static pywcs_inline double image_coord_to_distortion_coord( const distortion_lookup_t * const lookup, const unsigned int axis, const double img) { double result; assert(lookup != NULL); assert(axis < NAXES); /* The "- 1./stepsize" is here because the input coordinates are 1-based, but this is a C-array underneath */ result = ( ((img - lookup->crval[axis]) / lookup->cdelt[axis]) + lookup->crpix[axis]) - 1.0/lookup->cdelt[axis]; return CLAMP(result, 0.0, (double)(lookup->naxis[axis] - 1)); } /** * Converts a pixel coordinate to a fractional coordinate in the * lookup table. */ static pywcs_inline void image_coords_to_distortion_coords( const distortion_lookup_t * const lookup, const double * const img /* [NAXES] */, /* Output parameters */ /*@out@*/ double *dist /* [NAXES] */) { unsigned int i; assert(lookup != NULL); assert(img != NULL); assert(dist != NULL); for (i = 0; i < NAXES; ++i) { dist[i] = image_coord_to_distortion_coord(lookup, i, img[i]); } } pywcs_inline double get_distortion_offset( const distortion_lookup_t * const lookup, const double * const img /*[NAXES]*/) { double dist[NAXES]; double dist_floor[NAXES]; int dist_ifloor[NAXES]; double dist_weight[NAXES]; double dist_iweight[NAXES]; double result; const unsigned int* naxis = lookup->naxis; const float* data = lookup->data; unsigned int i; assert(lookup != NULL); assert(img != NULL); image_coords_to_distortion_coords(lookup, img, dist); for (i = 0; i < NAXES; ++i) { dist_floor[i] = floor(dist[i]); dist_ifloor[i] = (int)dist_floor[i]; dist_weight[i] = dist[i] - dist_floor[i]; dist_iweight[i] = 1.0 - dist_weight[i]; } /* If we may need to clamp the lookups, use this slower approach */ if (dist_ifloor[0] < 0 || dist_ifloor[1] < 0 || dist_ifloor[0] >= lookup->naxis[0] - 1 || dist_ifloor[1] >= lookup->naxis[1] - 1) { result = (double)get_dist_clamp(data, naxis, dist_ifloor[0], dist_ifloor[1]) * dist_iweight[0] * dist_iweight[1] + (double)get_dist_clamp(data, naxis, dist_ifloor[0], dist_ifloor[1] + 1) * dist_iweight[0] * dist_weight[1] + (double)get_dist_clamp(data, naxis, dist_ifloor[0] + 1, dist_ifloor[1]) * dist_weight[0] * dist_iweight[1] + (double)get_dist_clamp(data, naxis, dist_ifloor[0] + 1, dist_ifloor[1] + 1) * dist_weight[0] * dist_weight[1]; /* Else, we don't need to clamp 4 times for each pixel */ } else { result = (double)get_dist(data, naxis, dist_ifloor[0], dist_ifloor[1]) * dist_iweight[0] * dist_iweight[1] + (double)get_dist(data, naxis, dist_ifloor[0], dist_ifloor[1] + 1) * dist_iweight[0] * dist_weight[1] + (double)get_dist(data, naxis, dist_ifloor[0] + 1, dist_ifloor[1]) * dist_weight[0] * dist_iweight[1] + (double)get_dist(data, naxis, dist_ifloor[0] + 1, dist_ifloor[1] + 1) * dist_weight[0] * dist_weight[1]; } return result; } int p4_pix2deltas( const unsigned int naxes, const distortion_lookup_t **lookup, /* [NAXES] */ const unsigned int nelem, const double* pix, /* [NAXES][nelem] */ double *foc /* [NAXES][nelem] */) { int i; double* foc0; const double* pix0; const double* pixend; assert(naxes == NAXES); assert(lookup != NULL); assert(pix != NULL); assert(foc != NULL); #ifndef NDEBUG unsigned int k; for (k = 0; k < naxes; ++k) { if (lookup[k] != NULL) { assert(lookup[k]->data != NULL); } } #endif if (pix == NULL || foc == NULL) { return 1; } pixend = pix + nelem * NAXES; /* This can't be parallelized, because pix may be equal to foc */ /* For the same reason, i needs to be in the inner loop */ for (pix0 = pix, foc0 = foc; pix0 < pixend; pix0 += NAXES, foc0 += NAXES) { for (i = 0; i < NAXES; ++i) { if (lookup[i]) { foc0[i] += get_distortion_offset(lookup[i], pix0); } } } return 0; } int p4_pix2foc( const unsigned int naxes, const distortion_lookup_t **lookup, /* [NAXES] */ const unsigned int nelem, const double* pix, /* [NAXES][nelem] */ double *foc /* [NAXES][nelem] */) { assert(pix); assert(foc); if (pix != foc) { memcpy(foc, pix, sizeof(double) * naxes * nelem); } return p4_pix2deltas(naxes, lookup, nelem, pix, foc); } pywcs-1.12/src/distortion.h0000644001153600020070000000777112310355626020020 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __DISTORTION_H__ #define __DISTORTION_H__ #include "util.h" /* TODO: This is all two-dimensional. Should be made multi-dimensional in the future. */ #define NAXES 2 #define MAXAXES 6 /** A structure to contain the information for a single distortion lookup table */ typedef struct { unsigned int naxis[NAXES]; /* size of distortion image */ double crpix[NAXES]; double crval[NAXES]; double cdelt[NAXES]; /* The data is not "owned" by this structure. It is the user's responsibility to free it. */ /*@shared@*/ /*@null@*/ float *data; } distortion_lookup_t; /** Initialize a lookup table to reasonable default values. */ int distortion_lookup_t_init(distortion_lookup_t* lookup); /** Cleanup after a lookup table. Currently does nothing, but may do something in the future, so please call it when you are done with the lookup table. It does not free the data pointed to be the lookup table -- it is the user's responsibility to free that array. */ void distortion_lookup_t_free(distortion_lookup_t* lookup); /** Lookup the distortion offset for a particular pixel coordinate in the lookup table. @param lookup A lookup table object @param A coordinate pair @return The offset as determined by binlinear interpolation in the lookup table */ double get_distortion_offset( const distortion_lookup_t * const lookup, const double * const img /* [NAXES] */); /** Perform just the distortion table part of Paper IV. @param naxes @param lookups A pair of lookup table objects @param nelem @param pix [in]: An array of pixel coordinates @param foc [out]: An array of focal plane coordinates @return A wcslib error code */ int p4_pix2foc( const unsigned int naxes, const distortion_lookup_t** lookups, /* [NAXES] */ const unsigned int nelem, const double* pix, /* [NAXES][nelem] */ double *foc /* [NAXES][nelem] */); /** Perform just the distortion table part of Paper IV, by adding distortion to the values already in place in foc. @param naxes @param lookups A pair of lookup table objects @param nelem @param pix [in]: An array of pixel coordinates @param foc [in/out]: An array of focal plane coordinates @return A wcslib error code */ int p4_pix2deltas( const unsigned int naxes, const distortion_lookup_t** lookups, /* [NAXES] */ const unsigned int nelem, const double* pix, /* [NAXES][nelem] */ double *foc /* [NAXES][nelem] */); #endif /* __DISTORTION_H__ */ pywcs-1.12/src/distortion_wrap.c0000644001153600020070000002432612310355626021037 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #define NO_IMPORT_ARRAY #include "distortion_wrap.h" #include "docstrings.h" #include /* From Python */ static int PyDistLookup_traverse( PyDistLookup* self, visitproc visit, void* arg) { Py_VISIT(self->py_data); return 0; } static int PyDistLookup_clear( PyDistLookup* self) { PyObject* tmp; tmp = (PyObject*)self->py_data; self->py_data = NULL; Py_XDECREF(tmp); return 0; } static void PyDistLookup_dealloc( PyDistLookup* self) { distortion_lookup_t_free(&self->x); Py_XDECREF(self->py_data); Py_TYPE(self)->tp_free((PyObject*)self); } /*@null@*/ static PyObject * PyDistLookup_new( PyTypeObject* type, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { PyDistLookup* self; self = (PyDistLookup*)type->tp_alloc(type, 0); if (self != NULL) { if (distortion_lookup_t_init(&self->x)) { return NULL; } self->py_data = NULL; } return (PyObject*)self; } static int PyDistLookup_init( PyDistLookup* self, PyObject* args, /*@unused@*/ PyObject* kwds) { PyObject* py_array_obj = NULL; PyArrayObject* array_obj = NULL; if (!PyArg_ParseTuple(args, "O(dd)(dd)(dd):DistortionLookupTable.__init__", &py_array_obj, &(self->x.crpix[0]), &(self->x.crpix[1]), &(self->x.crval[0]), &(self->x.crval[1]), &(self->x.cdelt[0]), &(self->x.cdelt[1]))) { return -1; } array_obj = (PyArrayObject*)PyArray_ContiguousFromAny(py_array_obj, PyArray_FLOAT32, 2, 2); if (array_obj == NULL) { return -1; } self->py_data = array_obj; self->x.naxis[0] = (unsigned int)PyArray_DIM(array_obj, 1); self->x.naxis[1] = (unsigned int)PyArray_DIM(array_obj, 0); self->x.data = (float *)PyArray_DATA(array_obj); return 0; } static PyObject* PyDistLookup_get_cdelt( PyDistLookup* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 2; return get_double_array("cdelt", self->x.cdelt, 1, &naxis, (PyObject*)self); } static int PyDistLookup_set_cdelt( PyDistLookup* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp naxis = 2; return set_double_array("cdelt", value, 1, &naxis, self->x.cdelt); } static PyObject* PyDistLookup_get_crpix( PyDistLookup* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 2; return get_double_array("crpix", self->x.crpix, 1, &naxis, (PyObject*)self); } static int PyDistLookup_set_crpix( PyDistLookup* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp naxis = 2; return set_double_array("crpix", value, 1, &naxis, self->x.crpix); } static PyObject* PyDistLookup_get_crval( PyDistLookup* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 2; return get_double_array("crval", self->x.crval, 1, &naxis, (PyObject*)self); } static int PyDistLookup_set_crval( PyDistLookup* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp naxis = 2; return set_double_array("crval", value, 1, &naxis, self->x.crval); } /*@shared@*/ static PyObject* PyDistLookup_get_data( PyDistLookup* self, /*@unused@*/ void* closure) { if (self->py_data == NULL) { Py_INCREF(Py_None); return Py_None; } else { Py_INCREF(self->py_data); return (PyObject*)self->py_data; } } static int PyDistLookup_set_data( PyDistLookup* self, PyObject* value, /*@unused@*/ void* closure) { PyArrayObject* value_array = NULL; if (value == NULL) { Py_XDECREF(self->py_data); self->py_data = NULL; self->x.data = NULL; return 0; } value_array = (PyArrayObject*)PyArray_ContiguousFromAny(value, PyArray_FLOAT32, 2, 2); if (value_array == NULL) { return -1; } Py_XDECREF(self->py_data); self->py_data = value_array; self->x.naxis[0] = (unsigned int)PyArray_DIM(value_array, 1); self->x.naxis[1] = (unsigned int)PyArray_DIM(value_array, 0); self->x.data = (float *)PyArray_DATA(value_array); return 0; } /*@null@*/ static PyObject* PyDistLookup_get_offset( PyDistLookup* self, PyObject* args, /*@unused@*/ PyObject* kwds) { double coord[NAXES]; double result; if (self->x.data == NULL) { PyErr_SetString(PyExc_RuntimeError, "No data has been set for the lookup table"); return NULL; } if (!PyArg_ParseTuple(args, "dd:get_offset", &coord[0], &coord[1])) { return NULL; } result = get_distortion_offset(&self->x, coord); return PyFloat_FromDouble(result); } static PyObject* PyDistLookup___copy__( PyDistLookup* self, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { PyDistLookup* copy = NULL; int i = 0; copy = (PyDistLookup*)PyDistLookup_new(&PyDistLookupType, NULL, NULL); if (copy == NULL) { return NULL; } for (i = 0; i < 2; ++i) { copy->x.naxis[i] = self->x.naxis[i]; copy->x.crpix[i] = self->x.crpix[i]; copy->x.crval[i] = self->x.crval[i]; copy->x.cdelt[i] = self->x.cdelt[i]; } if (self->py_data) { PyDistLookup_set_data(copy, (PyObject*)self->py_data, NULL); } return (PyObject*)copy; } static PyObject* PyDistLookup___deepcopy__( PyDistLookup* self, PyObject* memo, /*@unused@*/ PyObject* kwds) { PyDistLookup* copy; PyObject* obj_copy; int i = 0; copy = (PyDistLookup*)PyDistLookup_new(&PyDistLookupType, NULL, NULL); if (copy == NULL) { return NULL; } for (i = 0; i < 2; ++i) { copy->x.naxis[i] = self->x.naxis[i]; copy->x.crpix[i] = self->x.crpix[i]; copy->x.crval[i] = self->x.crval[i]; copy->x.cdelt[i] = self->x.cdelt[i]; } if (self->py_data) { obj_copy = get_deepcopy((PyObject*)self->py_data, memo); if (obj_copy == NULL) { Py_DECREF(copy); return NULL; } PyDistLookup_set_data(copy, (PyObject*)obj_copy, NULL); Py_DECREF(obj_copy); } return (PyObject*)copy; } static PyGetSetDef PyDistLookup_getset[] = { {"cdelt", (getter)PyDistLookup_get_cdelt, (setter)PyDistLookup_set_cdelt, (char *)doc_cdelt}, {"crpix", (getter)PyDistLookup_get_crpix, (setter)PyDistLookup_set_crpix, (char *)doc_crpix}, {"crval", (getter)PyDistLookup_get_crval, (setter)PyDistLookup_set_crval, (char *)doc_crval}, {"data", (getter)PyDistLookup_get_data, (setter)PyDistLookup_set_data, (char *)doc_data}, {NULL} }; static PyMethodDef PyDistLookup_methods[] = { {"__copy__", (PyCFunction)PyDistLookup___copy__, METH_NOARGS, NULL}, {"__deepcopy__", (PyCFunction)PyDistLookup___deepcopy__, METH_O, NULL}, {"get_offset", (PyCFunction)PyDistLookup_get_offset, METH_VARARGS, doc_get_offset}, {NULL} }; PyTypeObject PyDistLookupType = { #if PY3K PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ #endif "pywcs.DistortionLookupTable", /*tp_name*/ sizeof(PyDistLookup), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)PyDistLookup_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /*tp_flags*/ doc_DistortionLookupTable, /* tp_doc */ (traverseproc)PyDistLookup_traverse, /* tp_traverse */ (inquiry)PyDistLookup_clear, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ PyDistLookup_methods, /* tp_methods */ 0, /* tp_members */ PyDistLookup_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)PyDistLookup_init, /* tp_init */ 0, /* tp_alloc */ PyDistLookup_new, /* tp_new */ }; int _setup_distortion_type( PyObject* m) { if (PyType_Ready(&PyDistLookupType) < 0) { return -1; } Py_INCREF(&PyDistLookupType); return PyModule_AddObject(m, "DistortionLookupTable", (PyObject *)&PyDistLookupType); } pywcs-1.12/src/distortion_wrap.h0000644001153600020070000000352612310355626021043 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __DISTORTION_WRAP_H__ #define __DISTORTION_WRAP_H__ #include "pyutil.h" #include "distortion.h" extern PyTypeObject PyDistLookupType; typedef struct { PyObject_HEAD distortion_lookup_t x; /*@null@*/ /*@shared@*/ PyArrayObject* py_data; } PyDistLookup; int _setup_distortion_type( PyObject* m); #endif pywcs-1.12/src/docstrings.c0000644001153600020070000021271012310355701017755 0ustar cslocumSTSCI\science00000000000000 /* DO NOT EDIT! This file is autogenerated by setup.py. To edit its contents, edit doc/docstrings.py The weirdness here with strncpy is because some C compilers, notably MSVC, do not support string literals greater than 256 characters. */ #include #include "docstrings.h" char doc_DistortionLookupTable[369]; char doc_K[152]; char doc_M[56]; char doc_Sip[1017]; char doc_Tabprm[226]; char doc_UnitConverter[2216]; char doc_Wcs[482]; char doc_Wcsprm[1979]; char doc_Wtbarr[195]; char doc_a[222]; char doc_a_order[94]; char doc_all_pix2sky[1204]; char doc_alt[236]; char doc_ap[225]; char doc_ap_order[96]; char doc_axis_types[916]; char doc_b[222]; char doc_b_order[94]; char doc_bp[225]; char doc_bp_order[96]; char doc_cd[1002]; char doc_cdelt[302]; char doc_cel_offset[153]; char doc_celfix[136]; char doc_cname[76]; char doc_colax[91]; char doc_colnum[235]; char doc_convert[120]; char doc_coord[278]; char doc_copy[39]; char doc_cpdis1[99]; char doc_cpdis2[99]; char doc_crder[123]; char doc_crota[998]; char doc_crpix[88]; char doc_crval[93]; char doc_crval_tabprm[131]; char doc_csyer[132]; char doc_ctype[222]; char doc_cubeface[1209]; char doc_cunit[1161]; char doc_cylfix[127]; char doc_data[72]; char doc_data_wtbarr[51]; char doc_dateavg[146]; char doc_dateobs[127]; char doc_datfix[453]; char doc_delta[195]; char doc_det2im[57]; char doc_det2im1[96]; char doc_det2im2[96]; char doc_dims[98]; char doc_equinox[242]; char doc_extlev[72]; char doc_extnam[73]; char doc_extrema[439]; char doc_extver[72]; char doc_find_all_wcs[846]; char doc_fix[1382]; char doc_get_cdelt[446]; char doc_get_offset[103]; char doc_get_pc[385]; char doc_get_ps[363]; char doc_get_pv[647]; char doc_has_cd[859]; char doc_has_cdi_ja[96]; char doc_has_crota[614]; char doc_has_crotaia[101]; char doc_has_pc[176]; char doc_has_pci_ja[96]; char doc_have[163]; char doc_i[40]; char doc_imgpix_matrix[143]; char doc_is_unity[102]; char doc_kind[129]; char doc_lat[89]; char doc_latpole[75]; char doc_lattyp[227]; char doc_lng[90]; char doc_lngtyp[228]; char doc_lonpole[76]; char doc_m[58]; char doc_map[941]; char doc_mix[4642]; char doc_mjdavg[189]; char doc_mjdobs[189]; char doc_name[74]; char doc_naxis[760]; char doc_nc[121]; char doc_ndim[66]; char doc_obsgeo[186]; char doc_offset[47]; char doc_p0[196]; char doc_p2s[1821]; char doc_p4_pix2foc[556]; char doc_pc[1069]; char doc_phi0[283]; char doc_pix2foc[558]; char doc_piximg_matrix[128]; char doc_power[49]; char doc_print_contents[204]; char doc_print_contents_tabprm[210]; char doc_radesys[77]; char doc_restfrq[94]; char doc_restwav[94]; char doc_row[39]; char doc_s2p[1710]; char doc_scale[56]; char doc_sense[182]; char doc_set[1178]; char doc_set_ps[354]; char doc_set_pv[353]; char doc_set_tabprm[346]; char doc_sip[77]; char doc_sip_foc2pix[573]; char doc_sip_pix2foc[571]; char doc_spcfix[237]; char doc_spec[68]; char doc_specsys[139]; char doc_sptr[1354]; char doc_ssysobs[226]; char doc_ssyssrc[110]; char doc_sub[3548]; char doc_tab[83]; char doc_theta0[282]; char doc_to_header[2086]; char doc_ttype[107]; char doc_unitfix[1008]; char doc_velangl[169]; char doc_velosys[282]; char doc_want[161]; char doc_wcs[75]; char doc_zsource[98]; void fill_docstrings(void) { strncpy(doc_DistortionLookupTable + 0, "DistortionLookupTable(*table*, *crpix*, *crval*, *cdelt*)\n\n- *table*: 2-dimensional array for the distortion lookup table.\n\n- *crpix*: the distortion array reference pixel (a 2-tuple)\n\n- *crval*: is the image array pixel coordinate (a 2-tuple)\n\n- *cdelt*: ", 256); strncpy(doc_DistortionLookupTable + 256, "is the grid step size (a 2-tuple)\n\nRepresents a single lookup table for a `Paper IV`_ distortion\ntransformation.\n", 113); strncpy(doc_K + 0, "``int array[M]`` (read-only)\n\nAn array of length `M` whose elements record the lengths of the axes of\nthe coordinate array and of each indexing vector.\n", 152); strncpy(doc_M + 0, "``int`` (read-only)\n\nNumber of tabular coordinate axes.\n", 56); strncpy(doc_Sip + 0, "Sip(*a, b, ap, bp, crpix*)\n\nThe `~pywcs.Sip` class performs polynomial distortion correction using\nthe `SIP`_ convention in both directions.\n\n Shupe, D. L., M. Moshir, J. Li, D. Makovoz and R. Narron. 2005.\n \"The SIP Convention for Representing Distor", 256); strncpy(doc_Sip + 256, "tion in FITS Image\n Headers.\" ADASS XIV.\n\n- *a*: double array[m+1][m+1]. The ``A_i_j`` polynomial for pixel to\n focal plane transformation. Its size must be (*m* + 1, *m* + 1)\n where *m* = ``A_ORDER``.\n\n- *b*: double array[m+1][m+1]. The ``B_i_j`` ", 256); strncpy(doc_Sip + 512, "polynomial for pixel to\n focal plane transformation. Its size must be (*m* + 1, *m* + 1)\n where *m* = ``B_ORDER``.\n\n- *ap*: double array[m+1][m+1]. The ``AP_i_j`` polynomial for pixel\n to focal plane transformation. Its size must be (*m* + 1, *m* + 1", 256); strncpy(doc_Sip + 768, ")\n where *m* = ``AP_ORDER``.\n\n- *bp*: double array[m+1][m+1]. The ``BP_i_j`` polynomial for pixel to\n focal plane transformation. Its size must be (*m* + 1, *m* + 1) where\n *m* = ``BP_ORDER``.\n\n- *crpix*: double array[2]. The reference pixel.\n", 249); strncpy(doc_Tabprm + 0, "A class to store the information related to tabular coordinates,\ni.e. coordinates that are defined via a lookup table.\n\nThis class can not be constructed directly from Python, but instead is\nreturned from `~pywcs.Wcsprm.tab`.\n", 226); strncpy(doc_UnitConverter + 0, "UnitConverter(have, want, translate_units=\'\')\n\nCreates an object for performing conversion from one system of units\nto another.\n\n- *have* string: :ref:`fits-unit` to convert from, with or without\n surrounding square brackets (for inline specifications); t", 256); strncpy(doc_UnitConverter + 256, "ext\n following the closing bracket is ignored.\n\n- *want* string: :ref:`fits-unit` to convert to, with or without\n surrounding square brackets (for inline specifications); text\n following the closing bracket is ignored.\n\n- *ctrl* string (optional): Do po", 256); strncpy(doc_UnitConverter + 512, "tentially unsafe translations of\n non-standard unit strings.\n\n Although ``\"S\"`` is commonly used to represent seconds, its\n recognizes ``\"S\"`` formally as Siemens, however rarely that may be\n translation to ``\"s\"`` is potentially unsafe since the stand", 256); strncpy(doc_UnitConverter + 768, "ard\n used. The same applies to ``\"H\"`` for hours (Henry), and ``\"D\"``\n for days (Debye).\n\n This string controls what to do in such cases, and is\n case-insensitive.\n\n - If the string contains ``\"s\"``, translate ``\"S\"`` to ``\"s\"``.\n\n - If the string c", 256); strncpy(doc_UnitConverter + 1024, "ontains ``\"h\"``, translate ``\"H\"`` to ``\"h\"``.\n\n - If the string contains ``\"d\"``, translate ``\"D\"`` to ``\"d\"``.\n\n Thus ``\'\'`` doesn\'t do any unsafe translations, whereas ``\'shd\'``\n does all of them.\n\n See :ref:`fits-unit` for more information.\n\nUse th", 256); strncpy(doc_UnitConverter + 1280, "e returned object\'s `~pywcs.UnitConverter.convert` method to\nconvert values from *have* to *want*.\n\nThis function is permissive in accepting whitespace in all contexts in\na units specification where it does not create ambiguity (e.g. not\nbetween a metric p", 256); strncpy(doc_UnitConverter + 1536, "refix and a basic unit string), including in strings\nlike ``\"log (m ** 2)\"`` which is formally disallowed.\n\n**Exceptions:**\n\n- `ValueError`: Invalid numeric multiplier.\n\n- `SyntaxError`: Dangling binary operator.\n\n- `SyntaxError`: Invalid symbol in INITIAL", 256); strncpy(doc_UnitConverter + 1792, " context.\n\n- `SyntaxError`: Function in invalid context.\n\n- `SyntaxError`: Invalid symbol in EXPON context.\n\n- `SyntaxError`: Unbalanced bracket.\n\n- `SyntaxError`: Unbalanced parenthesis.\n\n- `SyntaxError`: Consecutive binary operators.\n\n- `SyntaxError`: In", 256); strncpy(doc_UnitConverter + 2048, "ternal parser error.\n\n- `SyntaxError`: Non-conformant unit specifications.\n\n- `SyntaxError`: Non-conformant functions.\n\n- `ValueError`: Potentially unsafe translation.\n", 168); strncpy(doc_Wcs + 0, "Wcs(*sip, cpdis, wcsprm, det2im*)\n\nWcs objects amalgamate basic WCS (as provided by `wcslib`_), with\n`SIP`_ and `Paper IV`_ distortion operations.\n\nTo perform all distortion corrections and WCS tranformation, use\n`all_pix2sky`.\n\n- *sip*: A `~pywcs.Sip` obj", 256); strncpy(doc_Wcs + 256, "ect or ``None``\n\n- *cpdis*: A pair of `~pywcs.DistortionLookupTable` objects, or\n ``(None, None)``.\n\n- *wcsprm*: A `~pywcs.Wcsprm` object\n\n- *det2im*: A pair of `~pywcs.DistortionLookupTable` objects, or\n ``(None, None)``.\n", 226); strncpy(doc_Wcsprm + 0, "Wcsprm(header=None, key=\' \', relax=False, naxis=2, keysel=0, colsel=None)\n\n`~pywcs.Wcsprm` is a direct wrapper around `wcslib`_, and provides\naccess to the core WCS transformations that it supports.\n\nThe FITS header parsing enforces correct FITS \"keyword =", 256); strncpy(doc_Wcsprm + 256, " value\" syntax\nwith regard to the equals sign occurring in columns 9 and 10.\nHowever, it does recognize free-format character (NOST 100-2.0,\nSect. 5.2.1), integer (Sect. 5.2.3), and floating-point values\n(Sect. 5.2.4) for all keywords.\n\n- *header*: A PyFIT", 256); strncpy(doc_Wcsprm + 512, "S header object or a string containing the raw FITS\n header data or ``None``. If ``None``, the object will be\n initialized to default values.\n\n- *key*: The key referring to a particular WCS transform in the\n header. This may be either ``\' \'`` or ``\'A\'", 256); strncpy(doc_Wcsprm + 768, "``-``\'Z\'`` and\n corresponds to the ``\"a\"`` part of ``\"CTYPEia\"``. (*key*\n may only be provided if *header* is also provided.)\n\n- *relax*: Degree of permissiveness:\n\n - `False`: Recognize only FITS keywords defined by the published\n WCS standard.", 256); strncpy(doc_Wcsprm + 1024, "\n\n - `True`: Admit all recognized informal extensions of the WCS\n standard.\n\n - `int`: a bit field selecting specific extensions to accept. See\n :ref:`relaxread` for details.\n\n- *naxis*: The number of sky coordinates axes for the object.\n ", 256); strncpy(doc_Wcsprm + 1280, " (*naxis* may only be provided if *header* is ``None``.)\n\n- *keysel*: Vector of flag bits that may be used to restrict the\n keyword types considered:\n\n - ``WCSHDR_IMGHEAD``: Image header keywords.\n\n - ``WCSHDR_BIMGARR``: Binary table image array.\n", 256); strncpy(doc_Wcsprm + 1536, "\n - ``WCSHDR_PIXLIST``: Pixel list keywords.\n\n If zero, there is no restriction. If -1, the underlying wcslib\n function ``wcspih()`` is called, rather than ``wcstbh()``.\n\n- *colsel*: A sequence of table column numbers used to restrict the\n keywor", 256); strncpy(doc_Wcsprm + 1792, "ds considered. ``None`` indicates no restriction.\n\n**Exceptions:**\n\n- `MemoryError`: Memory allocation failed.\n\n- `ValueError`: Invalid key.\n\n- `KeyError`: Key not found in FITS header.\n", 187); strncpy(doc_Wtbarr + 0, "Classes to construct coordinate lookup tables from a binary table\nextension (BINTABLE).\n\nThis class can not be constructed directly from Python, but instead is\nreturned from `~pywcs.Wcsprm.wtb`.\n", 195); strncpy(doc_a + 0, "``double array[a_order+1][a_order+1]``\n\nThe `SIP`_ ``A_i_j`` matrix used for pixel to focal plane\ntransformation.\n\nIts values may be changed in place, but it may not be resized, without\ncreating a new `~pywcs.Sip` object.\n", 222); strncpy(doc_a_order + 0, "``int`` (read-only)\n\nThe order of the polynomial in the `SIP`_ ``A_i_j`` array (``A_ORDER``).\n", 94); strncpy(doc_all_pix2sky + 0, "all_pix2sky(pixcrd, origin) -> ``double array[ncoord][nelem]``\n\nTransforms pixel coordinates to sky coordinates by doing all of the\nfollowing:\n\n - Detector to image plane correction (optionally)\n\n - SIP distortion correction (optionally)\n\n - Paper", 256); strncpy(doc_all_pix2sky + 256, " IV distortion correction (optionally)\n\n - wcslib WCS transformation\n\nThe first three (the distortion corrections) are done in parallel.\n\n- *pixcrd*: double array[ncoord][nelem]. Array of pixel coordinates.\n\n\n- *origin*: int. Specifies the origin of pi", 256); strncpy(doc_all_pix2sky + 512, "xel values. The Fortran and\n FITS standards use an origin of 1. Numpy and C use array indexing\n with origin at 0.\n\n\nReturns an array of sky coordinates.\n\n**Exceptions:**\n\n- `MemoryError`: Memory allocation failed.\n\n- `SingularMatrixError`: Linear trans", 256); strncpy(doc_all_pix2sky + 768, "formation matrix is singular.\n\n- `InconsistentAxisTypesError`: Inconsistent or unrecognized\n coordinate axis types.\n\n- `ValueError`: Invalid parameter value.\n\n- `ValueError`: Invalid coordinate transformation parameters.\n\n- `ValueError`: x- and y-coordina", 256); strncpy(doc_all_pix2sky + 1024, "te arrays are not the same size.\n\n- `InvalidTransformError`: Invalid coordinate transformation.\n\n- `InvalidTransformError`: Ill-conditioned coordinate transformation\n parameters.\n", 180); strncpy(doc_alt + 0, "``str``\n\nCharacter code for alternate coordinate descriptions. For example,\nthe ``\"a\"`` in keyword names such as ``CTYPEia``. This is a space\ncharacter for the primary coordinate description, or one of the 26\nupper-case letters, A-Z.\n", 236); strncpy(doc_ap + 0, "``double array[ap_order+1][ap_order+1]``\n\nThe `SIP`_ ``AP_i_j`` matrix used for focal plane to pixel\ntransformation. Its values may be changed in place, but it may not be\nresized, without creating a new `~pywcs.Sip` object.\n", 225); strncpy(doc_ap_order + 0, "``int`` (read-only)\n\nThe order of the polynomial in the `SIP`_ ``AP_i_j`` array\n(``AP_ORDER``).\n", 96); strncpy(doc_axis_types + 0, "``int array[naxis]``\n\nAn array of four-digit type codes for each axis.\n\n- First digit (i.e. 1000s):\n\n - 0: Non-specific coordinate type.\n\n - 1: Stokes coordinate.\n\n - 2: Celestial coordinate (including ``CUBEFACE``).\n\n - 3: Spectral coordinate.\n\n- Seco", 256); strncpy(doc_axis_types + 256, "nd digit (i.e. 100s):\n\n - 0: Linear axis.\n\n - 1: Quantized axis (``STOKES``, ``CUBEFACE``).\n\n - 2: Non-linear celestial axis.\n\n - 3: Non-linear spectral axis.\n\n - 4: Logarithmic axis.\n\n - 5: Tabular axis.\n\n- Third digit (i.e. 10s):\n\n - 0: Group numb", 256); strncpy(doc_axis_types + 512, "er, e.g. lookup table number\n\n- The fourth digit is used as a qualifier depending on the axis type.\n\n - For celestial axes:\n\n - 0: Longitude coordinate.\n\n - 1: Latitude coordinate.\n\n - 2: ``CUBEFACE`` number.\n\n - For lookup tables: the axis numb", 256); strncpy(doc_axis_types + 768, "er in a multidimensional table.\n\n``CTYPEia`` in ``\"4-3\"`` form with unrecognized algorithm code will\nhave its type set to -1 and generate an error.\n", 148); strncpy(doc_b + 0, "``double array[b_order+1][b_order+1]``\n\nThe `SIP`_ ``B_i_j`` matrix used for pixel to focal plane\ntransformation. Its values may be changed in place, but it may not be\nresized, without creating a new `~pywcs.Sip` object.\n", 222); strncpy(doc_b_order + 0, "``int`` (read-only)\n\nThe order of the polynomial in the `SIP`_ ``B_i_j`` array\n(``B_ORDER``).\n", 94); strncpy(doc_bp + 0, "``double array[bp_order+1][bp_order+1]``\n\nThe `SIP`_ ``BP_i_j`` matrix used for focal plane to pixel\ntransformation. Its values may be changed in place, but it may not be\nresized, without creating a new `~pywcs.Sip` object.\n", 225); strncpy(doc_bp_order + 0, "``int`` (read-only)\n\nThe order of the polynomial in the `SIP`_ ``BP_i_j`` array\n(``BP_ORDER``).\n", 96); strncpy(doc_cd + 0, "``double array[naxis][naxis]``\n\nThe ``CDi_ja`` linear transformation matrix.\n\nFor historical compatibility, three alternate specifications of the\nlinear transforations are available in wcslib. The canonical\n``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the", 256); strncpy(doc_cd + 256, " deprecated\n``CROTAia`` keywords. Although the latter may not formally co-exist\nwith ``PCi_ja``, the approach here is simply to ignore them if given\nin conjunction with ``PCi_ja``.\n\n`~pywcs.Wcsprm.has_pc`, `~pywcs.Wcsprm.has_cd` and\n`~pywcs.Wcsprm.has_cro", 256); strncpy(doc_cd + 512, "ta` can be used to determine which of these\nalternatives are present in the header.\n\nThese alternate specifications of the linear transformation matrix are\ntranslated immediately to ``PCi_ja`` by `~pywcs.Wcsprm.set` and are\nnowhere visible to the lower-lev", 256); strncpy(doc_cd + 768, "el routines. In particular,\n`~pywcs.Wcsprm.set` resets `~pywcs.Wcsprm.cdelt` to unity if\n``CDi_ja`` is present (and no ``PCi_ja``). If no ``CROTAia`` is\nassociated with the latitude axis, `set` reverts to a unity ``PCi_ja``\nmatrix.\n", 234); strncpy(doc_cdelt + 0, "``double array[naxis]``\n\nCoordinate increments (``CDELTia``) for each coord axis.\n\nIf a ``CDi_ja`` linear transformation matrix is present, a warning is\nraised and `~pywcs.Wcsprm.cdelt` is ignored. The ``CDi_ja`` matrix\nmay be deleted by::\n\n del wcs.wcs.", 256); strncpy(doc_cdelt + 256, "cd\n\nAn undefined value is represented by NaN.\n", 46); strncpy(doc_cel_offset + 0, "``boolean``\n\nIf `True`, an offset will be applied to ``(x, y)`` to force ``(x,y) =\n(0,0)`` at the fiducial point, (phi_0, theta_0). Default is\n`False`.\n", 153); strncpy(doc_celfix + 0, "Translates AIPS-convention celestial projection types, ``-NCP`` and\n``-GLS``.\n\nReturns ``0`` for success; ``-1`` if no change required.\n", 136); strncpy(doc_cname + 0, "``list of strings``\n\nA list of the coordinate axis names, from ``CNAMEia``.\n", 76); strncpy(doc_colax + 0, "``int array[naxis]``\n\nAn array recording the column numbers for each axis in a pixel list.\n", 91); strncpy(doc_colnum + 0, "``int``\n\nWhere the coordinate representation is associated with an image-array\ncolumn in a FITS binary table, this property may be used to record the\nrelevant column number.\n\nIt should be set to zero for an image header or pixel list.\n", 235); strncpy(doc_convert + 0, "convert(array)\n\nPerform the unit conversion on the elements of the given *array*,\nreturning an array of the same shape.\n", 120); strncpy(doc_coord + 0, "``double array[K_M]...[K_2][K_1][M]``\n\nThe tabular coordinate array, with the dimensions::\n\n (K_M, ... K_2, K_1, M)\n\n(see `~pywcs._pywcs.Tabprm.K`) i.e. with the `M` dimension varying\nfastest so that the `M` elements of a coordinate vector are stored\nco", 256); strncpy(doc_coord + 256, "ntiguously in memory.\n", 22); strncpy(doc_copy + 0, "Creates a deep copy of the WCS object.\n", 39); strncpy(doc_cpdis1 + 0, "`~pywcs.DistortionLookupTable`\n\nThe pre-linear transformation distortion lookup table, ``CPDIS1``.\n", 99); strncpy(doc_cpdis2 + 0, "`~pywcs.DistortionLookupTable`\n\nThe pre-linear transformation distortion lookup table, ``CPDIS2``.\n", 99); strncpy(doc_crder + 0, "``double array[naxis]``\n\nThe random error in each coordinate axis, ``CRDERia``.\n\nAn undefined value is represented by NaN.\n", 123); strncpy(doc_crota + 0, "``double array[naxis]``\n\n``CROTAia`` keyvalues for each coordinate axis.\n\nFor historical compatibility, three alternate specifications of the\nlinear transforations are available in wcslib. The canonical\n``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the dep", 256); strncpy(doc_crota + 256, "recated\n``CROTAia`` keywords. Although the latter may not formally co-exist\nwith ``PCi_ja``, the approach here is simply to ignore them if given\nin conjunction with ``PCi_ja``.\n\n`~pywcs.Wcsprm.has_pc`, `~pywcs.Wcsprm.has_cd` and\n`~pywcs.Wcsprm.has_crota` ", 256); strncpy(doc_crota + 512, "can be used to determine which of these\nalternatives are present in the header.\n\nThese alternate specifications of the linear transformation matrix are\ntranslated immediately to ``PCi_ja`` by `~pywcs.Wcsprm.set` and are\nnowhere visible to the lower-level r", 256); strncpy(doc_crota + 768, "outines. In particular,\n`~pywcs.Wcsprm.set` resets `~pywcs.Wcsprm.cdelt` to unity if\n``CDi_ja`` is present (and no ``PCi_ja``). If no ``CROTAia`` is\nassociated with the latitude axis, `set` reverts to a unity ``PCi_ja``\nmatrix.\n", 230); strncpy(doc_crpix + 0, "``double array[naxis]``\n\nCoordinate reference pixels (``CRPIXja``) for each pixel axis.\n", 88); strncpy(doc_crval + 0, "``double array[naxis]``\n\nCoordinate reference values (``CRVALia``) for each coordinate axis.\n", 93); strncpy(doc_crval_tabprm + 0, "``double array[M]``\n\nArray whose elements contain the index value for the reference pixel\nfor each of the tabular coordinate axes.\n", 131); strncpy(doc_csyer + 0, "``double array[naxis]``\n\nThe systematic error in the coordinate value axes, ``CSYERia``.\n\nAn undefined value is represented by NaN.\n", 132); strncpy(doc_ctype + 0, "``list of strings[naxis]``\n\nList of ``CTYPEia`` keyvalues.\n\nThe `~pywcs.Wcsprm.ctype` keyword values must be in upper case and\nthere must be zero or one pair of matched celestial axis types, and\nzero or one spectral axis.\n", 222); strncpy(doc_cubeface + 0, "``int``\n\nIndex into the ``pixcrd`` (pixel coordinate) array for the\n``CUBEFACE`` axis. This is used for quadcube projections where the\ncube faces are stored on a separate axis.\n\nThe quadcube projections (``TSC``, ``CSC``, ``QSC``) may be\nrepresented in FI", 256); strncpy(doc_cubeface + 256, "TS in either of two ways:\n\n - The six faces may be laid out in one plane and numbered as\n follows::\n\n\n 0\n\n 4 3 2 1 4 3 2\n\n 5\n\n Faces", 256); strncpy(doc_cubeface + 512, " 2, 3 and 4 may appear on one side or the other (or both).\n The sky-to-pixel routines map faces 2, 3 and 4 to the left but\n the pixel-to-sky routines accept them on either side.\n\n - The ``COBE`` convention in which the six faces are stored in ", 256); strncpy(doc_cubeface + 768, "a\n three-dimensional structure using a ``CUBEFACE`` axis indexed\n from 0 to 5 as above.\n\nThese routines support both methods; `~pywcs.Wcsprm.set` determines\nwhich is being used by the presence or absence of a ``CUBEFACE`` axis\nin `~pywcs.Wcsprm.c", 256); strncpy(doc_cubeface + 1024, "type`. `~pywcs.Wcsprm.p2s` and `~pywcs.Wcsprm.s2p`\ntranslate the ``CUBEFACE`` axis representation to the single plane\nrepresentation understood by the lower-level projection routines.\n", 185); strncpy(doc_cunit + 0, "``list of strings[naxis]``\n\nList of ``CUNITia`` keyvalues which define the units of measurement of\nthe ``CRVALia``, ``CDELTia`` and ``CDi_ja`` keywords.\n\nAs ``CUNITia`` is an optional header keyword, `~pywcs.Wcsprm.cunit`\nmay be left blank but otherwise is", 256); strncpy(doc_cunit + 256, " expected to contain a standard\nunits specification as defined by WCS Paper I.\n`~pywcs.Wcsprm.unitfix` is available to translate commonly used\nnon-standard units specifications but this must be done as a separate\nstep before invoking `~pywcs.Wcsprm.set`.\n\n", 256); strncpy(doc_cunit + 512, "For celestial axes, if `~pywcs.Wcsprm.cunit` is not blank,\n`~pywcs.Wcsprm.set` uses `wcsunits` to parse it and scale\n`~pywcs.Wcsprm.cdelt`, `~pywcs.Wcsprm.crval`, and `~pywcs.Wcsprm.cd`\nto decimal degrees. It then resets `~pywcs.Wcsprm.cunit` to\n``\"deg\"``", 256); strncpy(doc_cunit + 768, ".\n\nFor spectral axes, if `~pywcs.Wcsprm.cunit` is not blank,\n`~pywcs.Wcsprm.set` uses `wcsunits` to parse it and scale\n`~pywcs.Wcsprm.cdelt`, `~pywcs.Wcsprm.crval`, and `~pywcs.Wcsprm.cd`\nto SI units. It then resets `~pywcs.Wcsprm.cunit` accordingly.\n\n`~p", 256); strncpy(doc_cunit + 1024, "ywcs.Wcsprm.set` ignores `~pywcs.Wcsprm.cunit` for other coordinate\ntypes; `~pywcs.Wcsprm.cunit` may be used to label coordinate values.\n", 137); strncpy(doc_cylfix + 0, "cylfix()\n\nFixes WCS keyvalues for malformed cylindrical projections.\n\nReturns ``0`` for success; ``-1`` if no change required.\n", 127); strncpy(doc_data + 0, "``float array``\n\nThe array data for the `~pywcs.DistortionLookupTable`.\n", 72); strncpy(doc_data_wtbarr + 0, "``double array``\n\nThe array data for the BINTABLE.\n", 51); strncpy(doc_dateavg + 0, "``string``\n\nRepresentative mid-point of the date of observation in ISO format,\n``yyyy-mm-ddThh:mm:ss``.\n\n.. seealso::\n\n `~pywcs.Wcsprm.dateobs`\n", 146); strncpy(doc_dateobs + 0, "``string``\n\nStart of the date of observation in ISO format,\n``yyyy-mm-ddThh:mm:ss``.\n\n.. seealso::\n\n `~pywcs.Wcsprm.dateavg`\n", 127); strncpy(doc_datfix + 0, "datfix()\n\nTranslates the old ``DATE-OBS`` date format to year-2000 standard form\n``(yyyy-mm-ddThh:mm:ss)`` and derives ``MJD-OBS`` from it if not\nalready set. Alternatively, if `~pywcs.Wcsprm.mjdobs` is set and\n`~pywcs.Wcsprm.dateobs` isn\'t, then `~pywcs.", 256); strncpy(doc_datfix + 256, "Wcsprm.datfix` derives\n`~pywcs.Wcsprm.dateobs` from it. If both are set but disagree by more\nthan half a day then `ValueError` is raised.\n\nReturns ``0`` for success; ``-1`` if no change required.\n", 197); strncpy(doc_delta + 0, "``double array[M]`` (read-only)\n\nArray of interpolated indices into the coordinate array such that\nUpsilon_m, as defined in Paper III, is equal to\n(`~pywcs._pywcs.Tabprm.p0` [m] + 1) + delta[m].\n", 195); strncpy(doc_det2im + 0, "Convert detector coordinates to image plane coordinates.\n", 57); strncpy(doc_det2im1 + 0, "A `~pywcs.DistortionLookupTable` object for detector to image plane\ncorrection in the *x*-axis.\n", 96); strncpy(doc_det2im2 + 0, "A `~pywcs.DistortionLookupTable` object for detector to image plane\ncorrection in the *y*-axis.\n", 96); strncpy(doc_dims + 0, "``int array[ndim]`` (read-only)\n\nThe dimensions of the tabular array `~pywcs._pywcs.Wtbarr.data`.\n", 98); strncpy(doc_equinox + 0, "``double``\n\nThe equinox associated with dynamical equatorial or ecliptic\ncoordinate systems, ``EQUINOXa`` (or ``EPOCH`` in older headers). Not\napplicable to ICRS equatorial or ecliptic coordinates.\n\nAn undefined value is represented by NaN.\n", 242); strncpy(doc_extlev + 0, "``int`` (read-only)\n\n``EXTLEV`` identifying the binary table extension.\n", 72); strncpy(doc_extnam + 0, "``str`` (read-only)\n\n``EXTNAME`` identifying the binary table extension.\n", 73); strncpy(doc_extrema + 0, "``double array[K_M]...[K_2][2][M]`` (read-only)\n\nAn array recording the minimum and maximum value of each element of\nthe coordinate vector in each row of the coordinate array, with the\ndimensions::\n\n (K_M, ... K_2, 2, M)\n\n(see `~pywcs._pywcs.Tabprm.K`).", 256); strncpy(doc_extrema + 256, " The minimum is recorded in the first\nelement of the compressed K_1 dimension, then the maximum. This array\nis used by the inverse table lookup function to speed up table\nsearches.\n", 183); strncpy(doc_extver + 0, "``int`` (read-only)\n\n``EXTVER`` identifying the binary table extension.\n", 72); strncpy(doc_find_all_wcs + 0, "find_all_wcs(relax=0, keysel=0)\n\nFind all WCS transformations in the header.\n\n- *header*: A string containing the raw FITS header data.\n\n- *relax*: Degree of permissiveness:\n\n - `False`: Recognize only FITS keywords defined by the published\n WCS st", 256); strncpy(doc_find_all_wcs + 256, "andard.\n\n - `True`: Admit all recognized informal extensions of the WCS\n standard.\n\n - `int`: a bit field selecting specific extensions to accept. See\n :ref:`relaxread` for details.\n\n- *keysel*: Vector of flag bits that may be used to rest", 256); strncpy(doc_find_all_wcs + 512, "rict the\n keyword types considered:\n\n - ``WCSHDR_IMGHEAD``: Image header keywords.\n\n - ``WCSHDR_BIMGARR``: Binary table image array.\n\n - ``WCSHDR_PIXLIST``: Pixel list keywords.\n\n If zero, there is no restriction. If -1, wcspih() is called,", 256); strncpy(doc_find_all_wcs + 768, "\n rather than wcstbh().\n\nReturns a list of `~pywcs._pywcs._Wcsprm` objects.\n", 78); strncpy(doc_fix + 0, "fix(translate_units=\'\', naxis=0)\n\nApplies all of the corrections handled separately by\n`~pywcs.Wcsprm.datfix`, `~pywcs.Wcsprm.unitfix`,\n`~pywcs.Wcsprm.celfix`, `~pywcs.Wcsprm.spcfix` and\n`~pywcs.Wcsprm.cylfix`.\n\n- *translate_units*: string. Do potentially ", 256); strncpy(doc_fix + 256, "unsafe translations of\n non-standard unit strings.\n\n Although ``\"S\"`` is commonly used to represent seconds, its\n translation to ``\"s\"`` is potentially unsafe since the standard\n recognizes ``\"S\"`` formally as Siemens, however rarely that may be\n used", 256); strncpy(doc_fix + 512, ". The same applies to ``\"H\"`` for hours (Henry), and ``\"D\"``\n for days (Debye).\n\n This string controls what to do in such cases, and is\n case-insensitive.\n\n - If the string contains ``\"s\"``, translate ``\"S\"`` to ``\"s\"``.\n\n - If the string contains ``", 256); strncpy(doc_fix + 768, "\"h\"``, translate ``\"H\"`` to ``\"h\"``.\n\n - If the string contains ``\"d\"``, translate ``\"D\"`` to ``\"d\"``.\n\n Thus ``\'\'`` doesn\'t do any unsafe translations, whereas ``\'shd\'``\n does all of them.\n\n- *naxis*: int array[naxis]. Image axis lengths. If this", 256); strncpy(doc_fix + 1024, " array is\n set to zero or ``None``, then `~pywcs.Wcsprm.cylfix` will not be\n invoked.\n\nReturns a dictionary containing the following keys, each referring to\na status string for each of the sub-fix functions that were\ncalled:\n\n- `~pywcs.Wcsprm.datfix`\n\n- ", 256); strncpy(doc_fix + 1280, "`~pywcs.Wcsprm.unitfix`\n\n- `~pywcs.Wcsprm.celfix`\n\n- `~pywcs.Wcsprm.spcfix`\n\n- `~pywcs.Wcsprm.cylfix`\n", 102); strncpy(doc_get_cdelt + 0, "get_cdelt() -> double array[naxis]\n\nCoordinate increments (``CDELTia``) for each coord axis.\n\nReturns the ``CDELT`` offsets in read-only form. Unlike the\n`~pywcs.Wcsprm.cdelt` property, this works even when the header\nspecifies the linear transformation m", 256); strncpy(doc_get_cdelt + 256, "atrix in one of the alternative\n``CDi_ja`` or ``CROTAia`` forms. This is useful when you want access\nto the linear transformation matrix, but don\'t care how it was\nspecified in the header.\n", 190); strncpy(doc_get_offset + 0, "get_offset(*x, y*) -> (*x, y*)\n\nReturns the offset from the distortion table for pixel point (*x, y*).\n", 103); strncpy(doc_get_pc + 0, "get_pc() -> double array[naxis][naxis]\n\nReturns the ``PC`` matrix in read-only form. Unlike the\n`~pywcs.Wcsprm.pc` property, this works even when the header specifies\nthe linear transformation matrix in one of the alternative ``CDi_ja``\nor ``CROTAia`` for", 256); strncpy(doc_get_pc + 256, "ms. This is useful when you want access to the\nlinear transformation matrix, but don\'t care how it was specified in\nthe header.\n", 129); strncpy(doc_get_ps + 0, "get_ps() -> list of tuples\n\nReturns ``PSi_ma`` keywords for each *i* and *m*. Returned as a list\nof tuples of the form (*i*, *m*, *value*):\n\n - *i*: int. Axis number, as in ``PSi_ma``, (i.e. 1-relative)\n\n - *m*: int. Parameter number, as in ``PSi_", 256); strncpy(doc_get_ps + 256, "ma``, (i.e. 0-relative)\n\n - *value*: string. Parameter value.\n\n.. seealso::\n\n `~pywcs.Wcsprm.set_ps`\n", 107); strncpy(doc_get_pv + 0, "get_pv() -> list of tuples\n\nReturns ``PVi_ma`` keywords for each *i* and *m*. Returned as a list\nof tuples of the form (*i*, *m*, *value*):\n\n - *i*: int. Axis number, as in ``PVi_ma``, (i.e. 1-relative)\n\n - *m*: int. Parameter number, as in ``PVi_", 256); strncpy(doc_get_pv + 256, "ma``, (i.e. 0-relative)\n\n - *value*: string. Parameter value.\n\nNote that, if they were not given, `~pywcs.Wcsprm.set` resets the\nentries for ``PVi_1a``, ``PVi_2a``, ``PVi_3a``, and ``PVi_4a`` for\nlongitude axis *i* to match (``phi_0``, ``theta_0``), the", 256); strncpy(doc_get_pv + 512, " native\nlongitude and latitude of the reference point given by ``LONPOLEa``\nand ``LATPOLEa``.\n\n.. seealso::\n\n `~pywcs.Wcsprm.set_pv`\n", 135); strncpy(doc_has_cd + 0, "has_cd() -> bool\n\nReturns `True` if ``CDi_ja`` is present. ``CDi_ja`` is an alternate\nspecification of the linear transformation matrix, maintained for\nhistorical compatibility.\n\nMatrix elements in the IRAF convention are equivalent to the product\n``CDi_j", 256); strncpy(doc_has_cd + 256, "a = CDELTia * PCi_ja``, but the defaults differ from that of\nthe ``PCi_ja`` matrix. If one or more ``CDi_ja`` keywords are present\nthen all unspecified ``CDi_ja`` default to zero. If no ``CDi_ja`` (or\n``CROTAia``) keywords are present, then the header is", 256); strncpy(doc_has_cd + 512, " assumed to be in\n``PCi_ja`` form whether or not any ``PCi_ja`` keywords are present\nsince this results in an interpretation of ``CDELTia`` consistent with\nthe original FITS specification.\n\nWhile ``CDi_ja`` may not formally co-exist with ``PCi_ja``, it may", 256); strncpy(doc_has_cd + 768, "\nco-exist with ``CDELTia`` and ``CROTAia`` which are to be ignored.\n\n.. seealso::\n\n `cd`\n", 91); strncpy(doc_has_cdi_ja + 0, "has_cdi_ja() -> bool\n\nAlias for `~pywcs.Wcsprm.has_cd`. Maintained for backward\ncompatibility.\n", 96); strncpy(doc_has_crota + 0, "has_crota() -> bool\n\nReturns `True` if ``CROTAia`` is present. ``CROTAia`` is an\nalternate specification of the linear transformation matrix,\nmaintained for historical compatibility.\n\nIn the AIPS convention, ``CROTAia`` may only be associated with the\nlat", 256); strncpy(doc_has_crota + 256, "itude axis of a celestial axis pair. It specifies a rotation in\nthe image plane that is applied *after* the ``CDELTia``; any other\n``CROTAia`` keywords are ignored.\n\n``CROTAia`` may not formally co-exist with ``PCi_ja``. ``CROTAia`` and\n``CDELTia`` may f", 256); strncpy(doc_has_crota + 512, "ormally co-exist with ``CDi_ja`` but if so are to be\nignored.\n\n.. seealso::\n\n `~pywcs.Wcsprm.crota`\n", 102); strncpy(doc_has_crotaia + 0, "has_crota_ia() -> bool\n\nAlias for `~pywcs.Wcsprm.has_crota`. Maintained for backward\ncompatibility.\n", 101); strncpy(doc_has_pc + 0, "has_pc() -> bool\n\nReturns `True` if ``PCi_ja`` is present. ``PCi_ja`` is the\nrecommended way to specify the linear transformation matrix.\n\n.. seealso::\n\n `~pywcs.Wcsprm.pc`\n", 176); strncpy(doc_has_pci_ja + 0, "has_pci_ja() -> bool\n\nAlias for `~pywcs.Wcsprm.has_pc`. Maintained for backward\ncompatibility.\n", 96); strncpy(doc_have + 0, "The name of the unit being converted from.\n\nThis value always uses standard unit names, even if the\n`UnitConverter` was initialized with a non-standard unit name.\n", 163); strncpy(doc_i + 0, "``int`` (read-only)\n\nImage axis number.\n", 40); strncpy(doc_imgpix_matrix + 0, "``double array[2][2]`` (read-only)\n\nInverse of the matrix containing the product of the ``CDELTia``\ndiagonal matrix and the ``PCi_ja`` matrix.\n", 143); strncpy(doc_is_unity + 0, "is_unity() -> bool\n\nReturns `True` if the linear transformation matrix\n(`~pywcs.Wcsprm.cd`) is unity.\n", 102); strncpy(doc_kind + 0, "``str`` (read-only)\n\nCharacter identifying the wcstab array type:\n\n - ``\'c\'``: coordinate array,\n - ``\'i\'``: index vector.\n", 129); strncpy(doc_lat + 0, "``int`` (read-only)\n\nThe index into the sky coordinate array containing latitude values.\n", 89); strncpy(doc_latpole + 0, "``double``\n\nThe native latitude of the celestial pole, ``LATPOLEa`` (deg).\n", 75); strncpy(doc_lattyp + 0, "``string`` (read-only)\n\nCelestial axis type for latitude, e.g. \"RA\", \"DEC\", \"GLON\", \"GLAT\",\netc. extracted from \'RA--\', \'DEC-\', \'GLON\', \'GLAT\', etc. in the first\nfour characters of ``CTYPEia`` but with trailing dashes removed.\n", 227); strncpy(doc_lng + 0, "``int`` (read-only)\n\nThe index into the sky coordinate array containing longitude values.\n", 90); strncpy(doc_lngtyp + 0, "``string`` (read-only)\n\nCelestial axis type for longitude, e.g. \"RA\", \"DEC\", \"GLON\", \"GLAT\",\netc. extracted from \'RA--\', \'DEC-\', \'GLON\', \'GLAT\', etc. in the first\nfour characters of ``CTYPEia`` but with trailing dashes removed.\n", 228); strncpy(doc_lonpole + 0, "``double``\n\nThe native longitude of the celestial pole, ``LONPOLEa`` (deg).\n", 76); strncpy(doc_m + 0, "``int`` (read-only)\n\nArray axis number for index vectors.\n", 58); strncpy(doc_map + 0, "``int array[M]``\n\nA vector of length `~pywcs._pywcs.Tabprm.M`\nthat defines the association between axis *m* in the *M*-dimensional\ncoordinate array (1 <= *m* <= *M*) and the indices of the intermediate world\ncoordinate and world coordinate arrays.\n\nWhen th", 256); strncpy(doc_map + 256, "e intermediate and world coordinate arrays contain the full\ncomplement of coordinate elements in image-order, as will usually be\nthe case, then ``map[m-1] == i-1`` for axis *i* in the *N*-dimensional\nimage (1 <= *i* <= *N*). In terms of the FITS keywords:", 256); strncpy(doc_map + 512, ":\n\n map[PVi_3a - 1] == i - 1.\n\nHowever, a different association may result if the intermediate\ncoordinates, for example, only contains a (relevant) subset of\nintermediate world coordinate elements. For example, if *M* == 1 for\nan image with *N* > 1, it", 256); strncpy(doc_map + 768, " is possible to fill the intermediate\ncoordinates with the relevant coordinate element with ``nelem`` set to\n1. In this case ``map[0] = 0`` regardless of the value of *i*.\n", 173); strncpy(doc_mix + 0, "mix(mixpix, mixcel, vspan, vstep, viter, world, pixcrd, origin)\n\nGiven either the celestial longitude or latitude plus an element of\nthe pixel coordinate, solves for the remaining elements by iterating\non the unknown celestial coordinate element using `~py", 256); strncpy(doc_mix + 256, "wcs.Wcsprm.s2p`.\n\n- *mixpix*: int. Which element on the pixel coordinate is given.\n\n- *mixcel*: int. Which element of the celestial coordinate is\n given. If mixcel* = ``1``, celestial longitude is given in\n ``world[self.lng]``, latitude returned in ``w", 256); strncpy(doc_mix + 512, "orld[self.lat]``. If\n *mixcel* = ``2``, celestial latitude is given in\n ``world[self.lat]``, longitude returned in ``world[self.lng]``.\n\n- *vspan*: pair of floats. Solution interval for the celestial\n coordinate, in degrees. The ordering of the two l", 256); strncpy(doc_mix + 768, "imits is\n irrelevant. Longitude ranges may be specified with any convenient\n normalization, for example ``(-120,+120)`` is the same as\n ``(240,480)``, except that the solution will be returned with the\n same normalization, i.e. lie within the interval", 256); strncpy(doc_mix + 1024, " specified.\n\n- *vstep*: float. Step size for solution search, in degrees. If\n ``0``, a sensible, although perhaps non-optimal default will be\n used.\n\n- *viter*: int. If a solution is not found then the step size will be\n halved and the search recomme", 256); strncpy(doc_mix + 1280, "nced. *viter* controls how many times\n the step size is halved. The allowed range is 5 - 10.\n\n- *world*: double array[naxis]. World coordinate elements.\n ``world[self.lng]`` and ``world[self.lat]`` are the celestial\n longitude and latitude, in degree", 256); strncpy(doc_mix + 1536, "s. Which is given and which\n returned depends on the value of *mixcel*. All other elements are\n given. The results will be written to this array in-place.\n\n- *pixcrd*: double array[naxis]. Pixel coordinate. The element\n indicated by *mixpix* is giv", 256); strncpy(doc_mix + 1792, "en and the remaining elements will be\n written in-place.\n\n\n- *origin*: int. Specifies the origin of pixel values. The Fortran and\n FITS standards use an origin of 1. Numpy and C use array indexing\n with origin at 0.\n\n\nReturns dictionary with the follo", 256); strncpy(doc_mix + 2048, "wing keys:\n\n- *phi* (double array[naxis])\n\n- *theta* (double array[naxis])\n\n - Longitude and latitude in the native coordinate system of the\n projection, in degrees.\n\n- *imgcrd* (double array[naxis])\n\n - Image coordinate elements. ``imgcrd[self.lng]`", 256); strncpy(doc_mix + 2304, "` and\n ``imgcrd[self.lat]`` are the projected *x*- and *y*-coordinates,\n in decimal degrees.\n\n- *world* (double array[naxis])\n\n - Another reference to the *world* argument passed in.\n\n**Exceptions:**\n\n- `MemoryError` Memory allocation failed.\n\n- `Si", 256); strncpy(doc_mix + 2560, "ngularMatrixError`: Linear transformation matrix is singular.\n\n- `InconsistentAxisTypesError`: Inconsistent or unrecognized\n coordinate axis types.\n\n- `ValueError`: Invalid parameter value.\n\n- `InvalidTransformError`: Invalid coordinate transformation\n p", 256); strncpy(doc_mix + 2816, "arameters.\n\n- `InvalidTransformError` Ill-conditioned coordinate transformation\n parameters.\n\n- `InvalidCoordinateError`: Invalid world coordinate.\n\n- `NoSolutionError`: No solution found in the specified interval.\n\n.. seealso::\n\n `~pywcs.Wcsprm.lat`, `", 256); strncpy(doc_mix + 3072, "~pywcs.Wcsprm.lng`\n\n.. note::\n\n Initially, the specified solution interval is checked to see if it\'s\n a \"crossing\" interval. If it isn\'t, a search is made for a crossing\n solution by iterating on the unknown celestial coordinate starting\n at the upper", 256); strncpy(doc_mix + 3328, " limit of the solution interval and decrementing by the\n specified step size. A crossing is indicated if the trial value of\n the pixel coordinate steps through the value specified. If a\n crossing interval is found then the solution is determined by a\n", 256); strncpy(doc_mix + 3584, " modified form of \"regula falsi\" division of the crossing interval.\n If no crossing interval was found within the specified solution\n interval then a search is made for a \"non-crossing\" solution as may\n arise from a point of tangency. The process is c", 256); strncpy(doc_mix + 3840, "omplicated by\n having to make allowance for the discontinuities that occur in all\n map projections.\n\n Once one solution has been determined others may be found by\n subsequent invocations of `~pywcs.Wcsprm.mix` with suitably\n restricted solution interv", 256); strncpy(doc_mix + 4096, "als.\n\n Note the circumstance that arises when the solution point lies at a\n native pole of a projection in which the pole is represented as a\n finite curve, for example the zenithals and conics. In such cases\n two or more valid solutions may exist but", 256); strncpy(doc_mix + 4352, " `~pywcs.Wcsprm.mix` only\n ever returns one.\n\n Because of its generality, `~pywcs.Wcsprm.mix` is very\n compute-intensive. For compute-limited applications, more efficient\n special-case solvers could be written for simple projections, for\n example non", 256); strncpy(doc_mix + 4608, "-oblique cylindrical projections.\n", 34); strncpy(doc_mjdavg + 0, "``double``\n\nModified Julian Date ``(MJD = JD - 2400000.5)``, ``MJD-AVG``,\ncorresponding to ``DATE-AVG``.\n\nAn undefined value is represented by NaN.\n\n.. seealso::\n\n `~pywcs.Wcsprm.mjdobs`\n", 189); strncpy(doc_mjdobs + 0, "``double``\n\nModified Julian Date ``(MJD = JD - 2400000.5)``, ``MJD-OBS``,\ncorresponding to ``DATE-OBS``.\n\nAn undefined value is represented by NaN.\n\n.. seealso::\n\n `~pywcs.Wcsprm.mjdavg`\n", 189); strncpy(doc_name + 0, "``string``\n\nThe name given to the coordinate representation ``WCSNAMEa``.\n", 74); strncpy(doc_naxis + 0, "``int`` (read-only)\n\nThe number of axes (pixel and coordinate), given by the ``NAXIS`` or\n``WCSAXESa`` keyvalues.\n\nThe number of coordinate axes is determined at parsing time, and can\nnot be subsequently changed.\n\nIt is determined from the highest of the f", 256); strncpy(doc_naxis + 256, "ollowing:\n\n 1. ``NAXIS``\n\n 2. ``WCSAXESa``\n\n 3. The highest axis number in any parameterized WCS keyword. The\n keyvalue, as well as the keyword, must be syntactically valid\n otherwise it will not be considered.\n\nIf none of these keyword types i", 256); strncpy(doc_naxis + 512, "s present, i.e. if the header only\ncontains auxiliary WCS keywords for a particular coordinate\nrepresentation, then no coordinate description is constructed for it.\n\nThis value may differ for different coordinate representations of the\nsame image.\n", 248); strncpy(doc_nc + 0, "``int`` (read-only)\n\nTotal number of coordinate vectors in the coordinate array being the\nproduct K_1 * K_2 * ... * K_M.\n", 121); strncpy(doc_ndim + 0, "``int`` (read-only)\n\nExpected dimensionality of the wcstab array.\n", 66); strncpy(doc_obsgeo + 0, "``double array[3]``\n\nLocation of the observer in a standard terrestrial reference frame,\n``OBSGEO-X``, ``OBSGEO-Y``, ``OBSGEO-Z`` (in meters).\n\nAn undefined value is represented by NaN.\n", 186); strncpy(doc_offset + 0, "``double``\n\nThe offset of the unit conversion.\n", 47); strncpy(doc_p0 + 0, "``int array[M]``\n\nVector of length `~pywcs._pywcs.Tabprm.M` of interpolated indices into\nthe coordinate array such that Upsilon_m, as defined in Paper III, is\nequal to ``(p0[m] + 1) + delta[m]``.\n", 196); strncpy(doc_p2s + 0, "p2s(pixcrd, origin)\n\nConverts pixel to sky coordinates.\n\n- *pixcrd*: double array[ncoord][nelem]. Array of pixel coordinates.\n\n\n- *origin*: int. Specifies the origin of pixel values. The Fortran and\n FITS standards use an origin of 1. Numpy and C use a", 256); strncpy(doc_p2s + 256, "rray indexing\n with origin at 0.\n\n\nReturns a dictionary with the following keys:\n\n- *imgcrd*: double array[ncoord][nelem]\n\n - Array of intermediate sky coordinates. For celestial axes,\n ``imgcrd[][self.lng]`` and ``imgcrd[][self.lat]`` are the\n pr", 256); strncpy(doc_p2s + 512, "ojected *x*-, and *y*-coordinates, in pseudo degrees. For\n spectral axes, ``imgcrd[][self.spec]`` is the intermediate\n spectral coordinate, in SI units.\n\n- *phi*: double array[ncoord]\n\n- *theta*: double array[ncoord]\n\n - Longitude and latitude in t", 256); strncpy(doc_p2s + 768, "he native coordinate system of the\n projection, in degrees.\n\n- *world*: double array[ncoord][nelem]\n\n - Array of sky coordinates. For celestial axes,\n ``world[][self.lng]`` and ``world[][self.lat]`` are the celestial\n longitude and latitude, in ", 256); strncpy(doc_p2s + 1024, "degrees. For spectral axes,\n ``world[][self.spec]`` is the intermediate spectral coordinate, in\n SI units.\n\n- *stat*: int array[ncoord]\n\n - Status return value for each coordinate. ``0`` for success,\n ``1+`` for invalid pixel coordinate.\n\n**Exce", 256); strncpy(doc_p2s + 1280, "ptions:**\n\n- `MemoryError`: Memory allocation failed.\n\n- `SingularMatrixError`: Linear transformation matrix is singular.\n\n- `InconsistentAxisTypesError`: Inconsistent or unrecognized\n coordinate axis types.\n\n- `ValueError`: Invalid parameter value.\n\n- `V", 256); strncpy(doc_p2s + 1536, "alueError`: *x*- and *y*-coordinate arrays are not the same size.\n\n- `InvalidTransformError`: Invalid coordinate transformation\n parameters.\n\n- `InvalidTransformError`: Ill-conditioned coordinate transformation\n parameters.\n\n.. seealso::\n\n `~pywcs.Wcsp", 256); strncpy(doc_p2s + 1792, "rm.lat`, `~pywcs.Wcsprm.lng`\n", 29); strncpy(doc_p4_pix2foc + 0, "p4_pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem]\n\nConvert pixel coordinates to focal plane coordinates using `Paper IV`_\nlookup-table distortion correction.\n\n- *pixcrd*: double array[ncoord][nelem]. Array of pixel coordinates.\n\n\n- *origin*: int", 256); strncpy(doc_p4_pix2foc + 256, ". Specifies the origin of pixel values. The Fortran and\n FITS standards use an origin of 1. Numpy and C use array indexing\n with origin at 0.\n\n\nReturns an array of focal plane coordinates.\n\n- `MemoryError`: Memory allocation failed.\n\n- `ValueError`: In", 256); strncpy(doc_p4_pix2foc + 512, "valid coordinate transformation parameters.\n", 44); strncpy(doc_pc + 0, "``double array[naxis][naxis]``\n\nThe ``PCi_ja`` (pixel coordinate) transformation matrix. The order is::\n\n [[PC1_1, PC1_2],\n [PC2_1, PC2_2]]\n\nFor historical compatibility, three alternate specifications of the\nlinear transforations are available in wcsl", 256); strncpy(doc_pc + 256, "ib. The canonical\n``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the deprecated\n``CROTAia`` keywords. Although the latter may not formally co-exist\nwith ``PCi_ja``, the approach here is simply to ignore them if given\nin conjunction with ``PCi_ja``.\n\n`~pywc", 256); strncpy(doc_pc + 512, "s.Wcsprm.has_pc`, `~pywcs.Wcsprm.has_cd` and\n`~pywcs.Wcsprm.has_crota` can be used to determine which of these\nalternatives are present in the header.\n\nThese alternate specifications of the linear transformation matrix are\ntranslated immediately to ``PCi_j", 256); strncpy(doc_pc + 768, "a`` by `~pywcs.Wcsprm.set` and are\nnowhere visible to the lower-level routines. In particular,\n`~pywcs.Wcsprm.set` resets `~pywcs.Wcsprm.cdelt` to unity if\n``CDi_ja`` is present (and no ``PCi_ja``). If no ``CROTAia`` is\nassociated with the latitude axis,", 256); strncpy(doc_pc + 1024, " `set` reverts to a unity ``PCi_ja``\nmatrix.\n", 45); strncpy(doc_phi0 + 0, "``double``\n\nThe native latitude of the fiducial point, i.e. the point whose\ncelestial coordinates are given in ``ref[1:2]``. If undefined (NaN)\nthe initialization routine, `~pywcs.Wcsprm.set`, will set this to a\nprojection-specific default.\n\n.. seealso::\n", 256); strncpy(doc_phi0 + 256, "\n `~pywcs.Wcsprm.theta0`\n", 27); strncpy(doc_pix2foc + 0, "pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem]\n\nPerform both `SIP`_ polynomial and `Paper IV`_ lookup-table distortion\ncorrection in parallel.\n\n- *pixcrd*: double array[ncoord][nelem]. Array of pixel coordinates.\n\n\n- *origin*: int. Specifies the", 256); strncpy(doc_pix2foc + 256, " origin of pixel values. The Fortran and\n FITS standards use an origin of 1. Numpy and C use array indexing\n with origin at 0.\n\n\nReturns an array of focal plane coordinates.\n\n**Exceptions:**\n\n- `MemoryError`: Memory allocation failed.\n\n- `ValueError`: ", 256); strncpy(doc_pix2foc + 512, "Invalid coordinate transformation parameters.\n", 46); strncpy(doc_piximg_matrix + 0, "``double array[2][2]`` (read-only)\n\nMatrix containing the product of the ``CDELTia`` diagonal matrix and\nthe ``PCi_ja`` matrix.\n", 128); strncpy(doc_power + 0, "``double``\n\nThe exponent of the unit conversion.\n", 49); strncpy(doc_print_contents + 0, "print_contents()\n\nPrint the contents of the `~pywcs.Wcsprm` object to stdout. Probably\nonly useful for debugging purposes, and may be removed in the future.\n\nTo get a string of the contents, use `repr`.\n", 204); strncpy(doc_print_contents_tabprm + 0, "print_contents()\n\nPrint the contents of the `~pywcs._pywcs.Tabprm` object to stdout.\nProbably only useful for debugging purposes, and may be removed in the\nfuture.\n\nTo get a string of the contents, use `repr`.\n", 210); strncpy(doc_radesys + 0, "``string``\n\nThe equatorial or ecliptic coordinate system type, ``RADESYSa``.\n", 77); strncpy(doc_restfrq + 0, "``double``\n\nRest frequency (Hz) from ``RESTFRQa``.\n\nAn undefined value is represented by NaN.\n", 94); strncpy(doc_restwav + 0, "``double``\n\nRest wavelength (m) from ``RESTWAVa``.\n\nAn undefined value is represented by NaN.\n", 94); strncpy(doc_row + 0, "``int`` (read-only)\n\nTable row number.\n", 39); strncpy(doc_s2p + 0, "s2p(sky, origin)\n\nTransforms sky coordinates to pixel coordinates.\n\n- *sky*: double array[ncoord][nelem]. Array of sky coordinates, in\n decimal degrees.\n\n\n- *origin*: int. Specifies the origin of pixel values. The Fortran and\n FITS standards use an ori", 256); strncpy(doc_s2p + 256, "gin of 1. Numpy and C use array indexing\n with origin at 0.\n\n\nReturns a dictionary with the following keys:\n\n- *phi*: double array[ncoord]\n\n- *theta*: double array[ncoord]\n\n - Longitude and latitude in the native coordinate system of the\n projection,", 256); strncpy(doc_s2p + 512, " in degrees.\n\n- *imgcrd*: double array[ncoord][nelem]\n\n - Array of intermediate sky coordinates. For celestial axes,\n ``imgcrd[][self.lng]`` and ``imgcrd[][self.lat]`` are the\n projected *x*-, and *y*-coordinates, in pseudo \"degrees\". For\n quad", 256); strncpy(doc_s2p + 768, "cube projections with a ``CUBEFACE`` axis, the face number is\n also returned in ``imgcrd[][self.cubeface]``. For spectral axes,\n ``imgcrd[][self.spec]`` is the intermediate spectral coordinate,\n in SI units.\n\n- *pixcrd*: double array[ncoord][nele", 256); strncpy(doc_s2p + 1024, "m]\n\n - Array of pixel coordinates. Pixel coordinates are\n zero-based.\n\n- *stat*: int array[ncoord]\n\n - Status return value for each coordinate. ``0`` for\n success, ``1+`` for invalid pixel coordinate.\n\n**Exceptions:**\n\n- `MemoryError`: Memory allo", 256); strncpy(doc_s2p + 1280, "cation failed.\n\n- `SingularMatrixError`: Linear transformation matrix is singular.\n\n- `InconsistentAxisTypesError` Inconsistent or unrecognized coordinate\n axis types.\n\n- `ValueError`: Invalid parameter value.\n\n- `InvalidTransformError`: Invalid coordinat", 256); strncpy(doc_s2p + 1536, "e transformation\n parameters.\n\n- `InvalidTransformError`: Ill-conditioned coordinate transformation\n parameters.\n\n.. seealso::\n\n `~pywcs.Wcsprm.lat`, `~pywcs.Wcsprm.lng`\n", 174); strncpy(doc_scale + 0, "``double``\n\nThe scaling factor for the unit conversion.\n", 56); strncpy(doc_sense + 0, "``int array[M]``\n\nA vector of length `~pywcs._pywcs.Tabprm.M` whose elements indicate\nwhether the corresponding indexing vector is monotonically increasing\n(+1), or decreasing (-1).\n", 182); strncpy(doc_set + 0, "set()\n\nSets up a WCS object for use according to information supplied within\nit.\n\nNote that this routine need not be called directly; it will be invoked\nby `~pywcs.Wcsprm.p2s` and `~pywcs.Wcsprm.s2p` if necessary.\n\nSome attributes that are based on other a", 256); strncpy(doc_set + 256, "ttributes (such as\n`~pywcs.Wcsprm.lattyp` on `~pywcs.Wcsprm.ctype`) may not be correct\nuntil after `~pywcs.Wcsprm.set` is called.\n\n`~pywcs.Wcsprm.set` strips off trailing blanks in all string members.\n\n`~pywcs.Wcsprm.set` recognizes the ``NCP`` projection ", 256); strncpy(doc_set + 512, "and converts it\nto the equivalent ``SIN`` projection and it also recognizes ``GLS`` as\na synonym for ``SFL``. It does alias translation for the AIPS\nspectral types (``FREQ-LSR``, ``FELO-HEL``, etc.) but without changing\nthe input header keywords.\n\n**Excep", 256); strncpy(doc_set + 768, "tions:**\n\n- `MemoryError`: Memory allocation failed.\n\n- `SingularMatrixError`: Linear transformation matrix is singular.\n\n- `InconsistentAxisTypesError`: Inconsistent or unrecognized\n coordinate axis types.\n\n- `ValueError`: Invalid parameter value.\n\n- `In", 256); strncpy(doc_set + 1024, "validTransformError`: Invalid coordinate transformation\n parameters.\n\n- `InvalidTransformError`: Ill-conditioned coordinate transformation\n parameters.\n", 154); strncpy(doc_set_ps + 0, "set_ps(list)\n\nSets `PSi_ma` keywords for each *i* and *m*. The input must be a\nsequence of tuples of the form (*i*, *m*, *value*):\n\n - *i*: int. Axis number, as in ``PSi_ma``, (i.e. 1-relative)\n\n - *m*: int. Parameter number, as in ``PSi_ma``, (i.", 256); strncpy(doc_set_ps + 256, "e. 0-relative)\n\n - *value*: string. Parameter value.\n\n.. seealso::\n\n `~pywcs.Wcsprm.get_ps`\n", 98); strncpy(doc_set_pv + 0, "set_pv(list)\n\nSets `PVi_ma` keywords for each *i* and *m*. The input must be a\nsequence of tuples of the form (*i*, *m*, *value*):\n\n - *i*: int. Axis number, as in ``PVi_ma``, (i.e. 1-relative)\n\n - *m*: int. Parameter number, as in ``PVi_ma``, (i.", 256); strncpy(doc_set_pv + 256, "e. 0-relative)\n\n - *value*: float. Parameter value.\n\n.. seealso::\n\n `~pywcs.Wcsprm.get_pv`\n", 97); strncpy(doc_set_tabprm + 0, "set()\n\nAllocates memory for work arrays in the Tabprm class and sets up\nthe class according to information supplied within it.\n\nNote that this routine need not be called directly; it will be invoked by\nfunctions that need it.\n\n**Exceptions:**\n\n- `MemoryErr", 256); strncpy(doc_set_tabprm + 256, "or`: Memory allocation failed.\n\n- `InvalidTabularParameters`: Invalid tabular parameters.\n", 90); strncpy(doc_sip + 0, "Get/set the `~pywcs.Sip` object for performing `SIP`_ distortion\ncorrection.\n", 77); strncpy(doc_sip_foc2pix + 0, "sip_foc2pix(*foccrd, origin*) -> double array[ncoord][nelem]\n\nConvert focal plane coordinates to pixel coordinates using the `SIP`_\npolynomial distortion convention.\n\n- *foccrd*: double array[ncoord][nelem]. Array of focal plane\n coordinates.\n\n\n- *origin", 256); strncpy(doc_sip_foc2pix + 256, "*: int. Specifies the origin of pixel values. The Fortran and\n FITS standards use an origin of 1. Numpy and C use array indexing\n with origin at 0.\n\n\nReturns an array of pixel coordinates.\n\n**Exceptions:**\n\n- `MemoryError`: Memory allocation failed.\n\n-", 256); strncpy(doc_sip_foc2pix + 512, " `ValueError`: Invalid coordinate transformation parameters.\n", 61); strncpy(doc_sip_pix2foc + 0, "sip_pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem]\n\nConvert pixel coordinates to focal plane coordinates using the `SIP`_\npolynomial distortion convention.\n\n- *pixcrd*: double array[ncoord][nelem]. Array of pixel coordinates.\n\n\n- *origin*: int. ", 256); strncpy(doc_sip_pix2foc + 256, "Specifies the origin of pixel values. The Fortran and\n FITS standards use an origin of 1. Numpy and C use array indexing\n with origin at 0.\n\n\nReturns an array of focal plane coordinates.\n\n**Exceptions:**\n\n- `MemoryError`: Memory allocation failed.\n\n- `", 256); strncpy(doc_sip_pix2foc + 512, "ValueError`: Invalid coordinate transformation parameters.\n", 59); strncpy(doc_spcfix + 0, "spcfix() -> int\n\nTranslates AIPS-convention spectral coordinate types. {``FREQ``,\n``VELO``, ``FELO``}-{``OBS``, ``HEL``, ``LSR``} (e.g. ``FREQ-LSR``,\n``VELO-OBS``, ``FELO-HEL``)\n\nReturns ``0`` for success; ``-1`` if no change required.\n", 237); strncpy(doc_spec + 0, "``int`` (read-only)\n\nThe index containing the spectral axis values.\n", 68); strncpy(doc_specsys + 0, "``string``\n\nSpectral reference frame (standard of rest), ``SPECSYSa``.\n\n.. seealso::\n\n `~pywcs.Wcsprm.ssysobs`, `~pywcs.Wcsprm.velosys`.\n", 139); strncpy(doc_sptr + 0, "sptr(ctype, i=-1)\n\nTranslates the spectral axis in a WCS object. For example, a ``FREQ``\naxis may be translated into ``ZOPT-F2W`` and vice versa.\n\n- *ctype*: string. Required spectral ``CTYPEia``, maximum of 8\n characters. The first four characters are", 256); strncpy(doc_sptr + 256, " required to be given and\n are never modified. The remaining four, the algorithm code, are\n completely determined by, and must be consistent with, the first\n four characters. Wildcarding may be used, i.e. if the final three\n characters are specified", 256); strncpy(doc_sptr + 512, " as ``\"???\"``, or if just the eighth\n character is specified as ``\"?\"``, the correct algorithm code will\n be substituted and returned.\n\n- *i*: int. Index of the spectral axis (0-relative). If ``i < 0`` (or not\n provided), it will be set to the first s", 256); strncpy(doc_sptr + 768, "pectral axis identified\n from the ``CTYPE`` keyvalues in the FITS header.\n\n**Exceptions:**\n\n- `MemoryError`: Memory allocation failed.\n\n- `SingularMatrixError`: Linear transformation matrix is singular.\n\n- `InconsistentAxisTypesError`: Inconsistent or unr", 256); strncpy(doc_sptr + 1024, "ecognized\n coordinate axis types.\n\n- `ValueError`: Invalid parameter value.\n\n- `InvalidTransformError`: Invalid coordinate transformation\n parameters.\n\n- `InvalidTransformError`: Ill-conditioned coordinate transformation\n parameters.\n\n- `InvalidSubimage", 256); strncpy(doc_sptr + 1280, "SpecificationError`: Invalid subimage specification\n (no spectral axis).\n", 74); strncpy(doc_ssysobs + 0, "``string``\n\nThe actual spectral reference frame in which there is no differential\nvariation in the spectral coordinate across the field-of-view,\n``SSYSOBSa``.\n\n.. seealso::\n\n `~pywcs.Wcsprm.specsys`, `~pywcs.Wcsprm.velosys`\n", 226); strncpy(doc_ssyssrc + 0, "``string``\n\nThe spectral reference frame (standard of rest) in which the redshift\nwas measured, ``SSYSSRCa``.\n", 110); strncpy(doc_sub + 0, "sub(axes)\n\nExtracts the coordinate description for a subimage from a `~pywcs.WCS`\nobject.\n\nThe world coordinate system of the subimage must be separable in the\nsense that the world coordinates at any point in the subimage must\ndepend only on the pixel coor", 256); strncpy(doc_sub + 256, "dinates of the axes extracted. In\npractice, this means that the ``PCi_ja`` matrix of the original image\nmust not contain non-zero off-diagonal terms that associate any of the\nsubimage axes with any of the non-subimage axes.\n\n`sub` can also add axes to a w", 256); strncpy(doc_sub + 512, "csprm struct. The new axes will be\ncreated using the defaults set by the Wcsprm constructor which produce\na simple, unnamed, linear axis with world coordinates equal to the\npixel coordinate. These default values can be changed before\ninvoking `set`.\n\nNo ", 256); strncpy(doc_sub + 768, "checks are performed to verify that the coordinate axes are\nconsistent, that is done by `set`.\n\n- *axes*: int or a sequence.\n\n - If an int, include the first *N* axes in their original\n order.\n\n - If a sequence, may contain a combination of image axis", 256); strncpy(doc_sub + 1024, " numbers\n (1-relative) or special axis identifiers (see below). Order is\n significant; ``axes[0]`` is the axis number of the input image\n that corresponds to the first axis in the subimage, etc. Use an\n axis number of 0 to create a new axis u", 256); strncpy(doc_sub + 1280, "sing the defaults.\n\n - If ``0``, ``[]`` or ``None``, do a deep copy.\n\nCoordinate axes types may be specified using either strings or\nspecial integer constants. The available types are:\n\n - ``\'longitude\'`` / ``WCSSUB_LONGITUDE``: Celestial longitude\n\n -", 256); strncpy(doc_sub + 1536, " ``\'latitude\'`` / ``WCSSUB_LATITUDE``: Celestial latitude\n\n - ``\'cubeface\'`` / ``WCSSUB_CUBEFACE``: Quadcube ``CUBEFACE`` axis\n\n - ``\'spectral\'`` / ``WCSSUB_SPECTRAL``: Spectral axis\n\n - ``\'stokes\'`` / ``WCSSUB_STOKES``: Stokes axis\n\n - ``\'celestial\'``", 256); strncpy(doc_sub + 1792, " / ``WCSSUB_CELESTIAL``: An alias for the\n combination of ``\'longitude\'``, ``\'latitude\'`` and ``\'cubeface\'``.\n\nReturns a `~pywcs.WCS` object, which is a deep copy of the original\nobject.\n\n**Exceptions:**\n\n- `MemoryError`: Memory allocation failed.\n\n- `I", 256); strncpy(doc_sub + 2048, "nvalidSubimageSpecificationError`: Invalid subimage specification\n (no spectral axis).\n\n- `NonseparableSubimageCoordinateSystem`: Non-separable subimage\n coordinate system.\n\n.. note::\n\n Combinations of subimage axes of particular types may be extracted\n", 256); strncpy(doc_sub + 2304, " in the same order as they occur in the input image by combining the\n integer constants with the \'binary or\' (``|``) operator. For\n example::\n\n wcs.sub([WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_SPECTRAL])\n\n would extract the longitude, latitude,", 256); strncpy(doc_sub + 2560, " and spectral axes in the same\n order as the input image. If one of each were present, the\n resulting object would have three dimensions.\n\n For convenience, ``WCSSUB_CELESTIAL`` is defined as the combination\n ``WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCS", 256); strncpy(doc_sub + 2816, "SUB_CUBEFACE``.\n\n The codes may also be negated to extract all but the types\n specified, for example::\n\n wcs.sub([\n WCSSUB_LONGITUDE,\n WCSSUB_LATITUDE,\n WCSSUB_CUBEFACE,\n -(WCSSUB_SPECTRAL | WCSSUB_STOKES)])\n\n The last of these sp", 256); strncpy(doc_sub + 3072, "ecifies all axis types other than spectral or\n Stokes. Extraction is done in the order specified by `axes`, i.e. a\n longitude axis (if present) would be extracted first (via\n ``axes[0]``) and not subsequently (via ``axes[3]``). Likewise for\n the lati", 256); strncpy(doc_sub + 3328, "tude and cubeface axes in this example.\n\n The number of dimensions in the returned object may be less than or\n greater than the length of `axes`. However, it will never exceed\n the number of axes in the input image.\n", 220); strncpy(doc_tab + 0, "``list of Tabprm``\n\nA list of tabular coordinate objects associated with this WCS.\n", 83); strncpy(doc_theta0 + 0, "``double``\n\nThe native longitude of the fiducial point, i.e. the point whose\ncelestial coordinates are given in ``ref[1:2]``. If undefined (NaN)\nthe initialization routine, `~pywcs.Wcsprm.set`, will set this to a\nprojection-specific default.\n\n.. seealso::", 256); strncpy(doc_theta0 + 256, "\n\n `~pywcs.Wcsprm.phi0`\n", 26); strncpy(doc_to_header + 0, "to_header(relax=False)\n\n`to_header` translates a WCS object into a FITS header.\n\n - If the `~pywcs.Wcsprm.colnum` member is non-zero then a binary\n table image array header will be produced.\n\n - Otherwise, if the `~pywcs.Wcsprm.colax` member is ", 256); strncpy(doc_to_header + 256, "set non-zero\n then a pixel list header will be produced.\n\n - Otherwise, a primary image or image extension header will be\n produced.\n\nThe output header will almost certainly differ from the input in a\nnumber of respects:\n\n 1. The output hea", 256); strncpy(doc_to_header + 512, "der only contains WCS-related keywords. In\n particular, it does not contain syntactically-required keywords\n such as ``SIMPLE``, ``NAXIS``, ``BITPIX``, or ``END``.\n\n 2. Deprecated (e.g. ``CROTAn``) or non-standard usage will be\n trans", 256); strncpy(doc_to_header + 768, "lated to standard (this is partially dependent on whether\n `fix` was applied).\n\n 3. Quantities will be converted to the units used internally,\n basically SI with the addition of degrees.\n\n 4. Floating-point quantities may be given to a di", 256); strncpy(doc_to_header + 1024, "fferent decimal\n precision.\n\n 5. Elements of the ``PCi_j`` matrix will be written if and only if\n they differ from the unit matrix. Thus, if the matrix is unity\n then no elements will be written.\n\n 6. Additional keywords such as ``", 256); strncpy(doc_to_header + 1280, "WCSAXES``, ``CUNITia``,\n ``LONPOLEa`` and ``LATPOLEa`` may appear.\n\n 7. The original keycomments will be lost, although\n `~pywcs.Wcsprm.to_header` tries hard to write meaningful\n comments.\n\n 8. Keyword order may be changed.\n\nKeyword", 256); strncpy(doc_to_header + 1536, "s can be translated between the image array, binary table, and\npixel lists forms by manipulating the `~pywcs.Wcsprm.colnum` or\n`~pywcs.Wcsprm.colax` members of the `~pywcs.Wcsprm.WCS` object.\n\n- *relax*: Degree of permissiveness:\n\n - `False`: Recognize ", 256); strncpy(doc_to_header + 1792, "only FITS keywords defined by the published\n WCS standard.\n\n - `True`: Admit all recognized informal extensions of the WCS\n standard.\n\n - `int`: a bit field selecting specific extensions to write.\n See :ref:`relaxwrite` for details.\n\nR", 256); strncpy(doc_to_header + 2048, "eturns a raw FITS header as a string.\n", 38); strncpy(doc_ttype + 0, "``str`` (read-only)\n\n``TTYPEn`` identifying the column of the binary table that contains\nthe wcstab array.\n", 107); strncpy(doc_unitfix + 0, "unitfix(translate_units=\'\')\n\nTranslates non-standard ``CUNITia`` keyvalues. For example, ``DEG`` ->\n``deg``, also stripping off unnecessary whitespace.\n\n- *translate_units*: string. Do potentially unsafe translations of\n non-standard unit strings.\n\n Al", 256); strncpy(doc_unitfix + 256, "though ``\"S\"`` is commonly used to represent seconds, its\n recognizes ``\"S\"`` formally as Siemens, however rarely that may be\n translation to ``\"s\"`` is potentially unsafe since the standard\n used. The same applies to ``\"H\"`` for hours (Henry), and ``\"", 256); strncpy(doc_unitfix + 512, "D\"``\n for days (Debye).\n\n This string controls what to do in such cases, and is\n case-insensitive.\n\n - If the string contains ``\"s\"``, translate ``\"S\"`` to ``\"s\"``.\n\n - If the string contains ``\"h\"``, translate ``\"H\"`` to ``\"h\"``.\n\n - If the string c", 256); strncpy(doc_unitfix + 768, "ontains ``\"d\"``, translate ``\"D\"`` to ``\"d\"``.\n\n Thus ``\'\'`` doesn\'t do any unsafe translations, whereas ``\'shd\'``\n does all of them.\n\n See :ref:`fits-unit` for more information.\n\nReturns ``0`` for success; ``-1`` if no change required.\n", 240); strncpy(doc_velangl + 0, "``double``\n\nThe angle in degrees that should be used to decompose an observed\nvelocity into radial and transverse components.\n\nAn undefined value is represented by NaN.\n", 169); strncpy(doc_velosys + 0, "``double``\n\nThe relative radial velocity (m/s) between the observer and the\nselected standard of rest in the direction of the celestial reference\ncoordinate, ``VELOSYSa``.\n\nAn undefined value is represented by NaN.\n\n.. seealso::\n\n `~pywcs.Wcsprm.specsys`", 256); strncpy(doc_velosys + 256, ", `~pywcs.Wcsprm.ssysobs`\n", 26); strncpy(doc_want + 0, "The name of the unit being converted to.\n\nThis value always uses standard unit names, even if the\n`UnitConverter` was initialized with a non-standard unit name.\n", 161); strncpy(doc_wcs + 0, "A `~pywcs.Wcsprm` object to perform the basic `wcslib`_ WCS\ntranformation.\n", 75); strncpy(doc_zsource + 0, "``double``\n\nThe redshift, ``ZSOURCEa``, of the source.\n\nAn undefined value is represented by NaN.\n", 98); } pywcs-1.12/src/docstrings.h0000644001153600020070000000772112310355701017766 0ustar cslocumSTSCI\science00000000000000 /* DO NOT EDIT! This file is autogenerated by setup.p. To edit its contents, edit doc/docstrings.py */ #ifndef __DOCSTRINGS_H__ #define __DOCSTRINGS_H__ void fill_docstrings(void); extern char doc_DistortionLookupTable[369]; extern char doc_K[152]; extern char doc_M[56]; extern char doc_Sip[1017]; extern char doc_Tabprm[226]; extern char doc_UnitConverter[2216]; extern char doc_Wcs[482]; extern char doc_Wcsprm[1979]; extern char doc_Wtbarr[195]; extern char doc_a[222]; extern char doc_a_order[94]; extern char doc_all_pix2sky[1204]; extern char doc_alt[236]; extern char doc_ap[225]; extern char doc_ap_order[96]; extern char doc_axis_types[916]; extern char doc_b[222]; extern char doc_b_order[94]; extern char doc_bp[225]; extern char doc_bp_order[96]; extern char doc_cd[1002]; extern char doc_cdelt[302]; extern char doc_cel_offset[153]; extern char doc_celfix[136]; extern char doc_cname[76]; extern char doc_colax[91]; extern char doc_colnum[235]; extern char doc_convert[120]; extern char doc_coord[278]; extern char doc_copy[39]; extern char doc_cpdis1[99]; extern char doc_cpdis2[99]; extern char doc_crder[123]; extern char doc_crota[998]; extern char doc_crpix[88]; extern char doc_crval[93]; extern char doc_crval_tabprm[131]; extern char doc_csyer[132]; extern char doc_ctype[222]; extern char doc_cubeface[1209]; extern char doc_cunit[1161]; extern char doc_cylfix[127]; extern char doc_data[72]; extern char doc_data_wtbarr[51]; extern char doc_dateavg[146]; extern char doc_dateobs[127]; extern char doc_datfix[453]; extern char doc_delta[195]; extern char doc_det2im[57]; extern char doc_det2im1[96]; extern char doc_det2im2[96]; extern char doc_dims[98]; extern char doc_equinox[242]; extern char doc_extlev[72]; extern char doc_extnam[73]; extern char doc_extrema[439]; extern char doc_extver[72]; extern char doc_find_all_wcs[846]; extern char doc_fix[1382]; extern char doc_get_cdelt[446]; extern char doc_get_offset[103]; extern char doc_get_pc[385]; extern char doc_get_ps[363]; extern char doc_get_pv[647]; extern char doc_has_cd[859]; extern char doc_has_cdi_ja[96]; extern char doc_has_crota[614]; extern char doc_has_crotaia[101]; extern char doc_has_pc[176]; extern char doc_has_pci_ja[96]; extern char doc_have[163]; extern char doc_i[40]; extern char doc_imgpix_matrix[143]; extern char doc_is_unity[102]; extern char doc_kind[129]; extern char doc_lat[89]; extern char doc_latpole[75]; extern char doc_lattyp[227]; extern char doc_lng[90]; extern char doc_lngtyp[228]; extern char doc_lonpole[76]; extern char doc_m[58]; extern char doc_map[941]; extern char doc_mix[4642]; extern char doc_mjdavg[189]; extern char doc_mjdobs[189]; extern char doc_name[74]; extern char doc_naxis[760]; extern char doc_nc[121]; extern char doc_ndim[66]; extern char doc_obsgeo[186]; extern char doc_offset[47]; extern char doc_p0[196]; extern char doc_p2s[1821]; extern char doc_p4_pix2foc[556]; extern char doc_pc[1069]; extern char doc_phi0[283]; extern char doc_pix2foc[558]; extern char doc_piximg_matrix[128]; extern char doc_power[49]; extern char doc_print_contents[204]; extern char doc_print_contents_tabprm[210]; extern char doc_radesys[77]; extern char doc_restfrq[94]; extern char doc_restwav[94]; extern char doc_row[39]; extern char doc_s2p[1710]; extern char doc_scale[56]; extern char doc_sense[182]; extern char doc_set[1178]; extern char doc_set_ps[354]; extern char doc_set_pv[353]; extern char doc_set_tabprm[346]; extern char doc_sip[77]; extern char doc_sip_foc2pix[573]; extern char doc_sip_pix2foc[571]; extern char doc_spcfix[237]; extern char doc_spec[68]; extern char doc_specsys[139]; extern char doc_sptr[1354]; extern char doc_ssysobs[226]; extern char doc_ssyssrc[110]; extern char doc_sub[3548]; extern char doc_tab[83]; extern char doc_theta0[282]; extern char doc_to_header[2086]; extern char doc_ttype[107]; extern char doc_unitfix[1008]; extern char doc_velangl[169]; extern char doc_velosys[282]; extern char doc_want[161]; extern char doc_wcs[75]; extern char doc_zsource[98]; #endif pywcs-1.12/src/isnan.h0000644001153600020070000000223612310355626016721 0ustar cslocumSTSCI\science00000000000000#ifndef __ISNAN_H__ #define __ISNAN_H__ #include "wcsconfig.h" typedef unsigned WCSLIB_INT64 Int64; #if !defined(U64) #define U64(u) (* (Int64 *) &(u) ) #endif /* U64 */ #if !defined(isnan64) #if !defined(_MSC_VER) #define isnan64(u) \ ( (( U64(u) & 0x7ff0000000000000LL) == 0x7ff0000000000000LL) && ((U64(u) & 0x000fffffffffffffLL) != 0)) ? 1:0 #else #define isnan64(u) \ ( (( U64(u) & 0x7ff0000000000000i64) == 0x7ff0000000000000i64) && ((U64(u) & 0x000fffffffffffffi64) != 0)) ? 1:0 #endif #endif /* isnan64 */ #if !defined(isinf64) #if !defined(_MSC_VER) #define isinf64(u) \ ( (( U64(u) & 0x7ff0000000000000LL) == 0x7ff0000000000000LL) && ((U64(u) & 0x000fffffffffffffLL) == 0)) ? 1:0 #else #define isinf64(u) \ ( (( U64(u) & 0x7ff0000000000000i64) == 0x7ff0000000000000i64) && ((U64(u) & 0x000fffffffffffffi64) == 0)) ? 1:0 #endif #endif /* isinf64 */ #if !defined(isfinite64) #if !defined(_MSC_VER) #define isfinite64(u) \ ( (( U64(u) & 0x7ff0000000000000LL) != 0x7ff0000000000000LL)) ? 1:0 #else #define isfinite64(u) \ ( (( U64(u) & 0x7ff0000000000000i64) != 0x7ff0000000000000i64)) ? 1:0 #endif #endif /* isfinite64 */ #endif /* __ISNAN_H__ */ pywcs-1.12/src/pipeline.c0000644001153600020070000001714712310355626017420 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #include "pipeline.h" #include "util.h" #include #include #include #define PIP_ERRMSG(status) WCSERR_SET(status) void pipeline_clear( pipeline_t* pipeline) { pipeline->det2im[0] = NULL; pipeline->det2im[1] = NULL; pipeline->sip = NULL; pipeline->cpdis[0] = NULL; pipeline->cpdis[1] = NULL; pipeline->wcs = NULL; pipeline->err = NULL; } void pipeline_init( pipeline_t* pipeline, /*@shared@*/ distortion_lookup_t** det2im /* [2] */, /*@shared@*/ sip_t* sip, /*@shared@*/ distortion_lookup_t** cpdis /* [2] */, /*@shared@*/ struct wcsprm* wcs) { pipeline->det2im[0] = det2im[0]; pipeline->det2im[1] = det2im[1]; pipeline->sip = sip; pipeline->cpdis[0] = cpdis[0]; pipeline->cpdis[1] = cpdis[1]; pipeline->wcs = wcs; pipeline->err = NULL; } void pipeline_free( pipeline_t* pipeline) { free(pipeline->err); pipeline->err = NULL; } int pipeline_all_pixel2world( pipeline_t* pipeline, const unsigned int ncoord, const unsigned int nelem, const double* const pixcrd /* [ncoord][nelem] */, double* world /* [ncoord][nelem] */) { static const char* function = "pipeline_all_pixel2world"; const double* wcs_input = NULL; double* wcs_output = NULL; int has_det2im; int has_sip; int has_p4; int has_wcs; int status = 1; struct wcserr **err; /* Temporary buffer for performing WCS calculations */ unsigned char* buffer = NULL; unsigned char* mem = NULL; /*@null@*/ double* tmp; /*@null@*/ double* imgcrd; /*@null@*/ double* phi; /*@null@*/ double* theta; /*@null@*/ int* stat; if (pipeline == NULL || pixcrd == NULL || world == NULL) { return WCSERR_NULL_POINTER; } err = &(pipeline->err); has_det2im = pipeline->det2im[0] != NULL || pipeline->det2im[1] != NULL; has_sip = pipeline->sip != NULL; has_p4 = pipeline->cpdis[0] != NULL || pipeline->cpdis[1] != NULL; has_wcs = pipeline->wcs != NULL; if (has_det2im || has_sip || has_p4) { if (nelem != 2) { status = wcserr_set( PIP_ERRMSG(WCSERR_BAD_COORD_TRANS), "Data must be 2-dimensional when Paper IV lookup table or SIP transform is present."); goto exit; } } if (has_wcs) { buffer = mem = malloc( ncoord * nelem * sizeof(double) + /* imgcrd */ ncoord * sizeof(double) + /* phi */ ncoord * sizeof(double) + /* theta */ ncoord * nelem * sizeof(double) + /* tmp */ ncoord * nelem * sizeof(int) /* stat */ ); if (buffer == NULL) { status = wcserr_set( PIP_ERRMSG(WCSERR_MEMORY), "Memory allocation failed"); goto exit; } imgcrd = (double *)mem; mem += ncoord * nelem * sizeof(double); phi = (double *)mem; mem += ncoord * sizeof(double); theta = (double *)mem; mem += ncoord * sizeof(double); tmp = (double *)mem; mem += ncoord * nelem * sizeof(double); stat = (int *)mem; /* mem += ncoord * nelem * sizeof(int); */ if (has_det2im || has_sip || has_p4) { status = pipeline_pix2foc(pipeline, ncoord, nelem, pixcrd, tmp); if (status != 0) { goto exit; } wcs_input = tmp; wcs_output = world; } else { wcs_input = pixcrd; wcs_output = world; } if ((status = wcsp2s(pipeline->wcs, (int)ncoord, (int)nelem, wcs_input, imgcrd, phi, theta, wcs_output, stat))) { wcserr_copy(pipeline->wcs->err, pipeline->err); } if (status == 8) { set_invalid_to_nan((int)ncoord, (int)nelem, wcs_output, stat); } } else { if (has_det2im || has_sip || has_p4) { status = pipeline_pix2foc(pipeline, ncoord, nelem, pixcrd, world); } } exit: free(buffer); return status; } int pipeline_pix2foc( pipeline_t* pipeline, const unsigned int ncoord, const unsigned int nelem, const double* const pixcrd /* [ncoord][nelem] */, double* foc /* [ncoord][nelem] */) { static const char* function = "pipeline_pix2foc"; int has_det2im; int has_sip; int has_p4; const double * input = NULL; double * tmp = NULL; int status = 1; struct wcserr **err; assert(nelem == 2); assert(pixcrd != foc); if (pipeline == NULL || pixcrd == NULL || foc == NULL) { return WCSERR_NULL_POINTER; } err = &(pipeline->err); has_det2im = pipeline->det2im[0] != NULL || pipeline->det2im[1] != NULL; has_sip = pipeline->sip != NULL; has_p4 = pipeline->cpdis[0] != NULL || pipeline->cpdis[1] != NULL; if (has_det2im) { if (has_sip || has_p4) { tmp = malloc(ncoord * nelem * sizeof(double)); if (tmp == NULL) { status = wcserr_set( PIP_ERRMSG(WCSERR_MEMORY), "Memory allocation failed"); goto exit; } memcpy(tmp, pixcrd, sizeof(double) * ncoord * nelem); status = p4_pix2deltas(2, (void*)pipeline->det2im, ncoord, pixcrd, tmp); if (status) { wcserr_set(PIP_ERRMSG(WCSERR_NULL_POINTER), "NULL pointer passed"); goto exit; } input = tmp; memcpy(foc, input, sizeof(double) * ncoord * nelem); } else { memcpy(foc, pixcrd, sizeof(double) * ncoord * nelem); status = p4_pix2deltas(2, (void*)pipeline->det2im, ncoord, pixcrd, foc); if (status) { wcserr_set(PIP_ERRMSG(WCSERR_NULL_POINTER), "NULL pointer passed"); goto exit; } } } else { /* Copy pixcrd to foc as a starting point. The "deltas" functions below will undistort from there */ memcpy(foc, pixcrd, sizeof(double) * ncoord * nelem); input = pixcrd; } if (has_sip) { status = sip_pix2deltas(pipeline->sip, 2, ncoord, input, foc); if (status) { wcserr_copy(pipeline->sip->err, pipeline->err); goto exit; } } if (has_p4) { status = p4_pix2deltas(2, (void*)pipeline->cpdis, ncoord, input, foc); if (status) { wcserr_set(PIP_ERRMSG(WCSERR_NULL_POINTER), "NULL pointer passed"); goto exit; } } status = 0; exit: free(tmp); return status; } pywcs-1.12/src/pipeline.h0000644001153600020070000000731412310355626017420 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __PIPELINE_H__ #define __PIPELINE_H__ #include "sip.h" #include "distortion.h" #include "wcs.h" typedef struct { distortion_lookup_t* det2im[2]; /*@shared@*/ /*@null@*/ sip_t* sip; distortion_lookup_t* cpdis[2]; /*@shared@*/ /*@null@*/ struct wcsprm* wcs; struct wcserr* err; } pipeline_t; /** Initialize all the values in a pipeline_t to NULL. */ void pipeline_clear( pipeline_t* pipeline); /** Set all the values of a pipeline_t. */ void pipeline_init( pipeline_t* pipeline, /*@shared@*/ distortion_lookup_t** det2im /* [2] */, /*@shared@*/ sip_t* sip, /*@shared@*/ distortion_lookup_t** cpdis /* [2] */, /*@shared@*/ struct wcsprm* wcs); /** Free all the temporary buffers of a pipeline_t. It does not free the underlying sip_t, distortion_lookup_t or wcsprm objects. */ void pipeline_free( pipeline_t* pipeline); /** Perform the entire pipeline from pixel coordinates to world coordinates, in the following order: - Detector to image plane correction (optionally) - SIP distortion correction (optionally) - Paper IV distortion correction (optionally) - wcslib WCS transformation @param ncoord: @param nelem: @param pixcrd [in]: Array of pixel coordinates. @param world [out]: Array of sky coordinates (output). @return: A wcslib error code. */ int pipeline_all_pixel2world( pipeline_t* pipeline, const unsigned int ncoord, const unsigned int nelem, const double* const pixcrd /* [ncoord][nelem] */, double* world /* [ncoord][nelem] */); /** Perform just the distortion correction part of the pipeline from pixel coordinates to focal plane coordinates. - Detector to image plane correction (optionally) - SIP distortion correction (optionally) - Paper IV distortion correction (optionally) @param ncoord: @param nelem: @param pixcrd [in]: Array of pixel coordinates. @param foc [out]: Array of focal plane coordinates. @return: A wcslib error code. */ int pipeline_pix2foc( pipeline_t* pipeline, const unsigned int ncoord, const unsigned int nelem, const double* const pixcrd /* [ncoord][nelem] */, double* foc /* [ncoord][nelem] */); #endif pywcs-1.12/src/pyutil.c0000644001153600020070000005345712310355626017145 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #define NO_IMPORT_ARRAY /* util.h must be imported first */ #include "pyutil.h" #include "wcsfix.h" #include "wcsprintf.h" #include "wcsunits.h" /*@null@*/ static pywcs_inline PyObject* _PyArrayProxy_New( /*@shared@*/ PyObject* self, int nd, const npy_intp* dims, int typenum, const void* data, const int flags) { PyArray_Descr* type_descr = NULL; PyObject* result = NULL; type_descr = (PyArray_Descr*)PyArray_DescrFromType(typenum); if (type_descr == NULL) { return NULL; } result = (PyObject*)PyArray_NewFromDescr( &PyArray_Type, type_descr, nd, (npy_intp*)dims, NULL, (void*)data, NPY_C_CONTIGUOUS | flags, NULL); if (result == NULL) { return NULL; } Py_INCREF(self); PyArray_BASE(result) = (PyObject*)self; return result; } /*@null@*/ PyObject* PyArrayProxy_New( /*@shared@*/ PyObject* self, int nd, const npy_intp* dims, int typenum, const void* data) { return _PyArrayProxy_New(self, nd, dims, typenum, data, NPY_WRITEABLE); } /*@null@*/ PyObject* PyArrayReadOnlyProxy_New( /*@shared@*/ PyObject* self, int nd, const npy_intp* dims, int typenum, const void* data) { return _PyArrayProxy_New(self, nd, dims, typenum, data, 0); } void preoffset_array( PyArrayObject* array, int value) { npy_intp size; double *data; if (value == 1) { return; } size = PyArray_Size((PyObject*)array); data = (double*)PyArray_DATA(array); offset_c_array(data, size, (double)(1 - value)); } void unoffset_array( PyArrayObject* array, int value) { npy_intp size; double *data; if (value == 1) { return; } size = PyArray_Size((PyObject*)array); data = (double*)PyArray_DATA(array); offset_c_array(data, size, (double)-(1 - value)); } void copy_array_to_c_double( PyArrayObject* array, double* dest) { npy_intp size = 1; double* data = NULL; size = PyArray_Size((PyObject*)array); data = (double*)PyArray_DATA(array); memcpy(dest, data, size * sizeof(double)); } void copy_array_to_c_int( PyArrayObject* array, int* dest) { npy_intp size = 1; int* data = NULL; size = PyArray_Size((PyObject*)array); data = (int*)PyArray_DATA(array); memcpy(dest, data, size * sizeof(int)); } int is_null( /*@null@*/ void *p) { if (p == NULL) { PyErr_SetString(PyExc_AssertionError, "Underlying object is NULL."); return 1; } return 0; } /* wcslib represents undefined values using its own special constant, UNDEFINED. To be consistent with the Pythonic way of doing things, it's nicer to represent undefined values using NaN. Unfortunately, in order to get nice mutable arrays in Python, Python must be able to edit the wcsprm values directly. The solution is to store NaNs in the struct "canonically", but convert those NaNs to/from UNDEFINED around every call into a wcslib function. It's not as computationally expensive as it sounds, as all these arrays are quite small. */ static pywcs_inline void wcsprm_fix_values( struct wcsprm* x, value_fixer_t value_fixer) { unsigned int naxis = (unsigned int)x->naxis; value_fixer(x->cd, 4); value_fixer(x->cdelt, naxis); value_fixer(x->crder, naxis); value_fixer(x->crota, naxis); value_fixer(x->crpix, naxis); value_fixer(x->crval, naxis); value_fixer(x->csyer, naxis); value_fixer(&x->equinox, 1); value_fixer(&x->latpole, 1); value_fixer(&x->lonpole, 1); value_fixer(&x->mjdavg, 1); value_fixer(&x->mjdobs, 1); value_fixer(x->obsgeo, 3); value_fixer(&x->cel.phi0, 1); value_fixer(&x->restfrq, 1); value_fixer(&x->restwav, 1); value_fixer(&x->cel.theta0, 1); value_fixer(&x->velangl, 1); value_fixer(&x->velosys, 1); value_fixer(&x->zsource, 1); } void wcsprm_c2python( /*@null@*/ struct wcsprm* x) { if (x != NULL) { wcsprm_fix_values(x, &undefined2nan); } } void wcsprm_python2c( /*@null@*/ struct wcsprm* x) { if (x != NULL) { wcsprm_fix_values(x, &nan2undefined); } } /*************************************************************************** * Exceptions * ***************************************************************************/ PyObject* WcsExc_SingularMatrix; PyObject* WcsExc_InconsistentAxisTypes; PyObject* WcsExc_InvalidTransform; PyObject* WcsExc_InvalidCoordinate; PyObject* WcsExc_NoSolution; PyObject* WcsExc_InvalidSubimageSpecification; PyObject* WcsExc_NonseparableSubimageCoordinateSystem; PyObject* WcsExc_NoWcsKeywordsFound; PyObject* WcsExc_InvalidTabularParameters; /* This is an array mapping the wcs status codes to Python exception * types. The exception string is stored as part of wcslib itself in * wcs_errmsg. */ PyObject** wcs_errexc[14]; #define DEFINE_EXCEPTION(exc) \ WcsExc_##exc = PyErr_NewException("_pywcs." #exc "Error", PyExc_ValueError, NULL); \ if (WcsExc_##exc == NULL) \ return 1; \ PyModule_AddObject(m, #exc "Error", WcsExc_##exc); \ int _define_exceptions( PyObject* m) { DEFINE_EXCEPTION(SingularMatrix); DEFINE_EXCEPTION(InconsistentAxisTypes); DEFINE_EXCEPTION(InvalidTransform); DEFINE_EXCEPTION(InvalidCoordinate); DEFINE_EXCEPTION(NoSolution); DEFINE_EXCEPTION(InvalidSubimageSpecification); DEFINE_EXCEPTION(NonseparableSubimageCoordinateSystem); DEFINE_EXCEPTION(NoWcsKeywordsFound); DEFINE_EXCEPTION(InvalidTabularParameters); return 0; } const char* wcslib_get_error_message(int status) { return wcs_errmsg[status]; } void wcserr_to_python_exc(const struct wcserr *err) { PyObject *exc; if (err == NULL) { PyErr_SetString(PyExc_RuntimeError, "NULL error object in wcslib"); } else { if (err->status > 0 && err->status <= WCS_ERRMSG_MAX) { exc = *wcs_errexc[err->status]; } else { exc = PyExc_RuntimeError; } /* This is technically not thread-safe -- make sure we have the GIL */ wcsprintf_set(NULL); wcserr_prt(err, ""); PyErr_SetString(exc, wcsprintf_buf()); } } void wcs_to_python_exc(const struct wcsprm *wcs) { PyObject* exc; const struct wcserr *err = wcs->err; if (err == NULL) { PyErr_SetString(PyExc_RuntimeError, "NULL error object in wcslib"); } else { if (err->status > 0 && err->status < WCS_ERRMSG_MAX) { exc = *wcs_errexc[err->status]; } else { exc = PyExc_RuntimeError; } /* This is technically not thread-safe -- make sure we have the GIL */ wcsprintf_set(NULL); wcsperr(wcs, ""); PyErr_SetString(exc, wcsprintf_buf()); } } void wcserr_fix_to_python_exc(const struct wcserr *err) { PyObject *exc; if (err == NULL) { PyErr_SetString(PyExc_RuntimeError, "NULL error object in wcslib"); } else { if (err->status > 0 && err->status <= FIXERR_NO_REF_PIX_VAL) { exc = PyExc_ValueError; } else { exc = PyExc_RuntimeError; } /* This is technically not thread-safe -- make sure we have the GIL */ wcsprintf_set(NULL); wcserr_prt(err, ""); PyErr_SetString(exc, wcsprintf_buf()); } } void wcserr_units_to_python_exc(const struct wcserr *err) { PyObject *exc; if (err == NULL) { PyErr_SetString(PyExc_RuntimeError, "NULL error object in wcslib"); } else { if (err->status > 0 && err->status <= UNITSERR_UNSAFE_TRANS) { exc = PyExc_ValueError; } else { exc = PyExc_RuntimeError; } /* This is technically not thread-safe -- make sure we have the GIL */ wcsprintf_set(NULL); wcserr_prt(err, ""); PyErr_SetString(exc, wcsprintf_buf()); } } /*************************************************************************** Property helpers ***************************************************************************/ #define SHAPE_STR_LEN 128 /* Helper function to display the desired shape of an array as a string, eg. 2x2 */ static void shape_to_string( npy_int ndims, const npy_intp* dims, char* str /* [SHAPE_STR_LEN] */) { int i; char value[32]; /* More than large enough to hold string rep of a 64-bit integer (way overkill) */ if (ndims > 3) { strncpy(str, "ERROR", 6); return; } str[0] = 0; for (i = 0; i < ndims; ++i) { snprintf(value, 32, "%d", (int)dims[i]); strncat(str, value, 32); if (i != ndims - 1) { strncat(str, "x", 2); } } } /* get_string is inlined */ int set_string( const char* propname, PyObject* value, char* dest, Py_ssize_t maxlen) { char* buffer; Py_ssize_t len; if (check_delete(propname, value)) { return -1; } #if PY3K if (PyBytes_AsStringAndSize(value, &buffer, &len) == -1) { return -1; } #else if (PyString_AsStringAndSize(value, &buffer, &len) == -1) { return -1; } #endif if (len > maxlen) { PyErr_Format( PyExc_ValueError, "'%s' must be less than %u characters", propname, (unsigned int)maxlen); return -1; } strncpy(dest, buffer, (size_t)maxlen); return 0; } /* get_bool is inlined */ int set_bool( const char* propname, PyObject* value, int* dest) { if (check_delete(propname, value)) { return -1; } *dest = PyObject_IsTrue(value); return 0; } /* get_int is inlined */ int set_int( const char* propname, PyObject* value, int* dest) { long value_int; if (check_delete(propname, value)) { return -1; } #if PY3K value_int = PyLong_AsLong(value); #else value_int = PyInt_AsLong(value); #endif if (value_int == -1 && PyErr_Occurred()) { return -1; } if ((unsigned long)value_int > 0x7fffffff) { return -1; } *dest = (int)value_int; return 0; } /* get_double is inlined */ int set_double( const char* propname, PyObject* value, double* dest) { if (check_delete(propname, value)) { return -1; } *dest = PyFloat_AsDouble(value); if (PyErr_Occurred()) { return -1; } else { return 0; } } /* get_double_array is inlined */ int set_double_array( const char* propname, PyObject* value, npy_int ndims, const npy_intp* dims, double* dest) { PyArrayObject* value_array = NULL; npy_int i = 0; PyObject* ignored = NULL; char shape_str[SHAPE_STR_LEN]; if (check_delete(propname, value)) { return -1; } value_array = (PyArrayObject*)PyArray_ContiguousFromAny(value, PyArray_DOUBLE, ndims, ndims); if (value_array == NULL) { return -1; } if (dims != NULL) { for (i = 0; i < ndims; ++i) { if (PyArray_DIM(value_array, i) != dims[i]) { shape_to_string(ndims, dims, shape_str); ignored = PyErr_Format( PyExc_ValueError, "'%s' array is the wrong shape, must be %s", propname, shape_str); Py_DECREF(value_array); return -1; } } } copy_array_to_c_double(value_array, dest); Py_DECREF(value_array); return 0; } int set_int_array( const char* propname, PyObject* value, npy_int ndims, const npy_intp* dims, int* dest) { PyArrayObject* value_array = NULL; npy_int i = 0; PyObject* ignored = NULL; char shape_str[SHAPE_STR_LEN]; if (check_delete(propname, value)) { return -1; } value_array = (PyArrayObject*)PyArray_ContiguousFromAny(value, PyArray_INT, ndims, ndims); if (value_array == NULL) { return -1; } if (dims != NULL) { for (i = 0; i < ndims; ++i) { if (PyArray_DIM(value_array, i) != dims[i]) { shape_to_string(ndims, dims, shape_str); ignored = PyErr_Format( PyExc_ValueError, "'%s' array is the wrong shape, must be %s", propname, shape_str); Py_DECREF(value_array); return -1; } } } copy_array_to_c_int(value_array, dest); Py_DECREF(value_array); return 0; } /* get_str_list is inlined */ /* set_str_list is inlined */ int set_str_list_verified( const char* propname, PyObject* value, Py_ssize_t len, Py_ssize_t maxlen, char (*dest)[72], str_verify_fn verify) { PyObject* str = NULL; char* str_char = NULL; Py_ssize_t str_len = 0; Py_ssize_t i = 0; PyObject* ignored = NULL; if (check_delete(propname, value)) { return -1; } if (maxlen == 0) { maxlen = 68; } if (!PySequence_Check(value)) { ignored = PyErr_Format( PyExc_TypeError, "'%s' must be a sequence of strings", propname); return -1; } if (PySequence_Size(value) != len) { ignored = PyErr_Format( PyExc_ValueError, "len(%s) must be %u", propname, (unsigned int)len); return -1; } /* We go through the list twice, once to verify that the list is in the correct format, and then again to do the data copy. This way, we won't partially copy the contents and then throw an exception. */ for (i = 0; i < len; ++i) { str = PySequence_GetItem(value, i); if (str == NULL) { return -1; } #if PY3K if (!PyBytes_CheckExact(str)) { #else if (!PyString_CheckExact(str)) { #endif ignored = PyErr_Format( PyExc_TypeError, #if PY3K "'%s' must be a sequence of bytes", #else "'%s' must be a sequence of strings", #endif propname); Py_DECREF(str); return -1; } #if PY3K if (PyBytes_Size(str) > maxlen) { #else if (PyString_Size(str) > maxlen) { #endif ignored = PyErr_Format( PyExc_TypeError, #if PY3K "Each bytes in '%s' must be less than %u characters", #else "Each string in '%s' must be less than %u characters", #endif propname, (unsigned int)maxlen); Py_DECREF(str); return -1; } if (verify) { #if PY3K str_char = PyBytes_AsString(str); #else str_char = PyString_AsString(str); #endif if (!verify(str_char)) { Py_DECREF(str); return -1; } } Py_DECREF(str); } for (i = 0; i < len; ++i) { str = PySequence_GetItem(value, i); if (str == NULL) { /* Theoretically, something has gone really wrong here, since we've already verified the list. */ ignored = PyErr_Format( PyExc_RuntimeError, "Input values have changed underneath us. Something is seriously wrong."); return -1; } /* We already know its a string of the correct length */ #if PY3K if (PyBytes_AsStringAndSize(str, &str_char, &str_len)) { #else if (PyString_AsStringAndSize(str, &str_char, &str_len)) { #endif /* Theoretically, something has gone really wrong here, since we've already verified the list. */ ignored = PyErr_Format( PyExc_RuntimeError, "Input values have changed underneath us. Something is seriously wrong."); Py_DECREF(str); return -1; } strncpy(dest[i], str_char, (size_t)maxlen); Py_DECREF(str); } return 0; } /*@null@*/ PyObject* get_pscards( /*@unused@*/ const char* propname, struct pscard* ps, int nps) { PyObject* result = NULL; PyObject* subresult = NULL; Py_ssize_t i = 0; if (nps < 0) { return NULL; } result = PyList_New((Py_ssize_t)nps); if (result == NULL) { return NULL; } for (i = 0; i < (Py_ssize_t)nps; ++i) { subresult = Py_BuildValue("iis", ps[i].i, ps[i].m, ps[i].value); if (subresult == NULL) { Py_DECREF(result); return NULL; } if (PyList_SetItem(result, i, subresult)) { Py_DECREF(subresult); Py_DECREF(result); return NULL; } } return result; } int set_pscards( /*@unused@*/ const char* propname, PyObject* value, struct pscard** ps, int *nps, int *npsmax) { PyObject* subvalue = NULL; Py_ssize_t i = 0; Py_ssize_t size = 0; int ival = 0; int mval = 0; char* strvalue = 0; void* newmem = NULL; if (!PySequence_Check(value)) return -1; size = PySequence_Size(value); if (size > 0x7fffffff) { return -1; } if (size > (Py_ssize_t)*npsmax) { newmem = malloc(sizeof(struct pscard) * size); if (newmem == NULL) { PyErr_SetString(PyExc_MemoryError, "Could not allocate memory."); return -1; } free(*ps); *ps = newmem; *npsmax = (int)size; } /* Verify the entire list for correct types first, so we don't have to undo anything copied into the canonical array. */ for (i = 0; i < size; ++i) { subvalue = PySequence_GetItem(value, i); if (subvalue == NULL) { return -1; } if (!PyArg_ParseTuple(subvalue, "iis", &ival, &mval, &strvalue)) { Py_DECREF(subvalue); return -1; } Py_DECREF(subvalue); } for (i = 0; i < size; ++i) { subvalue = PySequence_GetItem(value, i); if (subvalue == NULL) { return -1; } if (!PyArg_ParseTuple(subvalue, "iis", &ival, &mval, &strvalue)) { Py_DECREF(subvalue); return -1; } Py_DECREF(subvalue); (*ps)[i].i = ival; (*ps)[i].m = mval; strncpy((*ps)[i].value, strvalue, 72); (*ps)[i].value[71] = '\0'; (*nps) = i + 1; } return 0; } /*@null@*/ PyObject* get_pvcards( /*@unused@*/ const char* propname, struct pvcard* pv, int npv) { PyObject* result = NULL; PyObject* subresult = NULL; Py_ssize_t i = 0; result = PyList_New((Py_ssize_t)npv); if (result == NULL) { return NULL; } for (i = 0; i < (Py_ssize_t)npv; ++i) { subresult = Py_BuildValue("iid", pv[i].i, pv[i].m, pv[i].value); if (subresult == NULL) { Py_DECREF(result); return NULL; } if (PyList_SetItem(result, i, subresult)) { Py_DECREF(subresult); Py_DECREF(result); return NULL; } } return result; } int set_pvcards( /*@propname@*/ const char* propname, PyObject* value, struct pvcard** pv, int *npv, int *npvmax) { PyObject* subvalue = NULL; int i = 0; Py_ssize_t size = 0; int ival = 0; int mval = 0; double dblvalue = 0.0; void* newmem = NULL; if (!PySequence_Check(value)) { return -1; } size = PySequence_Size(value); if (size > 0x7fffffff) { return -1; } if (size > (Py_ssize_t)*npvmax) { newmem = malloc(sizeof(struct pvcard) * size); if (newmem == NULL) { PyErr_SetString(PyExc_MemoryError, "Could not allocate memory."); return -1; } free(*pv); *pv = newmem; *npvmax = (int)size; } /* Verify the entire list for correct types first, so we don't have to undo anything copied into the canonical array. */ for (i = 0; i < size; ++i) { subvalue = PySequence_GetItem(value, i); if (subvalue == NULL) { return -1; } if (!PyArg_ParseTuple(subvalue, "iid", &ival, &mval, &dblvalue)) { Py_DECREF(subvalue); return -1; } Py_DECREF(subvalue); } for (i = 0; i < size; ++i) { subvalue = PySequence_GetItem(value, i); if (subvalue == NULL) { return -1; } if (!PyArg_ParseTuple(subvalue, "iid", &ival, &mval, &dblvalue)) { Py_DECREF(subvalue); return -1; } Py_DECREF(subvalue); (*pv)[i].i = ival; (*pv)[i].m = mval; (*pv)[i].value = dblvalue; (*npv) = i + 1; } return 0; } PyObject* get_deepcopy( PyObject* obj, PyObject* memo) { if (PyObject_HasAttrString(obj, "__deepcopy__")) { return PyObject_CallMethod(obj, "__deepcopy__", "O", memo); } else { return PyObject_CallMethod(obj, "__copy__", ""); } } /*************************************************************************** * Miscellaneous helper functions * ***************************************************************************/ int parse_unsafe_unit_conversion_spec( const char* arg, int* ctrl) { const char* p = NULL; *ctrl = 0; p = arg; for (p = arg; *p != '\0'; ++p) { switch (*p) { case 's': case 'S': *ctrl |= 1; break; case 'h': case 'H': *ctrl |= 2; break; case 'd': case 'D': *ctrl |= 4; break; default: PyErr_SetString( PyExc_ValueError, "translate_units may only contain the characters 's', 'h' or 'd'"); return 1; } } return 0; } pywcs-1.12/src/pyutil.h0000644001153600020070000002231712310355626017141 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __PYUTIL_H__ #define __PYUTIL_H__ #include "util.h" #define PY_ARRAY_UNIQUE_SYMBOL pywcs_numpy_api #include #include #include #if PY_MAJOR_VERSION >= 3 #define PY3K 1 #else #define PY3K 0 #ifndef Py_TYPE #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) #endif #endif /* Py_ssize_t for old Pythons */ /* This code is as recommended by: */ /* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */ #if PY_VERSION_HEX < 0x02050000 #if !defined(PY_SSIZE_T_MIN) typedef int Py_ssize_t; # define PY_SSIZE_T_MAX INT_MAX # define PY_SSIZE_T_MIN INT_MIN #endif #define lenfunc inquiry #define ssizeargfunc intargfunc #define ssizeobjargproc intobjargproc #endif PyObject* PyArrayProxy_New( PyObject* self, int nd, const npy_intp* dims, int typenum, const void* data); PyObject* PyArrayReadOnlyProxy_New( PyObject* self, int nd, const npy_intp* dims, int typenum, const void* data); typedef int (*str_verify_fn)(char *); /*@null@*/ PyObject * PyStrListProxy_New( PyObject* owner, Py_ssize_t size, Py_ssize_t maxsize, char (*array)[72], str_verify_fn verify ); int _setup_str_list_proxy_type( PyObject* m); static pywcs_inline void offset_c_array( double* value, npy_intp size, double offset) { double* end = value + size; for ( ; value != end; ++value) { *value += offset; } } static pywcs_inline void nan2undefined( double* value, unsigned int nvalues) { double* end = value + nvalues; for ( ; value != end; ++value) { if (isnan64(*value)) { *value = UNDEFINED; } } } static pywcs_inline void undefined2nan( double* value, unsigned int nvalues) { double* end = value + nvalues; for ( ; value != end; ++value) { if (*value == UNDEFINED) { *value = (double)NPY_NAN; } } } void preoffset_array( PyArrayObject* array, int value); void unoffset_array( PyArrayObject* array, int value); void copy_array_to_c_double( PyArrayObject* array, double* dest); void copy_array_to_c_int( PyArrayObject* array, int* dest); /** Returns TRUE if pointer is NULL, and sets Python exception */ int is_null(/*@null@*/ void *); typedef void (*value_fixer_t)(double*, unsigned int); void wcsprm_c2python( /*@null@*/ struct wcsprm* x); void wcsprm_python2c( /*@null@*/ struct wcsprm* x); /*************************************************************************** * Exceptions * ***************************************************************************/ extern PyObject* WcsExc_SingularMatrix; extern PyObject* WcsExc_InconsistentAxisTypes; extern PyObject* WcsExc_InvalidTransform; extern PyObject* WcsExc_InvalidCoordinate; extern PyObject* WcsExc_NoSolution; extern PyObject* WcsExc_InvalidSubimageSpecification; extern PyObject* WcsExc_NonseparableSubimageCoordinateSystem; extern PyObject* WcsExc_NoWcsKeywordsFound; extern PyObject* WcsExc_InvalidTabularParameters; /* This is an array mapping the wcs status codes to Python exception * types. The exception string is stored as part of wcslib itself in * wcs_errmsg. */ extern PyObject** wcs_errexc[14]; #define WCS_ERRMSG_MAX 14 #define WCSFIX_ERRMSG_MAX 11 int _define_exceptions(PyObject* m); const char* wcslib_get_error_message(int stat); void wcserr_to_python_exc(const struct wcserr *err); void wcs_to_python_exc(const struct wcsprm *wcs); void wcserr_fix_to_python_exc(const struct wcserr *err); void wcserr_units_to_python_exc(const struct wcserr *err); /*************************************************************************** Property helpers ***************************************************************************/ static pywcs_inline int check_delete( const char* propname, PyObject* value) { PyObject* ignored; if (value == NULL) { ignored = PyErr_Format(PyExc_TypeError, "'%s' can not be deleted", propname); return -1; } return 0; } static pywcs_inline PyObject* get_string( /*@unused@*/ const char* propname, const char* value) { #if PY3K return PyBytes_FromString(value); #else return PyString_FromString(value); #endif } int set_string( const char* propname, PyObject* value, char* dest, Py_ssize_t maxlen); static pywcs_inline PyObject* get_bool( /*@unused@*/ const char* propname, long value) { return PyBool_FromLong(value); } int set_bool( const char* propname, PyObject* value, int* dest); static pywcs_inline PyObject* get_int( /*@unused@*/ const char* propname, long value) { #if PY3K return PyLong_FromLong(value); #else return PyInt_FromLong(value); #endif } int set_int( const char* propname, PyObject* value, int* dest); static pywcs_inline PyObject* get_double( const char* propname, double value) { return PyFloat_FromDouble(value); } int set_double( const char* propname, PyObject* value, double* dest); /*@null@*/ static pywcs_inline PyObject* get_double_array( /*@unused@*/ const char* propname, double* value, npy_intp ndims, const npy_intp* dims, /*@shared@*/ PyObject* owner) { return PyArrayProxy_New(owner, ndims, dims, PyArray_DOUBLE, value); } /*@null@*/ static pywcs_inline PyObject* get_double_array_readonly( /*@unused@*/ const char* propname, double* value, npy_intp ndims, const npy_intp* dims, /*@shared@*/ PyObject* owner) { return PyArrayReadOnlyProxy_New(owner, ndims, dims, PyArray_DOUBLE, value); } int set_double_array( const char* propname, PyObject* value, npy_int ndims, const npy_intp* dims, double* dest); /*@null@*/ static pywcs_inline PyObject* get_int_array( /*@unused@*/ const char* propname, int* value, npy_int ndims, const npy_intp* dims, /*@shared@*/ PyObject* owner) { return PyArrayProxy_New(owner, ndims, dims, PyArray_INT, value); } int set_int_array( const char* propname, PyObject* value, npy_int ndims, const npy_intp* dims, int* dest); static pywcs_inline PyObject* get_str_list_verified( /*@unused@*/ const char* propname, char (*array)[72], Py_ssize_t len, Py_ssize_t maxlen, PyObject* owner, str_verify_fn verify) { return PyStrListProxy_New(owner, len, maxlen, array, verify); } static pywcs_inline PyObject* get_str_list( /*@unused@*/ const char* propname, char (*array)[72], Py_ssize_t len, Py_ssize_t maxlen, PyObject* owner) { return get_str_list_verified(propname, array, len, maxlen, owner, NULL); } int set_str_list_verified( const char* propname, PyObject* value, Py_ssize_t len, Py_ssize_t maxlen, char (*dest)[72], str_verify_fn verify); static pywcs_inline int set_str_list( const char* propname, PyObject* value, Py_ssize_t len, Py_ssize_t maxlen, char (*dest)[72]) { return set_str_list_verified(propname, value, len, maxlen, dest, NULL); } PyObject* get_pscards( const char* propname, struct pscard* ps, int nps); int set_pscards( const char* propname, PyObject* value, struct pscard** ps, int *nps, int *npsmax); PyObject* get_pvcards( const char* propname, struct pvcard* pv, int npv); int set_pvcards( const char* propname, PyObject* value, struct pvcard** pv, int *npv, int *npvmax); PyObject* get_deepcopy( PyObject* obj, PyObject* memo); /*************************************************************************** Miscellaneous helper functions ***************************************************************************/ int parse_unsafe_unit_conversion_spec( const char* arg, int* ctrl); #endif /* __PYUTIL_H__ */ pywcs-1.12/src/pywcs.c0000644001153600020070000006403212310355626016753 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #include "pywcs.h" #include "wcslib_wrap.h" #include "wcslib_tabprm_wrap.h" #include "wcslib_units_wrap.h" #include "wcslib_wtbarr_wrap.h" #include "distortion_wrap.h" #include "sip_wrap.h" #include "docstrings.h" #include "pywcs_api.h" #include /* from Python */ #include #include /*************************************************************************** * Pywcs type ***************************************************************************/ static PyTypeObject PyWcsType; static int _setup_pywcs_type(PyObject* m); /*************************************************************************** * PyWcs methods */ static int PyWcs_traverse( PyWcs* self, visitproc visit, void* arg) { Py_VISIT(self->py_det2im[0]); Py_VISIT(self->py_det2im[1]); Py_VISIT(self->py_sip); Py_VISIT(self->py_distortion_lookup[0]); Py_VISIT(self->py_distortion_lookup[1]); Py_VISIT(self->py_wcsprm); return 0; } static int PyWcs_clear( PyWcs* self) { PyObject* tmp; tmp = self->py_det2im[0]; self->py_det2im[0] = NULL; Py_XDECREF(tmp); tmp = self->py_det2im[1]; self->py_det2im[1] = NULL; Py_XDECREF(tmp); tmp = self->py_sip; self->py_sip = NULL; Py_XDECREF(tmp); tmp = self->py_distortion_lookup[0]; self->py_distortion_lookup[0] = NULL; Py_XDECREF(tmp); tmp = self->py_distortion_lookup[1]; self->py_distortion_lookup[1] = NULL; Py_XDECREF(tmp); tmp = self->py_wcsprm; self->py_wcsprm = NULL; Py_XDECREF(tmp); return 0; } static void PyWcs_dealloc( PyWcs* self) { int ignored; ignored = PyWcs_clear(self); pipeline_free(&self->x); Py_TYPE(self)->tp_free((PyObject*)self); } /*@null@*/ static PyObject * PyWcs_new( PyTypeObject* type, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { PyWcs* self; self = (PyWcs*)type->tp_alloc(type, 0); if (self != NULL) { pipeline_clear(&self->x); self->py_det2im[0] = NULL; self->py_det2im[1] = NULL; self->py_sip = NULL; self->py_distortion_lookup[0] = NULL; self->py_distortion_lookup[1] = NULL; self->py_wcsprm = NULL; } return (PyObject*)self; } static int PyWcs_init( PyWcs* self, PyObject* args, /*@unused@*/ PyObject* kwds) { size_t i; PyObject* py_sip; PyObject* py_wcsprm; PyObject* py_distortion_lookup[2]; PyObject* py_det2im[2]; if (!PyArg_ParseTuple (args, "O(OO)O(OO):Wcs.__init__", &py_sip, &py_distortion_lookup[0], &py_distortion_lookup[1], &py_wcsprm, &py_det2im[0], &py_det2im[1])) { return -1; } /* Check and set Distortion lookup tables */ for (i = 0; i < 2; ++i) { if (py_det2im[i] != NULL && py_det2im[i] != Py_None) { if (!PyObject_TypeCheck(py_det2im[i], &PyDistLookupType)) { PyErr_SetString(PyExc_TypeError, "Arg 4 must be a pair of DistortionLookupTable or None objects"); return -1; } self->py_det2im[i] = py_det2im[i]; self->x.det2im[i] = &(((PyDistLookup*)py_det2im[i])->x); } } /* Check and set SIP */ if (py_sip != NULL && py_sip != Py_None) { if (!PyObject_TypeCheck(py_sip, &PySipType)) { PyErr_SetString(PyExc_TypeError, "Arg 1 must be Sip object"); return -1; } self->py_sip = py_sip; self->x.sip = &(((PySip*)py_sip)->x); } /* Check and set Distortion lookup tables */ for (i = 0; i < 2; ++i) { if (py_distortion_lookup[i] != NULL && py_distortion_lookup[i] != Py_None) { if (!PyObject_TypeCheck(py_distortion_lookup[i], &PyDistLookupType)) { PyErr_SetString(PyExc_TypeError, "Arg 2 must be a pair of DistortionLookupTable or None objects"); return -1; } self->py_distortion_lookup[i] = py_distortion_lookup[i]; self->x.cpdis[i] = &(((PyDistLookup*)py_distortion_lookup[i])->x); } } /* Set and lookup Wcsprm object */ if (py_wcsprm != NULL && py_wcsprm != Py_None) { if (!PyObject_TypeCheck(py_wcsprm, &PyWcsprmType)) { PyErr_SetString(PyExc_TypeError, "Arg 3 must be Wcsprm object"); return -1; } self->py_wcsprm = py_wcsprm; self->x.wcs = &(((PyWcsprm*)py_wcsprm)->x); } Py_XINCREF(self->py_sip); Py_XINCREF(self->py_distortion_lookup[0]); Py_XINCREF(self->py_distortion_lookup[1]); Py_XINCREF(self->py_wcsprm); Py_XINCREF(self->py_det2im[0]); Py_XINCREF(self->py_det2im[1]); return 0; } /*@null@*/ static PyObject* PyWcs_all_pix2sky( PyWcs* self, PyObject* args, PyObject* kwds) { int naxis = 2; PyObject* pixcrd_obj = NULL; int origin = 1; PyArrayObject* pixcrd = NULL; PyArrayObject* world = NULL; int status = -1; const char* keywords[] = { "pixcrd", "origin", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "Oi:all_pix2sky", (char **)keywords, &pixcrd_obj, &origin)) { return NULL; } naxis = self->x.wcs->naxis; pixcrd = (PyArrayObject*)PyArray_ContiguousFromAny(pixcrd_obj, PyArray_DOUBLE, 2, 2); if (pixcrd == NULL) { return NULL; } if (PyArray_DIM(pixcrd, 1) < naxis) { PyErr_Format( PyExc_RuntimeError, "Input array must be 2-dimensional, where the second dimension >= %d", naxis); goto exit; } world = (PyArrayObject*)PyArray_SimpleNew(2, PyArray_DIMS(pixcrd), PyArray_DOUBLE); if (world == NULL) { goto exit; } /* Make the call */ Py_BEGIN_ALLOW_THREADS preoffset_array(pixcrd, origin); wcsprm_python2c(self->x.wcs); status = pipeline_all_pixel2world(&self->x, (unsigned int)PyArray_DIM(pixcrd, 0), (unsigned int)PyArray_DIM(pixcrd, 1), (double*)PyArray_DATA(pixcrd), (double*)PyArray_DATA(world)); wcsprm_c2python(self->x.wcs); unoffset_array(pixcrd, origin); Py_END_ALLOW_THREADS /* unoffset_array(world, origin); */ exit: Py_XDECREF(pixcrd); if (status == 0 || status == 8) { return (PyObject*)world; } else if (status == -1) { PyErr_SetString( PyExc_ValueError, "Wrong number of dimensions in input array. Expected 2."); return NULL; } else { Py_DECREF(world); if (status == -1) { /* exception already set */ return NULL; } else { wcserr_to_python_exc(self->x.err); return NULL; } } } /*@null@*/ static PyObject* PyWcs_p4_pix2foc( PyWcs* self, PyObject* args, PyObject* kwds) { PyObject* pixcrd_obj = NULL; int origin = 1; PyArrayObject* pixcrd = NULL; PyArrayObject* foccrd = NULL; int status = -1; const char* keywords[] = { "pixcrd", "origin", NULL }; if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oi:p4_pix2foc", (char **)keywords, &pixcrd_obj, &origin)) { return NULL; } if (self->x.cpdis[0] == NULL && self->x.cpdis[1] == NULL) { Py_INCREF(pixcrd_obj); return pixcrd_obj; } pixcrd = (PyArrayObject*)PyArray_ContiguousFromAny(pixcrd_obj, PyArray_DOUBLE, 2, 2); if (pixcrd == NULL) { return NULL; } if (PyArray_DIM(pixcrd, 1) != NAXES) { PyErr_SetString(PyExc_ValueError, "Pixel array must be an Nx2 array"); goto exit; } foccrd = (PyArrayObject*)PyArray_SimpleNew(2, PyArray_DIMS(pixcrd), PyArray_DOUBLE); if (foccrd == NULL) { status = 2; goto exit; } Py_BEGIN_ALLOW_THREADS preoffset_array(pixcrd, origin); status = p4_pix2foc(2, (void *)self->x.cpdis, (unsigned int)PyArray_DIM(pixcrd, 0), (double*)PyArray_DATA(pixcrd), (double*)PyArray_DATA(foccrd)); unoffset_array(pixcrd, origin); unoffset_array(foccrd, origin); Py_END_ALLOW_THREADS exit: Py_XDECREF(pixcrd); if (status == 0) { return (PyObject*)foccrd; } else { Py_XDECREF(foccrd); if (status == -1) { /* Exception already set */ return NULL; } else { PyErr_SetString(PyExc_MemoryError, "NULL pointer passed"); return NULL; } } } /*@null@*/ static PyObject* PyWcs_det2im( PyWcs* self, PyObject* args, PyObject* kwds) { PyObject* detcrd_obj = NULL; int origin = 1; PyArrayObject* detcrd = NULL; PyArrayObject* imcrd = NULL; int status = -1; const char* keywords[] = { "detcrd", "origin", NULL }; if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oi:det2im", (char **)keywords, &detcrd_obj, &origin)) { return NULL; } if (self->x.det2im[0] == NULL && self->x.det2im[1] == NULL) { Py_INCREF(detcrd_obj); return detcrd_obj; } detcrd = (PyArrayObject*)PyArray_ContiguousFromAny(detcrd_obj, PyArray_DOUBLE, 2, 2); if (detcrd == NULL) { return NULL; } if (PyArray_DIM(detcrd, 1) != NAXES) { PyErr_SetString(PyExc_ValueError, "Pixel array must be an Nx2 array"); goto exit; } imcrd = (PyArrayObject*)PyArray_SimpleNew(2, PyArray_DIMS(detcrd), PyArray_DOUBLE); if (imcrd == NULL) { status = 2; goto exit; } Py_BEGIN_ALLOW_THREADS preoffset_array(detcrd, origin); status = p4_pix2foc(2, (void *)self->x.det2im, (unsigned int)PyArray_DIM(detcrd, 0), (double*)PyArray_DATA(detcrd), (double*)PyArray_DATA(imcrd)); unoffset_array(detcrd, origin); unoffset_array(imcrd, origin); Py_END_ALLOW_THREADS exit: Py_XDECREF(detcrd); if (status == 0) { return (PyObject*)imcrd; } else { Py_XDECREF(imcrd); if (status == -1) { /* Exception already set */ return NULL; } else { PyErr_SetString(PyExc_MemoryError, "NULL pointer passed"); return NULL; } } } /*@null@*/ static PyObject* PyWcs_pix2foc( PyWcs* self, PyObject* args, PyObject* kwds) { PyObject* pixcrd_obj = NULL; int origin = 1; PyArrayObject* pixcrd = NULL; PyArrayObject* foccrd = NULL; int status = -1; const char* keywords[] = { "pixcrd", "origin", NULL }; if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oi:pix2foc", (char **)keywords, &pixcrd_obj, &origin)) { return NULL; } pixcrd = (PyArrayObject*)PyArray_ContiguousFromAny(pixcrd_obj, PyArray_DOUBLE, 2, 2); if (pixcrd == NULL) { return NULL; } if (PyArray_DIM(pixcrd, 1) != NAXES) { PyErr_SetString(PyExc_ValueError, "Pixel array must be an Nx2 array"); goto _exit; } foccrd = (PyArrayObject*)PyArray_SimpleNew(2, PyArray_DIMS(pixcrd), PyArray_DOUBLE); if (foccrd == NULL) { goto _exit; } Py_BEGIN_ALLOW_THREADS preoffset_array(pixcrd, origin); status = pipeline_pix2foc(&self->x, (unsigned int)PyArray_DIM(pixcrd, 0), (unsigned int)PyArray_DIM(pixcrd, 1), (double*)PyArray_DATA(pixcrd), (double*)PyArray_DATA(foccrd)); unoffset_array(pixcrd, origin); unoffset_array(foccrd, origin); Py_END_ALLOW_THREADS _exit: Py_XDECREF(pixcrd); if (status == 0) { return (PyObject*)foccrd; } else { Py_XDECREF(foccrd); if (status == -1) { /* Exception already set */ return NULL; } else { wcserr_to_python_exc(self->x.err); return NULL; } } } /*@null@*/ static PyObject* PyWcs_get_wcs( PyWcs* self, /*@unused@*/ void* closure) { if (self->py_wcsprm) { Py_INCREF(self->py_wcsprm); return self->py_wcsprm; } Py_INCREF(Py_None); return Py_None; } static int PyWcs_set_wcs( PyWcs* self, /*@shared@*/ PyObject* value, /*@unused@*/ void* closure) { Py_XDECREF(self->py_wcsprm); self->py_wcsprm = NULL; self->x.wcs = NULL; if (value != NULL && value != Py_None) { if (!PyObject_TypeCheck(value, &PyWcsprmType)) { PyErr_SetString(PyExc_TypeError, "wcs must be Wcsprm object"); return -1; } Py_INCREF(value); self->py_wcsprm = value; self->x.wcs = &(((PyWcsprm*)value)->x); } return 0; } static PyObject* PyWcs_get_cpdis1( PyWcs* self, /*@unused@*/ void* closure) { if (self->py_distortion_lookup[0]) { Py_INCREF(self->py_distortion_lookup[0]); return self->py_distortion_lookup[0]; } Py_INCREF(Py_None); return Py_None; } static int PyWcs_set_cpdis1( PyWcs* self, /*@shared@*/ PyObject* value, /*@unused@*/ void* closure) { Py_XDECREF(self->py_distortion_lookup[0]); self->py_distortion_lookup[0] = NULL; self->x.cpdis[0] = NULL; if (value != NULL && value != Py_None) { if (!PyObject_TypeCheck(value, &PyDistLookupType)) { PyErr_SetString(PyExc_TypeError, "cpdis1 must be DistortionLookupTable object"); return -1; } Py_INCREF(value); self->py_distortion_lookup[0] = value; self->x.cpdis[0] = &(((PyDistLookup*)value)->x); } return 0; } /*@shared@*/ static PyObject* PyWcs_get_cpdis2( PyWcs* self, /*@unused@*/ void* closure) { if (self->py_distortion_lookup[1]) { Py_INCREF(self->py_distortion_lookup[1]); return self->py_distortion_lookup[1]; } Py_INCREF(Py_None); return Py_None; } static int PyWcs_set_cpdis2( PyWcs* self, /*@shared@*/ PyObject* value, /*@unused@*/ void* closure) { Py_XDECREF(self->py_distortion_lookup[1]); self->py_distortion_lookup[1] = NULL; self->x.cpdis[1] = NULL; if (value != NULL && value != Py_None) { if (!PyObject_TypeCheck(value, &PyDistLookupType)) { PyErr_SetString(PyExc_TypeError, "cpdis2 must be DistortionLookupTable object"); return -1; } Py_INCREF(value); self->py_distortion_lookup[1] = value; self->x.cpdis[1] = &(((PyDistLookup*)value)->x); } return 0; } static PyObject* PyWcs_get_det2im1( PyWcs* self, /*@unused@*/ void* closure) { if (self->py_det2im[0]) { Py_INCREF(self->py_det2im[0]); return self->py_det2im[0]; } Py_INCREF(Py_None); return Py_None; } static int PyWcs_set_det2im1( PyWcs* self, /*@shared@*/ PyObject* value, /*@unused@*/ void* closure) { Py_XDECREF(self->py_det2im[0]); self->py_det2im[0] = NULL; self->x.det2im[0] = NULL; if (value != NULL && value != Py_None) { if (!PyObject_TypeCheck(value, &PyDistLookupType)) { PyErr_SetString(PyExc_TypeError, "det2im1 must be DistortionLookupTable object"); return -1; } Py_INCREF(value); self->py_det2im[0] = value; self->x.det2im[0] = &(((PyDistLookup*)value)->x); } return 0; } /*@shared@*/ static PyObject* PyWcs_get_det2im2( PyWcs* self, /*@unused@*/ void* closure) { if (self->py_det2im[1]) { Py_INCREF(self->py_det2im[1]); return self->py_det2im[1]; } Py_INCREF(Py_None); return Py_None; } static int PyWcs_set_det2im2( PyWcs* self, /*@shared@*/ PyObject* value, /*@unused@*/ void* closure) { Py_XDECREF(self->py_det2im[1]); self->py_det2im[1] = NULL; self->x.det2im[1] = NULL; if (value != NULL && value != Py_None) { if (!PyObject_TypeCheck(value, &PyDistLookupType)) { PyErr_SetString(PyExc_TypeError, "det2im2 must be DistortionLookupTable object"); return -1; } Py_INCREF(value); self->py_det2im[1] = value; self->x.det2im[1] = &(((PyDistLookup*)value)->x); } return 0; } /*@shared@*/ static PyObject* PyWcs_get_sip( PyWcs* self, /*@unused@*/ void* closure) { if (self->py_sip) { Py_INCREF(self->py_sip); return self->py_sip; } Py_INCREF(Py_None); return Py_None; } static int PyWcs_set_sip( PyWcs* self, /*@shared@*/ PyObject* value, /*@unused@*/ void* closure) { Py_XDECREF(self->py_sip); self->py_sip = NULL; self->x.sip = NULL; if (value != NULL && value != Py_None) { if (!PyObject_TypeCheck(value, &PySipType)) { PyErr_SetString(PyExc_TypeError, "sip must be Sip object"); return -1; } Py_INCREF(value); self->py_sip = value; self->x.sip = &(((PySip*)value)->x); } return 0; } static PyObject* PyWcs___copy__( PyWcs* self, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { PyObject* copy = NULL; copy = PyWcs_new(&PyWcsType, NULL, NULL); if (copy == NULL) { return NULL; } if (self->py_det2im[0]) { PyWcs_set_det2im1((PyWcs*)copy, self->py_det2im[0], NULL); } if (self->py_det2im[1]) { PyWcs_set_det2im2((PyWcs*)copy, self->py_det2im[1], NULL); } if (self->py_sip) { PyWcs_set_sip((PyWcs*)copy, self->py_sip, NULL); } if (self->py_distortion_lookup[0]) { PyWcs_set_cpdis1((PyWcs*)copy, self->py_distortion_lookup[0], NULL); } if (self->py_distortion_lookup[1]) { PyWcs_set_cpdis2((PyWcs*)copy, self->py_distortion_lookup[1], NULL); } if (self->py_wcsprm) { PyWcs_set_wcs((PyWcs*)copy, self->py_wcsprm, NULL); } return copy; } static int _deepcopy_helper( PyWcs* copy, PyObject* item, int (*function)(PyWcs*, PyObject*, void*), PyObject* memo) { PyObject* obj_copy; if (item) { obj_copy = get_deepcopy(item, memo); if (obj_copy == NULL) { return 1; } if (function(copy, obj_copy, NULL)) { Py_DECREF(obj_copy); return 1; } Py_DECREF(obj_copy); } return 0; } static PyObject* PyWcs___deepcopy__( PyWcs* self, PyObject* memo, /*@unused@*/ PyObject* kwds) { PyWcs* copy; copy = (PyWcs*)PyWcs_new(&PyWcsType, NULL, NULL); if (copy == NULL) { return NULL; } if (_deepcopy_helper(copy, self->py_det2im[0], PyWcs_set_det2im1, memo) || _deepcopy_helper(copy, self->py_det2im[1], PyWcs_set_det2im2, memo) || _deepcopy_helper(copy, self->py_sip, PyWcs_set_sip, memo) || _deepcopy_helper(copy, self->py_distortion_lookup[0], PyWcs_set_cpdis1, memo) || _deepcopy_helper(copy, self->py_distortion_lookup[1], PyWcs_set_det2im1, memo) || _deepcopy_helper(copy, self->py_wcsprm, PyWcs_set_wcs, memo)) { Py_DECREF(copy); return NULL; } return (PyObject*)copy; } static PyObject* _sanity_check( PyObject* self, PyObject* args, PyObject* kwds) { if (sizeof(WCSLIB_INT64) != 8) { Py_INCREF(Py_False); return Py_False; } Py_INCREF(Py_True); return Py_True; } /*************************************************************************** * PyWcs definition structures */ static PyGetSetDef PyWcs_getset[] = { {"det2im1", (getter)PyWcs_get_det2im1, (setter)PyWcs_set_det2im1, (char *)doc_det2im1}, {"det2im2", (getter)PyWcs_get_det2im2, (setter)PyWcs_set_det2im2, (char *)doc_det2im2}, {"cpdis1", (getter)PyWcs_get_cpdis1, (setter)PyWcs_set_cpdis1, (char *)doc_cpdis1}, {"cpdis2", (getter)PyWcs_get_cpdis2, (setter)PyWcs_set_cpdis2, (char *)doc_cpdis2}, {"sip", (getter)PyWcs_get_sip, (setter)PyWcs_set_sip, (char *)doc_sip}, {"wcs", (getter)PyWcs_get_wcs, (setter)PyWcs_set_wcs, (char *)doc_wcs}, {NULL} }; static PyMethodDef PyWcs_methods[] = { {"_all_pix2sky", (PyCFunction)PyWcs_all_pix2sky, METH_VARARGS|METH_KEYWORDS, doc_all_pix2sky}, {"__copy__", (PyCFunction)PyWcs___copy__, METH_NOARGS, NULL}, {"__deepcopy__", (PyCFunction)PyWcs___deepcopy__, METH_O, NULL}, {"_det2im", (PyCFunction)PyWcs_det2im, METH_VARARGS|METH_KEYWORDS, doc_det2im}, {"_p4_pix2foc", (PyCFunction)PyWcs_p4_pix2foc, METH_VARARGS|METH_KEYWORDS, doc_p4_pix2foc}, {"_pix2foc", (PyCFunction)PyWcs_pix2foc, METH_VARARGS|METH_KEYWORDS, doc_pix2foc}, {NULL} }; static PyMethodDef module_methods[] = { {"_sanity_check", (PyCFunction)_sanity_check, METH_NOARGS, ""}, {"find_all_wcs", (PyCFunction)PyWcsprm_find_all_wcs, METH_VARARGS|METH_KEYWORDS, doc_find_all_wcs}, {NULL} /* Sentinel */ }; static PyTypeObject PyWcsType = { #if PY3K PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ #endif "pywcs._Wcs", /*tp_name*/ sizeof(PyWcs), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)PyWcs_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /*tp_flags*/ doc_Wcs, /* tp_doc */ (traverseproc)PyWcs_traverse, /* tp_traverse */ (inquiry)PyWcs_clear, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ PyWcs_methods, /* tp_methods */ 0, /* tp_members */ PyWcs_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)PyWcs_init, /* tp_init */ 0, /* tp_alloc */ PyWcs_new, /* tp_new */ }; /*************************************************************************** * Module-level ***************************************************************************/ int _setup_pywcs_type( PyObject* m) { if (PyType_Ready(&PyWcsType) < 0) return -1; Py_INCREF(&PyWcsType); return PyModule_AddObject(m, "_Wcs", (PyObject *)&PyWcsType); } struct module_state { /* The Sun compiler can't handle empty structs */ #if defined(__SUNPRO_C) || defined(_MSC_VER) int _dummy; #endif }; #if PY3K static struct PyModuleDef moduledef = { PyModuleDef_HEAD_INIT, "_pywcs", NULL, sizeof(struct module_state), module_methods, NULL, NULL, NULL, NULL }; #define INITERROR return NULL PyMODINIT_FUNC PyInit__pywcs(void) #else #define INITERROR return PyMODINIT_FUNC init_pywcs(void) #endif { PyObject* m; wcs_errexc[0] = NULL; /* Success */ wcs_errexc[1] = &PyExc_MemoryError; /* Null wcsprm pointer passed */ wcs_errexc[2] = &PyExc_MemoryError; /* Memory allocation failed */ wcs_errexc[3] = &WcsExc_SingularMatrix; /* Linear transformation matrix is singular */ wcs_errexc[4] = &WcsExc_InconsistentAxisTypes; /* Inconsistent or unrecognized coordinate axis types */ wcs_errexc[5] = &PyExc_ValueError; /* Invalid parameter value */ wcs_errexc[6] = &WcsExc_InvalidTransform; /* Invalid coordinate transformation parameters */ wcs_errexc[7] = &WcsExc_InvalidTransform; /* Ill-conditioned coordinate transformation parameters */ wcs_errexc[8] = &WcsExc_InvalidCoordinate; /* One or more of the pixel coordinates were invalid, */ /* as indicated by the stat vector */ wcs_errexc[9] = &WcsExc_InvalidCoordinate; /* One or more of the world coordinates were invalid, */ /* as indicated by the stat vector */ wcs_errexc[10] = &WcsExc_InvalidCoordinate; /* Invalid world coordinate */ wcs_errexc[11] = &WcsExc_NoSolution; /* no solution found in the specified interval */ wcs_errexc[12] = &WcsExc_InvalidSubimageSpecification; /* Invalid subimage specification (no spectral axis) */ wcs_errexc[13] = &WcsExc_NonseparableSubimageCoordinateSystem; /* Non-separable subimage coordinate system */ #if PY3K m = PyModule_Create(&moduledef); #else m = Py_InitModule3("_pywcs", module_methods, NULL); #endif if (m == NULL) INITERROR; import_array(); fill_docstrings(); if (_setup_api(m) || _setup_str_list_proxy_type(m) || _setup_wcsprm_type(m) || _setup_tabprm_type(m) || _setup_units_type(m) || /* _setup_wtbarr_type(m) || */ _setup_distortion_type(m) || _setup_sip_type(m) || _setup_pywcs_type(m) || _define_exceptions(m)) { Py_DECREF(m); INITERROR; } #if PY3K return m; #endif } pywcs-1.12/src/pywcs.h0000644001153600020070000000421712310355626016757 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __PYWCS_H__ #define __PYWCS_H__ /* * This is necessary to avoid the wcsset() function that is in the * Windows libraries. We define it here so that any other module that * also uses pywcs C code can also get the right behavior. */ #ifdef _WIN32 #define __STDC__ 1 #endif /* util.h must be imported first */ #include "pyutil.h" #include "pipeline.h" typedef struct { PyObject_HEAD pipeline_t x; /*@shared@*/ PyObject* py_det2im[2]; /*@null@*/ /*@shared@*/ PyObject* py_sip; /*@shared@*/ PyObject* py_distortion_lookup[2]; /*@null@*/ /*@shared@*/ PyObject* py_wcsprm; } PyWcs; #endif /* __PYWCS_H__ */ pywcs-1.12/src/pywcs_api.c0000644001153600020070000000554412310355626017607 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define NO_IMPORT_ARRAY #include "pywcs_api.h" int PyWcs_GetCVersion(void) { return REVISION; } void* PyWcs_API[] = { /* 0 */ (void *)PyWcs_GetCVersion, /* pyutil.h */ /* 1 */ (void *)wcsprm_python2c, /* 2 */ (void *)wcsprm_c2python, /* distortion.h */ /* 3 */ (void *)distortion_lookup_t_init, /* 4 */ (void *)distortion_lookup_t_free, /* 5 */ (void *)get_distortion_offset, /* 6 */ (void *)p4_pix2foc, /* 7 */ (void *)p4_pix2deltas, /* sip.h */ /* 8 */ (void *)sip_clear, /* 9 */ (void *)sip_init, /* 10 */ (void *)sip_free, /* 11 */ (void *)sip_pix2foc, /* 12 */ (void *)sip_pix2deltas, /* 13 */ (void *)sip_foc2pix, /* 14 */ (void *)sip_foc2deltas, /* pipeline.h */ /* 15 */ (void *)pipeline_clear, /* 16 */ (void *)pipeline_init, /* 17 */ (void *)pipeline_free, /* 18 */ (void *)pipeline_all_pixel2world, /* 19 */ (void *)pipeline_pix2foc, /* wcs.h */ /* 20 */ (void *)wcsp2s, /* 21 */ (void *)wcss2p, /* 22 */ (void *)wcsprt, /* new for api version 2 */ /* 23 */ (void *)wcslib_get_error_message, /* new for api version 3 */ /* 24 */ (void *)wcsprintf_buf }; int _setup_api(PyObject *m) { PyObject* c_api; #if PY_VERSION_HEX >= 0x03020000 c_api = PyCapsule_New((void *)PyWcs_API, "_pywcs._PYWCS_API", NULL); #else c_api = PyCObject_FromVoidPtr((void *)PyWcs_API, NULL); #endif PyModule_AddObject(m, "_PYWCS_API", c_api); return 0; } pywcs-1.12/src/pywcs_api.h0000644001153600020070000001404012310355626017603 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef PYWCS_API_H #define PYWCS_API_H #include "wcsconfig.h" #include "pyutil.h" #include "distortion.h" #include "pipeline.h" #include "sip.h" #include "wcs.h" #include "wcsprintf.h" /* HOW TO UPDATE THE PUBLIC API This code uses a table of function pointers to dynamically expose the public API to other code that wants to use pywcs from C. Each function should be: 1) Declared, as usual for C, in a .h file 2) Defined in a .c file that is compiled as part of the _pywcs.so file 3) Have a macro that maps the function name to a position in the function table. That macro should go in this file (pywcs_api.h) 4) An entry in the function table, which lives in pywcs_api.c Every time the function signatures change, or functions are added or removed from the table, the value of REVISION should be incremented. This allows for a rudimentary version check upon dynamic linking to the pywcs module. */ #define REVISION 3 #ifdef PYWCS_BUILD int _setup_api(PyObject* m); #else #if defined(NO_IMPORT_PYWCS_API) extern void** PyWcs_API; #else void** PyWcs_API; #endif /* defined(NO_IMPORT_PYWCS_API) */ /* Function macros that delegate to a function pointer in the PyWCS_API table */ #define PyWcs_GetCVersion (*(int (*)(void)) PyWcs_API[0]) #define wcsprm_python2c (*(void (*)(struct wcsprm*)) PyWcs_API[1]) #define wcsprm_c2python (*(void (*)(struct wcsprm*)) PyWcs_API[2]) #define distortion_lookup_t_init (*(int (*)(distortion_lookup_t* lookup)) PyWcs_API[3]) #define distortion_lookup_t_free (*(void (*)(distortion_lookup_t* lookup)) PyWcs_API[4]) #define get_distortion_offset (*(double (*)(const distortion_lookup_t*, const double* const)) PyWcs_API[5]) #define p4_pix2foc (*(int (*)(const unsigned int, const distortion_lookup_t**, const unsigned int, const double *, double *)) PyWcs_API[6]) #define p4_pix2deltas (*(int (*)(const unsigned int, const distortion_lookup_t**, const unsigned int, const double *, double *)) PyWcs_API[7]) #define sip_clear (*(void (*)(sip_t*) PyWcs_API[8])) #define sip_init (*(int (*)(sip_t*, unsigned int, double*, unsigned int, double*, unsigned int, double*, unsigned int, double*, double*)) PyWcs_API[9]) #define sip_free (*(void (*)(sip_t*) PyWcs_API[10])) #define sip_pix2foc (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) PyWcs_API[11]) #define sip_pix2deltas (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) PyWcs_API[12]) #define sip_foc2pix (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) PyWcs_API[13]) #define sip_foc2deltas (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) PyWcs_API[14]) #define pipeline_clear (*(void (*)(pipeline_t*)) PyWcs_API[15]) #define pipeline_init (*(void (*)(pipeline_t*, sip_t*, distortion_lookup_t**, struct wcsprm*)) PyWcs_API[16]) #define pipeline_free (*(void (*)(pipeline_t*)) PyWcs_API[17]) #define pipeline_all_pixel2world (*(int (*)(pipeline_t*, unsigned int, unsigned int, double*, double*)) PyWcs_API[18]) #define pipeline_pix2foc (*(int (*)(pipeline_t*, unsigned int, unsigned int, double*, double*)) PyWcs_API[19]) #define wcsp2s (*(int (*)(struct wcsprm *, int, int, const double[], double[], double[], double[], double[], int[])) PyWcs_API[20]) #define wcss2p (*(int (*)(struct wcsprm *, int, int, const double[], double[], double[], double[], double[], int[])) PyWcs_API[21]) #define wcsprt (*(int (*)(struct wcsprm *)) PyWcs_API[22]) #define wcslib_get_error_message (*(const char* (*)(int)) PyWcs_API[23]) #define wcsprintf_buf (*(const char * (*)()) PyWCS_API[24]) #ifndef NO_IMPORT_PYWCS_API int import_pywcs(void) { PyObject *pywcs_module = NULL; PyObject *c_api = NULL; int status = -1; #if PY_VERSION_HEX >= 0x03020000 PyWcs_API = (void **)PyCapsule_Import("pywcs._pywcs._WCS_API", 0); if (PyWcs_API == NULL) goto exit; #else pywcs_module = PyImport_ImportModule("pywcs._pywcs"); if (pywcs_module == NULL) goto exit; c_api = PyObject_GetAttrString(pywcs_module, "_PYWCS_API"); if (c_api == NULL) goto exit; if (PyCObject_Check(c_api)) { PyWcs_API = (void **)PyCObject_AsVoidPtr(c_api); } else { goto exit; } #endif /* Perform runtime check of C API version */ if (REVISION != PyWcs_GetCVersion()) { PyErr_Format( PyExc_ImportError, "module compiled against " \ "ABI version '%x' but this version of pywcs is '%x'", \ (int)REVISION, (int)PyWcs_GetCVersion()); return -1; } exit: Py_XDECREF(pywcs_module); Py_XDECREF(c_api); return status; } #endif /* !defined(NO_IMPORT_PYWCS_API) */ #endif /* PYWCS_BUILD */ #endif /* PYWCS_API_H */ pywcs-1.12/src/sip.c0000644001153600020070000002140312310355626016374 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #include "sip.h" #include #include #include #define SIP_ERRMSG(status) WCSERR_SET(status) void sip_clear( sip_t* sip) { assert(sip != NULL); sip->a_order = 0; sip->a = NULL; sip->b_order = 0; sip->b = NULL; sip->ap_order = 0; sip->ap = NULL; sip->bp_order = 0; sip->bp = NULL; sip->crpix[0] = 0.0; sip->crpix[1] = 0.0; sip->scratch = NULL; sip->err = NULL; } int sip_init( sip_t* sip, const unsigned int a_order, const double* a, const unsigned int b_order, const double* b, const unsigned int ap_order, const double* ap, const unsigned int bp_order, const double* bp, const double* crpix /* [2] */) { unsigned int a_size = 0; unsigned int b_size = 0; unsigned int ap_size = 0; unsigned int bp_size = 0; unsigned int scratch_size = 0; int status = 0; struct wcserr** err = NULL; static const char *function = "sip_init"; assert(sip != NULL); sip_clear(sip); err = &(sip->err); /* We we have one of A/B or AP/BP, we must have both. */ if ((a == NULL) ^ (b == NULL)) { return wcserr_set( SIP_ERRMSG(WCSERR_BAD_COORD_TRANS), "Both A and B SIP transform must be defined"); } if ((ap == NULL) ^ (bp == NULL)) { return wcserr_set( SIP_ERRMSG(WCSERR_BAD_COORD_TRANS), "Both AP and BP SIP transform must be defined"); } if (a != NULL) { sip->a_order = a_order; a_size = (a_order + 1) * (a_order + 1) * sizeof(double); sip->a = malloc(a_size); if (sip->a == NULL) { sip_free(sip); status = wcserr_set( SIP_ERRMSG(WCSERR_MEMORY), "Memory allocation failed"); goto exit; } memcpy(sip->a, a, a_size); if (a_order > scratch_size) { scratch_size = a_order; } sip->b_order = b_order; b_size = (b_order + 1) * (b_order + 1) * sizeof(double); sip->b = malloc(b_size); if (sip->b == NULL) { sip_free(sip); status = wcserr_set( SIP_ERRMSG(WCSERR_MEMORY), "Memory allocation failed"); goto exit; } memcpy(sip->b, b, b_size); if (b_order > scratch_size) { scratch_size = b_order; } } if (ap != NULL) { sip->ap_order = ap_order; ap_size = (ap_order + 1) * (ap_order + 1) * sizeof(double); sip->ap = malloc(ap_size); if (sip->ap == NULL) { sip_free(sip); status = wcserr_set( SIP_ERRMSG(WCSERR_MEMORY), "Memory allocation failed"); goto exit; } memcpy(sip->ap, ap, ap_size); if (ap_order > scratch_size) { scratch_size = ap_order; } sip->bp_order = bp_order; bp_size = (bp_order + 1) * (bp_order + 1) * sizeof(double); sip->bp = malloc(bp_size); if (sip->bp == NULL) { sip_free(sip); status = wcserr_set( SIP_ERRMSG(WCSERR_MEMORY), "Memory allocation failed"); goto exit; } memcpy(sip->bp, bp, bp_size); if (bp_order > scratch_size) { scratch_size = bp_order; } } scratch_size = (scratch_size + 1) * sizeof(double); sip->scratch = malloc(scratch_size); if (sip->scratch == NULL) { sip_free(sip); status = wcserr_set( SIP_ERRMSG(WCSERR_MEMORY), "Memory allocation failed"); goto exit; } sip->crpix[0] = crpix[0]; sip->crpix[1] = crpix[1]; exit: return status; } void sip_free(sip_t* sip) { free(sip->a); sip->a = NULL; free(sip->b); sip->b = NULL; free(sip->ap); sip->ap = NULL; free(sip->bp); sip->bp = NULL; free(sip->scratch); sip->scratch = NULL; free(sip->err); sip->err = NULL; } static pywcs_inline double lu( const unsigned int order, const double* const matrix, const int x, const int y) { int index; assert(x >= 0 && x <= (int)order); assert(y >= 0 && y <= (int)order); index = x * ((int)order + 1) + y; assert(index >= 0 && index < ((int)order + 1) * ((int)order + 1)); return matrix[index]; } static int sip_compute( /*@unused@*/ const unsigned int naxes, const unsigned int nelem, const unsigned int m, /*@null@*/ const double* a, const unsigned int n, /*@null@*/ const double* b, const double* crpix /* [2] */, /*@null@*/ double* tmp, /*@null@*/ const double* input /* [NAXES][nelem] */, /*@null@*/ double* output /* [NAXES][nelem] */) { unsigned int i; int j, k; double x, y; double sum; const double* input_ptr; double* output_ptr; assert(a != NULL); assert(b != NULL); assert(crpix != NULL); assert(tmp != NULL); assert(input != NULL); assert(output != NULL); /* Avoid segfaults */ if (input == NULL || output == NULL || tmp == NULL || crpix == NULL) { return 1; } /* If we have one, we must have both... */ if ((a == NULL) ^ (b == NULL)) { return 6; } /* If no distortion, just return values */ if (a == NULL /* && b == NULL ... implied */) { return 0; } input_ptr = input; output_ptr = output; for (i = 0; i < nelem; ++i) { x = *input_ptr++ - crpix[0]; y = *input_ptr++ - crpix[1]; for (j = 0; j <= (int)m; ++j) { tmp[j] = lu(m, a, (int)m-j, j); for (k = j-1; k >= 0; --k) { tmp[j] = (y * tmp[j]) + lu(m, a, (int)m-j, k); } } sum = tmp[0]; for (j = (int)m; j > 0; --j) { sum = x * sum + tmp[(int)m - j + 1]; } *output_ptr++ += sum; for (j = 0; j <= (int)n; ++j) { tmp[j] = lu(n, b, (int)n-j, j); for (k = j-1; k >= 0; --k) { tmp[j] = (y * tmp[j]) + lu(n, b, (int)n-j, k); } } sum = tmp[0]; for (j = (int)n; j > 0; --j) { sum = x * sum + tmp[n - j + 1]; } *output_ptr++ += sum; } return 0; } int sip_pix2deltas( const sip_t* sip, const unsigned int naxes, const unsigned int nelem, const double* pix /* [NAXES][nelem] */, double* deltas /* [NAXES][nelem] */) { if (sip == NULL) { return 1; } return sip_compute(naxes, nelem, sip->a_order, sip->a, sip->b_order, sip->b, sip->crpix, (double *)sip->scratch, pix, deltas); } int sip_foc2deltas( const sip_t* sip, const unsigned int naxes, const unsigned int nelem, const double* foc /* [NAXES][nelem] */, double* deltas /* [NAXES][nelem] */) { if (sip == NULL) { return 1; } return sip_compute(naxes, nelem, sip->ap_order, sip->ap, sip->bp_order, sip->bp, sip->crpix, (double *)sip->scratch, foc, deltas); } int sip_pix2foc( const sip_t* sip, const unsigned int naxes, const unsigned int nelem, const double* pix /* [NAXES][nelem] */, double* foc /* [NAXES][nelem] */) { assert(pix); assert(foc); if (pix != foc) { memcpy(foc, pix, sizeof(double) * naxes * nelem); } return sip_pix2deltas(sip, naxes, nelem, pix, foc); } int sip_foc2pix( const sip_t* sip, const unsigned int naxes, const unsigned int nelem, const double* foc /* [NAXES][nelem] */, double* pix /* [NAXES][nelem] */) { assert(pix); assert(foc); if (pix != foc) { memcpy(pix, foc, sizeof(double) * naxes * nelem); } return sip_foc2deltas(sip, naxes, nelem, foc, pix); } pywcs-1.12/src/sip.h0000644001153600020070000001306312310355626016404 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __SIP_H__ #define __SIP_H__ #include "util.h" typedef struct { unsigned int a_order; /*@null@*/ /*@shared@*/ double* a; unsigned int b_order; /*@null@*/ /*@shared@*/ double* b; unsigned int ap_order; /*@null@*/ /*@shared@*/ double* ap; unsigned int bp_order; /*@null@*/ /*@shared@*/ double* bp; double crpix[2]; /*@null@*/ double* scratch; struct wcserr* err; } sip_t; /** Sets all the values of the sip_t structure to NULLs or zeros. */ void sip_clear(sip_t* sip); /** Set the values of the sip_t structure. The values expected are all exactly as defined in the FITS SIP header keywords. The arrays/matrices are all *copied* into the SIP struct. To free the memory that sip_t allocates for itself, call sip_free. @param a_order: The order of the A_i_j matrix @param a: The A_i_j array, which must be of size [a_order+1][a_order+1] @param b_order: The order of the B_i_j matrix @param b: The B_i_j array, which must be of size [b_order+1][b_order+1] @param ap_order: The order of the AP_i_j matrix @param ap: The AP_i_j array, which must be of size [ap_order+1][ap_order+1] @param bp_order: The order of the BP_i_j matrix @param bp: The BP_i_j array, which must be of size [bp_order+1][bp_order+1] @param crpix: The position of the reference pixel */ int sip_init( sip_t* sip, const unsigned int a_order, const double* a, const unsigned int b_order, const double* b, const unsigned int ap_order, const double* ap, const unsigned int bp_order, const double* bp, const double* crpix /* [2] */); /** Frees the memory allocated for the sip_t struct. */ void sip_free(sip_t* sip); /** Converts pixel coordinates to focal plane coordinates using the SIP polynomial distortion convention, and the values stored in the sip_t struct. @param naxes @param nelem @param pix [in]: An array of pixel coordinates @param foc [out]: An array of focal plane coordinates @return A wcslib error code */ int sip_pix2foc( const sip_t* sip, const unsigned int naxes, const unsigned int nelem, const double* pix /* [NAXES][nelem] */, double* foc /* [NAXES][nelem] */); /** Computes the offset deltas necessary to convert pixel coordinates to focal plane coordinates using the SIP polynomial distortion convention, and the values stored in the sip_t struct. The deltas are added to the existing values in pix. @param naxes @param nelem @param pix [in]: An array of pixel coordinates @param foc [in/out]: An array of deltas, that when added to pix results in focal plane coordinates. @return A wcslib error code */ int sip_pix2deltas( const sip_t* sip, const unsigned int naxes, const unsigned int nelem, const double* pix /* [NAXES][nelem] */, double* foc /* [NAXES][nelem] */); /** Adds the offset deltas necessary to convert focal plane coordinates to pixel coordinates using the SIP polynomial distortion convention, and the values stored in the sip_t struct. The deltas are added to the existing values in pix. @param naxes @param nelem @param foc [in]: An array of focal plane coordinates @param pix [in/out]: An array of pixel coordinates @return A wcslib error code */ int sip_foc2pix( const sip_t* sip, const unsigned int naxes, const unsigned int nelem, const double* foc /* [NAXES][nelem] */, double* pix /* [NAXES][nelem] */); /** Computes the offset deltas necessary to convert focal plane coordinates to pixel coordinates using the SIP polynomial distortion convention, and the values stored in the sip_t struct. The deltas are added to the existing values in foc. @param naxes @param nelem @param foc [in]: An array of focal plane coordinates @param foc [in/out]: An array of deltas, that when added to pix results in focal plane coordinates. @return A wcslib error code */ int sip_foc2deltas( const sip_t* sip, const unsigned int naxes, const unsigned int nelem, const double* foc /* [NAXES][nelem] */, double* deltas /* [NAXES][nelem] */); #endif pywcs-1.12/src/sip_wrap.c0000644001153600020070000003343612310355626017436 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #define NO_IMPORT_ARRAY #include "sip_wrap.h" #include "docstrings.h" #include "wcs.h" static void PySip_dealloc( PySip* self) { sip_free(&self->x); Py_TYPE(self)->tp_free((PyObject*)self); } /*@null@*/ static PyObject * PySip_new( PyTypeObject* type, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { PySip* self; self = (PySip*)type->tp_alloc(type, 0); if (self != NULL) { sip_clear(&self->x); } return (PyObject*)self; } static int convert_matrix( /*@null@*/ PyObject* pyobj, PyArrayObject** array, double** data, unsigned int* order) { if (pyobj == Py_None) { *array = NULL; *data = NULL; *order = 0; return 0; } *array = (PyArrayObject*)PyArray_ContiguousFromAny( pyobj, PyArray_DOUBLE, 2, 2); if (*array == NULL) { return -1; } if (PyArray_DIM(*array, 0) != PyArray_DIM(*array, 1)) { PyErr_SetString(PyExc_ValueError, "Matrix must be square."); return -1; } *data = (double*)PyArray_DATA(*array); *order = (unsigned int)PyArray_DIM(*array, 0) - 1; return 0; } static int PySip_init( PySip* self, PyObject* args, /*@unused@*/ PyObject* kwds) { PyObject* py_a = NULL; PyObject* py_b = NULL; PyObject* py_ap = NULL; PyObject* py_bp = NULL; PyObject* py_crpix = NULL; PyArrayObject* a = NULL; PyArrayObject* b = NULL; PyArrayObject* ap = NULL; PyArrayObject* bp = NULL; PyArrayObject* crpix = NULL; double* a_data = NULL; double* b_data = NULL; double* ap_data = NULL; double* bp_data = NULL; unsigned int a_order = 0; unsigned int b_order = 0; unsigned int ap_order = 0; unsigned int bp_order = 0; int status = -1; if (!PyArg_ParseTuple(args, "OOOOO:Sip.__init__", &py_a, &py_b, &py_ap, &py_bp, &py_crpix)) { return -1; } if (convert_matrix(py_a, &a, &a_data, &a_order) || convert_matrix(py_b, &b, &b_data, &b_order) || convert_matrix(py_ap, &ap, &ap_data, &ap_order) || convert_matrix(py_bp, &bp, &bp_data, &bp_order)) { goto exit; } crpix = (PyArrayObject*)PyArray_ContiguousFromAny(py_crpix, PyArray_DOUBLE, 1, 1); if (crpix == NULL) { goto exit; } if (PyArray_DIM(crpix, 0) != 2) { PyErr_SetString(PyExc_ValueError, "CRPIX wrong length"); goto exit; } status = sip_init(&self->x, a_order, a_data, b_order, b_data, ap_order, ap_data, bp_order, bp_data, PyArray_DATA(crpix)); exit: Py_XDECREF(a); Py_XDECREF(b); Py_XDECREF(ap); Py_XDECREF(bp); Py_XDECREF(crpix); if (status == 0) { return 0; } else if (status == -1) { /* Exception already set */ return -1; } else { wcserr_to_python_exc(self->x.err); return -1; } } /*@null@*/ static PyObject* PySip_pix2foc( PySip* self, PyObject* args, PyObject* kwds) { PyObject* pixcrd_obj = NULL; int origin = 1; PyArrayObject* pixcrd = NULL; PyArrayObject* foccrd = NULL; int status = -1; const char* keywords[] = { "pixcrd", "origin", NULL }; if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oi:pix2foc", (char **)keywords, &pixcrd_obj, &origin)) { return NULL; } if (self->x.a == NULL || self->x.b == NULL) { PyErr_SetString( PyExc_ValueError, "SIP object does not have coefficients for pix2foc transformation (A and B)"); return NULL; } pixcrd = (PyArrayObject*)PyArray_ContiguousFromAny(pixcrd_obj, PyArray_DOUBLE, 2, 2); if (pixcrd == NULL) { goto exit; } if (PyArray_DIM(pixcrd, 1) != 2) { PyErr_SetString(PyExc_ValueError, "Pixel array must be an Nx2 array"); goto exit; } foccrd = (PyArrayObject*)PyArray_SimpleNew(2, PyArray_DIMS(pixcrd), PyArray_DOUBLE); if (foccrd == NULL) { goto exit; } Py_BEGIN_ALLOW_THREADS preoffset_array(pixcrd, origin); status = sip_pix2foc(&self->x, (unsigned int)PyArray_DIM(pixcrd, 1), (unsigned int)PyArray_DIM(pixcrd, 0), (const double*)PyArray_DATA(pixcrd), (double*)PyArray_DATA(foccrd)); unoffset_array(pixcrd, origin); unoffset_array(foccrd, origin); Py_END_ALLOW_THREADS exit: Py_XDECREF(pixcrd); if (status == 0) { return (PyObject*)foccrd; } else { Py_XDECREF(foccrd); if (status == -1) { /* Exception already set */ return NULL; } else { wcserr_to_python_exc(self->x.err); return NULL; } } } /*@null@*/ static PyObject* PySip_foc2pix( PySip* self, PyObject* args, PyObject* kwds) { PyObject* foccrd_obj = NULL; int origin = 1; PyArrayObject* foccrd = NULL; PyArrayObject* pixcrd = NULL; int status = -1; const char* keywords[] = { "foccrd", "origin", NULL }; if (!PyArg_ParseTupleAndKeywords(args, kwds, "Oi:foc2pix", (char **)keywords, &foccrd_obj, &origin)) { return NULL; } if (self->x.ap == NULL || self->x.bp == NULL) { PyErr_SetString( PyExc_ValueError, "SIP object does not have coefficients for foc2pix transformation (AP and BP)"); return NULL; } foccrd = (PyArrayObject*)PyArray_ContiguousFromAny(foccrd_obj, PyArray_DOUBLE, 2, 2); if (foccrd == NULL) { goto exit; } if (PyArray_DIM(foccrd, 1) != 2) { PyErr_SetString(PyExc_ValueError, "Pixel array must be an Nx2 array"); goto exit; } pixcrd = (PyArrayObject*)PyArray_SimpleNew(2, PyArray_DIMS(foccrd), PyArray_DOUBLE); if (pixcrd == NULL) { status = 2; goto exit; } Py_BEGIN_ALLOW_THREADS preoffset_array(foccrd, origin); status = sip_foc2pix(&self->x, (unsigned int)PyArray_DIM(pixcrd, 1), (unsigned int)PyArray_DIM(pixcrd, 0), (double*)PyArray_DATA(foccrd), (double*)PyArray_DATA(pixcrd)); unoffset_array(foccrd, origin); unoffset_array(pixcrd, origin); Py_END_ALLOW_THREADS exit: Py_XDECREF(foccrd); if (status == 0) { return (PyObject*)pixcrd; } else { Py_XDECREF(pixcrd); if (status == -1) { /* Exception already set */ return NULL; } else { wcserr_to_python_exc(self->x.err); return NULL; } } } /*@null@*/ static PyObject* PySip_get_a( PySip* self, /*@unused@*/ void* closure) { npy_intp dims[2]; if (self->x.a == NULL) { Py_INCREF(Py_None); return Py_None; } dims[0] = (npy_intp)self->x.a_order + 1; dims[1] = (npy_intp)self->x.a_order + 1; return get_double_array("a", self->x.a, 2, dims, (PyObject*)self); } /*@null@*/ static PyObject* PySip_get_b( PySip* self, /*@unused@*/ void* closure) { npy_intp dims[2]; if (self->x.b == NULL) { Py_INCREF(Py_None); return Py_None; } dims[0] = (npy_intp)self->x.b_order + 1; dims[1] = (npy_intp)self->x.b_order + 1; return get_double_array("b", self->x.b, 2, dims, (PyObject*)self); } /*@null@*/ static PyObject* PySip_get_ap( PySip* self, /*@unused@*/ void* closure) { npy_intp dims[2]; if (self->x.ap == NULL) { Py_INCREF(Py_None); return Py_None; } dims[0] = (npy_intp)self->x.ap_order + 1; dims[1] = (npy_intp)self->x.ap_order + 1; return get_double_array("ap", self->x.ap, 2, dims, (PyObject*)self); } /*@null@*/ static PyObject* PySip_get_bp( PySip* self, /*@unused@*/ void* closure) { npy_intp dims[2]; if (self->x.bp == NULL) { Py_INCREF(Py_None); return Py_None; } dims[0] = (npy_intp)self->x.bp_order + 1; dims[1] = (npy_intp)self->x.bp_order + 1; return get_double_array("bp", self->x.bp, 2, dims, (PyObject*)self); } static PyObject* PySip_get_a_order( PySip* self, /*@unused@*/ void* closure) { return get_int("a_order", (long int)self->x.a_order); } static PyObject* PySip_get_b_order( PySip* self, /*@unused@*/ void* closure) { return get_int("b_order", (long int)self->x.b_order); } static PyObject* PySip_get_ap_order( PySip* self, /*@unused@*/ void* closure) { return get_int("ap_order", (long int)self->x.ap_order); } static PyObject* PySip_get_bp_order( PySip* self, /*@unused@*/ void* closure) { return get_int("bp_order", (long int)self->x.bp_order); } static PyObject* PySip_get_crpix( PySip* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 2; return get_double_array("crpix", self->x.crpix, 1, &naxis, (PyObject*)self); } static PyObject* PySip___copy__( PySip* self, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { PySip* copy = NULL; copy = (PySip*)PySip_new(&PySipType, NULL, NULL); if (copy == NULL) { return NULL; } if (sip_init(©->x, self->x.a_order, self->x.a, self->x.b_order, self->x.b, self->x.ap_order, self->x.ap, self->x.bp_order, self->x.bp, self->x.crpix)) { Py_DECREF(copy); return NULL; } return (PyObject*)copy; } static PyGetSetDef PySip_getset[] = { {"a", (getter)PySip_get_a, NULL, (char *)doc_a}, {"a_order", (getter)PySip_get_a_order, NULL, (char *)doc_a_order}, {"b", (getter)PySip_get_b, NULL, (char *)doc_b}, {"b_order", (getter)PySip_get_b_order, NULL, (char *)doc_b_order}, {"ap", (getter)PySip_get_ap, NULL, (char *)doc_ap}, {"ap_order", (getter)PySip_get_ap_order, NULL, (char *)doc_ap_order}, {"bp", (getter)PySip_get_bp, NULL, (char *)doc_bp}, {"bp_order", (getter)PySip_get_bp_order, NULL, (char *)doc_bp_order}, {"crpix", (getter)PySip_get_crpix, NULL, (char *)doc_crpix}, {NULL} }; static PyMethodDef PySip_methods[] = { {"__copy__", (PyCFunction)PySip___copy__, METH_NOARGS, NULL}, {"__deepcopy__", (PyCFunction)PySip___copy__, METH_O, NULL}, {"pix2foc", (PyCFunction)PySip_pix2foc, METH_VARARGS|METH_KEYWORDS, doc_sip_pix2foc}, {"foc2pix", (PyCFunction)PySip_foc2pix, METH_VARARGS|METH_KEYWORDS, doc_sip_foc2pix}, {NULL} }; PyTypeObject PySipType = { #if PY3K PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ #endif "pywcs.Sip", /*tp_name*/ sizeof(PySip), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)PySip_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ doc_Sip, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ PySip_methods, /* tp_methods */ 0, /* tp_members */ PySip_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)PySip_init, /* tp_init */ 0, /* tp_alloc */ PySip_new, /* tp_new */ }; int _setup_sip_type( PyObject* m) { if (PyType_Ready(&PySipType) < 0) return -1; Py_INCREF(&PySipType); return PyModule_AddObject(m, "Sip", (PyObject *)&PySipType); } pywcs-1.12/src/sip_wrap.h0000644001153600020070000000333112310355626017432 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __SIP_WRAP_H__ #define __SIP_WRAP_H__ #include "pyutil.h" #include "sip.h" extern PyTypeObject PySipType; typedef struct { PyObject_HEAD sip_t x; } PySip; int _setup_sip_type( PyObject* m); #endif pywcs-1.12/src/str_list_proxy.c0000644001153600020070000002040012310355626020701 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #define NO_IMPORT_ARRAY #include "pyutil.h" /*************************************************************************** * List-of-strings proxy object ***************************************************************************/ static PyTypeObject PyStrListProxyType; typedef struct { PyObject_HEAD /*@null@*/ /*@shared@*/ PyObject* pyobject; Py_ssize_t size; Py_ssize_t maxsize; char (*array)[72]; str_verify_fn verify; } PyStrListProxy; static void PyStrListProxy_dealloc( PyStrListProxy* self) { Py_XDECREF(self->pyobject); Py_TYPE(self)->tp_free((PyObject*)self); } /*@null@*/ static PyObject * PyStrListProxy_new( PyTypeObject* type, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { PyStrListProxy* self = NULL; self = (PyStrListProxy*)type->tp_alloc(type, 0); if (self != NULL) { self->pyobject = NULL; } return (PyObject*)self; } static int PyStrListProxy_traverse( PyStrListProxy* self, visitproc visit, void *arg) { int vret; if (self->pyobject) { vret = visit(self->pyobject, arg); if (vret != 0) { return vret; } } return 0; } static int PyStrListProxy_clear( PyStrListProxy *self) { PyObject *tmp; tmp = self->pyobject; self->pyobject = NULL; Py_XDECREF(tmp); return 0; } /*@null@*/ PyObject * PyStrListProxy_New( /*@shared@*/ PyObject* owner, Py_ssize_t size, Py_ssize_t maxsize, char (*array)[72], str_verify_fn verify) { PyStrListProxy* self = NULL; if (maxsize == 0) { maxsize = 68; } self = (PyStrListProxy*)PyStrListProxyType.tp_alloc(&PyStrListProxyType, 0); if (self == NULL) { return NULL; } Py_XINCREF(owner); self->pyobject = owner; self->size = size; self->maxsize = maxsize; self->array = array; self->verify = verify; return (PyObject*)self; } static Py_ssize_t PyStrListProxy_len( PyStrListProxy* self) { return self->size; } /*@null@*/ static PyObject* PyStrListProxy_getitem( PyStrListProxy* self, Py_ssize_t index) { if (index >= self->size) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } #if PY3K return PyBytes_FromString(self->array[index]); #else return PyString_FromString(self->array[index]); #endif } static int PyStrListProxy_setitem( PyStrListProxy* self, Py_ssize_t index, PyObject* arg) { char* value; Py_ssize_t value_length; if (index > self->size) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } #if PY3K if (PyBytes_AsStringAndSize(arg, &value, &value_length)) { #else if (PyString_AsStringAndSize(arg, &value, &value_length)) { #endif return -1; } if (value_length >= self->maxsize) { PyErr_Format(PyExc_ValueError, "string must be less than %zd characters", self->maxsize); return -1; } if (self->verify && !self->verify(value)) { return -1; } strncpy(self->array[index], value, self->maxsize); return 0; } /*@null@*/ static PyObject* PyStrListProxy_repr( PyStrListProxy* self) { char* buffer = NULL; char* wp = NULL; char* rp = NULL; Py_ssize_t i = 0; Py_ssize_t j = 0; PyObject* result = NULL; /* These are in descending order, so we can exit the loop quickly. They are in pairs: (char_to_escape, char_escaped) */ const char* escapes = "\\\\''\rr\ff\vv\nn\tt\bb\aa"; const char* e = NULL; char next_char = '\0'; /* Overallocating to allow for escaped characters */ buffer = malloc((size_t)self->size*self->maxsize*2 + 2); if (buffer == NULL) { PyErr_SetString(PyExc_MemoryError, "Could not allocate memory."); return NULL; } wp = buffer; *wp++ = '['; for (i = 0; i < self->size; ++i) { *wp++ = '\''; rp = self->array[i]; for (j = 0; j < self->maxsize && *rp != '\0'; ++j) { /* Check if this character should be escaped */ e = escapes; next_char = *rp++; do { if (next_char > *e) { break; } else if (next_char == *e) { *wp++ = '\\'; next_char = *(++e); break; } else { e += 2; } } while (*e != '\0'); *wp++ = next_char; } *wp++ = '\''; /* Add a comma for all but the last one */ if (i != self->size - 1) { *wp++ = ','; *wp++ = ' '; } } *wp++ = ']'; *wp++ = '\0'; #if PY3K result = PyUnicode_FromString(buffer); #else result = PyString_FromString(buffer); #endif free(buffer); return result; } static PySequenceMethods PyStrListProxy_sequence_methods = { (lenfunc)PyStrListProxy_len, NULL, NULL, (ssizeargfunc)PyStrListProxy_getitem, NULL, (ssizeobjargproc)PyStrListProxy_setitem, NULL, NULL, NULL, NULL }; static PyTypeObject PyStrListProxyType = { #if PY3K PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ #endif "pywcs.StrListProxy", /*tp_name*/ sizeof(PyStrListProxy), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)PyStrListProxy_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ (reprfunc)PyStrListProxy_repr, /*tp_repr*/ 0, /*tp_as_number*/ &PyStrListProxy_sequence_methods, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ (reprfunc)PyStrListProxy_repr, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /*tp_flags*/ 0, /* tp_doc */ (traverseproc)PyStrListProxy_traverse, /* tp_traverse */ (inquiry)PyStrListProxy_clear, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ PyStrListProxy_new, /* tp_new */ }; int _setup_str_list_proxy_type( /*@unused@*/ PyObject* m) { if (PyType_Ready(&PyStrListProxyType) < 0) { return 1; } return 0; } pywcs-1.12/src/str_list_proxy.h0000644001153600020070000000422112310355626020711 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __STR_LIST_PROXY_H__ #define __STR_LIST_PROXY_H__ #include "pyutil.h" /*************************************************************************** * List-of-strings proxy object * * A Python object that looks like a list of strings, but is back by a C * char * list[]; ***************************************************************************/ typedef int (*str_verify_fn)(const char *); /*@null@*/ PyObject * PyStrListProxy_New( PyObject* owner, Py_ssize_t size, Py_ssize_t maxsize, char (*array)[72], str_verify_fn verify ); int _setup_str_list_proxy_type( PyObject* m); #endif /* __STR_LIST_PROXY_H__ */ pywcs-1.12/src/util.c0000644001153600020070000000404212310355626016556 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #define NO_IMPORT_ARRAY #include "util.h" #include #include void set_invalid_to_nan( const int ncoord, const int nelem, double* const data, const int* const stat) { int i = 0; double* d = data; const int* s = stat; const int* s_end = stat + ncoord; double n; #ifndef NAN #define INF (DBL_MAX+DBL_MAX) #define NAN (INF-INF) #endif n = NAN; for ( ; s != s_end; ++s) { if (*s) { for (i = 0; i < nelem; ++i) { *d++ = n; } } else { d += nelem; } } } pywcs-1.12/src/util.h0000644001153600020070000000376512310355626016576 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __UTIL_H__ #define __UTIL_H__ #ifdef __SUNPRO_C #define pywcs_inline #endif #ifdef _MSC_VER #define pywcs_inline __inline #endif #ifndef pywcs_inline #define pywcs_inline inline #endif #include #include #include "isnan.h" #undef CLAMP #define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) void set_invalid_to_nan( const int ncoord, const int nelem, double* const data, const int* const stat); #endif /* __UTIL_H__ */ pywcs-1.12/src/wcsconfig.h0000644001153600020070000000225012310355731017564 0ustar cslocumSTSCI\science00000000000000 /* WCSLIB library version number. */ #define WCSLIB_VERSION 4.10 /* 64-bit integer data type. */ #define WCSLIB_INT64 long long int /* Windows needs some other defines */ /* I think the only one we need is _WIN32, but the others don't hurt - Mark S. 2012-02-14 */ #if defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) || defined (__MINGW64__) /* * There is a lexical analyzer that was generated by flex. Tell it * that we don't have unistd.h */ #ifndef YY_NO_UNISTD_H #define YY_NO_UNISTD_H #endif /* * Visual C++ will warn you about certain functions that have a * high risk of buffer overflows, such as strcpy(). This * tells the compiler to shut up about it. */ #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif /* * Suppress definition of wcsset() by system include files. * I don't know what's up with mingw. * In Visual C, the __STDC__ excludes non-standard things that * would otherwise be defined in the header files. */ #ifndef _NO_OLDNAMES /* for mingw32 */ #define _NO_OLDNAMES #endif #ifndef NO_OLDNAMES /* for mingw64 */ #define NO_OLDNAMES #endif #ifndef __STDC__ /* for MS Visual C */ #define __STDC__ 1 #endif #endif pywcs-1.12/src/wcslib_tabprm_wrap.c0000644001153600020070000003020312310355626021460 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #define NO_IMPORT_ARRAY #include "wcslib_tabprm_wrap.h" #include #include #include /* It gets to be really tedious to type long docstrings in ANSI C syntax (since multi-line strings literals are not valid). Therefore, the docstrings are written in doc/docstrings.py, which are then converted by setup.py into docstrings.h, which we include here. */ #include "docstrings.h" /*************************************************************************** * Helper functions * ***************************************************************************/ static pywcs_inline void note_change(PyTabprm* self) { self->x->flag = 0; } static int make_fancy_dims(PyTabprm* self, npy_intp* ndims, npy_intp* dims) { npy_intp i, M; M = (npy_intp)self->x->M; if (M + 1 > NPY_MAXDIMS) { PyErr_SetString(PyExc_ValueError, "Too many dimensions"); return -1; } *ndims = M + 1; for (i = 0; i < M; ++i) { dims[i] = self->x->K[M-1-i]; } dims[M] = M; return 0; } PyObject** tab_errexc[6]; static void wcslib_tab_to_python_exc(int status) { if (status > 0 && status < 6) { PyErr_SetString(*tab_errexc[status], tab_errmsg[status]); } else { PyErr_SetString( PyExc_RuntimeError, "Unknown error occurred. Something is seriously wrong."); } } /*************************************************************************** * PyTabprm methods */ static int PyTabprm_traverse( PyTabprm* self, visitproc visit, void *arg) { int vret; vret = visit(self->owner, arg); if (vret != 0) { return vret; } return 0; } static int PyTabprm_clear( PyTabprm* self) { PyObject* tmp; tmp = self->owner; self->owner = NULL; Py_XDECREF(tmp); return 0; } static void PyTabprm_dealloc( PyTabprm* self) { PyTabprm_clear(self); Py_TYPE(self)->tp_free((PyObject*)self); } PyTabprm* PyTabprm_cnew(PyObject* wcsprm, struct tabprm* x) { PyTabprm* self; self = (PyTabprm*)(&PyTabprmType)->tp_alloc(&PyTabprmType, 0); self->x = x; Py_INCREF(wcsprm); self->owner = wcsprm; return self; } static int PyTabprm_cset( PyTabprm* self) { int status = 0; status = tabset(self->x); if (status == 0) { return 0; } else { wcslib_tab_to_python_exc(status); return -1; } } /*@null@*/ static PyObject* PyTabprm_set( PyTabprm* self) { if (PyTabprm_cset(self)) { return NULL; } Py_INCREF(Py_None); return Py_None; } /*@null@*/ static PyObject* PyTabprm_print_contents( PyTabprm* self) { int ignored; if (PyTabprm_cset(self)) { return NULL; } /* This is not thread-safe, but since we're holding onto the GIL, we can assume we won't have thread conflicts */ wcsprintf_set(NULL); ignored = tabprt(self->x); printf("%s", wcsprintf_buf()); Py_INCREF(Py_None); return Py_None; } /*@null@*/ static PyObject* PyTabprm___str__( PyTabprm* self) { int ignored; if (PyTabprm_cset(self)) { return NULL; } /* This is not thread-safe, but since we're holding onto the GIL, we can assume we won't have thread conflicts */ wcsprintf_set(NULL); ignored = tabprt(self->x); #if PY3K return PyUnicode_FromString(wcsprintf_buf()); #else return PyString_FromString(wcsprintf_buf()); #endif } /*************************************************************************** * Member getters/setters (properties) */ /*@null@*/ static PyObject* PyTabprm_get_coord( PyTabprm* self, /*@unused@*/ void* closure) { npy_intp ndims; npy_intp dims[NPY_MAXDIMS]; if (is_null(self->x->coord)) { return NULL; } if (make_fancy_dims(self, &ndims, dims)) { return NULL; } return get_double_array("coord", self->x->coord, ndims, dims, (PyObject*)self); } /*@null@*/ static int PyTabprm_set_coord( PyTabprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp ndims; npy_intp dims[NPY_MAXDIMS]; if (is_null(self->x->coord)) { return -1; } if (make_fancy_dims(self, &ndims, dims)) { return -1; } return set_double_array("coord", value, ndims, dims, self->x->coord); } /*@null@*/ static PyObject* PyTabprm_get_crval( PyTabprm* self, /*@unused@*/ void* closure) { Py_ssize_t M = 0; if (is_null(self->x->crval)) { return NULL; } M = (Py_ssize_t)self->x->M; return get_double_array("crval", self->x->crval, 1, &M, (PyObject*)self); } static int PyTabprm_set_crval( PyTabprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp M = 0; if (is_null(self->x->crval)) { return -1; } M = (Py_ssize_t)self->x->M; note_change(self); return set_double_array("crval", value, 1, &M, self->x->crval); } /*@null@*/ static PyObject* PyTabprm_get_delta( PyTabprm* self, /*@unused@*/ void* closure) { Py_ssize_t M = 0; if (is_null(self->x->delta)) { return NULL; } M = (Py_ssize_t)self->x->M; return get_double_array("delta", self->x->delta, 1, &M, (PyObject*)self); } /*@null@*/ static PyObject* PyTabprm_get_extrema( PyTabprm* self, /*@unused@*/ void* closure) { npy_intp ndims; npy_intp dims[NPY_MAXDIMS]; if (is_null(self->x->coord)) { return NULL; } if (make_fancy_dims(self, &ndims, dims)) { return NULL; } dims[ndims-2] = 2; return get_double_array("extrema", self->x->extrema, ndims, dims, (PyObject*)self); } /*@null@*/ static PyObject* PyTabprm_get_K( PyTabprm* self, /*@unused@*/ void* closure) { Py_ssize_t M = 0; if (is_null(self->x->K)) { return NULL; } M = (Py_ssize_t)self->x->M; return get_int_array("K", self->x->K, 1, &M, (PyObject*)self); } /*@null@*/ static PyObject* PyTabprm_get_M( PyTabprm* self, /*@unused@*/ void* closure) { return get_int("M", self->x->M); } /*@null@*/ static PyObject* PyTabprm_get_map( PyTabprm* self, /*@unused@*/ void* closure) { Py_ssize_t M = 0; if (is_null(self->x->map)) { return NULL; } M = (Py_ssize_t)self->x->M; return get_int_array("map", self->x->map, 1, &M, (PyObject*)self); } static int PyTabprm_set_map( PyTabprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp M = 0; if (is_null(self->x->map)) { return -1; } M = (Py_ssize_t)self->x->M; note_change(self); return set_int_array("map", value, 1, &M, self->x->map); } /*@null@*/ static PyObject* PyTabprm_get_nc( PyTabprm* self, /*@unused@*/ void* closure) { return get_int("nc", self->x->nc); } /*@null@*/ static PyObject* PyTabprm_get_p0( PyTabprm* self, /*@unused@*/ void* closure) { Py_ssize_t M = 0; if (is_null(self->x->p0)) { return NULL; } M = (Py_ssize_t)self->x->M; return get_int_array("p0", self->x->p0, 1, &M, (PyObject*)self); } /*@null@*/ static PyObject* PyTabprm_get_sense( PyTabprm* self, /*@unused@*/ void* closure) { Py_ssize_t M = 0; if (is_null(self->x->sense)) { return NULL; } M = (Py_ssize_t)self->x->M; return get_int_array("sense", self->x->sense, 1, &M, (PyObject*)self); } /*************************************************************************** * PyTabprm definition structures */ static PyGetSetDef PyTabprm_getset[] = { {"coord", (getter)PyTabprm_get_coord, (setter)PyTabprm_set_coord, (char *)doc_coord}, {"crval", (getter)PyTabprm_get_crval, (setter)PyTabprm_set_crval, (char *)doc_crval_tabprm}, {"delta", (getter)PyTabprm_get_delta, NULL, (char *)doc_delta}, {"extrema", (getter)PyTabprm_get_extrema, NULL, (char *)doc_extrema}, {"K", (getter)PyTabprm_get_K, NULL, (char *)doc_K}, {"M", (getter)PyTabprm_get_M, NULL, (char *)doc_M}, {"map", (getter)PyTabprm_get_map, (setter)PyTabprm_set_map, (char *)doc_map}, {"nc", (getter)PyTabprm_get_nc, NULL, (char *)doc_nc}, {"p0", (getter)PyTabprm_get_p0, NULL, (char *)doc_p0}, {"sense", (getter)PyTabprm_get_sense, NULL, (char *)doc_sense}, {NULL} }; static PyMethodDef PyTabprm_methods[] = { {"print_contents", (PyCFunction)PyTabprm_print_contents, METH_NOARGS, doc_print_contents_tabprm}, {"set", (PyCFunction)PyTabprm_set, METH_NOARGS, doc_set_tabprm}, {NULL} }; PyTypeObject PyTabprmType = { #if PY3K PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ #endif "pywcs.Tabprm", /*tp_name*/ sizeof(PyTabprm), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)PyTabprm_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ (reprfunc)PyTabprm___str__, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ (reprfunc)PyTabprm___str__, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ doc_Tabprm, /* tp_doc */ (traverseproc)PyTabprm_traverse, /* tp_traverse */ (inquiry)PyTabprm_clear, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ PyTabprm_methods, /* tp_methods */ 0, /* tp_members */ PyTabprm_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ }; int _setup_tabprm_type( PyObject* m) { if (PyType_Ready(&PyTabprmType) < 0) { return -1; } Py_INCREF(&PyTabprmType); PyModule_AddObject(m, "Tabprm", (PyObject *)&PyTabprmType); tab_errexc[0] = NULL; /* Success */ tab_errexc[1] = &PyExc_MemoryError; /* Null wcsprm pointer passed */ tab_errexc[2] = &PyExc_MemoryError; /* Memory allocation failed */ tab_errexc[3] = &WcsExc_InvalidTabularParameters; /* Invalid tabular parameters */ tab_errexc[4] = &WcsExc_InvalidCoordinate; /* One or more of the x coordinates were invalid */ tab_errexc[5] = &WcsExc_InvalidCoordinate; /* One or more of the world coordinates were invalid */ return 0; } pywcs-1.12/src/wcslib_tabprm_wrap.h0000644001153600020070000000351312310355626021471 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __WCSLIB_TABPRM_WRAP_H__ #define __WCSLIB_TABPRM_WRAP_H__ #include "pyutil.h" #include "wcs.h" extern PyTypeObject PyTabprmType; typedef struct { PyObject_HEAD struct tabprm* x; PyObject* owner; } PyTabprm; PyTabprm* PyTabprm_cnew(PyObject* wcsprm, struct tabprm* x); int _setup_tabprm_type(PyObject* m); #endif pywcs-1.12/src/wcslib_units_wrap.c0000644001153600020070000002537312310355626021351 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #define NO_IMPORT_ARRAY #include "wcslib_units_wrap.h" #include /* It gets to be really tedious to type long docstrings in ANSI C syntax (since multi-line strings literals are not valid). Therefore, the docstrings are written in doc/docstrings.py, which are then converted by setup.py into docstrings.h, which we include here. */ #include "docstrings.h" /*************************************************************************** * PyTabprm methods */ static int PyUnits_traverse( PyUnits* self, visitproc visit, void *arg) { return 0; } static int PyUnits_clear( PyUnits* self) { return 0; } static void PyUnits_dealloc( PyUnits* self) { PyUnits_clear(self); Py_TYPE(self)->tp_free((PyObject*)self); } PyUnits* PyUnits_cnew( const char* const have, const char* const want, const double scale, const double offset, const double power) { PyUnits* self; self = (PyUnits*)(&PyUnitsType)->tp_alloc(&PyUnitsType, 0); if (have == NULL) { self->have[0] = 0; } else { strncpy(self->have, have, 80); } if (want == NULL) { self->want[0] = 0; } else { strncpy(self->want, want, 80); } self->scale = scale; self->offset = offset; self->power = power; return self; } static PyObject * PyUnits_new( PyTypeObject* type, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { PyUnits* self; self = (PyUnits*)type->tp_alloc(type, 0); self->have[0] = 0; self->want[0] = 0; self->scale = 1.0; self->offset = 0.0; self->power = 1.0; return (PyObject*)self; } static int PyUnits_init( PyUnits* self, PyObject* args, PyObject* kwds) { int status = -1; char* have; char* want; char* ctrl_str = NULL; int ctrl = 0; const char* keywords[] = {"have", "want", "translate_units", NULL}; struct wcserr* err = NULL; if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss|s:UnitConverter.__init__", (char **)keywords, &have, &want, &ctrl_str)) { goto exit; } if (ctrl_str != NULL) { if (parse_unsafe_unit_conversion_spec(ctrl_str, &ctrl)) { goto exit; } } /* Copy the strings since we can't have wcslib monkeying with the data in a Python string */ strncpy(self->have, have, 80); strncpy(self->want, want, 80); status = wcsutrne(ctrl, self->have, &err); if (status != -1 && status != 0) { goto exit; } status = wcsutrne(ctrl, self->want, &err); if (status != -1 && status != 0) { goto exit; } status = wcsunitse(self->have, self->want, &self->scale, &self->offset, &self->power, &err); exit: if (PyErr_Occurred()) { return -1; } else if (status == 0) { return 0; } else { wcserr_units_to_python_exc(err); free(err); return -1; } } /*@null@*/ static PyObject* PyUnits___str__( PyUnits* self) { #define BUF_SIZE 1 << 8 char buffer[BUF_SIZE]; char scale[BUF_SIZE]; char offset[BUF_SIZE]; char power[BUF_SIZE]; if (self->scale != 1.0) { snprintf(scale, BUF_SIZE, "*%.12g", self->scale); } else { scale[0] = 0; } if (self->offset != 0.0) { snprintf(offset, BUF_SIZE, " + %.12g", self->offset); } else { offset[0] = 0; } if (self->power != 1.0) { snprintf(power, BUF_SIZE, " ** %.12g", self->power); } else { power[0] = 0; } snprintf(buffer, 1 << 8, "", self->have, self->want, scale, offset, power); #if PY3K return PyUnicode_FromString(buffer); #else return PyString_FromString(buffer); #endif } static PyObject* PyUnits_convert( PyUnits* self, PyObject* args, PyObject* kwds) { int status = 1; PyObject* input = NULL; PyArrayObject* input_arr = NULL; PyArrayObject* output_arr = NULL; PyObject* input_iter = NULL; PyObject* output_iter = NULL; double input_val; double output_val; if (!PyArg_ParseTuple(args, "O:UnitConverter.convert", &input)) { goto exit; } input_arr = (PyArrayObject*)PyArray_FromObject( input, NPY_DOUBLE, 0, NPY_MAXDIMS); if (input_arr == NULL) { goto exit; } output_arr = (PyArrayObject*)PyArray_SimpleNew( PyArray_NDIM(input_arr), PyArray_DIMS(input_arr), PyArray_DOUBLE); if (output_arr == NULL) { goto exit; } input_iter = PyArray_IterNew((PyObject*)input_arr); if (input_iter == NULL) { goto exit; } output_iter = PyArray_IterNew((PyObject*)output_arr); if (output_iter == NULL) { goto exit; } if (self->power != 1.0) { while (PyArray_ITER_NOTDONE(input_iter)) { input_val = *(double *)PyArray_ITER_DATA(input_iter); output_val = pow(self->scale*input_val + self->offset, self->power); if (errno) { PyErr_SetFromErrno(PyExc_ValueError); goto exit; } *(double *)PyArray_ITER_DATA(output_iter) = output_val; PyArray_ITER_NEXT(input_iter); PyArray_ITER_NEXT(output_iter); } } else { while (PyArray_ITER_NOTDONE(input_iter)) { input_val = *(double *)PyArray_ITER_DATA(input_iter); output_val = self->scale*input_val + self->offset; *(double *)PyArray_ITER_DATA(output_iter) = output_val; PyArray_ITER_NEXT(input_iter); PyArray_ITER_NEXT(output_iter); } } status = 0; exit: Py_XDECREF((PyObject*)input_arr); Py_XDECREF(input_iter); Py_XDECREF(output_iter); if (status) { Py_XDECREF((PyObject*)output_arr); return NULL; } return (PyObject*)output_arr; } /*************************************************************************** * Member getters/setters (properties) */ /*@null@*/ static PyObject* PyUnits_get_have( PyUnits* self, /*@unused@*/ void* closure) { #if PY3K return PyUnicode_FromString(self->have); #else return PyString_FromString(self->have); #endif } /*@null@*/ static PyObject* PyUnits_get_want( PyUnits* self, /*@unused@*/ void* closure) { #if PY3K return PyUnicode_FromString(self->want); #else return PyString_FromString(self->want); #endif } /*@null@*/ static PyObject* PyUnits_get_scale( PyUnits* self, /*@unused@*/ void* closure) { return get_double("scale", self->scale); } /*@null@*/ static PyObject* PyUnits_get_offset( PyUnits* self, /*@unused@*/ void* closure) { return get_double("offset", self->offset); } /*@null@*/ static PyObject* PyUnits_get_power( PyUnits* self, /*@unused@*/ void* closure) { return get_double("power", self->power); } /*************************************************************************** * PyUnits definition structures */ static PyGetSetDef PyUnits_getset[] = { {"have", (getter)PyUnits_get_have, NULL, (char *)doc_have}, {"want", (getter)PyUnits_get_want, NULL, (char *)doc_want}, {"scale", (getter)PyUnits_get_scale, NULL, (char *)doc_scale}, {"offset", (getter)PyUnits_get_offset, NULL, (char *)doc_offset}, {"power", (getter)PyUnits_get_power, NULL, (char *)doc_power}, {NULL} }; static PyMethodDef PyUnits_methods[] = { {"convert", (PyCFunction)PyUnits_convert, METH_VARARGS, doc_convert}, {NULL} }; PyTypeObject PyUnitsType = { #if PY3K PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ #endif "pywcs.UnitConverter", /*tp_name*/ sizeof(PyUnits), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)PyUnits_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ (reprfunc)PyUnits___str__, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ (reprfunc)PyUnits___str__, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ doc_UnitConverter, /* tp_doc */ (traverseproc)PyUnits_traverse, /* tp_traverse */ (inquiry)PyUnits_clear, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ PyUnits_methods, /* tp_methods */ 0, /* tp_members */ PyUnits_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)PyUnits_init, /* tp_init */ 0, /* tp_alloc */ PyUnits_new, /* tp_new */ }; int _setup_units_type( PyObject* m) { if (PyType_Ready(&PyUnitsType) < 0) { return -1; } Py_INCREF(&PyUnitsType); PyModule_AddObject(m, "UnitConverter", (PyObject *)&PyUnitsType); return 0; } pywcs-1.12/src/wcslib_units_wrap.h0000644001153600020070000000372312310355626021351 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __WCSLIB_UNITS_WRAP_H__ #define __WCSLIB_UNITS_WRAP_H__ #include "pyutil.h" #include "wcsunits.h" extern PyTypeObject PyUnitsType; typedef struct { PyObject_HEAD char have[80]; char want[80]; double scale; double offset; double power; } PyUnits; PyUnits* PyUnits_cnew( const char* const have, const char* const want, const double scale, const double offset, const double power); int _setup_units_type(PyObject* m); #endif pywcs-1.12/src/wcslib_wrap.c0000644001153600020070000022352012310355626020121 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #define NO_IMPORT_ARRAY #include "wcslib_wrap.h" #include "wcslib_tabprm_wrap.h" #include "wcslib_wtbarr_wrap.h" #include "wcslib_units_wrap.h" #include /* from Python */ #include #include #include #include #include #include #include "isnan.h" #include "distortion.h" /* It gets to be really tedious to type long docstrings in ANSI C syntax (since multi-line strings literals are not valid). Therefore, the docstrings are written in doc/docstrings.py, which are then converted by setup.py into docstrings.h, which we include here. */ #include "docstrings.h" /*************************************************************************** * Helper functions * ***************************************************************************/ enum e_altlin { has_pc = 1, has_cd = 2, has_crota = 4 }; static int is_valid_alt_key( const char* key) { if (key[1] != '\0' || !(key[0] == ' ' || (key[0] >= 'A' && key[0] <= 'Z'))) { PyErr_SetString(PyExc_ValueError, "key must be ' ' or 'A'-'Z'"); return 0; } return 1; } /*************************************************************************** * PyWcsprm methods */ static int PyWcsprm_cset(PyWcsprm* self, const int convert); static pywcs_inline void note_change(PyWcsprm* self) { self->x.flag = 0; } static void PyWcsprm_dealloc( PyWcsprm* self) { int ignored; ignored = wcsfree(&self->x); Py_TYPE(self)->tp_free((PyObject*)self); } static PyWcsprm* PyWcsprm_cnew(void) { PyWcsprm* self; self = (PyWcsprm*)(&PyWcsprmType)->tp_alloc(&PyWcsprmType, 0); return self; } static PyObject * PyWcsprm_new( PyTypeObject* type, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { PyWcsprm* self; self = (PyWcsprm*)type->tp_alloc(type, 0); return (PyObject*)self; } static int PyWcsprm_init( PyWcsprm* self, PyObject* args, PyObject* kwds) { int status; PyObject* header_obj = NULL; char * header = NULL; Py_ssize_t header_length = 0; Py_ssize_t nkeyrec = 0; char * key = " "; PyObject* relax_obj = NULL; int relax = 0; int naxis = -1; int keysel = -1; PyObject* colsel = Py_None; PyArrayObject* colsel_array = NULL; int* colsel_ints = NULL; int ctrl = 0; int nreject = 0; int nwcs = 0; struct wcsprm* wcs = NULL; int i = 0; const char* keywords[] = {"header", "key", "relax", "naxis", "keysel", "colsel", NULL}; PyObject* ignored = NULL; int ignored_int; if (!PyArg_ParseTupleAndKeywords( args, kwds, "|OsOiiO:WCSBase.__init__", (char **)keywords, &header_obj, &key, &relax_obj, &naxis, &keysel, &colsel)) { return -1; } if (header_obj == NULL || header_obj == Py_None) { if (relax_obj != NULL && relax_obj != Py_False) { PyErr_SetString( PyExc_ValueError, "If no header is provided, relax may not be provided either."); return -1; } if (keysel > 0) { PyErr_SetString( PyExc_ValueError, "If no header is provided, keysel may not be provided either."); return -1; } if (colsel != Py_None) { PyErr_SetString( PyExc_ValueError, "If no header is provided, colsel may not be provided either."); return -1; } /* Default number of axes is 2 */ if (naxis < 0) { naxis = 2; } if (naxis < 1 || naxis > 15) { PyErr_SetString( PyExc_ValueError, "naxis must be in range 1-15"); return -1; } note_change(self); self->x.flag = -1; status = wcsini(1, naxis, &self->x); if (status != 0) { PyErr_SetString( PyExc_MemoryError, self->x.err->msg); return -1; } self->x.alt[0] = key[0]; if (PyWcsprm_cset(self, 0)) { return -1; } wcsprm_c2python(&self->x); return 0; } else { /* header != NULL */ #if PY3K if (PyBytes_AsStringAndSize(header_obj, &header, &header_length)) { #else if (PyString_AsStringAndSize(header_obj, &header, &header_length)) { #endif return -1; } if (relax_obj == Py_True) { relax = WCSHDR_all; } else if (relax_obj == NULL || relax_obj == Py_False) { relax = WCSHDR_none; } else { #if PY3K relax = PyLong_AsLong(relax_obj); #else relax = PyInt_AsLong(relax_obj); #endif if (relax == -1) { PyErr_SetString( PyExc_ValueError, "relax must be True, False or an integer."); return -1; } } if (!is_valid_alt_key(key)) { return -1; } if (naxis >= 0) { PyErr_SetString( PyExc_ValueError, "naxis may not be provided if a header is provided."); return -1; } nkeyrec = header_length / 80; if (nkeyrec > 0x7fffffff) { PyErr_SetString( PyExc_MemoryError, "header is too long"); return -1; } if (colsel != Py_None) { colsel_array = (PyArrayObject*) PyArray_ContiguousFromAny( colsel, 1, 1, PyArray_INT); if (colsel_array == NULL) { return -1; } colsel_ints = malloc(sizeof(int) * (PyArray_DIM(colsel_array, 0) + 1)); if (colsel_ints == NULL) { Py_DECREF(colsel_array); PyErr_SetString( PyExc_MemoryError, "Memory allocation error."); return -1; } colsel_ints[0] = PyArray_DIM(colsel_array, 0); for (i = 0; i < colsel_ints[0]; ++i) { colsel_ints[i+1] = colsel_array->data[i]; } Py_DECREF(colsel_array); } if (keysel < 0) { status = wcspih( header, (int)nkeyrec, relax, ctrl, &nreject, &nwcs, &wcs); } else { status = wcsbth( header, (int)nkeyrec, relax, ctrl, keysel, colsel_ints, &nreject, &nwcs, &wcs); } free(colsel_ints); if (status != 0) { PyErr_SetString( PyExc_MemoryError, "Memory allocation error."); return -1; } if (nwcs == 0) { PyErr_SetString( WcsExc_NoWcsKeywordsFound, "No WCS keywords found in the given header"); return -1; } /* Find the desired WCS */ for (i = 0; i < nwcs; ++i) { if (wcs[i].alt[0] == key[0]) { break; } } if (i >= nwcs) { ignored_int = wcsvfree(&nwcs, &wcs); ignored = PyErr_Format( PyExc_KeyError, "No WCS with key '%s' was found in the given header", key); return -1; } if (wcscopy(1, wcs + i, &self->x) != 0) { ignored_int = wcsvfree(&nwcs, &wcs); PyErr_SetString( PyExc_MemoryError, self->x.err->msg); return -1; } note_change(self); wcsprm_c2python(&self->x); ignored_int = wcsvfree(&nwcs, &wcs); return 0; } } /*@null@*/ static PyObject* PyWcsprm_copy( PyWcsprm* self) { PyWcsprm* copy = NULL; int status; copy = PyWcsprm_cnew(); if (copy == NULL) { return NULL; } wcsprm_python2c(&self->x); status = wcscopy(1, &self->x, ©->x); wcsprm_c2python(&self->x); if (status == 0) { if (PyWcsprm_cset(copy, 0)) { Py_XDECREF(copy); return NULL; } wcsprm_c2python(©->x); return (PyObject*)copy; } else { Py_XDECREF(copy); wcs_to_python_exc(&(self->x)); return NULL; } } PyObject* PyWcsprm_find_all_wcs( PyObject* __, PyObject* args, PyObject* kwds) { PyObject* header_obj = NULL; char * header = NULL; Py_ssize_t header_length = 0; Py_ssize_t nkeyrec = 0; PyObject* relax_obj = NULL; int relax = 0; int keysel = 0; int ctrl = 0; int nreject = 0; int nwcs = 0; struct wcsprm* wcs = NULL; PyObject* result = NULL; PyWcsprm* subresult = NULL; int i = 0; int ignored = 0; const char* keywords[] = {"header", "relax", "keysel", NULL}; int status = -1; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O|Oi:find_all_wcs", (char **)keywords, &header_obj, &relax_obj, &keysel)) { return NULL; } #if PY3K if (PyBytes_AsStringAndSize(header_obj, &header, &header_length)) { #else if (PyString_AsStringAndSize(header_obj, &header, &header_length)) { #endif return NULL; } nkeyrec = header_length / 80; if (nkeyrec > 0x7fffffff) { PyErr_SetString( PyExc_MemoryError, "header is too long"); return NULL; } if (relax_obj == Py_True) { relax = WCSHDR_all; } else if (relax_obj == NULL || relax_obj == Py_False) { relax = WCSHDR_none; } else { #if PY3K relax = PyLong_AsLong(relax_obj); #else relax = PyInt_AsLong(relax_obj); #endif if (relax == -1) { PyErr_SetString( PyExc_ValueError, "relax must be True, False or an integer."); return NULL; } } Py_BEGIN_ALLOW_THREADS if (keysel < 0) { status = wcspih( header, (int)nkeyrec, relax, ctrl, &nreject, &nwcs, &wcs); } else { status = wcsbth( header, (int)nkeyrec, relax, ctrl, keysel, NULL, &nreject, &nwcs, &wcs); } Py_END_ALLOW_THREADS if (status != 0) { PyErr_SetString( PyExc_MemoryError, "Memory allocation error."); return NULL; } result = PyList_New(nwcs); if (result == NULL) { ignored = wcsvfree(&nwcs, &wcs); return NULL; } for (i = 0; i < nwcs; ++i) { subresult = PyWcsprm_cnew(); if (wcscopy(1, wcs + i, &subresult->x) != 0) { Py_DECREF(result); ignored = wcsvfree(&nwcs, &wcs); PyErr_SetString( PyExc_MemoryError, "Could not initialize wcsprm object"); return NULL; } if (PyList_SetItem(result, i, (PyObject *)subresult) == -1) { Py_DECREF(subresult); Py_DECREF(result); ignored = wcsvfree(&nwcs, &wcs); return NULL; } subresult->x.flag = 0; if (PyWcsprm_cset(subresult, 0)) { Py_DECREF(subresult); Py_DECREF(result); ignored = wcsvfree(&nwcs, &wcs); return NULL; } wcsprm_c2python(&subresult->x); } ignored = wcsvfree(&nwcs, &wcs); return result; } static PyObject* PyWcsprm_celfix( PyWcsprm* self) { int status = 0; wcsprm_python2c(&self->x); status = celfix(&self->x); wcsprm_c2python(&self->x); if (status <= 0) { #if PY3K return PyLong_FromLong((long)status); #else return PyInt_FromLong((long)status); #endif } else { wcserr_fix_to_python_exc(self->x.err); return NULL; } } /*@null@*/ static PyObject* PyWcsprm_cylfix( PyWcsprm* self, PyObject* args, PyObject* kwds) { PyObject* naxis_obj = NULL; PyArrayObject* naxis_array = NULL; int* naxis = NULL; int status = 0; const char* keywords[] = {"naxis", NULL}; PyObject* ignored = NULL; if (!PyArg_ParseTupleAndKeywords( args, kwds, "|O:cylfix", (char **)keywords, &naxis_obj)) { return NULL; } if (naxis_obj != NULL) { naxis_array = (PyArrayObject*)PyArray_ContiguousFromAny( naxis_obj, 1, 1, PyArray_INT); if (naxis_array == NULL) { return NULL; } if (PyArray_DIM(naxis_array, 0) != self->x.naxis) { ignored = PyErr_Format( PyExc_ValueError, "naxis must be same length as the number of axes of " "the Wcsprm object (%d).", self->x.naxis); Py_DECREF(naxis_array); return NULL; } naxis = (int*)PyArray_DATA(naxis_array); } wcsprm_python2c(&self->x); status = cylfix(naxis, &self->x); wcsprm_c2python(&self->x); Py_XDECREF(naxis_array); if (status <= 0) { #if PY3K return PyLong_FromLong((long)status); #else return PyInt_FromLong((long)status); #endif } else { wcserr_fix_to_python_exc(self->x.err); return NULL; } } static PyObject* PyWcsprm_datfix( PyWcsprm* self) { int status = 0; wcsprm_python2c(&self->x); status = datfix(&self->x); wcsprm_c2python(&self->x); if (status <= 0) { #if PY3K return PyLong_FromLong((long)status); #else return PyInt_FromLong((long)status); #endif } else { wcserr_fix_to_python_exc(self->x.err); return NULL; } } /*@null@*/ static PyObject* PyWcsprm_fix( PyWcsprm* self, PyObject* args, PyObject* kwds) { char* translate_units = NULL; int ctrl = 0; PyObject* naxis_obj = NULL; PyArrayObject* naxis_array = NULL; int* naxis = NULL; int stat[NWCSFIX]; struct wcserr err[NWCSFIX]; int status = 0; PyObject* subresult; PyObject* result; int i = 0; int msg_index = 0; const char* message; PyObject* ignored = NULL; struct message_map_entry { const char* name; const int index; }; const struct message_map_entry message_map[5] = { {"datfix", DATFIX}, {"unitfix", UNITFIX}, {"celfix", CELFIX}, {"spcfix", SPCFIX}, {"cylfix", CYLFIX}, }; const char* keywords[] = {"translate_units", "naxis", NULL}; if (!PyArg_ParseTupleAndKeywords( args, kwds, "|sO:fix", (char **)keywords, &translate_units, &naxis_obj)) { return NULL; } if (translate_units != NULL) { if (parse_unsafe_unit_conversion_spec(translate_units, &ctrl)) { return NULL; } } if (naxis_obj != NULL) { naxis_array = (PyArrayObject*)PyArray_ContiguousFromAny( naxis_obj, 1, 1, PyArray_INT); if (naxis_array == NULL) { return NULL; } if (PyArray_DIM(naxis_array, 0) != self->x.naxis) { ignored = PyErr_Format( PyExc_ValueError, "naxis must be same length as the number of axes of " "the Wcprm object (%d).", self->x.naxis); Py_DECREF(naxis_array); return NULL; } naxis = (int*)PyArray_DATA(naxis_array); } memset(err, 0, sizeof(struct wcserr) * NWCSFIX); wcsprm_python2c(&self->x); status = wcsfixi(ctrl, naxis, &self->x, stat, err); wcsprm_c2python(&self->x); /* We're done with this already, so deref now so we don't have to remember later */ Py_XDECREF(naxis_array); result = PyDict_New(); if (result == NULL) { return NULL; } for (i = 0; i < 5; ++i) { msg_index = stat[message_map[i].index]; message = err[message_map[i].index].msg; if (message == NULL || message[0] == 0) { if (msg_index == FIXERR_SUCCESS) { message = "Success"; } else if (msg_index == FIXERR_NO_CHANGE) { message = "No change"; } else if (msg_index == FIXERR_UNITS_ALIAS && message_map[i].index == CYLFIX){ message = "No change"; } } #if PY3K subresult = PyUnicode_FromString(message); #else subresult = PyString_FromString(message); #endif if (subresult == NULL || PyDict_SetItemString(result, message_map[i].name, subresult)) { Py_XDECREF(subresult); Py_XDECREF(result); return NULL; } Py_XDECREF(subresult); } return result; } /*@null@*/ static PyObject* PyWcsprm_get_cdelt_func( PyWcsprm* self, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { Py_ssize_t naxis = 0; if (is_null(self->x.cdelt)) { return NULL; } if (PyWcsprm_cset(self, 1)) { return NULL; } naxis = self->x.naxis; return get_double_array_readonly("cdelt", self->x.cdelt, 1, &naxis, (PyObject*)self); } /*@null@*/ static PyObject* PyWcsprm_get_pc_func( PyWcsprm* self, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { npy_intp dims[2]; if (is_null(self->x.pc)) { return NULL; } if (PyWcsprm_cset(self, 1)) { return NULL; } dims[0] = self->x.naxis; dims[1] = self->x.naxis; return get_double_array_readonly("pc", self->x.pc, 2, dims, (PyObject*)self); } /*@null@*/ static PyObject* PyWcsprm_get_ps( PyWcsprm* self, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { if (self->x.ps == NULL) { PyErr_SetString( PyExc_AssertionError, "No PSi_ma records present."); return NULL; } return get_pscards("ps", self->x.ps, self->x.nps); } /*@null@*/ static PyObject* PyWcsprm_get_pv( PyWcsprm* self, /*@unused@*/ PyObject* args, /*@unused@*/ PyObject* kwds) { if (self->x.pv == NULL) { PyErr_SetString( PyExc_AssertionError, "No PVi_ma records present."); return NULL; } return get_pvcards("pv", self->x.pv, self->x.npv); } static PyObject* PyWcsprm_has_cdi_ja( PyWcsprm* self) { int result = 0; result = self->x.altlin & has_cd; return PyBool_FromLong(result); } static PyObject* PyWcsprm_has_crotaia( PyWcsprm* self) { int result = 0; result = self->x.altlin & has_crota; return PyBool_FromLong(result); } static PyObject* PyWcsprm_has_pci_ja( PyWcsprm* self) { int result = 0; result = (self->x.altlin == 0 || self->x.altlin & has_pc); return PyBool_FromLong(result); } static PyObject* PyWcsprm_is_unity( PyWcsprm* self) { if (PyWcsprm_cset(self, 1)) { return NULL; } return PyBool_FromLong(self->x.lin.unity); } /*@null@*/ static PyObject* PyWcsprm_mix( PyWcsprm* self, PyObject* args, PyObject* kwds) { int mixpix = 0; int mixcel = 0; double vspan[2] = {0, 0}; double vstep = 0; int viter = 0; Py_ssize_t naxis = 0; PyObject* world_obj = NULL; PyObject* pixcrd_obj = NULL; int origin = 1; PyArrayObject* world = NULL; PyArrayObject* phi = NULL; PyArrayObject* theta = NULL; PyArrayObject* imgcrd = NULL; PyArrayObject* pixcrd = NULL; int status = -1; PyObject* result = NULL; PyObject* ignored = NULL; const char* keywords[] = { "mixpix", "mixcel", "vspan", "vstep", "viter", "world", "pixcrd", "origin", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "ii(dd)diOOi:mix", (char **)keywords, &mixpix, &mixcel, &vspan[0], &vspan[1], &vstep, &viter, &world_obj, &pixcrd_obj, &origin)) { return NULL; } if (viter < 5 || viter > 10) { PyErr_SetString( PyExc_ValueError, "viter must be in the range 5 - 10"); goto exit; } world = (PyArrayObject*)PyArray_ContiguousFromAny (world_obj, PyArray_DOUBLE, 1, 1); if (world == NULL) { PyErr_SetString( PyExc_TypeError, "Argument 6 (world) must be a 1-dimensional numpy array"); goto exit; } if ((int)PyArray_DIM(world, 0) != self->x.naxis) { ignored = PyErr_Format( PyExc_TypeError, "Argument 6 (world) must be the same length as the number " "of axes (%d)", self->x.naxis); goto exit; } pixcrd = (PyArrayObject*)PyArray_ContiguousFromAny (pixcrd_obj, PyArray_DOUBLE, 1, 1); if (pixcrd == NULL) { PyErr_SetString( PyExc_TypeError, "Argument 7 (pixcrd) must be a 1-dimensional numpy array"); goto exit; } if ((int)PyArray_DIM(pixcrd, 0) != self->x.naxis) { ignored = PyErr_Format( PyExc_TypeError, "Argument 7 (pixcrd) must be the same length as the " "number of axes (%d)", self->x.naxis); goto exit; } if (mixpix < 1 || mixpix > self->x.naxis) { PyErr_SetString( PyExc_ValueError, "Argument 1 (mixpix) must specify a pixel coordinate " "axis number"); goto exit; } if (mixcel < 1 || mixcel > 2) { PyErr_SetString( PyExc_ValueError, "Argument 2 (mixcel) must specify a celestial coordinate " "axis number (1 for latitude, 2 for longitude)"); goto exit; } /* Now we allocate a bunch of numpy arrays to store the * results in. */ naxis = (Py_ssize_t)self->x.naxis; phi = (PyArrayObject*)PyArray_SimpleNew (1, &naxis, PyArray_DOUBLE); if (phi == NULL) { goto exit; } theta = (PyArrayObject*)PyArray_SimpleNew (1, &naxis, PyArray_DOUBLE); if (theta == NULL) { goto exit; } imgcrd = (PyArrayObject*)PyArray_SimpleNew (1, &naxis, PyArray_DOUBLE); if (imgcrd == NULL) { goto exit; } /* Convert pixel coordinates to 1-based */ Py_BEGIN_ALLOW_THREADS preoffset_array(pixcrd, origin); wcsprm_python2c(&self->x); status = wcsmix( &self->x, mixpix, mixcel, vspan, vstep, viter, (double*)PyArray_DATA(world), (double*)PyArray_DATA(phi), (double*)PyArray_DATA(theta), (double*)PyArray_DATA(imgcrd), (double*)PyArray_DATA(pixcrd)); wcsprm_c2python(&self->x); unoffset_array(pixcrd, origin); unoffset_array(imgcrd, origin); Py_END_ALLOW_THREADS if (status == 0) { result = PyDict_New(); if (result == NULL || PyDict_SetItemString(result, "imgcrd", (PyObject*)imgcrd) || PyDict_SetItemString(result, "phi", (PyObject*)phi) || PyDict_SetItemString(result, "theta", (PyObject*)theta) || PyDict_SetItemString(result, "world", (PyObject*)world)) { goto exit; } } exit: Py_XDECREF(world); Py_XDECREF(phi); Py_XDECREF(theta); Py_XDECREF(imgcrd); Py_XDECREF(pixcrd); if (status == 0) { return result; } else { Py_XDECREF(result); if (status == -1) { /* The error message has already been set */ return NULL; } else { wcs_to_python_exc(&(self->x)); return NULL; } } } /*@null@*/ static PyObject* PyWcsprm_p2s( PyWcsprm* self, PyObject* args, PyObject* kwds) { int naxis = 2; int ncoord = 0; int nelem = 0; PyObject* pixcrd_obj = NULL; int origin = 1; PyArrayObject* pixcrd = NULL; PyArrayObject* imgcrd = NULL; PyArrayObject* phi = NULL; PyArrayObject* theta = NULL; PyArrayObject* world = NULL; PyArrayObject* stat = NULL; PyObject* result = NULL; int status = 0; const char* keywords[] = { "pixcrd", "origin", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "Oi:p2s", (char **)keywords, &pixcrd_obj, &origin)) { return NULL; } naxis = self->x.naxis; pixcrd = (PyArrayObject*)PyArray_ContiguousFromAny (pixcrd_obj, PyArray_DOUBLE, 2, 2); if (pixcrd == NULL) { return NULL; } if (PyArray_DIM(pixcrd, 1) < naxis) { PyErr_Format( PyExc_RuntimeError, "Input array must be 2-dimensional, where the second dimension >= %d", naxis); goto exit; } /* Now we allocate a bunch of numpy arrays to store the results in. */ imgcrd = (PyArrayObject*)PyArray_SimpleNew( 2, PyArray_DIMS(pixcrd), PyArray_DOUBLE); if (imgcrd == NULL) { goto exit; } phi = (PyArrayObject*)PyArray_SimpleNew( 1, PyArray_DIMS(pixcrd), PyArray_DOUBLE); if (phi == NULL) { goto exit; } theta = (PyArrayObject*)PyArray_SimpleNew( 1, PyArray_DIMS(pixcrd), PyArray_DOUBLE); if (theta == NULL) { goto exit; } world = (PyArrayObject*)PyArray_SimpleNew( 2, PyArray_DIMS(pixcrd), PyArray_DOUBLE); if (world == NULL) { goto exit; } stat = (PyArrayObject*)PyArray_SimpleNew( 1, PyArray_DIMS(pixcrd), PyArray_INT); if (stat == NULL) { goto exit; } /* Make the call */ Py_BEGIN_ALLOW_THREADS ncoord = PyArray_DIM(pixcrd, 0); nelem = PyArray_DIM(pixcrd, 1); preoffset_array(pixcrd, origin); wcsprm_python2c(&self->x); status = wcsp2s( &self->x, ncoord, nelem, (double*)PyArray_DATA(pixcrd), (double*)PyArray_DATA(imgcrd), (double*)PyArray_DATA(phi), (double*)PyArray_DATA(theta), (double*)PyArray_DATA(world), (int*)PyArray_DATA(stat)); wcsprm_c2python(&self->x); unoffset_array(pixcrd, origin); /* unoffset_array(world, origin); */ unoffset_array(imgcrd, origin); if (status == 8) { set_invalid_to_nan( ncoord, nelem, (double*)PyArray_DATA(imgcrd), (int*)PyArray_DATA(stat)); set_invalid_to_nan( ncoord, 1, (double*)PyArray_DATA(phi), (int*)PyArray_DATA(stat)); set_invalid_to_nan( ncoord, 1, (double*)PyArray_DATA(theta), (int*)PyArray_DATA(stat)); set_invalid_to_nan( ncoord, nelem, (double*)PyArray_DATA(world), (int*)PyArray_DATA(stat)); } Py_END_ALLOW_THREADS if (status == 0 || status == 8) { result = PyDict_New(); if (result == NULL || PyDict_SetItemString(result, "imgcrd", (PyObject*)imgcrd) || PyDict_SetItemString(result, "phi", (PyObject*)phi) || PyDict_SetItemString(result, "theta", (PyObject*)theta) || PyDict_SetItemString(result, "world", (PyObject*)world) || PyDict_SetItemString(result, "stat", (PyObject*)stat)) { goto exit; } } exit: Py_XDECREF(pixcrd); Py_XDECREF(imgcrd); Py_XDECREF(phi); Py_XDECREF(theta); Py_XDECREF(world); Py_XDECREF(stat); if (status == 0 || status == 8) { return result; } else { Py_XDECREF(result); if (status == -1) { /* Exception already set */ return NULL; } else { wcs_to_python_exc(&(self->x)); return NULL; } } } /*@null@*/ static PyObject* PyWcsprm_s2p( PyWcsprm* self, PyObject* args, PyObject* kwds) { int naxis = 2; int ncoord = 0; int nelem = 0; PyObject* world_obj = NULL; int origin = 1; PyArrayObject* world = NULL; PyArrayObject* phi = NULL; PyArrayObject* theta = NULL; PyArrayObject* imgcrd = NULL; PyArrayObject* pixcrd = NULL; PyArrayObject* stat = NULL; PyObject* result = NULL; int status = -1; const char* keywords[] = { "world", "origin", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "Oi:s2p", (char **)keywords, &world_obj, &origin)) { return NULL; } naxis = self->x.naxis; world = (PyArrayObject*)PyArray_ContiguousFromAny( world_obj, PyArray_DOUBLE, 2, 2); if (world == NULL) { return NULL; } if (PyArray_DIM(world, 1) < naxis) { PyErr_Format( PyExc_RuntimeError, "Input array must be 2-dimensional, where the second dimension >= %d", naxis); goto exit; } /* Now we allocate a bunch of numpy arrays to store the * results in. */ phi = (PyArrayObject*)PyArray_SimpleNew( 1, PyArray_DIMS(world), PyArray_DOUBLE); if (phi == NULL) { goto exit; } theta = (PyArrayObject*)PyArray_SimpleNew( 1, PyArray_DIMS(world), PyArray_DOUBLE); if (phi == NULL) { goto exit; } imgcrd = (PyArrayObject*)PyArray_SimpleNew( 2, PyArray_DIMS(world), PyArray_DOUBLE); if (theta == NULL) { goto exit; } pixcrd = (PyArrayObject*)PyArray_SimpleNew( 2, PyArray_DIMS(world), PyArray_DOUBLE); if (pixcrd == NULL) { goto exit; } stat = (PyArrayObject*)PyArray_SimpleNew( 1, PyArray_DIMS(world), PyArray_INT); if (stat == NULL) { goto exit; } /* Make the call */ Py_BEGIN_ALLOW_THREADS ncoord = PyArray_DIM(world, 0); nelem = PyArray_DIM(world, 1); /* preoffset_array(world, origin); */ wcsprm_python2c(&self->x); status = wcss2p( &self->x, ncoord, nelem, (double*)PyArray_DATA(world), (double*)PyArray_DATA(phi), (double*)PyArray_DATA(theta), (double*)PyArray_DATA(imgcrd), (double*)PyArray_DATA(pixcrd), (int*)PyArray_DATA(stat)); wcsprm_c2python(&self->x); /* unoffset_array(world, origin); */ unoffset_array(pixcrd, origin); unoffset_array(imgcrd, origin); if (status == 8) { set_invalid_to_nan( ncoord, 1, (double*)PyArray_DATA(phi), (int*)PyArray_DATA(stat)); set_invalid_to_nan( ncoord, 1, (double*)PyArray_DATA(theta), (int*)PyArray_DATA(stat)); set_invalid_to_nan( ncoord, nelem, (double*)PyArray_DATA(imgcrd), (int*)PyArray_DATA(stat)); set_invalid_to_nan( ncoord, nelem, (double*)PyArray_DATA(pixcrd), (int*)PyArray_DATA(stat)); } Py_END_ALLOW_THREADS if (status == 0 || status == 9) { result = PyDict_New(); if (result == NULL || PyDict_SetItemString(result, "phi", (PyObject*)phi) || PyDict_SetItemString(result, "theta", (PyObject*)theta) || PyDict_SetItemString(result, "imgcrd", (PyObject*)imgcrd) || PyDict_SetItemString(result, "pixcrd", (PyObject*)pixcrd) || PyDict_SetItemString(result, "stat", (PyObject*)stat)) { goto exit; } } exit: Py_XDECREF(pixcrd); Py_XDECREF(imgcrd); Py_XDECREF(phi); Py_XDECREF(theta); Py_XDECREF(world); Py_XDECREF(stat); if (status == 0 || status == 9) { return result; } else { Py_XDECREF(result); if (status == -1) { /* Exception already set */ return NULL; } else { wcs_to_python_exc(&(self->x)); return NULL; } } } static int PyWcsprm_cset( PyWcsprm* self, const int convert) { int status = 0; if (convert) wcsprm_python2c(&self->x); status = wcsset(&self->x); if (convert) wcsprm_c2python(&self->x); if (status == 0) { return 0; } else { wcs_to_python_exc(&(self->x)); return 1; } } /*@null@*/ static PyObject* PyWcsprm_set( PyWcsprm* self) { if (PyWcsprm_cset(self, 1)) { return NULL; } Py_INCREF(Py_None); return Py_None; } /*@null@*/ static PyObject* PyWcsprm_set_ps( PyWcsprm* self, PyObject* arg, /*@unused@*/ PyObject* kwds) { if (is_null(self->x.ps)) { return NULL; } if (set_pscards("ps", arg, &self->x.ps, &self->x.nps, &self->x.npsmax)) { self->x.m_ps = self->x.ps; return NULL; } self->x.m_ps = self->x.ps; note_change(self); Py_INCREF(Py_None); return Py_None; } /*@null@*/ static PyObject* PyWcsprm_set_pv( PyWcsprm* self, PyObject* arg, /*@unused@*/ PyObject* kwds) { if (is_null(self->x.pv)) { return NULL; } if (set_pvcards("pv", arg, &self->x.pv, &self->x.npv, &self->x.npvmax)) { self->x.m_pv = self->x.pv; return NULL; } self->x.m_pv = self->x.pv; note_change(self); Py_INCREF(Py_None); return Py_None; } /* TODO: This is convenient for debugging for now -- but it's not very * Pythonic. It should probably be hooked into __str__ or something. */ /*@null@*/ static PyObject* PyWcsprm_print_contents( PyWcsprm* self) { int ignored; /* This is not thread-safe, but since we're holding onto the GIL, we can assume we won't have thread conflicts */ wcsprintf_set(NULL); wcsprm_python2c(&self->x); if (PyWcsprm_cset(self, 0)) { wcsprm_c2python(&self->x); return NULL; } ignored = wcsprt(&self->x); wcsprm_c2python(&self->x); printf("%s", wcsprintf_buf()); Py_INCREF(Py_None); return Py_None; } /*@null@*/ static PyObject* PyWcsprm_spcfix( PyWcsprm* self) { int status = 0; wcsprm_python2c(&self->x); status = spcfix(&self->x); wcsprm_c2python(&self->x); if (status <= 0) { #if PY3K return PyLong_FromLong((long)status); #else return PyInt_FromLong((long)status); #endif } else { wcserr_fix_to_python_exc(self->x.err); return NULL; } } /*@null@*/ static PyObject* PyWcsprm_sptr( PyWcsprm* self, PyObject* args, PyObject* kwds) { int i = -1; char* py_ctype = NULL; char ctype[9]; int status = 0; const char* keywords[] = {"ctype", "i", NULL}; if (!PyArg_ParseTupleAndKeywords( args, kwds, "s|i:sptr", (char **)keywords, &py_ctype, &i)) { return NULL; } if (strlen(py_ctype) > 8) { PyErr_SetString( PyExc_ValueError, "ctype string has more than 8 characters."); } strncpy(ctype, py_ctype, 9); wcsprm_python2c(&self->x); status = wcssptr(&self->x, &i, ctype); wcsprm_c2python(&self->x); if (status == 0) { Py_INCREF(Py_None); return Py_None; } else { wcs_to_python_exc(&(self->x)); return NULL; } } /*@null@*/ static PyObject* PyWcsprm___str__( PyWcsprm* self) { /* This is not thread-safe, but since we're holding onto the GIL, we can assume we won't have thread conflicts */ wcsprintf_set(NULL); wcsprm_python2c(&self->x); if (PyWcsprm_cset(self, 0)) { wcsprm_c2python(&self->x); return NULL; } wcsprt(&self->x); wcsprm_c2python(&self->x); #if PY3K return PyUnicode_FromString(wcsprintf_buf()); #else return PyString_FromString(wcsprintf_buf()); #endif } /*@null@*/ static PyObject* PyWcsprm_sub( PyWcsprm* self, PyObject* args, PyObject* kwds) { int i = -1; Py_ssize_t tmp = 0; PyObject* py_axes = NULL; PyWcsprm* py_dest_wcs = NULL; PyObject* element = NULL; #if PY3K PyObject* element_utf8 = NULL; #endif char* element_str = NULL; int element_val = 0; int nsub = 0; int alloc_size = 0; int* axes = NULL; int status = -1; const char* keywords[] = {"axes", NULL}; if (!PyArg_ParseTupleAndKeywords( args, kwds, "|O:sub", (char **)keywords, &py_axes)) { goto exit; } if (py_axes == NULL || py_axes == Py_None) { /* leave all variables as is */ } else if (PySequence_Check(py_axes)) { tmp = PySequence_Size(py_axes); if (tmp == -1) { goto exit; } nsub = (int)tmp; axes = malloc(nsub * sizeof(int)); if (axes == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); goto exit; } for (i = 0; i < nsub; ++i) { element = PySequence_GetItem(py_axes, i); if (element == NULL) { goto exit; } #if PY3K if (PyUnicode_Check(element)) { element_utf8 = PyUnicode_AsUTF8String(element); if (element_utf8 == NULL) { goto exit; } element_str = PyBytes_AsString(element_utf8); Py_DECREF(element_utf8); element_utf8 = NULL; #else if (PyString_Check(element)) { /* Doesn't return NULL, because we already known it's a string */ element_str = PyString_AsString(element); #endif if (strncmp(element_str, "longitude", 10) == 0) { element_val = WCSSUB_LONGITUDE; } else if (strncmp(element_str, "latitude", 9) == 0) { element_val = WCSSUB_LATITUDE; } else if (strncmp(element_str, "cubeface", 9) == 0) { element_val = WCSSUB_CUBEFACE; } else if (strncmp(element_str, "spectral", 9) == 0) { element_val = WCSSUB_SPECTRAL; } else if (strncmp(element_str, "stokes", 7) == 0) { element_val = WCSSUB_STOKES; } else if (strncmp(element_str, "celestial", 10) == 0) { element_val = WCSSUB_CELESTIAL; } else { PyErr_SetString( PyExc_ValueError, "string values for axis sequence must be one of 'latitude', 'longitude', 'cubeface', 'spectral', 'stokes', or 'celestial'"); goto exit; } #if PY3K } else if (PyLong_Check(element)) { tmp = (Py_ssize_t)PyLong_AsSsize_t(element); #else } else if (PyInt_Check(element)) { tmp = (Py_ssize_t)PyInt_AsLong(element); #endif if (tmp == -1 && PyErr_Occurred()) { goto exit; } element_val = (int)tmp; } else { PyErr_SetString( PyExc_TypeError, "axes sequence must contain either strings or ints"); goto exit; } axes[i] = element_val; Py_DECREF(element); element = NULL; } #if PY3K } else if (PyLong_Check(py_axes)) { tmp = (Py_ssize_t)PyLong_AsSsize_t(py_axes); #else } else if (PyInt_Check(py_axes)) { tmp = (Py_ssize_t)PyInt_AsLong(py_axes); #endif if (tmp == -1 && PyErr_Occurred()) { goto exit; } nsub = (int)tmp; if (nsub < 0 || nsub > self->x.naxis) { PyErr_Format( PyExc_ValueError, "If axes is an int, it must be in the range 0-self.naxis (%d)", self->x.naxis); goto exit; } } else { PyErr_SetString( PyExc_TypeError, "axes must None, a sequence or an integer"); goto exit; } if (nsub == 0) { alloc_size = self->x.naxis; } else { alloc_size = nsub; } py_dest_wcs = (PyWcsprm*)PyWcsprm_cnew(); py_dest_wcs->x.flag = -1; status = wcsini(1, alloc_size, &py_dest_wcs->x); if (status != 0) { goto exit; } wcsprm_python2c(&self->x); status = wcssub(0, &self->x, &nsub, axes, &py_dest_wcs->x); wcsprm_c2python(&self->x); if (PyWcsprm_cset(py_dest_wcs, 0)) { goto exit; } wcsprm_c2python(&py_dest_wcs->x); if (status != 0) { goto exit; } exit: free(axes); Py_XDECREF(element); #if PY3K Py_XDECREF(element_utf8); #endif if (status == 0) { return (PyObject*)py_dest_wcs; } else if (status == -1) { Py_XDECREF(py_dest_wcs); /* Exception already set */ return NULL; } else { wcs_to_python_exc(&(py_dest_wcs->x)); Py_XDECREF(py_dest_wcs); return NULL; } } /*@null@*/ static PyObject* PyWcsprm_to_header( PyWcsprm* self, PyObject* args, PyObject* kwds) { PyObject* relax_obj = NULL; int relax = 0; int nkeyrec = 0; char* header = NULL; int status = -1; PyObject* result = NULL; const char* keywords[] = {"relax", NULL}; if (!PyArg_ParseTupleAndKeywords( args, kwds, "|O:to_header", (char **)keywords, &relax_obj)) { goto exit; } if (relax_obj == Py_True) { relax = WCSHDO_all; } else if (relax_obj == NULL || relax_obj == Py_False) { relax = WCSHDO_none; } else { #if PY3K relax = PyLong_AsLong(relax_obj); #else relax = PyInt_AsLong(relax_obj); #endif if (relax == -1) { PyErr_SetString( PyExc_ValueError, "relax must be True, False or an integer."); return NULL; } } wcsprm_python2c(&self->x); status = wcshdo(relax, &self->x, &nkeyrec, &header); wcsprm_c2python(&self->x); if (status != 0) { PyErr_SetString( PyExc_RuntimeError, "Unknown error occurred. Something is seriously wrong."); goto exit; } /* Just return the raw header string. PyFITS on the Python side will help to parse and use this information. */ #if PY3K result = PyBytes_FromStringAndSize(header, (Py_ssize_t)nkeyrec * 80); #else result = PyString_FromStringAndSize(header, (Py_ssize_t)nkeyrec * 80); #endif exit: free(header); return result; } /*@null@*/ static PyObject* PyWcsprm_unitfix( PyWcsprm* self, PyObject* args, PyObject* kwds) { char* translate_units = NULL; int ctrl = 0; int status = 0; const char* keywords[] = {"translate_units", NULL}; if (!PyArg_ParseTupleAndKeywords( args, kwds, "|s:unitfix", (char **)keywords, &translate_units)) { return NULL; } if (translate_units != NULL) { if (parse_unsafe_unit_conversion_spec(translate_units, &ctrl)) { return NULL; } } status = unitfix(ctrl, &self->x); if (status <= 0) { #if PY3K return PyLong_FromLong((long)status); #else return PyInt_FromLong((long)status); #endif } else { wcserr_fix_to_python_exc(self->x.err); return NULL; } } /*************************************************************************** * Member getters/setters (properties) */ /*@null@*/ static PyObject* PyWcsprm_get_alt( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.alt)) { return NULL; } /* Force a null-termination of this single-character string */ self->x.alt[1] = '\0'; return get_string("alt", self->x.alt); } static int PyWcsprm_set_alt( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { char value_string[2]; if (is_null(self->x.alt)) { return -1; } if (value == NULL) { /* deletion */ self->x.alt[0] = ' '; self->x.alt[1] = '\0'; note_change(self); return 0; } if (set_string("alt", value, value_string, 2)) { return -1; } if (!is_valid_alt_key(value_string)) { return -1; } strncpy(self->x.alt, value_string, 2); note_change(self); return 0; } /*@null@*/ static PyObject* PyWcsprm_get_axis_types( PyWcsprm* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 0; if (is_null(self->x.types)) { return NULL; } if (PyWcsprm_cset(self, 1)) { return NULL; } naxis = (Py_ssize_t)self->x.naxis; return get_int_array("axis_types", self->x.types, 1, &naxis, (PyObject*)self); } /*@null@*/ static PyObject* PyWcsprm_get_cd( PyWcsprm* self, /*@unused@*/ void* closure) { npy_intp dims[2]; if (is_null(self->x.cd)) { return NULL; } if ((self->x.altlin & has_cd) == 0) { PyErr_SetString(PyExc_AttributeError, "No cd is present."); return NULL; } dims[0] = self->x.naxis; dims[1] = self->x.naxis; return get_double_array("cd", self->x.cd, 2, dims, (PyObject*)self); } static int PyWcsprm_set_cd( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp dims[2]; if (is_null(self->x.cd)) { return -1; } if (value == NULL) { self->x.altlin &= ~has_cd; note_change(self); return 0; } dims[0] = self->x.naxis; dims[1] = self->x.naxis; if (set_double_array("cd", value, 2, dims, self->x.cd)) { return -1; } self->x.altlin |= has_cd; note_change(self); return 0; } /*@null@*/ static PyObject* PyWcsprm_get_cdelt( PyWcsprm* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 0; if (is_null(self->x.cdelt)) { return NULL; } naxis = self->x.naxis; if (self->x.altlin & has_cd) { PyErr_WarnEx(NULL, "cdelt will be ignored since cd is present", 1); } return get_double_array("cdelt", self->x.cdelt, 1, &naxis, (PyObject*)self); } /*@null@*/ static int PyWcsprm_set_cdelt( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp dims; if (is_null(self->x.cdelt)) { return -1; } dims = (npy_int)self->x.naxis; if (self->x.altlin & has_cd) { PyErr_WarnEx(NULL, "cdelt will be ignored since cd is present", 1); } note_change(self); return set_double_array("cdelt", value, 1, &dims, self->x.cdelt); } static PyObject* PyWcsprm_get_cel_offset( PyWcsprm* self, /*@unused@*/ void* closure) { return get_bool("cel_offset", self->x.cel.offset); } static int PyWcsprm_set_cel_offset( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { note_change(self); return set_bool("cel_offset", value, &self->x.cel.offset); } /*@null@*/ static PyObject* PyWcsprm_get_cname( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.cname)) { return NULL; } return get_str_list("cname", self->x.cname, (Py_ssize_t)self->x.naxis, 68, (PyObject*)self); } /*@null@*/ static int PyWcsprm_set_cname( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (is_null(self->x.cname)) { return -1; } note_change(self); return set_str_list("cname", value, (Py_ssize_t)self->x.naxis, 0, self->x.cname); } /*@null@*/ static PyObject* PyWcsprm_get_colax( PyWcsprm* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 0; if (is_null(self->x.colax)) { return NULL; } naxis = (Py_ssize_t)self->x.naxis; return get_int_array("colax", self->x.colax, 1, &naxis, (PyObject*)self); } static int PyWcsprm_set_colax( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp naxis = 0; if (is_null(self->x.colax)) { return -1; } naxis = (Py_ssize_t)self->x.naxis; note_change(self); return set_int_array("colax", value, 1, &naxis, self->x.colax); } static PyObject* PyWcsprm_get_colnum( PyWcsprm* self, /*@unused@*/ void* closure) { return get_int("colnum", self->x.colnum); } static int PyWcsprm_set_colnum( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { note_change(self); return set_int("colnum", value, &self->x.colnum); } /*@null@*/ static PyObject* PyWcsprm_get_crder( PyWcsprm* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 0; if (is_null(self->x.crder)) { return NULL; } naxis = (Py_ssize_t)self->x.naxis; return get_double_array("crder", self->x.crder, 1, &naxis, (PyObject*)self); } static int PyWcsprm_set_crder( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp naxis = 0; if (is_null(self->x.crder)) { return -1; } naxis = (Py_ssize_t)self->x.naxis; note_change(self); return set_double_array("crder", value, 1, &naxis, self->x.crder); } /*@null@*/ static PyObject* PyWcsprm_get_crota( PyWcsprm* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 0; if (is_null(self->x.crota)) { return NULL; } if ((self->x.altlin & has_crota) == 0) { PyErr_SetString(PyExc_AttributeError, "No crota is present."); return NULL; } naxis = (Py_ssize_t)self->x.naxis; return get_double_array("crota", self->x.crota, 1, &naxis, (PyObject*)self); } static int PyWcsprm_set_crota( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp naxis = 0; if (is_null(self->x.crota)) { return -1; } if (value == NULL) { /* Deletion */ self->x.altlin &= ~has_crota; note_change(self); return 0; } naxis = (Py_ssize_t)self->x.naxis; if (set_double_array("crota", value, 1, &naxis, self->x.crota)) { return -1; } self->x.altlin |= has_crota; note_change(self); return 0; } /*@null@*/ static PyObject* PyWcsprm_get_crpix( PyWcsprm* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 0; if (is_null(self->x.crpix)) { return NULL; } naxis = (Py_ssize_t)self->x.naxis; return get_double_array("crpix", self->x.crpix, 1, &naxis, (PyObject*)self); } static int PyWcsprm_set_crpix( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp naxis = 0; if (is_null(self->x.crpix)) { return -1; } naxis = (Py_ssize_t)self->x.naxis; note_change(self); return set_double_array("crpix", value, 1, &naxis, self->x.crpix); } /*@null@*/ static PyObject* PyWcsprm_get_crval( PyWcsprm* self, /*@unused@*/ void* closure) { Py_ssize_t naxis = 0; if (is_null(self->x.crval)) { return NULL; } naxis = (Py_ssize_t)self->x.naxis; return get_double_array("crval", self->x.crval, 1, &naxis, (PyObject*)self); } static int PyWcsprm_set_crval( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp naxis; if (is_null(self->x.crval)) { return -1; } naxis = (Py_ssize_t)self->x.naxis; note_change(self); return set_double_array("crval", value, 1, &naxis, self->x.crval); } /*@null@*/ static PyObject* PyWcsprm_get_csyer( PyWcsprm* self, /*@unused@*/ void* closure) { Py_ssize_t naxis; if (is_null(self->x.csyer)) { return NULL; } naxis = (Py_ssize_t)self->x.naxis; return get_double_array("csyer", self->x.csyer, 1, &naxis, (PyObject*)self); } static int PyWcsprm_set_csyer( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp naxis; if (is_null(self->x.csyer)) { return -1; } naxis = (Py_ssize_t)self->x.naxis; note_change(self); return set_double_array("csyer", value, 1, &naxis, self->x.csyer); } /*@null@*/ static PyObject* PyWcsprm_get_ctype( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.ctype)) { return NULL; } return get_str_list("ctype", self->x.ctype, self->x.naxis, 68, (PyObject*)self); } static int PyWcsprm_set_ctype( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (is_null(self->x.ctype)) { return -1; } note_change(self); return set_str_list("ctype", value, (Py_ssize_t)self->x.naxis, 0, self->x.ctype); } static PyObject* PyWcsprm_get_cubeface( PyWcsprm* self, /*@unused@*/ void* closure) { return get_int("cubeface", self->x.cubeface); } static int PyWcsprm_set_cubeface( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { note_change(self); return set_int("cubeface", value, &self->x.cubeface); } static int unit_verify(char* val) { int status, func; double scale, units[WCSUNITS_NTYPE]; struct wcserr *err = NULL; status = wcsulexe(val, &func, &scale, units, &err); if (status == 0) { return 1; } else { wcserr_units_to_python_exc(err); free(err); return 0; } } /*@null@*/ static PyObject* PyWcsprm_get_cunit( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.cunit)) { return NULL; } return get_str_list_verified( "cunit", self->x.cunit, (Py_ssize_t)self->x.naxis, 68, (PyObject*)self, unit_verify); } static int PyWcsprm_set_cunit( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (is_null(self->x.cunit)) { return -1; } note_change(self); return set_str_list_verified( "cunit", value, (Py_ssize_t)self->x.naxis, 0, self->x.cunit, unit_verify); } /*@null@*/ static PyObject* PyWcsprm_get_dateavg( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.dateavg)) { return NULL; } return get_string("dateavg", self->x.dateavg); } static int PyWcsprm_set_dateavg( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (is_null(self->x.dateavg)) { return -1; } note_change(self); /* TODO: Verify that this looks like a date string */ return set_string("dateavg", value, self->x.dateavg, 72); } /*@null@*/ static PyObject* PyWcsprm_get_dateobs( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.dateobs)) { return NULL; } return get_string("dateobs", self->x.dateobs); } static int PyWcsprm_set_dateobs( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (is_null(self->x.dateobs)) { return -1; } note_change(self); return set_string("dateobs", value, self->x.dateobs, 72); } static PyObject* PyWcsprm_get_equinox( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("equinox", self->x.equinox); } static int PyWcsprm_set_equinox( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (value == NULL) { /* deletion */ self->x.equinox = (double)NPY_NAN; return 0; } note_change(self); return set_double("equinox", value, &self->x.equinox); } /*@null@*/ static PyObject* PyWcsprm_get_imgpix_matrix( PyWcsprm* self, /*@unused@*/ void* closure) { npy_intp dims[2]; if (is_null(self->x.lin.imgpix)) { return NULL; } if (PyWcsprm_cset(self, 1)) { return NULL; } dims[0] = self->x.naxis; dims[1] = self->x.naxis; return get_double_array("imgpix_matrix", self->x.lin.imgpix, 2, dims, (PyObject*)self); } static PyObject* PyWcsprm_get_lat( PyWcsprm* self, /*@unused@*/ void* closure) { if (PyWcsprm_cset(self, 1)) { return NULL; } return get_int("lat", self->x.lat); } static PyObject* PyWcsprm_get_latpole( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("latpole", self->x.latpole); } static int PyWcsprm_set_latpole( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { note_change(self); if (value == NULL) { self->x.latpole = 90.0; return 0; } return set_double("latpole", value, &self->x.latpole); } /*@null@*/ static PyObject* PyWcsprm_get_lattyp( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.lattyp)) { return NULL; } if (PyWcsprm_cset(self, 1)) { return NULL; } return get_string("lattyp", self->x.lattyp); } static PyObject* PyWcsprm_get_lng( PyWcsprm* self, /*@unused@*/ void* closure) { if (PyWcsprm_cset(self, 1)) { return NULL; } return get_int("lng", self->x.lng); } /*@null@*/ static PyObject* PyWcsprm_get_lngtyp( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.lngtyp)) { return NULL; } if (PyWcsprm_cset(self, 1)) { return NULL; } return get_string("lngtyp", self->x.lngtyp); } static PyObject* PyWcsprm_get_lonpole( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("lonpole", self->x.lonpole); } static int PyWcsprm_set_lonpole( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { note_change(self); if (value == NULL) { self->x.lonpole = (double)NPY_NAN; return 0; } return set_double("lonpole", value, &self->x.lonpole); } static PyObject* PyWcsprm_get_mjdavg( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("mjdavg", self->x.mjdavg); } static int PyWcsprm_set_mjdavg( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { note_change(self); if (value == NULL) { self->x.mjdavg = (double)NPY_NAN; return 0; } return set_double("mjdavg", value, &self->x.mjdavg); } static PyObject* PyWcsprm_get_mjdobs( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("mjdobs", self->x.mjdobs); } static int PyWcsprm_set_mjdobs( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { note_change(self); if (value == NULL) { self->x.mjdobs = (double)NPY_NAN; return 0; } return set_double("mjdobs", value, &self->x.mjdobs); } /*@null@*/ static PyObject* PyWcsprm_get_name( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.wcsname)) { return NULL; } return get_string("name", self->x.wcsname); } static int PyWcsprm_set_name( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (is_null(self->x.wcsname)) { return -1; } note_change(self); return set_string("name", value, self->x.wcsname, 72); } static PyObject* PyWcsprm_get_naxis( PyWcsprm* self, /*@unused@*/ void* closure) { return get_int("naxis", self->x.naxis); } /*@null@*/ static PyObject* PyWcsprm_get_obsgeo( PyWcsprm* self, /*@unused@*/ void* closure) { Py_ssize_t size = 3; if (is_null(self->x.obsgeo)) { return NULL; } return get_double_array("obsgeo", self->x.obsgeo, 1, &size, (PyObject*)self); } static int PyWcsprm_set_obsgeo( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp size = 3; if (is_null(self->x.obsgeo)) { return -1; } note_change(self); if (value == NULL) { self->x.obsgeo[0] = NPY_NAN; self->x.obsgeo[1] = NPY_NAN; self->x.obsgeo[2] = NPY_NAN; return 0; } return set_double_array("obsgeo", value, 1, &size, self->x.obsgeo); } /*@null@*/ static PyObject* PyWcsprm_get_pc( PyWcsprm* self, /*@unused@*/ void* closure) { npy_intp dims[2]; if (is_null(self->x.pc)) { return NULL; } if (self->x.altlin != 0 && (self->x.altlin & has_pc) == 0) { PyErr_SetString(PyExc_AttributeError, "No pc is present."); return NULL; } dims[0] = self->x.naxis; dims[1] = self->x.naxis; return get_double_array("pc", self->x.pc, 2, dims, (PyObject*)self); } static int PyWcsprm_set_pc( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp dims[2]; int i, j, naxis; double* pc; if (is_null(self->x.pc)) { return -1; } note_change(self); if (value == NULL) { /* deletion */ self->x.altlin &= ~has_pc; /* If this results in deleting all flags, pc is still the default, so we should set the pc matrix itself to default values. */ naxis = self->x.naxis; pc = self->x.pc; for (i = 0; i < naxis; i++) { for (j = 0; j < naxis; j++) { if (j == i) { *pc = 1.0; } else { *pc = 0.0; } pc++; } } note_change(self); return 0; } dims[0] = self->x.naxis; dims[1] = self->x.naxis; if (set_double_array("pc", value, 2, dims, self->x.pc)) { return -1; } self->x.altlin |= has_pc; note_change(self); return 0; } static PyObject* PyWcsprm_get_phi0( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("phi0", self->x.cel.phi0); } static int PyWcsprm_set_phi0( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { note_change(self); if (value == NULL) { self->x.cel.phi0 = (double)NPY_NAN; return 0; } return set_double("phi0", value, &(self->x.cel.phi0)); } static PyObject* PyWcsprm_get_piximg_matrix( PyWcsprm* self, /*@unused@*/ void* closure) { npy_intp dims[2]; if (is_null(self->x.lin.piximg)) { return NULL; } if (PyWcsprm_cset(self, 1)) { return NULL; } dims[0] = self->x.naxis; dims[1] = self->x.naxis; return get_double_array("piximg_matrix", self->x.lin.piximg, 2, dims, (PyObject*)self); } static PyObject* PyWcsprm_get_radesys( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.radesys)) { return NULL; } return get_string("radesys", self->x.radesys); } static int PyWcsprm_set_radesys( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (is_null(self->x.radesys)) { return -1; } note_change(self); return set_string("radesys", value, self->x.radesys, 72); } static PyObject* PyWcsprm_get_restfrq( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("restfrq", self->x.restfrq); } static int PyWcsprm_set_restfrq( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (value == NULL) { /* deletion */ self->x.restfrq = (double)NPY_NAN; return 0; } note_change(self); return set_double("restfrq", value, &self->x.restfrq); } static PyObject* PyWcsprm_get_restwav( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("restwav", self->x.restwav); } static int PyWcsprm_set_restwav( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (value == NULL) { /* deletion */ self->x.restwav = (double)NPY_NAN; return 0; } note_change(self); return set_double("restwav", value, &self->x.restwav); } static PyObject* PyWcsprm_get_spec( PyWcsprm* self, /*@unused@*/ void* closure) { return get_int("spec", self->x.spec); } /*@null@*/ static PyObject* PyWcsprm_get_specsys( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.specsys)) { return NULL; } return get_string("specsys", self->x.specsys); } static int PyWcsprm_set_specsys( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (is_null(self->x.specsys)) { return -1; } note_change(self); return set_string("specsys", value, self->x.specsys, 72); } /*@null@*/ static PyObject* PyWcsprm_get_ssysobs( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.ssysobs)) { return NULL; } return get_string("ssysobs", self->x.ssysobs); } static int PyWcsprm_set_ssysobs( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (is_null(self->x.ssysobs)) { return -1; } note_change(self); return set_string("ssysobs", value, self->x.ssysobs, 72); } /*@null@*/ static PyObject* PyWcsprm_get_ssyssrc( PyWcsprm* self, /*@unused@*/ void* closure) { if (is_null(self->x.ssyssrc)) { return NULL; } return get_string("ssyssrc", self->x.ssyssrc); } static int PyWcsprm_set_ssyssrc( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (is_null(self->x.ssyssrc)) { return -1; } note_change(self); return set_string("ssyssrc", value, self->x.ssyssrc, 72); } static PyObject* PyWcsprm_get_tab( PyWcsprm* self, /*@unused@*/ void* closure) { PyObject* result; PyObject* subresult; int i, ntab; ntab = self->x.ntab; result = PyList_New(ntab); if (result == NULL) { return NULL; } for (i = 0; i < ntab; ++i) { subresult = (PyObject *)PyTabprm_cnew((PyObject *)self, &(self->x.tab[i])); if (subresult == NULL) { Py_DECREF(result); return NULL; } if (PyList_SetItem(result, i, subresult) == -1) { Py_DECREF(subresult); Py_DECREF(result); return NULL; } } return result; } static PyObject* PyWcsprm_get_theta0( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("theta0", self->x.cel.theta0); } static int PyWcsprm_set_theta0( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { note_change(self); if (value == NULL) { self->x.cel.theta0 = (double)NPY_NAN; return 0; } return set_double("theta0", value, &self->x.cel.theta0); } static PyObject* PyWcsprm_get_velangl( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("velangl", self->x.velangl); } static int PyWcsprm_set_velangl( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (value == NULL) { /* deletion */ self->x.velangl = (double)NPY_NAN; return 0; } note_change(self); return set_double("velangl", value, &self->x.velangl); } static PyObject* PyWcsprm_get_velosys( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("velosys", self->x.velosys); } static int PyWcsprm_set_velosys( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (value == NULL) { /* deletion */ self->x.velosys = (double)NPY_NAN; return 0; } note_change(self); return set_double("velosys", value, &self->x.velosys); } /* static PyObject* */ /* PyWcsprm_get_wtb( */ /* PyWcsprm* self, */ /* /\*@unused@*\/ void* closure) { */ /* PyObject* result; */ /* PyObject* subresult; */ /* int i, nwtb; */ /* nwtb = self->x.nwtb; */ /* result = PyList_New(nwtb); */ /* if (result == NULL) { */ /* return NULL; */ /* } */ /* for (i = 0; i < nwtb; ++i) { */ /* subresult = (PyObject *)PyWtbarr_cnew((PyObject *)self, &(self->x.wtb[i])); */ /* if (subresult == NULL) { */ /* Py_DECREF(result); */ /* return NULL; */ /* } */ /* if (PyList_SetItem(result, i, subresult) == -1) { */ /* Py_DECREF(subresult); */ /* Py_DECREF(result); */ /* return NULL; */ /* } */ /* } */ /* return result; */ /* } */ static PyObject* PyWcsprm_get_zsource( PyWcsprm* self, /*@unused@*/ void* closure) { return get_double("zsource", self->x.zsource); } static int PyWcsprm_set_zsource( PyWcsprm* self, PyObject* value, /*@unused@*/ void* closure) { if (value == NULL) { /* deletion */ self->x.zsource = (double)NPY_NAN; return 0; } note_change(self); return set_double("zsource", value, &self->x.zsource); } /*************************************************************************** * PyWcsprm definition structures */ static PyGetSetDef PyWcsprm_getset[] = { {"alt", (getter)PyWcsprm_get_alt, (setter)PyWcsprm_set_alt, (char *)doc_alt}, {"axis_types", (getter)PyWcsprm_get_axis_types, NULL, (char *)doc_axis_types}, {"cd", (getter)PyWcsprm_get_cd, (setter)PyWcsprm_set_cd, (char *)doc_cd}, {"cdelt", (getter)PyWcsprm_get_cdelt, (setter)PyWcsprm_set_cdelt, (char *)doc_cdelt}, {"cel_offset", (getter)PyWcsprm_get_cel_offset, (setter)PyWcsprm_set_cel_offset, (char *)doc_cel_offset}, {"cname", (getter)PyWcsprm_get_cname, (setter)PyWcsprm_set_cname, (char *)doc_cname}, {"colax", (getter)PyWcsprm_get_colax, (setter)PyWcsprm_set_colax, (char *)doc_colax}, {"colnum", (getter)PyWcsprm_get_colnum, (setter)PyWcsprm_set_colnum, (char *)doc_colnum}, {"crder", (getter)PyWcsprm_get_crder, (setter)PyWcsprm_set_crder, (char *)doc_crder}, {"crota", (getter)PyWcsprm_get_crota, (setter)PyWcsprm_set_crota, (char *)doc_crota}, {"crpix", (getter)PyWcsprm_get_crpix, (setter)PyWcsprm_set_crpix, (char *)doc_crpix}, {"crval", (getter)PyWcsprm_get_crval, (setter)PyWcsprm_set_crval, (char *)doc_crval}, {"csyer", (getter)PyWcsprm_get_csyer, (setter)PyWcsprm_set_csyer, (char *)doc_csyer}, {"ctype", (getter)PyWcsprm_get_ctype, (setter)PyWcsprm_set_ctype, (char *)doc_ctype}, {"cubeface", (getter)PyWcsprm_get_cubeface, (setter)PyWcsprm_set_cubeface, (char *)doc_cubeface}, {"cunit", (getter)PyWcsprm_get_cunit, (setter)PyWcsprm_set_cunit, (char *)doc_cunit}, {"dateavg", (getter)PyWcsprm_get_dateavg, (setter)PyWcsprm_set_dateavg, (char *)doc_dateavg}, {"dateobs", (getter)PyWcsprm_get_dateobs, (setter)PyWcsprm_set_dateobs, (char *)doc_dateobs}, {"equinox", (getter)PyWcsprm_get_equinox, (setter)PyWcsprm_set_equinox, (char *)doc_equinox}, {"imgpix_matrix", (getter)PyWcsprm_get_imgpix_matrix, NULL, (char *)doc_imgpix_matrix}, {"lat", (getter)PyWcsprm_get_lat, NULL, (char *)doc_lat}, {"latpole", (getter)PyWcsprm_get_latpole, (setter)PyWcsprm_set_latpole, (char *)doc_latpole}, {"lattyp", (getter)PyWcsprm_get_lattyp, NULL, (char *)doc_lattyp}, {"lng", (getter)PyWcsprm_get_lng, NULL, (char *)doc_lng}, {"lngtyp", (getter)PyWcsprm_get_lngtyp, NULL, (char *)doc_lngtyp}, {"lonpole", (getter)PyWcsprm_get_lonpole, (setter)PyWcsprm_set_lonpole, (char *)doc_lonpole}, {"mjdavg", (getter)PyWcsprm_get_mjdavg, (setter)PyWcsprm_set_mjdavg, (char *)doc_mjdavg}, {"mjdobs", (getter)PyWcsprm_get_mjdobs, (setter)PyWcsprm_set_mjdobs, (char *)doc_mjdobs}, {"name", (getter)PyWcsprm_get_name, (setter)PyWcsprm_set_name, (char *)doc_name}, {"naxis", (getter)PyWcsprm_get_naxis, NULL, (char *)doc_naxis}, {"obsgeo", (getter)PyWcsprm_get_obsgeo, (setter)PyWcsprm_set_obsgeo, (char *)doc_obsgeo}, {"pc", (getter)PyWcsprm_get_pc, (setter)PyWcsprm_set_pc, (char *)doc_pc}, {"phi0", (getter)PyWcsprm_get_phi0, (setter)PyWcsprm_set_phi0, (char *)doc_phi0}, {"piximg_matrix", (getter)PyWcsprm_get_piximg_matrix, NULL, (char *)doc_piximg_matrix}, {"radesys", (getter)PyWcsprm_get_radesys, (setter)PyWcsprm_set_radesys, (char *)doc_radesys}, {"restfrq", (getter)PyWcsprm_get_restfrq, (setter)PyWcsprm_set_restfrq, (char *)doc_restfrq}, {"restwav", (getter)PyWcsprm_get_restwav, (setter)PyWcsprm_set_restwav, (char *)doc_restwav}, {"spec", (getter)PyWcsprm_get_spec, NULL, (char *)doc_spec}, {"specsys", (getter)PyWcsprm_get_specsys, (setter)PyWcsprm_set_specsys, (char *)doc_specsys}, {"ssysobs", (getter)PyWcsprm_get_ssysobs, (setter)PyWcsprm_set_ssysobs, (char *)doc_ssysobs}, {"ssyssrc", (getter)PyWcsprm_get_ssyssrc, (setter)PyWcsprm_set_ssyssrc, (char *)doc_ssyssrc}, {"tab", (getter)PyWcsprm_get_tab, NULL, (char *)doc_tab}, {"theta0", (getter)PyWcsprm_get_theta0, (setter)PyWcsprm_set_theta0, (char *)doc_theta0}, {"velangl", (getter)PyWcsprm_get_velangl, (setter)PyWcsprm_set_velangl, (char *)doc_velangl}, {"velosys", (getter)PyWcsprm_get_velosys, (setter)PyWcsprm_set_velosys, (char *)doc_velosys}, /* {"wtb", (getter)PyWcsprm_get_wtb, NULL, (char *)doc_tab}, */ {"zsource", (getter)PyWcsprm_get_zsource, (setter)PyWcsprm_set_zsource, (char *)doc_zsource}, {NULL} }; static PyMethodDef PyWcsprm_methods[] = { {"celfix", (PyCFunction)PyWcsprm_celfix, METH_NOARGS, doc_celfix}, {"__copy__", (PyCFunction)PyWcsprm_copy, METH_NOARGS, doc_copy}, {"cylfix", (PyCFunction)PyWcsprm_cylfix, METH_VARARGS|METH_KEYWORDS, doc_cylfix}, {"datfix", (PyCFunction)PyWcsprm_datfix, METH_NOARGS, doc_datfix}, {"__deepcopy__", (PyCFunction)PyWcsprm_copy, METH_O, doc_copy}, {"fix", (PyCFunction)PyWcsprm_fix, METH_VARARGS|METH_KEYWORDS, doc_fix}, {"get_cdelt", (PyCFunction)PyWcsprm_get_cdelt_func, METH_NOARGS, doc_get_cdelt}, {"get_pc", (PyCFunction)PyWcsprm_get_pc_func, METH_NOARGS, doc_get_pc}, {"get_ps", (PyCFunction)PyWcsprm_get_ps, METH_NOARGS, doc_get_ps}, {"get_pv", (PyCFunction)PyWcsprm_get_pv, METH_NOARGS, doc_get_pv}, {"has_cd", (PyCFunction)PyWcsprm_has_cdi_ja, METH_NOARGS, doc_has_cd}, {"has_cdi_ja", (PyCFunction)PyWcsprm_has_cdi_ja, METH_NOARGS, doc_has_cdi_ja}, {"has_crota", (PyCFunction)PyWcsprm_has_crotaia, METH_NOARGS, doc_has_crota}, {"has_crotaia", (PyCFunction)PyWcsprm_has_crotaia, METH_NOARGS, doc_has_crotaia}, {"has_pc", (PyCFunction)PyWcsprm_has_pci_ja, METH_NOARGS, doc_has_pc}, {"has_pci_ja", (PyCFunction)PyWcsprm_has_pci_ja, METH_NOARGS, doc_has_pci_ja}, {"is_unity", (PyCFunction)PyWcsprm_is_unity, METH_NOARGS, doc_is_unity}, {"mix", (PyCFunction)PyWcsprm_mix, METH_VARARGS|METH_KEYWORDS, doc_mix}, {"p2s", (PyCFunction)PyWcsprm_p2s, METH_VARARGS|METH_KEYWORDS, doc_p2s}, {"print_contents", (PyCFunction)PyWcsprm_print_contents, METH_NOARGS, doc_print_contents}, {"s2p", (PyCFunction)PyWcsprm_s2p, METH_VARARGS|METH_KEYWORDS, doc_s2p}, {"set", (PyCFunction)PyWcsprm_set, METH_NOARGS, doc_set}, {"set_ps", (PyCFunction)PyWcsprm_set_ps, METH_O, doc_set_ps}, {"set_pv", (PyCFunction)PyWcsprm_set_pv, METH_O, doc_set_pv}, {"spcfix", (PyCFunction)PyWcsprm_spcfix, METH_NOARGS, doc_spcfix}, {"sptr", (PyCFunction)PyWcsprm_sptr, METH_VARARGS|METH_KEYWORDS, doc_sptr}, {"sub", (PyCFunction)PyWcsprm_sub, METH_VARARGS|METH_KEYWORDS, doc_sub}, {"to_header", (PyCFunction)PyWcsprm_to_header, METH_VARARGS|METH_KEYWORDS, doc_to_header}, {"unitfix", (PyCFunction)PyWcsprm_unitfix, METH_VARARGS|METH_KEYWORDS, doc_unitfix}, {NULL} }; PyTypeObject PyWcsprmType = { #if PY3K PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ #endif "pywcs._Wcsprm", /*tp_name*/ sizeof(PyWcsprm), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)PyWcsprm_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ (reprfunc)PyWcsprm___str__, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ (reprfunc)PyWcsprm___str__, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ doc_Wcsprm, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ PyWcsprm_methods, /* tp_methods */ 0, /* tp_members */ PyWcsprm_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)PyWcsprm_init, /* tp_init */ 0, /* tp_alloc */ PyWcsprm_new, /* tp_new */ }; #define CONSTANT(a) PyModule_AddIntConstant(m, #a, a) int _setup_wcsprm_type( PyObject* m) { if (PyType_Ready(&PyWcsprmType) < 0) { return -1; } Py_INCREF(&PyWcsprmType); wcsprintf_set(NULL); wcserr_enable(1); return ( PyModule_AddObject(m, "_Wcsprm", (PyObject *)&PyWcsprmType) || CONSTANT(WCSSUB_LONGITUDE) || CONSTANT(WCSSUB_LATITUDE) || CONSTANT(WCSSUB_CUBEFACE) || CONSTANT(WCSSUB_SPECTRAL) || CONSTANT(WCSSUB_STOKES) || CONSTANT(WCSSUB_CELESTIAL) || CONSTANT(WCSHDR_IMGHEAD) || CONSTANT(WCSHDR_BIMGARR) || CONSTANT(WCSHDR_PIXLIST) || CONSTANT(WCSHDR_none) || CONSTANT(WCSHDR_all) || CONSTANT(WCSHDR_CROTAia) || CONSTANT(WCSHDR_EPOCHa) || CONSTANT(WCSHDR_VELREFa) || CONSTANT(WCSHDR_CD00i00j) || CONSTANT(WCSHDR_PC00i00j) || CONSTANT(WCSHDR_PROJPn) || CONSTANT(WCSHDR_RADECSYS) || CONSTANT(WCSHDR_VSOURCE) || CONSTANT(WCSHDR_DOBSn) || CONSTANT(WCSHDR_LONGKEY) || CONSTANT(WCSHDR_CNAMn) || CONSTANT(WCSHDR_AUXIMG) || CONSTANT(WCSHDR_ALLIMG) || CONSTANT(WCSHDO_none) || CONSTANT(WCSHDO_all) || CONSTANT(WCSHDO_safe) || CONSTANT(WCSHDO_DOBSn) || CONSTANT(WCSHDO_TPCn_ka) || CONSTANT(WCSHDO_PVn_ma) || CONSTANT(WCSHDO_CRPXna) || CONSTANT(WCSHDO_CNAMna) || CONSTANT(WCSHDO_WCSNna)); } pywcs-1.12/src/wcslib_wrap.h0000644001153600020070000000347112310355626020127 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __WCSLIB_WRAP_H__ #define __WCSLIB_WRAP_H__ #include "pyutil.h" extern PyTypeObject PyWcsprmType; typedef struct { PyObject_HEAD struct wcsprm x; } PyWcsprm; int _setup_wcsprm_type(PyObject* m); PyObject* PyWcsprm_find_all_wcs( PyObject* self, PyObject* args, PyObject* kwds); #endif pywcs-1.12/src/wcslib_wtbarr_wrap.c0000644001153600020070000002100612310355626021475 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #define NO_IMPORT_ARRAY #include "wcslib_wtbarr_wrap.h" #include /* It gets to be really tedious to type long docstrings in ANSI C syntax (since multi-line strings literals are not valid). Therefore, the docstrings are written in doc/docstrings.py, which are then converted by setup.py into docstrings.h, which we include here. */ #include "docstrings.h" /*************************************************************************** * Helper functions * ***************************************************************************/ /*************************************************************************** * PyWtbarr methods */ static int PyWtbarr_traverse( PyWtbarr* self, visitproc visit, void *arg) { int vret; vret = visit(self->owner, arg); if (vret != 0) { return vret; } return 0; } static int PyWtbarr_clear( PyWtbarr* self) { PyObject* tmp; tmp = self->owner; self->owner = NULL; Py_XDECREF(tmp); return 0; } static void PyWtbarr_dealloc( PyWtbarr* self) { PyWtbarr_clear(self); Py_TYPE(self)->tp_free((PyObject*)self); } PyWtbarr* PyWtbarr_cnew(PyObject* wcsprm, struct wtbarr* x) { PyWtbarr* self; self = (PyWtbarr*)(&PyWtbarrType)->tp_alloc(&PyWtbarrType, 0); self->x = x; Py_INCREF(wcsprm); self->owner = wcsprm; return self; } /*************************************************************************** * Member getters/setters (properties) */ /*@null@*/ static PyObject* PyWtbarr_get_data( PyWtbarr* self, /*@unused@*/ void* closure) { npy_intp ndims; npy_intp dims[NPY_MAXDIMS]; npy_intp i; if (is_null(self->x->arrayp)) { return NULL; } ndims = (Py_ssize_t)self->x->ndim; for (i = 0; i < ndims; ++i) { dims[i] = self->x->dimlen[i]; } return get_double_array("data", *self->x->arrayp, ndims, dims, (PyObject*)self); } /*@null@*/ static int PyWtbarr_set_data( PyWtbarr* self, PyObject* value, /*@unused@*/ void* closure) { npy_intp ndims; npy_intp dims[NPY_MAXDIMS]; npy_intp i; if (is_null(self->x->arrayp)) { return -1; } ndims = (Py_ssize_t)self->x->ndim; for (i = 0; i < ndims; ++i) { dims[i] = self->x->dimlen[i]; } return set_double_array("data", value, ndims, dims, *self->x->arrayp); } /*@null@*/ static PyObject* PyWtbarr_get_dims( PyWtbarr* self, /*@unused@*/ void* closure) { Py_ssize_t ndims = 0; if (is_null(self->x->dimlen)) { return NULL; } ndims = (Py_ssize_t)self->x->ndim; return get_int_array("dims", self->x->dimlen, 1, &ndims, (PyObject*)self); } /*@null@*/ static PyObject* PyWtbarr_get_extlev( PyWtbarr* self, /*@unused@*/ void* closure) { return get_int("extlev", self->x->extlev); } /*@null@*/ static PyObject* PyWtbarr_get_extnam( PyWtbarr* self, /*@unused@*/ void* closure) { return get_string("extnam", self->x->extnam); } /*@null@*/ static PyObject* PyWtbarr_get_extver( PyWtbarr* self, /*@unused@*/ void* closure) { return get_int("extver", self->x->extver); } /*@null@*/ static PyObject* PyWtbarr_get_i( PyWtbarr* self, /*@unused@*/ void* closure) { return get_int("i", self->x->i); } /*@null@*/ static PyObject* PyWtbarr_get_kind( PyWtbarr* self, /*@unused@*/ void* closure) { char kind = (char)self->x->kind; #if PY3K return PyUnicode_FromStringAndSize(&kind, 1); #else return PyString_FromStringAndSize(&kind, 1); #endif } /*@null@*/ static PyObject* PyWtbarr_get_m( PyWtbarr* self, /*@unused@*/ void* closure) { return get_int("m", self->x->m); } /*@null@*/ static PyObject* PyWtbarr_get_ndim( PyWtbarr* self, /*@unused@*/ void* closure) { return get_int("ndim", self->x->ndim); } /*@null@*/ static PyObject* PyWtbarr_get_row( PyWtbarr* self, /*@unused@*/ void* closure) { return get_int("row", self->x->row); } /*@null@*/ static PyObject* PyWtbarr_get_ttype( PyWtbarr* self, /*@unused@*/ void* closure) { return get_string("ttype", self->x->ttype); } /*************************************************************************** * PyWtbarr definition structures */ static PyGetSetDef PyWtbarr_getset[] = { {"data", (getter)PyWtbarr_get_data, (setter)PyWtbarr_set_data, (char *)doc_data}, {"dims", (getter)PyWtbarr_get_dims, NULL, (char *)doc_dims}, {"extlev", (getter)PyWtbarr_get_extlev, NULL, (char *)doc_extlev}, {"extnam", (getter)PyWtbarr_get_extnam, NULL, (char *)doc_extnam}, {"extver", (getter)PyWtbarr_get_extver, NULL, (char *)doc_extver}, {"i", (getter)PyWtbarr_get_i, NULL, (char *)doc_i}, {"kind", (getter)PyWtbarr_get_kind, NULL, (char *)doc_kind}, {"m", (getter)PyWtbarr_get_m, NULL, (char *)doc_m}, {"ndim", (getter)PyWtbarr_get_ndim, NULL, (char *)doc_ndim}, {"row", (getter)PyWtbarr_get_row, NULL, (char *)doc_row}, {"ttype", (getter)PyWtbarr_get_ttype, NULL, (char *)doc_ttype}, {NULL} }; static PyMethodDef PyWtbarr_methods[] = { {NULL} }; PyTypeObject PyWtbarrType = { #if PY3K PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ #endif "pywcs.Wtbarr", /*tp_name*/ sizeof(PyWtbarr), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)PyWtbarr_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ doc_Wtbarr, /* tp_doc */ (traverseproc)PyWtbarr_traverse, /* tp_traverse */ (inquiry)PyWtbarr_clear, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ PyWtbarr_methods, /* tp_methods */ 0, /* tp_members */ PyWtbarr_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ }; int _setup_wtbarr_type( PyObject* m) { if (PyType_Ready(&PyWtbarrType) < 0) { return -1; } Py_INCREF(&PyWtbarrType); PyModule_AddObject(m, "Wtbarr", (PyObject *)&PyWtbarrType); return 0; } pywcs-1.12/src/wcslib_wtbarr_wrap.h0000644001153600020070000000351312310355626021505 0ustar cslocumSTSCI\science00000000000000/* Copyright (C) 2008-2012 Association of Universities for Research in Astronomy (AURA) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of AURA and its representatives may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Author: Michael Droettboom mdroe@stsci.edu */ #ifndef __WCSLIB_WTBARR_WRAP_H__ #define __WCSLIB_WTBARR_WRAP_H__ #include "pyutil.h" #include "wcs.h" extern PyTypeObject PyWtbarrType; typedef struct { PyObject_HEAD struct wtbarr* x; PyObject* owner; } PyWtbarr; PyWtbarr* PyWtbarr_cnew(PyObject* wcsprm, struct wtbarr* x); int _setup_wtbarr_type(PyObject* m); #endif pywcs-1.12/stsci_distutils_hack.py0000644001153600020070000002152112310355627021441 0ustar cslocumSTSCI\science00000000000000# # $HeadURL: https://www.stsci.edu/svn/ssb/stsci_python/stsci_python/trunk/pytools/lib/stsci_distutils_hack.py $ # $Rev: 7917 $ # # Implements setup.py code common to many of our packages. # # The new standard stsci module setup.py is just # # import pytools.stsci_distutils_hack # pytools.stsci_distutils_hack.run( pytools_version = "XX" ) # # where XX is the version of pytools you expect for the install to work # from __future__ import division # confidence high """ Special handling for stsci_python package installation. stsci_python is distributed as a single package, but it contains packages that are also distributed separately. When we use this module to install our package, we can use the exact same definition file to control the setup.py of the individual package _and_ the setup.py of stsci_python. This module also preserves revision control data in the installed or distributed files. If you are not a developer at STScI, this module is probably not of much interest to you. """ __docformat__ = 'restructuredtext' ######## ######## ######## ######## ######## ######## ######## ######## # # actually perform the install # # NOTE: This is not used to install pytools itself! import sys def run( pytools_version = None ) : """ Perform a stsci_python install based on the information in defsetup.py * gather our subversion revision number and the install time * perform the install usage: import pytools.stsci_distutils_hack pytools.stsci_distutils_hack.run(pytools_version = "3.0") """ if not hasattr(sys, 'version_info') or sys.version_info < (2,3,0,'alpha',0): raise SystemExit("Python 2.3 or later required.") if pytools_version : # Only try to import pytools if we are asked to check for a version. # # ( We may have been extracted from pytools and bundled with a package. # In that case, we do not want to risk finding some _other_ pytools # and comparing that version. ) import pytools # bug: should use distutils version comparator to perform ">" comparisons if ( pytools.__version__ != pytools_version ) : print("wrong version of pytools!") print("have %s" % pytools.__version__) print("want %s" % pytools_version) sys.exit(1) from distutils.core import setup from defsetup import setupargs, pkg # collect our subversion information __set_svn_version__() # save the date when we last ran setup.py __set_setup_date__() if "version" in sys.argv : sys.exit(0) # If they have multiple packages, we have to allow them to give a list. # That is the unusual case, so we let them give a string if they have a single # package. if isinstance(pkg,str) : pkg = [ pkg ] # If they have multiple packages, they have to specify package_dir. Otherwise, # we can create one for them. setup( name = pkg[0], packages = pkg, **setupargs ) ######## ######## ######## ######## ######## ######## ######## ######## # # This part fixes install_data to put data files in the same directory # with the python library files, which is where our packages want # them. # # This is essentially "smart_install_data" as used in the old # setup.py files, except that it also understands wildcards # and os-specific paths. This means the module author can # ask for data files with # "data/generic/*" # instead of # glob.glob(os.path.join('data', 'generic', '*')) import os import glob import distutils.util import distutils.command.install_data o = distutils.command.install_data.install_data # same trick as smart_install_data used: save the old run() method and # insert our own run method ahead of it o.old_run = o.run def new_run ( self ) : """ Hack for distutils to cause install_data to be in the same directory as the python library files. Our packages expect this. """ # We want our data files in the directory with the library files install_cmd = self.get_finalized_command('install') self.install_dir = getattr(install_cmd, 'install_lib') # self.data_files is a list of # ( destination_directory, [ source_file, source_file, source_file ] ) # # We want to do wildcard expansion on all the file names. # l = [ ] for f in self.data_files : ( dest_dir, files ) = f fl = [ ] for ff in files : ff = distutils.util.convert_path(ff) ff = glob.glob(ff) fl.extend(ff) dest_dir = distutils.util.convert_path(dest_dir) l.append( ( dest_dir, fl ) ) self.data_files = l # now use the original run() function to finish return distutils.command.install_data.install_data.old_run(self) o.run = new_run ######## ######## ######## ######## ######## ######## ######## ######## # # Function to collect svn version information - used to be stsci_python/version.py # with multiple copies in the system. # import os.path import re # # This is the entry point. All you need to do is call this function from your # setup.py according to the example above. It will create a file called # lib/svn_version.py ; After that, you can # # # find out what subversion information applies to yourpackage # import yourpackage.svn_version # print yourpackage.svn_version.__svn_version__ # print yourpackage.svn_version.__full_svn_info__ # def __set_svn_version__(path="./", fname='svn_version.py' ) : # # path is the package where the version information will be stored. Default # is "this package", but from a higher level package, you can specify a directory # of a package to process # # fname is the name of the file to store the version information in. Never change # this. # info = None rev = __get_svn_rev__(path) version_file = os.path.join(path,'lib',fname) # if we are unable to determine the revision, we default to leaving the # revision file unchanged. Otherwise, we fill it in with whatever # we have if rev is None: if os.path.exists(version_file) : return revision = 'Unable to determine SVN revision' else: if ( rev == 'exported' or rev == 'unknown' ) and os.path.exists(version_file) : return revision = str(rev) info = __get_full_info__(path) # now we can write the version information f = open(version_file,'w') f.write("__svn_version__ = %s\n" % repr(revision)) # info will be a multi-line string. We are not using repr(info) # for readability; the output of "svn info" can not contain ''' # unless you are doing something bad. f.write("\n__full_svn_info__ = '''\n%s'''\n\n" % info) f.close() def __get_svn_rev__(path): m = None try: # with popen3, stderr goes into a pipe where we ignore it, # This means the user does not see errors. cmd = 'svnversion '+path (sin, sout, serr) = os.popen3(cmd) # pick up the first line of output m=sout.read().strip() # if it looks like valid svnversion output, return it if m == 'exported' : return m if re.match('^[0-9][0-9:]*[A-Z]*$',m) : return m # if we get here, it was not valid - that probably means # an error of some kind. except: pass return None def __get_full_info__(path): info = None try: # with popen3, stderr goes into a pipe where we ignore it, # This means the user does not see errors. (sin, sout, serr) = os.popen3('svn info %s' % path) # pick up all the lines of output info = [l.strip() for l in sout.readlines()] # if no output, there was an error and we don't know anything if len(info) == 0 : return "unknown" # there was output, so join it all together return '\n'.join(info) except: pass return "unknown" ######## ######## ######## ######## ######## ######## ######## ######## # # note when we last ran setup.py -- what we really want is when the # software was installed, but we can use the time we ran setup.py as # a proxy for that. # def __set_setup_date__( path="./", fname='svn_version.py') : import datetime file = os.path.join(path,'lib',fname) d = datetime.datetime.now() l = [ ] try : # we don't expect this to fail ever, but it might f = open(file,"r") for line in f : if line.find("# setupdate") < 0 : l.append(line) f.close() except IOError : pass f=open(file,"w") for line in l : f.write(line) f.write("%s # setupdate\n" % "import datetime") f.write("%s # setupdate\n" % ("setupdate = "+repr(d))) f.close() pywcs-1.12/wcslib/0000755001153600020070000000000012310355732016127 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/C/0000755001153600020070000000000012310355732016311 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/C/cel.c0000644001153600020070000003032112310355626017221 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: cel.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include "wcserr.h" #include "wcsmath.h" #include "wcsprintf.h" #include "wcstrig.h" #include "sph.h" #include "cel.h" const int CELSET = 137; /* Map status return value to message. */ const char *cel_errmsg[] = { "Success", "Null celprm pointer passed", "Invalid projection parameters", "Invalid coordinate transformation parameters", "Ill-conditioned coordinate transformation parameters", "One or more of the (x,y) coordinates were invalid", "One or more of the (lng,lat) coordinates were invalid"}; /* Convenience macro for invoking wcserr_set(). */ #define CEL_ERRMSG(status) WCSERR_SET(status), cel_errmsg[status] /*--------------------------------------------------------------------------*/ int celini(cel) struct celprm *cel; { register int k; if (cel == 0x0) return CELERR_NULL_POINTER; cel->flag = 0; cel->offset = 0; cel->phi0 = UNDEFINED; cel->theta0 = UNDEFINED; cel->ref[0] = 0.0; cel->ref[1] = 0.0; cel->ref[2] = UNDEFINED; cel->ref[3] = +90.0; for (k = 0; k < 5; cel->euler[k++] = 0.0); cel->latpreq = -1; cel->err = 0x0; return prjini(&(cel->prj)); } /*--------------------------------------------------------------------------*/ int celfree(cel) struct celprm *cel; { if (cel == 0x0) return CELERR_NULL_POINTER; if (cel->err) free(cel->err); cel->err = 0x0; prjfree(&(cel->prj)); return 0; } /*--------------------------------------------------------------------------*/ int celprt(cel) const struct celprm *cel; { int i; if (cel == 0x0) return CELERR_NULL_POINTER; wcsprintf(" flag: %d\n", cel->flag); wcsprintf(" offset: %d\n", cel->offset); if (undefined(cel->phi0)) { wcsprintf(" phi0: UNDEFINED\n"); } else { wcsprintf(" phi0: %9f\n", cel->phi0); } if (undefined(cel->theta0)) { wcsprintf(" theta0: UNDEFINED\n"); } else { wcsprintf(" theta0: %9f\n", cel->theta0); } wcsprintf(" ref:"); for (i = 0; i < 4; i++) { wcsprintf(" %- 11.5g", cel->ref[i]); } wcsprintf("\n"); wcsprintf(" prj: (see below)\n"); wcsprintf(" euler:"); for (i = 0; i < 5; i++) { wcsprintf(" %- 11.5g", cel->euler[i]); } wcsprintf("\n"); wcsprintf(" latpreq: %d", cel->latpreq); if (cel->latpreq == 0) { wcsprintf(" (not required)\n"); } else if (cel->latpreq == 1) { wcsprintf(" (disambiguation)\n"); } else if (cel->latpreq == 2) { wcsprintf(" (specification)\n"); } else { wcsprintf(" (UNDEFINED)\n"); } wcsprintf(" isolat: %d\n", cel->isolat); WCSPRINTF_PTR(" err: ", cel->err, "\n"); if (cel->err) { wcserr_prt(cel->err, " "); } wcsprintf("\n"); wcsprintf(" prj.*\n"); prjprt(&(cel->prj)); return 0; } /*--------------------------------------------------------------------------*/ int celset(cel) struct celprm *cel; { static const char *function = "celset"; const double tol = 1.0e-10; double clat0, cphip, cthe0, lat0, lng0, phip, slat0, slz, sphip, sthe0; double latp, latp1, latp2, lngp; double u, v, x, y, z; struct prjprm *celprj; struct wcserr **err; if (cel == 0x0) return CELERR_NULL_POINTER; err = &(cel->err); /* Initialize the projection driver routines. */ celprj = &(cel->prj); if (cel->offset) { celprj->phi0 = cel->phi0; celprj->theta0 = cel->theta0; } else { /* Ensure that these are undefined - no fiducial offset. */ celprj->phi0 = UNDEFINED; celprj->theta0 = UNDEFINED; } if (prjset(celprj)) { return wcserr_set(CEL_ERRMSG(CELERR_BAD_PARAM)); } /* Defaults set by the projection routines. */ if (undefined(cel->phi0)) { cel->phi0 = celprj->phi0; } if (undefined(cel->theta0)) { cel->theta0 = celprj->theta0; } else if (fabs(cel->theta0) > 90.0) { if (fabs(cel->theta0) > 90.0 + tol) { return wcserr_set(WCSERR_SET(CELERR_BAD_COORD_TRANS), "Invalid coordinate transformation parameters: theta0 > 90"); } if (cel->theta0 > 90.0) { cel->theta0 = 90.0; } else { cel->theta0 = -90.0; } } lng0 = cel->ref[0]; lat0 = cel->ref[1]; phip = cel->ref[2]; latp = cel->ref[3]; /* Set default for native longitude of the celestial pole? */ if (undefined(phip) || phip == 999.0) { phip = (lat0 < cel->theta0) ? 180.0 : 0.0; phip += cel->phi0; if (phip < -180.0) { phip += 360.0; } else if (phip > 180.0) { phip -= 360.0; } cel->ref[2] = phip; } /* Compute celestial coordinates of the native pole. */ cel->latpreq = 0; if (cel->theta0 == 90.0) { /* Fiducial point at the native pole. */ lngp = lng0; latp = lat0; } else { /* Fiducial point away from the native pole. */ sincosd(lat0, &slat0, &clat0); sincosd(cel->theta0, &sthe0, &cthe0); if (phip == cel->phi0) { sphip = 0.0; cphip = 1.0; u = cel->theta0; v = 90.0 - lat0; } else { sincosd(phip - cel->phi0, &sphip, &cphip); x = cthe0*cphip; y = sthe0; z = sqrt(x*x + y*y); if (z == 0.0) { if (slat0 != 0.0) { return wcserr_set(WCSERR_SET(CELERR_BAD_COORD_TRANS), "Invalid coordinate description:\n" "lat0 == 0 is required for |phip - phi0| = 90 and theta0 == 0"); } /* latp determined solely by LATPOLEa in this case. */ cel->latpreq = 2; if (latp > 90.0) { latp = 90.0; } else if (latp < -90.0) { latp = -90.0; } } else { slz = slat0/z; if (fabs(slz) > 1.0) { if ((fabs(slz) - 1.0) < tol) { if (slz > 0.0) { slz = 1.0; } else { slz = -1.0; } } else { return wcserr_set(WCSERR_SET(CELERR_BAD_COORD_TRANS), "Invalid coordinate description:\n|lat0| <= %.3f is required " "for these values of phip, phi0, and theta0", asind(z)); } } u = atan2d(y,x); v = acosd(slz); } } if (cel->latpreq == 0) { latp1 = u + v; if (latp1 > 180.0) { latp1 -= 360.0; } else if (latp1 < -180.0) { latp1 += 360.0; } latp2 = u - v; if (latp2 > 180.0) { latp2 -= 360.0; } else if (latp2 < -180.0) { latp2 += 360.0; } if (fabs(latp1) < 90.0+tol && fabs(latp2) < 90.0+tol) { /* There are two valid solutions for latp. */ cel->latpreq = 1; } if (fabs(latp-latp1) < fabs(latp-latp2)) { if (fabs(latp1) < 90.0+tol) { latp = latp1; } else { latp = latp2; } } else { if (fabs(latp2) < 90.0+tol) { latp = latp2; } else { latp = latp1; } } /* Account for rounding error. */ if (fabs(latp) < 90.0+tol) { if (latp > 90.0) { latp = 90.0; } else if (latp < -90.0) { latp = -90.0; } } } z = cosd(latp)*clat0; if (fabs(z) < tol) { if (fabs(clat0) < tol) { /* Celestial pole at the fiducial point. */ lngp = lng0; } else if (latp > 0.0) { /* Celestial north pole at the native pole.*/ lngp = lng0 + phip - cel->phi0 - 180.0; } else { /* Celestial south pole at the native pole. */ lngp = lng0 - phip + cel->phi0; } } else { x = (sthe0 - sind(latp)*slat0)/z; y = sphip*cthe0/clat0; if (x == 0.0 && y == 0.0) { /* Sanity check (shouldn't be possible). */ return wcserr_set(WCSERR_SET(CELERR_BAD_COORD_TRANS), "Invalid coordinate transformation parameters, internal error"); } lngp = lng0 - atan2d(y,x); } /* Make celestial longitude of the native pole the same sign as at the fiducial point. */ if (lng0 >= 0.0) { if (lngp < 0.0) { lngp += 360.0; } else if (lngp > 360.0) { lngp -= 360.0; } } else { if (lngp > 0.0) { lngp -= 360.0; } else if (lngp < -360.0) { lngp += 360.0; } } } /* Reset LATPOLEa. */ cel->ref[3] = latp; /* Set the Euler angles. */ cel->euler[0] = lngp; cel->euler[1] = 90.0 - latp; cel->euler[2] = phip; sincosd(cel->euler[1], &cel->euler[4], &cel->euler[3]); cel->isolat = (cel->euler[4] == 0.0); cel->flag = CELSET; /* Check for ill-conditioned parameters. */ if (fabs(latp) > 90.0+tol) { return wcserr_set(WCSERR_SET(CELERR_ILL_COORD_TRANS), "Ill-conditioned coordinate transformation parameters\nNo valid " "solution for latp for these values of phip, phi0, and theta0"); } return 0; } /*--------------------------------------------------------------------------*/ int celx2s(cel, nx, ny, sxy, sll, x, y, phi, theta, lng, lat, stat) struct celprm *cel; int nx, ny, sxy, sll; const double x[], y[]; double phi[], theta[]; double lng[], lat[]; int stat[]; { static const char *function = "celx2s"; int nphi, status; struct prjprm *celprj; struct wcserr **err; /* Initialize. */ if (cel == 0x0) return CELERR_NULL_POINTER; err = &(cel->err); if (cel->flag != CELSET) { if ((status = celset(cel))) return status; } /* Apply spherical deprojection. */ celprj = &(cel->prj); if ((status = celprj->prjx2s(celprj, nx, ny, sxy, 1, x, y, phi, theta, stat))) { if (status == PRJERR_BAD_PIX) { status = CELERR_BAD_PIX; } wcserr_set(CEL_ERRMSG(status)); if (status != CELERR_BAD_PIX) return status; } nphi = (ny > 0) ? (nx*ny) : nx; /* Compute celestial coordinates. */ sphx2s(cel->euler, nphi, 0, 1, sll, phi, theta, lng, lat); return status; } /*--------------------------------------------------------------------------*/ int cels2x(cel, nlng, nlat, sll, sxy, lng, lat, phi, theta, x, y, stat) struct celprm *cel; int nlng, nlat, sll, sxy; const double lng[], lat[]; double phi[], theta[]; double x[], y[]; int stat[]; { static const char *function = "cels2x"; int nphi, ntheta, status; struct prjprm *celprj; struct wcserr **err; /* Initialize. */ if (cel == 0x0) return CELERR_NULL_POINTER; err = &(cel->err); if (cel->flag != CELSET) { if ((status = celset(cel))) return status; } /* Compute native coordinates. */ sphs2x(cel->euler, nlng, nlat, sll, 1, lng, lat, phi, theta); if (cel->isolat) { /* Constant celestial latitude -> constant native latitude. */ nphi = nlng; ntheta = nlat; } else { nphi = (nlat > 0) ? (nlng*nlat) : nlng; ntheta = 0; } /* Apply the spherical projection. */ celprj = &(cel->prj); if ((status = celprj->prjs2x(celprj, nphi, ntheta, 1, sxy, phi, theta, x, y, stat))) { if (status != PRJERR_BAD_PARAM) { status = CELERR_BAD_WORLD; } return wcserr_set(CEL_ERRMSG(status)); } return 0; } pywcs-1.12/wcslib/C/cel.h0000644001153600020070000004261212310355626017234 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: cel.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the FITS World Coordinate System * (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * "Representations of celestial coordinates in FITS", * Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (Paper II) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the cel routines * --------------------------- * These routines implement the part of the FITS World Coordinate System (WCS) * standard that deals with celestial coordinates. They define methods to be * used for computing celestial world coordinates from intermediate world * coordinates (a linear transformation of image pixel coordinates), and vice * versa. They are based on the celprm struct which contains all information * needed for the computations. This struct contains some elements that must * be set by the user, and others that are maintained by these routines, * somewhat like a C++ class but with no encapsulation. * * Routine celini() is provided to initialize the celprm struct with default * values, celfree() reclaims any memory that may have been allocated to store * an error message, and celprt() prints its contents. * * A setup routine, celset(), computes intermediate values in the celprm struct * from parameters in it that were supplied by the user. The struct always * needs to be set up by celset() but it need not be called explicitly - refer * to the explanation of celprm::flag. * * celx2s() and cels2x() implement the WCS celestial coordinate * transformations. In fact, they are high level driver routines for the lower * level spherical coordinate rotation and projection routines described in * sph.h and prj.h. * * * celini() - Default constructor for the celprm struct * ---------------------------------------------------- * celini() sets all members of a celprm struct to default values. It should * be used to initialize every celprm struct. * * Returned: * cel struct celprm* * Celestial transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null celprm pointer passed. * * * celfree() - Destructor for the celprm struct * -------------------------------------------- * celfree() frees any memory that may have been allocated to store an error * message in the celprm struct. * * Given: * cel struct celprm* * Celestial transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null celprm pointer passed. * * * celprt() - Print routine for the celprm struct * ---------------------------------------------- * celprt() prints the contents of a celprm struct using wcsprintf(). Mainly * intended for diagnostic purposes. * * Given: * cel const struct celprm* * Celestial transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null celprm pointer passed. * * * celset() - Setup routine for the celprm struct * ---------------------------------------------- * celset() sets up a celprm struct according to information supplied within * it. * * Note that this routine need not be called directly; it will be invoked by * celx2s() and cels2x() if celprm::flag is anything other than a predefined * magic value. * * Given and returned: * cel struct celprm* * Celestial transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null celprm pointer passed. * 2: Invalid projection parameters. * 3: Invalid coordinate transformation parameters. * 4: Ill-conditioned coordinate transformation * parameters. * * For returns > 1, a detailed error message is set in * celprm::err if enabled, see wcserr_enable(). * * * celx2s() - Pixel-to-world celestial transformation * -------------------------------------------------- * celx2s() transforms (x,y) coordinates in the plane of projection to * celestial coordinates (lng,lat). * * Given and returned: * cel struct celprm* * Celestial transformation parameters. * * Given: * nx,ny int Vector lengths. * * sxy,sll int Vector strides. * * x,y const double[] * Projected coordinates in pseudo "degrees". * * Returned: * phi,theta double[] Longitude and latitude (phi,theta) in the native * coordinate system of the projection [deg]. * * lng,lat double[] Celestial longitude and latitude (lng,lat) of the * projected point [deg]. * * stat int[] Status return value for each vector element: * 0: Success. * 1: Invalid value of (x,y). * * Function return value: * int Status return value: * 0: Success. * 1: Null celprm pointer passed. * 2: Invalid projection parameters. * 3: Invalid coordinate transformation parameters. * 4: Ill-conditioned coordinate transformation * parameters. * 5: One or more of the (x,y) coordinates were * invalid, as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * celprm::err if enabled, see wcserr_enable(). * * * cels2x() - World-to-pixel celestial transformation * -------------------------------------------------- * cels2x() transforms celestial coordinates (lng,lat) to (x,y) coordinates in * the plane of projection. * * Given and returned: * cel struct celprm* * Celestial transformation parameters. * * Given: * nlng,nlat int Vector lengths. * * sll,sxy int Vector strides. * * lng,lat const double[] * Celestial longitude and latitude (lng,lat) of the * projected point [deg]. * * Returned: * phi,theta double[] Longitude and latitude (phi,theta) in the native * coordinate system of the projection [deg]. * * x,y double[] Projected coordinates in pseudo "degrees". * * stat int[] Status return value for each vector element: * 0: Success. * 1: Invalid value of (lng,lat). * * Function return value: * int Status return value: * 0: Success. * 1: Null celprm pointer passed. * 2: Invalid projection parameters. * 3: Invalid coordinate transformation parameters. * 4: Ill-conditioned coordinate transformation * parameters. * 6: One or more of the (lng,lat) coordinates were * invalid, as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * celprm::err if enabled, see wcserr_enable(). * * * celprm struct - Celestial transformation parameters * --------------------------------------------------- * The celprm struct contains information required to transform celestial * coordinates. It consists of certain members that must be set by the user * ("given") and others that are set by the WCSLIB routines ("returned"). Some * of the latter are supplied for informational purposes and others are for * internal use only. * * Returned celprm struct members must not be modified by the user. * * int flag * (Given and returned) This flag must be set to zero whenever any of the * following celprm struct members are set or changed: * * - celprm::offset, * - celprm::phi0, * - celprm::theta0, * - celprm::ref[4], * - celprm::prj: * - prjprm::code, * - prjprm::r0, * - prjprm::pv[], * - prjprm::phi0, * - prjprm::theta0. * * This signals the initialization routine, celset(), to recompute the * returned members of the celprm struct. celset() will reset flag to * indicate that this has been done. * * int offset * (Given) If true (non-zero), an offset will be applied to (x,y) to * force (x,y) = (0,0) at the fiducial point, (phi_0,theta_0). * Default is 0 (false). * * double phi0 * (Given) The native longitude, phi_0 [deg], and ... * * double theta0 * (Given) ... the native latitude, theta_0 [deg], of the fiducial point, * i.e. the point whose celestial coordinates are given in * celprm::ref[1:2]. If undefined (set to a magic value by prjini()) the * initialization routine, celset(), will set this to a projection-specific * default. * * double ref[4] * (Given) The first pair of values should be set to the celestial * longitude and latitude of the fiducial point [deg] - typically right * ascension and declination. These are given by the CRVALia keywords in * FITS. * * (Given and returned) The second pair of values are the native longitude, * phi_p [deg], and latitude, theta_p [deg], of the celestial pole (the * latter is the same as the celestial latitude of the native pole, * delta_p) and these are given by the FITS keywords LONPOLEa and LATPOLEa * (or by PVi_2a and PVi_3a attached to the longitude axis which take * precedence if defined). * * LONPOLEa defaults to phi_0 (see above) if the celestial latitude of the * fiducial point of the projection is greater than or equal to the native * latitude, otherwise phi_0 + 180 [deg]. (This is the condition for the * celestial latitude to increase in the same direction as the native * latitude at the fiducial point.) ref[2] may be set to UNDEFINED (from * wcsmath.h) or 999.0 to indicate that the correct default should be * substituted. * * theta_p, the native latitude of the celestial pole (or equally the * celestial latitude of the native pole, delta_p) is often determined * uniquely by CRVALia and LONPOLEa in which case LATPOLEa is ignored. * However, in some circumstances there are two valid solutions for theta_p * and LATPOLEa is used to choose between them. LATPOLEa is set in ref[3] * and the solution closest to this value is used to reset ref[3]. It is * therefore legitimate, for example, to set ref[3] to +90.0 to choose the * more northerly solution - the default if the LATPOLEa keyword is omitted * from the FITS header. For the special case where the fiducial point of * the projection is at native latitude zero, its celestial latitude is * zero, and LONPOLEa = +/- 90.0 then the celestial latitude of the native * pole is not determined by the first three reference values and LATPOLEa * specifies it completely. * * The returned value, celprm::latpreq, specifies how LATPOLEa was actually * used. * * struct prjprm prj * (Given and returned) Projection parameters described in the prologue to * prj.h. * * double euler[5] * (Returned) Euler angles and associated intermediaries derived from the * coordinate reference values. The first three values are the Z-, X-, and * Z'-Euler angles [deg], and the remaining two are the cosine and sine of * the X-Euler angle. * * int latpreq * (Returned) For informational purposes, this indicates how the LATPOLEa * keyword was used * - 0: Not required, theta_p (== delta_p) was determined uniquely by the * CRVALia and LONPOLEa keywords. * - 1: Required to select between two valid solutions of theta_p. * - 2: theta_p was specified solely by LATPOLEa. * * int isolat * (Returned) True if the spherical rotation preserves the magnitude of the * latitude, which occurs iff the axes of the native and celestial * coordinates are coincident. It signals an opportunity to cache * intermediate calculations common to all elements in a vector * computation. * * struct wcserr *err * (Returned) If enabled, when an error status is returned this struct * contains detailed information about the error, see wcserr_enable(). * * void *padding * (An unused variable inserted for alignment purposes only.) * * Global variable: const char *cel_errmsg[] - Status return messages * ------------------------------------------------------------------ * Status messages to match the status value returned from each function. * *===========================================================================*/ #ifndef WCSLIB_CEL #define WCSLIB_CEL #include "prj.h" #include "wcserr.h" #ifdef __cplusplus extern "C" { #endif extern const char *cel_errmsg[]; enum cel_errmsg_enum { CELERR_SUCCESS = 0, /* Success. */ CELERR_NULL_POINTER = 1, /* Null celprm pointer passed. */ CELERR_BAD_PARAM = 2, /* Invalid projection parameters. */ CELERR_BAD_COORD_TRANS = 3, /* Invalid coordinate transformation parameters. */ CELERR_ILL_COORD_TRANS = 4, /* Ill-conditioned coordinated transformation parameters. */ CELERR_BAD_PIX = 5, /* One or more of the (x,y) coordinates were invalid. */ CELERR_BAD_WORLD = 6 /* One or more of the (lng,lat) coordinates were invalid. */ }; struct celprm { /* Initialization flag (see the prologue above). */ /*------------------------------------------------------------------------*/ int flag; /* Set to zero to force initialization. */ /* Parameters to be provided (see the prologue above). */ /*------------------------------------------------------------------------*/ int offset; /* Force (x,y) = (0,0) at (phi_0,theta_0). */ double phi0, theta0; /* Native coordinates of fiducial point. */ double ref[4]; /* Celestial coordinates of fiducial */ /* point and native coordinates of */ /* celestial pole. */ struct prjprm prj; /* Projection parameters (see prj.h). */ /* Information derived from the parameters supplied. */ /*------------------------------------------------------------------------*/ double euler[5]; /* Euler angles and functions thereof. */ int latpreq; /* LATPOLEa requirement. */ int isolat; /* True if |latitude| is preserved. */ /* Error handling */ /*------------------------------------------------------------------------*/ struct wcserr *err; /* Private */ /*------------------------------------------------------------------------*/ void *padding; /* (Dummy inserted for alignment purposes.) */ }; /* Size of the celprm struct in int units, used by the Fortran wrappers. */ #define CELLEN (sizeof(struct celprm)/sizeof(int)) int celini(struct celprm *cel); int celfree(struct celprm *cel); int celprt(const struct celprm *cel); int celset(struct celprm *cel); int celx2s(struct celprm *cel, int nx, int ny, int sxy, int sll, const double x[], const double y[], double phi[], double theta[], double lng[], double lat[], int stat[]); int cels2x(struct celprm *cel, int nlng, int nlat, int sll, int sxy, const double lng[], const double lat[], double phi[], double theta[], double x[], double y[], int stat[]); /* Deprecated. */ #define celini_errmsg cel_errmsg #define celprt_errmsg cel_errmsg #define celset_errmsg cel_errmsg #define celx2s_errmsg cel_errmsg #define cels2x_errmsg cel_errmsg #ifdef __cplusplus } #endif #endif /* WCSLIB_CEL */ pywcs-1.12/wcslib/C/fitshdr.h0000644001153600020070000004323212310355626020133 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: fitshdr.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * The Flexible Image Transport System (FITS), a data format widely used in * astronomy for data interchange and archive, is described in * * "Definition of The Flexible Image Transport System (FITS)", * Hanisch, R.J., Farris, A., Greisen, E.W., et al. 2001, A&A, 376, 359 * * which formalizes NOST 100-2.0, a document produced by the NASA/Science * Office of Standards and Technology, see http://fits.gsfc.nasa.gov. * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the fitshdr routines * ------------------------------- * fitshdr() is a generic FITS header parser provided to handle keyrecords that * are ignored by the WCS header parsers, wcspih() and wcsbth(). Typically the * latter may be set to remove WCS keyrecords from a header leaving fitshdr() * to handle the remainder. * * * fitshdr() - FITS header parser routine * -------------------------------------- * fitshdr() parses a character array containing a FITS header, extracting * all keywords and their values into an array of fitskey structs. * * Given: * header const char [] * Character array containing the (entire) FITS header, * for example, as might be obtained conveniently via the * CFITSIO routine fits_hdr2str(). * * Each header "keyrecord" (formerly "card image") * consists of exactly 80 7-bit ASCII printing characters * in the range 0x20 to 0x7e (which excludes NUL, BS, * TAB, LF, FF and CR) especially noting that the * keyrecords are NOT null-terminated. * * nkeyrec int Number of keyrecords in header[]. * * nkeyids int Number of entries in keyids[]. * * Given and returned: * keyids struct fitskeyid [] * While all keywords are extracted from the header, * keyids[] provides a convienient way of indexing them. * The fitskeyid struct contains three members; * fitskeyid::name must be set by the user while * fitskeyid::count and fitskeyid::name are returned by * fitshdr(). All matched keywords will have their * fitskey::keyno member negated. * * Returned: * nreject int* Number of header keyrecords rejected for syntax * errors. * * keys struct fitskey** * Pointer to an array of nkeyrec fitskey structs * containing all keywords and keyvalues extracted from * the header. * * Memory for the array is allocated by fitshdr() and * this must be freed by the user by invoking free() on * the array. * * Function return value: * int Status return value: * 0: Success. * 1: Null fitskey pointer passed. * 2: Memory allocation failed. * 3: Fatal error returned by Flex parser. * * Notes: * 1: Keyword parsing is done in accordance with the syntax defined by * NOST 100-2.0, noting the following points in particular: * * a: Sect. 5.1.2.1 specifies that keywords be left-justified in columns * 1-8, blank-filled with no embedded spaces, composed only of the * ASCII characters ABCDEFGHJKLMNOPQRSTUVWXYZ0123456789-_ * * fitshdr() accepts any characters in columns 1-8 but flags keywords * that do not conform to standard syntax. * * b: Sect. 5.1.2.2 defines the "value indicator" as the characters "= " * occurring in columns 9 and 10. If these are absent then the * keyword has no value and columns 9-80 may contain any ASCII text * (but see note 2 for CONTINUE keyrecords). This is copied to the * comment member of the fitskey struct. * * c: Sect. 5.1.2.3 states that a keyword may have a null (undefined) * value if the value/comment field, columns 11-80, consists entirely * of spaces, possibly followed by a comment. * * d: Sect. 5.1.1 states that trailing blanks in a string keyvalue are * not significant and the parser always removes them. A string * containing nothing but blanks will be replaced with a single * blank. * * Sect. 5.2.1 also states that a quote character (') in a string * value is to be represented by two successive quote characters and * the parser removes the repeated quote. * * e: The parser recognizes free-format character (NOST 100-2.0, * Sect. 5.2.1), integer (Sect. 5.2.3), and floating-point values * (Sect. 5.2.4) for all keywords. * * f: Sect. 5.2.3 offers no comment on the size of an integer keyvalue * except indirectly in limiting it to 70 digits. The parser will * translates an integer keyvalue to a 32-bit signed integer if it * lies in the range -2147483648 to +2147483647, otherwise it * interprets it as a 64-bit signed integer if possible, or else a * "very long" integer (see fitskey::type). * * g: END not followed by 77 blanks is not considered to be a legitimate * end keyrecord. * * 2: The parser supports a generalization of the OGIP Long String Keyvalue * Convention (v1.0) whereby strings may be continued onto successive * header keyrecords. A keyrecord contains a segment of a continued * string if and only if * * a: it contains the pseudo-keyword CONTINUE, * * b: columns 9 and 10 are both blank, * * c: columns 11 to 80 contain what would be considered a valid string * keyvalue, including optional keycomment, if column 9 had contained * '=', * * d: the previous keyrecord contained either a valid string keyvalue or * a valid CONTINUE keyrecord. * * If any of these conditions is violated, the keyrecord is considered in * isolation. * * Syntax errors in keycomments in a continued string are treated more * permissively than usual; the '/' delimiter may be omitted provided that * parsing of the string keyvalue is not compromised. However, the * FITSHDR_COMMENT status bit will be set for the keyrecord (see * fitskey::status). * * As for normal strings, trailing blanks in a continued string are not * significant. * * In the OGIP convention "the '&' character is used as the last non-blank * character of the string to indicate that the string is (probably) * continued on the following keyword". This additional syntax is not * required by fitshdr(), but if '&' does occur as the last non-blank * character of a continued string keyvalue then it will be removed, along * with any trailing blanks. However, blanks that occur before the '&' * will be preserved. * * * fitskeyid struct - Keyword indexing * ----------------------------------- * fitshdr() uses the fitskeyid struct to return indexing information for * specified keywords. The struct contains three members, the first of which, * fitskeyid::name, must be set by the user with the remainder returned by * fitshdr(). * * char name[12]: * (Given) Name of the required keyword. This is to be set by the user; * the '.' character may be used for wildcarding. Trailing blanks will be * replaced with nulls. * * int count: * (Returned) The number of matches found for the keyword. * * int idx[2]: * (Returned) Indices into keys[], the array of fitskey structs returned by * fitshdr(). Note that these are 0-relative array indices, not keyrecord * numbers. * * If the keyword is found in the header the first index will be set to the * array index of its first occurrence, otherwise it will be set to -1. * * If multiples of the keyword are found, the second index will be set to * the array index of its last occurrence, otherwise it will be set to -1. * * * fitskey struct - Keyword/value information * ------------------------------------------ * fitshdr() returns an array of fitskey structs, each of which contains the * result of parsing one FITS header keyrecord. All members of the fitskey * struct are returned by fitshdr(), none are given by the user. * * int keyno * (Returned) Keyrecord number (1-relative) in the array passed as input to * fitshdr(). This will be negated if the keyword matched any specified in * the keyids[] index. * * int keyid * (Returned) Index into the first entry in keyids[] with which the * keyrecord matches, else -1. * * int status * (Returned) Status flag bit-vector for the header keyrecord employing the * following bit masks defined as preprocessor macros: * * - FITSHDR_KEYWORD: Illegal keyword syntax. * - FITSHDR_KEYVALUE: Illegal keyvalue syntax. * - FITSHDR_COMMENT: Illegal keycomment syntax. * - FITSHDR_KEYREC: Illegal keyrecord, e.g. an END keyrecord with * trailing text. * - FITSHDR_TRAILER: Keyrecord following a valid END keyrecord. * * The header keyrecord is syntactically correct if no bits are set. * * char keyword[12] * (Returned) Keyword name, null-filled for keywords of less than eight * characters (trailing blanks replaced by nulls). * * Use * = sprintf(dst, "%.8s", keyword) * * to copy it to a character array with null-termination, or * = sprintf(dst, "%8.8s", keyword) * * to blank-fill to eight characters followed by null-termination. * * int type * (Returned) Keyvalue data type: * - 0: No keyvalue. * - 1: Logical, represented as int. * - 2: 32-bit signed integer. * - 3: 64-bit signed integer (see below). * - 4: Very long integer (see below). * - 5: Floating point (stored as double). * - 6: Integer complex (stored as double[2]). * - 7: Floating point complex (stored as double[2]). * - 8: String. * - 8+10*n: Continued string (described below and in fitshdr() note 2). * * A negative type indicates that a syntax error was encountered when * attempting to parse a keyvalue of the particular type. * * Comments on particular data types: * - 64-bit signed integers lie in the range * = (-9223372036854775808 <= int64 < -2147483648) || = (+2147483647 < int64 <= +9223372036854775807) * * A native 64-bit data type may be defined via preprocessor macro * WCSLIB_INT64 defined in wcsconfig.h, e.g. as 'long long int'; this * will be typedef'd to 'int64' here. If WCSLIB_INT64 is not set, then * int64 is typedef'd to int[3] instead and fitskey::keyvalue is to be * computed as * = ((keyvalue.k[2]) * 1000000000 + = keyvalue.k[1]) * 1000000000 + = keyvalue.k[0] * * and may reported via * = if (keyvalue.k[2]) { = printf("%d%09d%09d", keyvalue.k[2], abs(keyvalue.k[1]), = abs(keyvalue.k[0])); = } else { = printf("%d%09d", keyvalue.k[1], abs(keyvalue.k[0])); = } * * where keyvalue.k[0] and keyvalue.k[1] range from -999999999 to * +999999999. * * - Very long integers, up to 70 decimal digits in length, are encoded * in keyvalue.l as an array of int[8], each of which stores 9 decimal * digits. fitskey::keyvalue is to be computed as * = (((((((keyvalue.l[7]) * 1000000000 + = keyvalue.l[6]) * 1000000000 + = keyvalue.l[5]) * 1000000000 + = keyvalue.l[4]) * 1000000000 + = keyvalue.l[3]) * 1000000000 + = keyvalue.l[2]) * 1000000000 + = keyvalue.l[1]) * 1000000000 + = keyvalue.l[0] * * - Continued strings are not reconstructed, they remain split over * successive fitskey structs in the keys[] array returned by * fitshdr(). fitskey::keyvalue data type, 8 + 10n, indicates the * segment number, n, in the continuation. * * int padding * (An unused variable inserted for alignment purposes only.) * * union keyvalue * (Returned) A union comprised of * * - fitskey::i, * - fitskey::k, * - fitskey::l, * - fitskey::f, * - fitskey::c, * - fitskey::s, * * used by the fitskey struct to contain the value associated with a * keyword. * * int i * (Returned) Logical (fitskey::type == 1) and 32-bit signed integer * (fitskey::type == 2) data types in the fitskey::keyvalue union. * * int64 k * (Returned) 64-bit signed integer (fitskey::type == 3) data type in the * fitskey::keyvalue union. * * int l[8] * (Returned) Very long integer (fitskey::type == 4) data type in the * fitskey::keyvalue union. * * double f * (Returned) Floating point (fitskey::type == 5) data type in the * fitskey::keyvalue union. * * double c[2] * (Returned) Integer and floating point complex (fitskey::type == 6 || 7) * data types in the fitskey::keyvalue union. * * char s[72] * (Returned) Null-terminated string (fitskey::type == 8) data type in the * fitskey::keyvalue union. * * int ulen * (Returned) Where a keycomment contains a units string in the standard * form, e.g. [m/s], the ulen member indicates its length, inclusive of * square brackets. Otherwise ulen is zero. * * char comment[84] * (Returned) Keycomment, i.e. comment associated with the keyword or, for * keyrecords rejected because of syntax errors, the compete keyrecord * itself with null-termination. * * Comments are null-terminated with trailing spaces removed. Leading * spaces are also removed from keycomments (i.e. those immediately * following the '/' character), but not from COMMENT or HISTORY keyrecords * or keyrecords without a value indicator ("= " in columns 9-80). * * * Global variable: const char *fitshdr_errmsg[] - Status return messages * ---------------------------------------------------------------------- * Error messages to match the status value returned from each function. * *===========================================================================*/ #ifndef WCSLIB_FITSHDR #define WCSLIB_FITSHDR #include "wcsconfig.h" #ifdef __cplusplus extern "C" { #endif #define FITSHDR_KEYWORD 0x01 #define FITSHDR_KEYVALUE 0x02 #define FITSHDR_COMMENT 0x04 #define FITSHDR_KEYREC 0x08 #define FITSHDR_CARD 0x08 /* Alias for backwards compatibility. */ #define FITSHDR_TRAILER 0x10 extern const char *fitshdr_errmsg[]; #ifdef WCSLIB_INT64 typedef WCSLIB_INT64 int64; #else typedef int int64[3]; #endif /* Struct used for indexing the keywords. */ struct fitskeyid { char name[12]; /* Keyword name, null-terminated. */ int count; /* Number of occurrences of keyword. */ int idx[2]; /* Indices into fitskey array. */ }; /* Size of the fitskeyid struct in int units, used by the Fortran wrappers. */ #define KEYIDLEN (sizeof(struct fitskeyid)/sizeof(int)) /* Struct used for storing FITS keywords. */ struct fitskey { int keyno; /* Header keyrecord sequence number (1-rel).*/ int keyid; /* Index into fitskeyid[]. */ int status; /* Header keyrecord status bit flags. */ char keyword[12]; /* Keyword name, null-filled. */ int type; /* Keyvalue type (see above). */ int padding; /* (Dummy inserted for alignment purposes.) */ union { int i; /* 32-bit integer and logical values. */ int64 k; /* 64-bit integer values. */ int l[8]; /* Very long signed integer values. */ double f; /* Floating point values. */ double c[2]; /* Complex values. */ char s[72]; /* String values, null-terminated. */ } keyvalue; /* Keyvalue. */ int ulen; /* Length of units string. */ char comment[84]; /* Comment (or keyrecord), null-terminated. */ }; /* Size of the fitskey struct in int units, used by the Fortran wrappers. */ #define KEYLEN (sizeof(struct fitskey)/sizeof(int)) int fitshdr(const char header[], int nkeyrec, int nkeyids, struct fitskeyid keyids[], int *nreject, struct fitskey **keys); #ifdef __cplusplus } #endif #endif /* WCSLIB_FITSHDR */ pywcs-1.12/wcslib/C/fitshdr.l0000644001153600020070000003052212310355626020135 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: fitshdr.l,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * fitshdr.l is a Flex description file containing a lexical scanner * definition for extracting keywords and keyvalues from a FITS header. * * It requires Flex v2.5.4 or later. * * Refer to fitshdr.h for a description of the user interface and operating * notes. * *===========================================================================*/ /* Options. */ %option full %option never-interactive %option nounput %option noyywrap %option outfile="fitshdr.c" %option prefix="fitshdr" /* Keywords. */ KEYCHR [-_A-Z0-9] KW1 {KEYCHR}{1}" "{7} KW2 {KEYCHR}{2}" "{6} KW3 {KEYCHR}{3}" "{5} KW4 {KEYCHR}{4}" "{4} KW5 {KEYCHR}{5}" "{3} KW6 {KEYCHR}{6}" "{2} KW7 {KEYCHR}{7}" "{1} KW8 {KEYCHR}{8} KEYWORD ({KW1}|{KW2}|{KW3}|{KW4}|{KW5}|{KW6}|{KW7}|{KW8}) /* Keyvalue data types. */ LOGICAL [TF] INT32 [+-]?0*[0-9]{1,9} INT64 [+-]?0*[0-9]{10,18} INTVL [+-]?0*[0-9]{19,} INTEGER [+-]?[0-9]+ FLOAT [+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)? ICOMPLX \(" "*{INTEGER}" "*," "*{INTEGER}" "*\) FCOMPLX \(" "*{FLOAT}" "*," "*{FLOAT}" "*\) STRING '([^']|'')*' /* Characters forming standard unit strings (jwBIQX are not used). */ UNITSTR \[[-+*/^(). 0-9a-zA-Z]+\] /* Exclusive start states. */ %x VALUE INLINE UNITS COMMENT ERROR FLUSH %{ #include #include #include #include #include #include "fitshdr.h" #define YY_DECL int fitshdr(const char header[], int nkeyrec, int nkeyids, \ struct fitskeyid keyids[], int *nreject, \ struct fitskey **keys) #define YY_INPUT(inbuff, count, bufsize) \ { \ if (fitshdr_nkeyrec) { \ strncpy(inbuff, fitshdr_hdr, 80); \ inbuff[80] = '\n'; \ fitshdr_hdr += 80; \ fitshdr_nkeyrec--; \ count = 81; \ } else { \ count = YY_NULL; \ } \ } /* These global variables are required by YY_INPUT. */ const char *fitshdr_hdr; int fitshdr_nkeyrec; /* Used in preempting the call to exit() by yy_fatal_error(). */ jmp_buf fitshdr_abort_jmp_env; #define exit(status) longjmp(fitshdr_abort_jmp_env, status) /* Map status return value to message. */ const char *fitshdr_errmsg[] = { "Success", "Null fitskey pointer-pointer passed", "Memory allocation failed", "Fatal error returned by Flex parser"}; %} %% char *cptr, ctmp[72]; int blank, continuation, end, j, k, keyno; double dtmp; struct fitskey *kptr; struct fitskeyid *iptr; void nullfill(char cptr[], int len); int yylex_destroy(void); fitshdr_hdr = header; fitshdr_nkeyrec = nkeyrec; *nreject = 0; keyno = 0; if (keys == 0x0) { return 1; } /* Allocate memory for the required number of fitskey structs. */ /* Recall that calloc() initializes allocated memory to zero. */ if (!(kptr = *keys = calloc(nkeyrec, sizeof(struct fitskey)))) { return 2; } /* Initialize keyids[]. */ iptr = keyids; for (j = 0; j < nkeyids; j++, iptr++) { iptr->count = 0; iptr->idx[0] = -1; iptr->idx[1] = -1; } blank = 0; continuation = 0; end = 0; /* Return here via longjmp() invoked by yy_fatal_error(). */ if (setjmp(fitshdr_abort_jmp_env)) { return 3; } BEGIN(INITIAL); ^" "{80} { /* A completely blank keyrecord. */ strncpy(kptr->keyword, yytext, 8); yyless(0); blank = 1; BEGIN(COMMENT); } ^(COMMENT|HISTORY|" "{8}) { strncpy(kptr->keyword, yytext, 8); BEGIN(COMMENT); } ^END" "{77} { strncpy(kptr->keyword, yytext, 8); end = 1; BEGIN(FLUSH); } ^END" "{5}=" "+ { /* Illegal END keyrecord. */ strncpy(kptr->keyword, yytext, 8); kptr->status |= FITSHDR_KEYREC; BEGIN(VALUE); } ^END" "{5} { /* Illegal END keyrecord. */ strncpy(kptr->keyword, yytext, 8); kptr->status |= FITSHDR_KEYREC; BEGIN(COMMENT); } ^{KEYWORD}=" "+ { strncpy(kptr->keyword, yytext, 8); BEGIN(VALUE); } ^CONTINUE" "+{STRING} { /* Continued string keyvalue. */ strncpy(kptr->keyword, yytext, 8); if (keyno > 0 && (kptr-1)->type%10 == 8) { /* Put back the string keyvalue. */ for (k = 10; yytext[k] != '\''; k++); yyless(k); continuation = 1; BEGIN(VALUE); } else { /* Not a valid continuation. */ yyless(8); BEGIN(COMMENT); } } ^{KEYWORD} { /* Keyword without value. */ strncpy(kptr->keyword, yytext, 8); BEGIN(COMMENT); } ^.{8}=" "+ { /* Illegal keyword, carry on regardless. */ strncpy(kptr->keyword, yytext, 8); kptr->status |= FITSHDR_KEYWORD; BEGIN(VALUE); } ^.{8} { /* Illegal keyword, carry on regardless. */ strncpy(kptr->keyword, yytext, 8); kptr->status |= FITSHDR_KEYWORD; BEGIN(COMMENT); } " "*/\/ { /* Null keyvalue. */ BEGIN(INLINE); } {LOGICAL} { /* Logical keyvalue. */ kptr->type = 1; kptr->keyvalue.i = (*yytext == 'T'); BEGIN(INLINE); } {INT32} { /* 32-bit signed integer keyvalue. */ kptr->type = 2; if (sscanf(yytext, "%d", &(kptr->keyvalue.i)) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } BEGIN(INLINE); } {INT64} { /* 64-bit signed integer keyvalue (up to 18 digits). */ if (sscanf(yytext, "%lf", &dtmp) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } else if (INT_MIN <= dtmp && dtmp <= INT_MAX) { /* Can be accomodated as a 32-bit signed integer. */ kptr->type = 2; if (sscanf(yytext, "%d", &(kptr->keyvalue.i)) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } } else { /* 64-bit signed integer. */ kptr->type = 3; #ifdef WCSLIB_INT64 /* Native 64-bit integer is available. */ if (sscanf(yytext, "%lld", &(kptr->keyvalue.k)) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } #else /* 64-bit integer (up to 18 digits) implemented as int[3]. */ kptr->keyvalue.k[2] = 0; sprintf(ctmp, "%%%dd%%9d", yyleng-9); if (sscanf(yytext, ctmp, kptr->keyvalue.k+1, kptr->keyvalue.k) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } else if (*yytext == '-') { kptr->keyvalue.k[0] *= -1; } #endif } BEGIN(INLINE); } {INTVL} { /* Very long integer keyvalue (and 19-digit int64). */ kptr->type = 4; strcpy(ctmp, yytext); k = yyleng; for (j = 0; j < 8; j++) { /* Read it backwards. */ k -= 9; if (k < 0) k = 0; if (sscanf(ctmp+k, "%d", kptr->keyvalue.l+j) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } if (*yytext == '-') { kptr->keyvalue.l[j] = -abs(kptr->keyvalue.l[j]); } if (k == 0) break; ctmp[k] = '\0'; } /* Can it be accomodated as a 64-bit signed integer? */ if (j == 2 && abs(kptr->keyvalue.l[2]) <= 9 && abs(kptr->keyvalue.l[1]) <= 223372036 && kptr->keyvalue.l[0] <= 854775807 && kptr->keyvalue.l[0] >= -854775808) { kptr->type = 3; #ifdef WCSLIB_INT64 /* Native 64-bit integer is available. */ kptr->keyvalue.l[2] = 0; if (sscanf(yytext, "%lld", &(kptr->keyvalue.k)) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } #endif } BEGIN(INLINE); } {FLOAT} { /* Float keyvalue. */ kptr->type = 5; if (sscanf(yytext, "%lf", &(kptr->keyvalue.f)) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } BEGIN(INLINE); } {ICOMPLX} { /* Integer complex keyvalue. */ kptr->type = 6; if (sscanf(yytext, "(%lf,%lf)", kptr->keyvalue.c, kptr->keyvalue.c+1) < 2) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } BEGIN(INLINE); } {FCOMPLX} { /* Floating point complex keyvalue. */ kptr->type = 7; if (sscanf(yytext, "(%lf,%lf)", kptr->keyvalue.c, kptr->keyvalue.c+1) < 2) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } BEGIN(INLINE); } {STRING} { /* String keyvalue. */ kptr->type = 8; cptr = kptr->keyvalue.s; strcpy(cptr, yytext+1); /* Squeeze out repeated quotes. */ k = 0; for (j = 0; j < 72; j++) { if (k < j) { cptr[k] = cptr[j]; } if (cptr[j] == '\0') { if (k) cptr[k-1] = '\0'; break; } else if (cptr[j] == '\'' && cptr[j+1] == '\'') { j++; } k++; } if (*cptr) { /* Retain the initial blank in all-blank strings. */ nullfill(cptr+1, 71); } else { nullfill(cptr, 72); } BEGIN(INLINE); } . { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } " "*$ { BEGIN(FLUSH); } " "*\/" "*$ { BEGIN(FLUSH); } " "*\/" "* { BEGIN(UNITS); } " " { kptr->status |= FITSHDR_COMMENT; BEGIN(ERROR); } . { /* Keyvalue parsing must now also be suspect. */ kptr->status |= FITSHDR_COMMENT; kptr->type = 0; BEGIN(ERROR); } {UNITSTR} { kptr->ulen = yyleng; yymore(); BEGIN(COMMENT); } . { yymore(); BEGIN(COMMENT); } .* { strcpy(kptr->comment, yytext); nullfill(kptr->comment, 84); BEGIN(FLUSH); } .* { if (!continuation) kptr->type = -abs(kptr->type); sprintf(kptr->comment, "%.80s", fitshdr_hdr-80); kptr->comment[80] = '\0'; nullfill(kptr->comment+80, 4); BEGIN(FLUSH); } .*\n { /* Discard the rest of the input line. */ kptr->keyno = ++keyno; /* Null-fill the keyword. */ kptr->keyword[8] = '\0'; nullfill(kptr->keyword, 12); /* Do indexing. */ iptr = keyids; kptr->keyid = -1; for (j = 0; j < nkeyids; j++, iptr++) { cptr = iptr->name; cptr[8] = '\0'; nullfill(cptr, 12); for (k = 0; k < 8; k++, cptr++) { if (*cptr != '.' && *cptr != kptr->keyword[k]) break; } if (k == 8) { /* Found a match. */ iptr->count++; if (iptr->idx[0] == -1) { iptr->idx[0] = keyno-1; } else { iptr->idx[1] = keyno-1; } kptr->keyno = -abs(kptr->keyno); if (kptr->keyid < 0) kptr->keyid = j; } } /* Deal with continued strings. */ if (continuation) { /* Tidy up the previous string keyvalue. */ if ((kptr-1)->type == 8) (kptr-1)->type += 10; cptr = (kptr-1)->keyvalue.s; if (cptr[strlen(cptr)-1] == '&') cptr[strlen(cptr)-1] = '\0'; kptr->type = (kptr-1)->type + 10; } /* Check for keyrecords following the END keyrecord. */ if (end && (end++ > 1) && !blank) { kptr->status |= FITSHDR_TRAILER; } if (kptr->status) (*nreject)++; kptr++; blank = 0; continuation = 0; BEGIN(INITIAL); } <> { /* End-of-input. */ yylex_destroy(); return 0; } %% /*--------------------------------------------------------------------------*/ void nullfill(char cptr[], int len) { int j, k; /* Null-fill the string. */ for (j = 0; j < len; j++) { if (cptr[j] == '\0') { for (k = j+1; k < len; k++) { cptr[k] = '\0'; } break; } } for (k = j-1; k >= 0; k--) { if (cptr[k] != ' ') break; cptr[k] = '\0'; } return; } pywcs-1.12/wcslib/C/flexed/0000755001153600020070000000000012310355732017560 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/C/flexed/fitshdr.c0000644001153600020070000201213512310355626021375 0ustar cslocumSTSCI\science00000000000000#line 2 "fitshdr.c" #line 4 "fitshdr.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define yy_create_buffer fitshdr_create_buffer #define yy_delete_buffer fitshdr_delete_buffer #define yy_flex_debug fitshdr_flex_debug #define yy_init_buffer fitshdr_init_buffer #define yy_flush_buffer fitshdr_flush_buffer #define yy_load_buffer_state fitshdr_load_buffer_state #define yy_switch_to_buffer fitshdr_switch_to_buffer #define yyin fitshdrin #define yyleng fitshdrleng #define yylex fitshdrlex #define yylineno fitshdrlineno #define yyout fitshdrout #define yyrestart fitshdrrestart #define yytext fitshdrtext #define yywrap fitshdrwrap #define yyalloc fitshdralloc #define yyrealloc fitshdrrealloc #define yyfree fitshdrfree #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE fitshdrrestart(fitshdrin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int fitshdrleng; extern FILE *fitshdrin, *fitshdrout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up fitshdrtext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up fitshdrtext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via fitshdrrestart()), so that the user can continue scanning by * just pointing fitshdrin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when fitshdrtext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int fitshdrleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow fitshdrwrap()'s to do buffer switches * instead of setting up a fresh fitshdrin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void fitshdrrestart (FILE *input_file ); void fitshdr_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE fitshdr_create_buffer (FILE *file,int size ); void fitshdr_delete_buffer (YY_BUFFER_STATE b ); void fitshdr_flush_buffer (YY_BUFFER_STATE b ); void fitshdrpush_buffer_state (YY_BUFFER_STATE new_buffer ); void fitshdrpop_buffer_state (void ); static void fitshdrensure_buffer_stack (void ); static void fitshdr_load_buffer_state (void ); static void fitshdr_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER fitshdr_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE fitshdr_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE fitshdr_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE fitshdr_scan_bytes (yyconst char *bytes,int len ); void *fitshdralloc (yy_size_t ); void *fitshdrrealloc (void *,yy_size_t ); void fitshdrfree (void * ); #define yy_new_buffer fitshdr_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ fitshdrensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ fitshdr_create_buffer(fitshdrin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ fitshdrensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ fitshdr_create_buffer(fitshdrin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define fitshdrwrap(n) 1 #define YY_SKIP_YYWRAP typedef char YY_CHAR; FILE *fitshdrin = (FILE *) 0, *fitshdrout = (FILE *) 0; typedef int yy_state_type; extern int fitshdrlineno; int fitshdrlineno = 1; extern char *fitshdrtext; #define yytext_ptr fitshdrtext static yyconst flex_int16_t yy_nxt[][128] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 }, { 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 19, 17, 17, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 17, 17, 17, 17, 17, 17, 17, 19, 19, 20, 19, 21, 19, 19, 22, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 17, 17, 17, 17, 19, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17 }, { 15, 23, 23, 23, 23, 23, 23, 23, 23, 23, 16, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 23, 23, 23, 23, 23, 23, 25, 26, 23, 23, 27, 23, 27, 28, 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 32, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 32, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23 }, { 15, 23, 23, 23, 23, 23, 23, 23, 23, 23, 16, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 23, 23, 23, 23, 23, 23, 25, 26, 23, 23, 27, 23, 27, 28, 29, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 32, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 32, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23 }, { 15, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 35, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 36, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }, { 15, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 35, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 36, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 }, { 15, 37, 37, 37, 37, 37, 37, 37, 37, 37, 16, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37 }, { 15, 37, 37, 37, 37, 37, 37, 37, 37, 37, 16, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37 }, { 15, 39, 39, 39, 39, 39, 39, 39, 39, 39, 16, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39 }, { 15, 39, 39, 39, 39, 39, 39, 39, 39, 39, 16, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39 }, { 15, 40, 40, 40, 40, 40, 40, 40, 40, 40, 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 }, { 15, 40, 40, 40, 40, 40, 40, 40, 40, 40, 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 }, { 15, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41 }, { 15, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41 }, { -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15 }, { 15, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16 }, { 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, -17, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }, { 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, -18, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }, { 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, -19, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }, { 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, -20, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }, { 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, -21, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 48, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }, { 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, -22, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, 46, 46, 46, 49, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }, { 15, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23 }, { 15, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 50, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 51, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24 }, { 15, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52 }, { 15, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 54, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 55, -26, 55, 56, -26, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26 }, { 15, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 58, -27, 59, 60, 60, 60, 60, 60, 60, 60, 60, 60, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27 }, { 15, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28 }, { 15, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29 }, { 15, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, 62, -30, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, 65, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, 65, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30 }, { 15, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 62, -31, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 65, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 65, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31 }, { 15, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32 }, { 15, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33 }, { 15, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34 }, { 15, -35, -35, -35, -35, -35, -35, -35, -35, -35, 67, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 68, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 69, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35 }, { 15, -36, -36, -36, -36, -36, -36, -36, -36, -36, 70, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 71, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36 }, { 15, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37 }, { 15, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 72, -38, -38, -38, -38, -38, -38, -38, 72, 72, 72, 72, -38, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, -38, -38, -38, -38, -38, -38, -38, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, -38, -38, -38, 72, -38, -38, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, -38, -38, -38, -38, -38 }, { 15, 73, 73, 73, 73, 73, 73, 73, 73, 73, -39, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73 }, { 15, 74, 74, 74, 74, 74, 74, 74, 74, 74, -40, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75 }, { 15, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42 }, { 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, -43, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 }, { 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, -44, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 }, { 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, -45, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 }, { 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, -46, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, 77, 77, 77, 77, 77, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 }, { 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, -47, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, 77, 77, 77, 77, 77, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 83, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 }, { 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, -48, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, 77, 77, 77, 77, 77, 81, 81, 81, 84, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 }, { 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, -49, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, 77, 77, 77, 77, 77, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 85, 81, 81, 81, 81, 81, 81, 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 }, { 15, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 51, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50 }, { 15, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51 }, { 15, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52 }, { 15, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 52, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53 }, { 15, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 55, -54, 55, 56, -54, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54 }, { 15, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, 56, -55, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55 }, { 15, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56 }, { 15, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 87, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 88, -57, 89, -57, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 91, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 91, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57 }, { 15, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58 }, { 15, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, 62, -59, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, 65, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, 65, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59 }, { 15, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, 62, -60, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, 65, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, 65, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60 }, { 15, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, 65, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, 65, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61 }, { 15, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, 65, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, 65, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62 }, { 15, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, 62, -63, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, 65, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, 65, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63 }, { 15, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, 62, -64, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, 65, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, 65, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64 }, { 15, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, 96, -65, 96, -65, -65, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65 }, { 15, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, 62, -66, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, 65, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, 65, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66 }, { 15, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67 }, { 15, -68, -68, -68, -68, -68, -68, -68, -68, -68, 67, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, 68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, 69, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68 }, { 15, -69, -69, -69, -69, -69, -69, -69, -69, -69, 70, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, 71, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69 }, { 15, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70 }, { 15, -71, -71, -71, -71, -71, -71, -71, -71, -71, 70, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, 71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71 }, { 15, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, 72, -72, -72, -72, -72, -72, -72, -72, 72, 72, 72, 72, -72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, -72, -72, -72, -72, -72, -72, -72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, -72, -72, 99, 72, -72, -72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, -72, -72, -72, -72, -72 }, { 15, 73, 73, 73, 73, 73, 73, 73, 73, 73, -73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73 }, { 15, 74, 74, 74, 74, 74, 74, 74, 74, 74, -74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74 }, { 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75 }, { 15, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76 }, { 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, -77, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, -78, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, -79, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, -80, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 103, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, -81, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, -82, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, -83, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 107, 105, 105, 105, 105, 105, 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, -84, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 108, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, -85, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 109, 105, 105, 105, 105, 105, 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }, { 15, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, 110, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, 111, -86, -86, -86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, 91, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, 91, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86 }, { 15, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, 87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, 88, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87 }, { 15, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, 112, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, 113, -88, 113, 114, -88, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88 }, { 15, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, 110, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, 111, -89, -89, -89, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, 91, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, 91, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89 }, { 15, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, 87, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, 88, -90, 89, -90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, 91, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, 91, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90 }, { 15, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, 117, -91, 117, -91, -91, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91 }, { 15, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, 65, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, 65, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92 }, { 15, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 62, -93, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 65, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 65, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93 }, { 15, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, 62, -94, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, 65, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, 65, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94 }, { 15, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, 62, -95, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, 65, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, 65, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95 }, { 15, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96 }, { 15, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97 }, { 15, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, 62, -98, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, 65, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, 65, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98 }, { 15, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99 }, { 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, -100, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, -101, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, -102, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 126, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, -103, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 127, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, -104, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 128, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, -105, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, 124, 124, 124, 124, 124, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, -106, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, 124, 124, 124, 124, 124, 130, 130, 130, 130, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, -107, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, 124, 124, 124, 124, 124, 130, 130, 130, 130, 130, 130, 130, 130, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, -108, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 133, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, -109, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, 124, 124, 124, 124, 124, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 134, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 15, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, 110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, 111, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110 }, { 15, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, 135, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, 136, -111, 136, 114, -111, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111 }, { 15, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, 112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, 113, -112, 113, 114, -112, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112 }, { 15, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, 114, -113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113 }, { 15, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114 }, { 15, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, 139, -115, -115, -115, -115, -115, -115, -115, -115, 140, -115, -115, -115, -115, 141, -115, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, 143, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, 143, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115 }, { 15, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, 110, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, 111, -116, -116, -116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, 91, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, 91, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116 }, { 15, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117 }, { 15, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, 110, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, 111, -118, -118, -118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118 }, { 15, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, 62, -119, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, 65, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, 65, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119 }, { 15, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, 62, -120, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, 65, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, 65, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120 }, { 15, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, 62, -121, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, 65, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, 65, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121 }, { 15, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, 62, -122, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, 65, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, 65, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122 }, { 15, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, 62, -123, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, 65, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, 65, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -124, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -125, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -126, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 152, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -127, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 153, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -128, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 154, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -129, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 155, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -130, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -131, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -132, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 159, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -133, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 160, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, -134, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 161, 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150 }, { 15, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, 135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, 136, -135, 136, 114, -135, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135 }, { 15, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, 114, -136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136 }, { 15, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, 162, -137, -137, -137, -137, -137, -137, -137, -137, 163, -137, -137, -137, -137, 141, -137, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, 143, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, 143, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137 }, { 15, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 162, -138, -138, -138, -138, -138, -138, -138, -138, 163, -138, -138, -138, -138, -138, -138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 143, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 143, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138 }, { 15, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, 139, -139, -139, -139, -139, -139, -139, -139, -139, 140, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139 }, { 15, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140 }, { 15, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, 162, -141, -141, -141, -141, -141, -141, -141, -141, 163, -141, -141, -141, -141, -141, -141, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, 143, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, 143, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141 }, { 15, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, 139, -142, -142, -142, -142, -142, -142, -142, -142, 140, -142, -142, -142, -142, 141, -142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, 143, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, 143, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142 }, { 15, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, 166, -143, 166, -143, -143, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143 }, { 15, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, 62, -144, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, 65, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, 65, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144 }, { 15, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, 62, -145, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, 65, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, 65, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145 }, { 15, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, 62, -146, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, 65, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, 65, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146 }, { 15, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, 62, -147, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, 65, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, 65, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147 }, { 15, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, 62, -148, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, 65, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, 65, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148 }, { 15, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, 62, -149, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, 65, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, 65, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -150, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -151, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -152, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 177, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -153, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 178, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -154, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 179, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -155, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 180, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -156, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 181, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -157, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -158, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 183, 183, 183, 183, 183, 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -159, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 185, 183, 183, 183, 183, 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -160, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 186, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, -161, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175 }, { 15, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, 162, -162, -162, -162, -162, -162, -162, -162, -162, 163, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162 }, { 15, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163 }, { 15, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, 162, -164, -164, -164, -164, -164, -164, -164, -164, 163, -164, -164, -164, -164, 141, -164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, 143, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, 143, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164 }, { 15, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 162, -165, -165, -165, -165, -165, -165, -165, -165, 163, -165, -165, -165, -165, -165, -165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 143, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 143, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165 }, { 15, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166 }, { 15, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 162, -167, -167, -167, -167, -167, -167, -167, -167, 163, -167, -167, -167, -167, -167, -167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167 }, { 15, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 62, -168, 187, 188, 188, 188, 188, 188, 188, 188, 188, 188, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 65, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 65, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168 }, { 15, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, 62, -169, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, 65, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, 65, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169 }, { 15, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, 62, -170, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, 65, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, 65, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170 }, { 15, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, 62, -171, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, 65, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, 65, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171 }, { 15, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 62, -172, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 65, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 65, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172 }, { 15, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 62, -173, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 65, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 65, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173 }, { 15, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 62, -174, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 65, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 65, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -175, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -176, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 196, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -177, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -178, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -179, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -180, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -181, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -182, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -183, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 198, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 197, 195, 195, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, 195, 195, 195, 195, 195, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -184, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 198, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 197, 195, 195, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, 195, 195, 195, 195, 195, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -185, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 198, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 197, 195, 195, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, 195, 195, 195, 195, 195, 197, 197, 197, 197, 199, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, -186, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 200, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195 }, { 15, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, 62, -187, 201, 202, 202, 202, 202, 202, 202, 202, 202, 202, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, 65, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, 65, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187 }, { 15, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, 62, -188, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, 65, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, 65, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188 }, { 15, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, 62, -189, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, 65, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, 65, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189 }, { 15, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, 62, -190, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, 65, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, 65, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190 }, { 15, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, 62, -191, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, 65, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, 65, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191 }, { 15, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 62, -192, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 65, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 65, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192 }, { 15, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, 62, -193, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, 65, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, 65, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193 }, { 15, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, 62, -194, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, 65, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, 65, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194 }, { 15, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, 210, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195 }, { 15, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, 211, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, 210, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196 }, { 15, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, 212, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197 }, { 15, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, 212, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198 }, { 15, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, 213, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, 212, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199 }, { 15, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 214, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 215, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200 }, { 15, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, 62, -201, 216, 217, 217, 217, 217, 217, 217, 217, 217, 217, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, 65, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, 65, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201 }, { 15, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, 62, -202, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, 65, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, 65, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202 }, { 15, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, 62, -203, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, 65, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, 65, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203 }, { 15, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, 62, -204, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, 65, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, 65, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204 }, { 15, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, 62, -205, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, 65, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, 65, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205 }, { 15, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, 62, -206, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, 65, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, 65, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206 }, { 15, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, 62, -207, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, 65, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, 65, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207 }, { 15, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, 62, -208, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, 65, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, 65, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208 }, { 15, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, 62, -209, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, 65, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, 65, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209 }, { 15, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, 226, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210 }, { 15, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, 227, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211 }, { 15, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, 228, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212 }, { 15, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, 229, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213 }, { 15, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, 230, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214 }, { 15, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, 231, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215 }, { 15, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, 62, -216, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, 65, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, 65, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216 }, { 15, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, 62, -217, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, 65, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, 65, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217 }, { 15, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, 62, -218, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, 65, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, 65, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218 }, { 15, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, 62, -219, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, 65, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, 65, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219 }, { 15, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, 62, -220, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, 65, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, 65, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220 }, { 15, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, 62, -221, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, 65, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, 65, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221 }, { 15, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, 62, -222, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, 65, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, 65, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222 }, { 15, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, 62, -223, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, 65, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, 65, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223 }, { 15, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, 62, -224, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, 65, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, 65, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224 }, { 15, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, 62, -225, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, 65, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, 65, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225 }, { 15, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, 226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226 }, { 15, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, 243, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227 }, { 15, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, 228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228 }, { 15, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, 213, -229, -229, -229, -229, -229, -229, 244, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229 }, { 15, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, 245, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230 }, { 15, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, 231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231 }, { 15, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, 62, -232, 246, 247, 247, 247, 247, 247, 247, 247, 247, 247, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, 65, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, 65, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232 }, { 15, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, 62, -233, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, 65, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, 65, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233 }, { 15, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, 62, -234, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, 65, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, 65, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234 }, { 15, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, 62, -235, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, 65, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, 65, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235 }, { 15, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, 62, -236, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, 65, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, 65, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236 }, { 15, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, 62, -237, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, 65, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, 65, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237 }, { 15, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 62, -238, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 65, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 65, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238 }, { 15, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, 62, -239, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, 65, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, 65, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239 }, { 15, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, 62, -240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, 65, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, 65, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240 }, { 15, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, 62, -241, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, 65, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, 65, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241 }, { 15, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, 62, -242, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, 65, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, 65, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242 }, { 15, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, 258, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243 }, { 15, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259 }, { 15, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, 261, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245 }, { 15, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, 62, -246, 262, 263, 263, 263, 263, 263, 263, 263, 263, 263, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, 65, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, 65, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246 }, { 15, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, 62, -247, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, 65, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, 65, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247 }, { 15, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, 62, -248, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, 65, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, 65, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248 }, { 15, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, 62, -249, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, 65, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, 65, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249 }, { 15, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, 62, -250, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, 65, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, 65, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250 }, { 15, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, 62, -251, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, 65, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, 65, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251 }, { 15, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, 62, -252, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, 65, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, 65, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252 }, { 15, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, 62, -253, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, 65, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, 65, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253 }, { 15, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, 62, -254, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, 65, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, 65, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254 }, { 15, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, 62, -255, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, 65, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, 65, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255 }, { 15, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, 62, -256, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, 65, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, 65, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256 }, { 15, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, 62, -257, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, 65, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, 65, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257 }, { 15, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, 275, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258 }, { 15, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259 }, { 15, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, 259, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260 }, { 15, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, 276, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261 }, { 15, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, 62, -262, 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, 65, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, 65, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262 }, { 15, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, 62, -263, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, 65, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, 65, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263 }, { 15, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, 62, -264, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, 65, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, 65, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264 }, { 15, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, 62, -265, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, 65, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, 65, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265 }, { 15, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, 62, -266, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, 65, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, 65, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266 }, { 15, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, 62, -267, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, 65, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, 65, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267 }, { 15, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, 62, -268, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, 65, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, 65, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268 }, { 15, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, 62, -269, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, 65, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, 65, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269 }, { 15, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, 62, -270, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, 65, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, 65, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270 }, { 15, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, 62, -271, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, 65, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, 65, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271 }, { 15, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, 62, -272, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, 65, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, 65, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272 }, { 15, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, 62, -273, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, 65, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, 65, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273 }, { 15, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, 62, -274, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, 65, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, 65, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274 }, { 15, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, 291, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275 }, { 15, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, 292, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276 }, { 15, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, 62, -277, 293, 294, 294, 294, 294, 294, 294, 294, 294, 294, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, 65, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, 65, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277 }, { 15, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, 62, -278, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, 65, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, 65, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278 }, { 15, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, 62, -279, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, 65, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, 65, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279 }, { 15, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, 62, -280, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, 65, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, 65, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280 }, { 15, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, 62, -281, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, 65, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, 65, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281 }, { 15, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, 62, -282, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, 65, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, 65, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282 }, { 15, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, 62, -283, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, 65, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, 65, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283 }, { 15, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, 62, -284, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, 65, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, 65, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284 }, { 15, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, 62, -285, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, 65, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, 65, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285 }, { 15, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, 62, -286, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, 65, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, 65, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286 }, { 15, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, 62, -287, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, 65, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, 65, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287 }, { 15, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, 62, -288, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, 65, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, 65, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288 }, { 15, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, 62, -289, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, 65, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, 65, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289 }, { 15, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, 62, -290, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, 65, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, 65, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290 }, { 15, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, 308, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291 }, { 15, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, 309, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292 }, { 15, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, 62, -293, 310, 311, 311, 311, 311, 311, 311, 311, 311, 311, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, 65, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, 65, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293 }, { 15, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, 62, -294, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, 65, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, 65, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294 }, { 15, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, 62, -295, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, 65, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, 65, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295 }, { 15, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 62, -296, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 65, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 65, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296 }, { 15, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, 62, -297, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, 65, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, 65, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297 }, { 15, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, 62, -298, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, 65, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, 65, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298 }, { 15, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, 62, -299, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, 65, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, 65, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299 }, { 15, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, 62, -300, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, 65, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, 65, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300 }, { 15, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, 62, -301, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, 65, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, 65, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301 }, { 15, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, 62, -302, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, 65, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, 65, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302 }, { 15, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, 62, -303, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, 65, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, 65, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303 }, { 15, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, 62, -304, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, 65, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, 65, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304 }, { 15, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, 62, -305, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, 65, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, 65, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305 }, { 15, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, 62, -306, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, 65, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, 65, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306 }, { 15, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, 62, -307, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, 65, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, 65, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307 }, { 15, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, 326, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308 }, { 15, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, 327, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309 }, { 15, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, 62, -310, 328, 329, 329, 329, 329, 329, 329, 329, 329, 329, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, 65, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, 65, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310 }, { 15, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, 62, -311, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, 65, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, 65, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311 }, { 15, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, 62, -312, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, 65, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, 65, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312 }, { 15, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, 62, -313, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, 65, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, 65, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313 }, { 15, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, 62, -314, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, 65, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, 65, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314 }, { 15, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, 62, -315, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, 65, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, 65, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315 }, { 15, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, 62, -316, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, 65, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, 65, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316 }, { 15, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, 62, -317, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, 65, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, 65, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317 }, { 15, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, 62, -318, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, 65, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, 65, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318 }, { 15, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, 62, -319, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, 65, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, 65, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319 }, { 15, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, 62, -320, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, 65, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, 65, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320 }, { 15, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, 62, -321, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, 65, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, 65, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321 }, { 15, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, 62, -322, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, 65, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, 65, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322 }, { 15, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, 62, -323, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, 65, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, 65, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323 }, { 15, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, 62, -324, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, 65, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, 65, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324 }, { 15, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, 62, -325, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, 65, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, 65, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325 }, { 15, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, 345, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326 }, { 15, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, 346, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327 }, { 15, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, 62, -328, 347, 348, 348, 348, 348, 348, 348, 348, 348, 348, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, 65, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, 65, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328 }, { 15, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, 62, -329, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, 65, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, 65, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329 }, { 15, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, 62, -330, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, 65, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, 65, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330 }, { 15, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, 62, -331, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, 65, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, 65, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331 }, { 15, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, 62, -332, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, 65, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, 65, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332 }, { 15, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, 62, -333, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, 65, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, 65, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333 }, { 15, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, 62, -334, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, 65, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, 65, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334 }, { 15, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, 62, -335, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, 65, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, 65, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335 }, { 15, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, 62, -336, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, 65, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, 65, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336 }, { 15, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, 62, -337, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, 65, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, 65, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337 }, { 15, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, 62, -338, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, 65, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, 65, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338 }, { 15, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, 62, -339, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, 65, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, 65, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339 }, { 15, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, 62, -340, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, 65, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, 65, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340 }, { 15, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, 62, -341, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, 65, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, 65, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341 }, { 15, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, 62, -342, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, 65, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, 65, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342 }, { 15, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, 62, -343, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, 65, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, 65, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343 }, { 15, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, 62, -344, 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, 65, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, 65, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344 }, { 15, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, 365, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345 }, { 15, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, 366, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346 }, { 15, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, 62, -347, 367, 368, 368, 368, 368, 368, 368, 368, 368, 368, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, 65, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, 65, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347 }, { 15, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, 62, -348, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, 65, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, 65, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348 }, { 15, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, 62, -349, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, 65, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, 65, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349 }, { 15, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, 62, -350, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, 65, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, 65, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350 }, { 15, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, 62, -351, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, 65, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, 65, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351 }, { 15, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, 62, -352, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, 65, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, 65, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352 }, { 15, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, 62, -353, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, 65, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, 65, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353 }, { 15, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, 62, -354, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, 65, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, 65, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354 }, { 15, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, 62, -355, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, 65, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, 65, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355 }, { 15, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, 62, -356, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, 65, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, 65, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356 }, { 15, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, 62, -357, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, 65, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, 65, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357 }, { 15, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, 62, -358, 379, 379, 379, 379, 379, 379, 379, 379, 379, 379, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, 65, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, 65, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358 }, { 15, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, 62, -359, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, 65, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, 65, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359 }, { 15, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, 62, -360, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, 65, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, 65, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360 }, { 15, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, 62, -361, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, 65, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, 65, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361 }, { 15, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, 62, -362, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, 65, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, 65, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362 }, { 15, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, 62, -363, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, 65, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, 65, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363 }, { 15, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, 62, -364, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, 65, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, 65, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364 }, { 15, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, 386, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365 }, { 15, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, 387, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366 }, { 15, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, 62, -367, 388, 389, 389, 389, 389, 389, 389, 389, 389, 389, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, 65, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, 65, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367 }, { 15, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, 62, -368, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, 65, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, 65, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368 }, { 15, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, 62, -369, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, 65, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, 65, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369 }, { 15, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, 62, -370, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, 65, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, 65, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370 }, { 15, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, 62, -371, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, 65, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, 65, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371 }, { 15, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, 62, -372, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, 65, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, 65, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372 }, { 15, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, 62, -373, 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, 65, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, 65, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373 }, { 15, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, 62, -374, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, 65, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, 65, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374 }, { 15, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, 62, -375, 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, 65, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, 65, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375 }, { 15, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, 62, -376, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, 65, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, 65, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376 }, { 15, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, 62, -377, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, 65, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, 65, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377 }, { 15, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, 62, -378, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, 65, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, 65, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378 }, { 15, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, 62, -379, 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, 65, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, 65, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379 }, { 15, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, 62, -380, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, 65, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, 65, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380 }, { 15, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, 62, -381, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, 65, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, 65, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381 }, { 15, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, 62, -382, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, 65, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, 65, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382 }, { 15, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, 62, -383, 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, 65, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, 65, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383 }, { 15, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, 62, -384, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, 65, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, 65, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384 }, { 15, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, 62, -385, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, 65, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, 65, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385 }, { 15, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, 408, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386 }, { 15, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, 409, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387 }, { 15, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, 62, -388, 410, 411, 411, 411, 411, 411, 411, 411, 411, 411, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, 65, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, 65, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388 }, { 15, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, 62, -389, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, 65, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, 65, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389 }, { 15, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, 62, -390, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, 65, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, 65, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390 }, { 15, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, 62, -391, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, 65, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, 65, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391 }, { 15, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, 62, -392, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, 65, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, 65, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392 }, { 15, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, 62, -393, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, 65, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, 65, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393 }, { 15, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, 62, -394, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, 65, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, 65, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394 }, { 15, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, 62, -395, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, 65, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, 65, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395 }, { 15, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, 62, -396, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, 65, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, 65, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396 }, { 15, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 62, -397, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 65, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 65, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397 }, { 15, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, 62, -398, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, 65, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, 65, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398 }, { 15, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, 62, -399, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, 65, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, 65, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399 }, { 15, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, 62, -400, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, 65, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, 65, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400 }, { 15, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, 62, -401, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, 65, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, 65, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401 }, { 15, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, 62, -402, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, 65, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, 65, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402 }, { 15, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, 62, -403, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, 65, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, 65, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403 }, { 15, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, 62, -404, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, 65, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, 65, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404 }, { 15, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, 62, -405, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, 65, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, 65, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405 }, { 15, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, 62, -406, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, 65, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, 65, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406 }, { 15, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, 62, -407, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, 65, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, 65, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407 }, { 15, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, 431, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408 }, { 15, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, 432, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409 }, { 15, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, 62, -410, 410, 411, 411, 411, 411, 411, 411, 411, 411, 411, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, 65, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, 65, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410 }, { 15, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, 62, -411, 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, 65, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, 65, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411 }, { 15, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, 62, -412, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, 65, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, 65, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412 }, { 15, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, 62, -413, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, 65, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, 65, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413 }, { 15, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, 62, -414, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, 65, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, 65, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414 }, { 15, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, 62, -415, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, 65, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, 65, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415 }, { 15, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, 62, -416, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, 65, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, 65, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416 }, { 15, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, 62, -417, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, 65, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, 65, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417 }, { 15, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, 62, -418, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, 65, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, 65, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418 }, { 15, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, 62, -419, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, 65, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, 65, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419 }, { 15, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, 62, -420, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, 65, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, 65, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420 }, { 15, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, 62, -421, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, 65, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, 65, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421 }, { 15, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, 62, -422, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, 65, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, 65, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422 }, { 15, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, 62, -423, 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, 65, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, 65, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423 }, { 15, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, 62, -424, 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, 65, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, 65, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424 }, { 15, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, 62, -425, 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, 65, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, 65, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425 }, { 15, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, 62, -426, 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, 65, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, 65, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426 }, { 15, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, 62, -427, 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, 65, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, 65, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427 }, { 15, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, 62, -428, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, 65, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, 65, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428 }, { 15, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, 62, -429, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, 65, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, 65, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429 }, { 15, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, 62, -430, 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, 65, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, 65, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430 }, { 15, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, 433, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431 }, { 15, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, 434, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432 }, { 15, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, 435, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433 }, { 15, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, 436, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434 }, { 15, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, 437, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435 }, { 15, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, 438, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436 }, { 15, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, 439, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437 }, { 15, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, 440, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438 }, { 15, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, 441, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439 }, { 15, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, 442, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440 }, { 15, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, 443, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441 }, { 15, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, 444, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442 }, { 15, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, 445, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443 }, { 15, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, 446, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444 }, { 15, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, 447, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445 }, { 15, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, 448, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446 }, { 15, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, 449, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447 }, { 15, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, 450, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448 }, { 15, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, 451, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449 }, { 15, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, 452, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450 }, { 15, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, 453, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451 }, { 15, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, 454, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452 }, { 15, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, 455, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453 }, { 15, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, 456, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454 }, { 15, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, 457, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455 }, { 15, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, 458, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456 }, { 15, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, 459, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457 }, { 15, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, 460, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458 }, { 15, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, 461, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459 }, { 15, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, 462, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460 }, { 15, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, 463, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461 }, { 15, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, 464, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462 }, { 15, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, 465, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463 }, { 15, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, 466, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464 }, { 15, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, 467, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465 }, { 15, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, 468, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466 }, { 15, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, 469, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467 }, { 15, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, 470, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468 }, { 15, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, 471, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469 }, { 15, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, 472, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470 }, { 15, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, 473, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471 }, { 15, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, 474, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472 }, { 15, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, 475, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473 }, { 15, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, 476, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474 }, { 15, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, 477, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475 }, { 15, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, 478, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476 }, { 15, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, 479, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477 }, { 15, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, 480, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478 }, { 15, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, 481, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479 }, { 15, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, 482, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480 }, { 15, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, 483, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481 }, { 15, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, 484, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482 }, { 15, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, 485, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483 }, { 15, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, 486, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484 }, { 15, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, 487, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485 }, { 15, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, 488, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486 }, { 15, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, 489, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487 }, { 15, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, 490, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488 }, { 15, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, 491, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489 }, { 15, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, 492, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490 }, { 15, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, 493, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491 }, { 15, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, 494, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492 }, { 15, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, 495, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493 }, { 15, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, 496, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494 }, { 15, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, 497, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495 }, { 15, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, 498, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496 }, { 15, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, 499, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497 }, { 15, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, 500, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498 }, { 15, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, 501, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499 }, { 15, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, 502, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500 }, { 15, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, 503, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501 }, { 15, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, 504, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502 }, { 15, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, 505, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503 }, { 15, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, 506, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504 }, { 15, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, 507, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505 }, { 15, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, 508, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506 }, { 15, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, 509, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507 }, { 15, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, 510, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508 }, { 15, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, 511, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509 }, { 15, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, 512, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510 }, { 15, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, 513, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511 }, { 15, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, 514, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512 }, { 15, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, 515, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513 }, { 15, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, 516, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514 }, { 15, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, 517, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515 }, { 15, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, 518, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516 }, { 15, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, 519, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517 }, { 15, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, 520, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518 }, { 15, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, 521, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519 }, { 15, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, 522, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520 }, { 15, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, 523, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521 }, { 15, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, 524, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522 }, { 15, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, 525, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523 }, { 15, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, 526, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524 }, { 15, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, 527, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525 }, { 15, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, 528, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526 }, { 15, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, 529, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527 }, { 15, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, 530, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528 }, { 15, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, 531, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529 }, { 15, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, 532, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530 }, { 15, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, 533, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531 }, { 15, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, 534, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532 }, { 15, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, 535, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533 }, { 15, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, 536, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534 }, { 15, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, 537, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535 }, { 15, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, 538, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536 }, { 15, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, 539, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537 }, { 15, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, 540, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538 }, { 15, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, 541, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539 }, { 15, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, 542, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540 }, { 15, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, 543, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541 }, { 15, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, 544, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542 }, { 15, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, 545, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543 }, { 15, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, 546, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544 }, { 15, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, 547, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545 }, { 15, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, 548, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546 }, { 15, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, 549, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547 }, { 15, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, 550, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548 }, { 15, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549 }, { 15, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550 }, } ; static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up fitshdrtext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ (yytext_ptr) -= (yy_more_len); \ fitshdrleng = (size_t) (yy_cp - (yytext_ptr)); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 31 #define YY_END_OF_BUFFER 32 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[551] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 29, 29, 0, 0, 32, 31, 31, 31, 31, 31, 31, 31, 20, 20, 20, 20, 20, 20, 11, 13, 13, 12, 25, 21, 24, 23, 27, 27, 28, 29, 31, 30, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 19, 0, 0, 0, 0, 0, 13, 13, 16, 16, 13, 13, 0, 13, 21, 0, 23, 22, 23, 0, 28, 29, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 13, 13, 13, 0, 16, 13, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 10, 2, 8, 8, 8, 5, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 9, 0, 6, 0, 0, 4, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 0, 0, 7, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; static yyconst yy_state_type yy_NUL_trans[551] = { 0, 16, 17, 23, 23, 33, 33, 37, 37, 39, 39, 40, 40, 41, 41, 0, 0, 43, 43, 43, 43, 43, 43, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 74, 75, 0, 77, 77, 77, 77, 77, 77, 77, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 74, 75, 0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ; extern int fitshdr_flex_debug; int fitshdr_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected static int yy_more_flag = 0; static int yy_more_len = 0; #define yymore() ((yy_more_flag) = 1) #define YY_MORE_ADJ (yy_more_len) #define YY_RESTORE_YY_MORE_OFFSET char *fitshdrtext; #line 1 "fitshdr.l" /*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: fitshdr.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * fitshdr.l is a Flex description file containing a lexical scanner * definition for extracting keywords and keyvalues from a FITS header. * * It requires Flex v2.5.4 or later. * * Refer to fitshdr.h for a description of the user interface and operating * notes. * *===========================================================================*/ /* Options. */ /* Keywords. */ /* Keyvalue data types. */ /* Characters forming standard unit strings (jwBIQX are not used). */ /* Exclusive start states. */ #line 82 "fitshdr.l" #include #include #include #include #include #include "fitshdr.h" #define YY_DECL int fitshdr(const char header[], int nkeyrec, int nkeyids, \ struct fitskeyid keyids[], int *nreject, \ struct fitskey **keys) #define YY_INPUT(inbuff, count, bufsize) \ { \ if (fitshdr_nkeyrec) { \ strncpy(inbuff, fitshdr_hdr, 80); \ inbuff[80] = '\n'; \ fitshdr_hdr += 80; \ fitshdr_nkeyrec--; \ count = 81; \ } else { \ count = YY_NULL; \ } \ } /* These global variables are required by YY_INPUT. */ const char *fitshdr_hdr; int fitshdr_nkeyrec; /* Used in preempting the call to exit() by yy_fatal_error(). */ jmp_buf fitshdr_abort_jmp_env; #define exit(status) longjmp(fitshdr_abort_jmp_env, status) /* Map status return value to message. */ const char *fitshdr_errmsg[] = { "Success", "Null fitskey pointer-pointer passed", "Memory allocation failed", "Fatal error returned by Flex parser"}; #line 10174 "fitshdr.c" #define INITIAL 0 #define VALUE 1 #define INLINE 2 #define UNITS 3 #define COMMENT 4 #define ERROR 5 #define FLUSH 6 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int fitshdrlex_destroy (void ); int fitshdrget_debug (void ); void fitshdrset_debug (int debug_flag ); YY_EXTRA_TYPE fitshdrget_extra (void ); void fitshdrset_extra (YY_EXTRA_TYPE user_defined ); FILE *fitshdrget_in (void ); void fitshdrset_in (FILE * in_str ); FILE *fitshdrget_out (void ); void fitshdrset_out (FILE * out_str ); int fitshdrget_leng (void ); char *fitshdrget_text (void ); int fitshdrget_lineno (void ); void fitshdrset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int fitshdrwrap (void ); #else extern int fitshdrwrap (void ); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( fitshdrtext, fitshdrleng, 1, fitshdrout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ errno=0; \ while ( (result = read( fileno(fitshdrin), (char *) buf, max_size )) < 0 ) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(fitshdrin); \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int fitshdrlex (void); #define YY_DECL int fitshdrlex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after fitshdrtext and fitshdrleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ if ( fitshdrleng > 0 ) \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ (fitshdrtext[fitshdrleng - 1] == '\n'); \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 124 "fitshdr.l" char *cptr, ctmp[72]; int blank, continuation, end, j, k, keyno; double dtmp; struct fitskey *kptr; struct fitskeyid *iptr; void nullfill(char cptr[], int len); int fitshdrlex_destroy(void); fitshdr_hdr = header; fitshdr_nkeyrec = nkeyrec; *nreject = 0; keyno = 0; if (keys == 0x0) { return 1; } /* Allocate memory for the required number of fitskey structs. */ /* Recall that calloc() initializes allocated memory to zero. */ if (!(kptr = *keys = calloc(nkeyrec, sizeof(struct fitskey)))) { return 2; } /* Initialize keyids[]. */ iptr = keyids; for (j = 0; j < nkeyids; j++, iptr++) { iptr->count = 0; iptr->idx[0] = -1; iptr->idx[1] = -1; } blank = 0; continuation = 0; end = 0; /* Return here via longjmp() invoked by yy_fatal_error(). */ if (setjmp(fitshdr_abort_jmp_env)) { return 3; } BEGIN(INITIAL); #line 10397 "fitshdr.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! fitshdrin ) fitshdrin = stdin; if ( ! fitshdrout ) fitshdrout = stdout; if ( ! YY_CURRENT_BUFFER ) { fitshdrensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = fitshdr_create_buffer(fitshdrin,YY_BUF_SIZE ); } fitshdr_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { (yy_more_len) = 0; if ( (yy_more_flag) ) { (yy_more_len) = (yy_c_buf_p) - (yytext_ptr); (yy_more_flag) = 0; } yy_cp = (yy_c_buf_p); /* Support of fitshdrtext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); yy_match: while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) { if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } ++yy_cp; } yy_current_state = -yy_current_state; yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos) + 1; yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 168 "fitshdr.l" { /* A completely blank keyrecord. */ strncpy(kptr->keyword, fitshdrtext, 8); yyless(0); blank = 1; BEGIN(COMMENT); } YY_BREAK case 2: YY_RULE_SETUP #line 176 "fitshdr.l" { strncpy(kptr->keyword, fitshdrtext, 8); BEGIN(COMMENT); } YY_BREAK case 3: YY_RULE_SETUP #line 181 "fitshdr.l" { strncpy(kptr->keyword, fitshdrtext, 8); end = 1; BEGIN(FLUSH); } YY_BREAK case 4: YY_RULE_SETUP #line 187 "fitshdr.l" { /* Illegal END keyrecord. */ strncpy(kptr->keyword, fitshdrtext, 8); kptr->status |= FITSHDR_KEYREC; BEGIN(VALUE); } YY_BREAK case 5: YY_RULE_SETUP #line 194 "fitshdr.l" { /* Illegal END keyrecord. */ strncpy(kptr->keyword, fitshdrtext, 8); kptr->status |= FITSHDR_KEYREC; BEGIN(COMMENT); } YY_BREAK case 6: YY_RULE_SETUP #line 201 "fitshdr.l" { strncpy(kptr->keyword, fitshdrtext, 8); BEGIN(VALUE); } YY_BREAK case 7: /* rule 7 can match eol */ YY_RULE_SETUP #line 206 "fitshdr.l" { /* Continued string keyvalue. */ strncpy(kptr->keyword, fitshdrtext, 8); if (keyno > 0 && (kptr-1)->type%10 == 8) { /* Put back the string keyvalue. */ for (k = 10; fitshdrtext[k] != '\''; k++); yyless(k); continuation = 1; BEGIN(VALUE); } else { /* Not a valid continuation. */ yyless(8); BEGIN(COMMENT); } } YY_BREAK case 8: YY_RULE_SETUP #line 224 "fitshdr.l" { /* Keyword without value. */ strncpy(kptr->keyword, fitshdrtext, 8); BEGIN(COMMENT); } YY_BREAK case 9: YY_RULE_SETUP #line 230 "fitshdr.l" { /* Illegal keyword, carry on regardless. */ strncpy(kptr->keyword, fitshdrtext, 8); kptr->status |= FITSHDR_KEYWORD; BEGIN(VALUE); } YY_BREAK case 10: YY_RULE_SETUP #line 237 "fitshdr.l" { /* Illegal keyword, carry on regardless. */ strncpy(kptr->keyword, fitshdrtext, 8); kptr->status |= FITSHDR_KEYWORD; BEGIN(COMMENT); } YY_BREAK case 11: *yy_cp = (yy_hold_char); /* undo effects of setting up fitshdrtext */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up fitshdrtext again */ YY_RULE_SETUP #line 244 "fitshdr.l" { /* Null keyvalue. */ BEGIN(INLINE); } YY_BREAK case 12: YY_RULE_SETUP #line 249 "fitshdr.l" { /* Logical keyvalue. */ kptr->type = 1; kptr->keyvalue.i = (*fitshdrtext == 'T'); BEGIN(INLINE); } YY_BREAK case 13: YY_RULE_SETUP #line 256 "fitshdr.l" { /* 32-bit signed integer keyvalue. */ kptr->type = 2; if (sscanf(fitshdrtext, "%d", &(kptr->keyvalue.i)) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } BEGIN(INLINE); } YY_BREAK case 14: YY_RULE_SETUP #line 267 "fitshdr.l" { /* 64-bit signed integer keyvalue (up to 18 digits). */ if (sscanf(fitshdrtext, "%lf", &dtmp) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } else if (INT_MIN <= dtmp && dtmp <= INT_MAX) { /* Can be accomodated as a 32-bit signed integer. */ kptr->type = 2; if (sscanf(fitshdrtext, "%d", &(kptr->keyvalue.i)) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } } else { /* 64-bit signed integer. */ kptr->type = 3; #ifdef WCSLIB_INT64 /* Native 64-bit integer is available. */ if (sscanf(fitshdrtext, "%lld", &(kptr->keyvalue.k)) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } #else /* 64-bit integer (up to 18 digits) implemented as int[3]. */ kptr->keyvalue.k[2] = 0; sprintf(ctmp, "%%%dd%%9d", fitshdrleng-9); if (sscanf(fitshdrtext, ctmp, kptr->keyvalue.k+1, kptr->keyvalue.k) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } else if (*fitshdrtext == '-') { kptr->keyvalue.k[0] *= -1; } #endif } BEGIN(INLINE); } YY_BREAK case 15: YY_RULE_SETUP #line 308 "fitshdr.l" { /* Very long integer keyvalue (and 19-digit int64). */ kptr->type = 4; strcpy(ctmp, fitshdrtext); k = fitshdrleng; for (j = 0; j < 8; j++) { /* Read it backwards. */ k -= 9; if (k < 0) k = 0; if (sscanf(ctmp+k, "%d", kptr->keyvalue.l+j) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } if (*fitshdrtext == '-') { kptr->keyvalue.l[j] = -abs(kptr->keyvalue.l[j]); } if (k == 0) break; ctmp[k] = '\0'; } /* Can it be accomodated as a 64-bit signed integer? */ if (j == 2 && abs(kptr->keyvalue.l[2]) <= 9 && abs(kptr->keyvalue.l[1]) <= 223372036 && kptr->keyvalue.l[0] <= 854775807 && kptr->keyvalue.l[0] >= -854775808) { kptr->type = 3; #ifdef WCSLIB_INT64 /* Native 64-bit integer is available. */ kptr->keyvalue.l[2] = 0; if (sscanf(fitshdrtext, "%lld", &(kptr->keyvalue.k)) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } #endif } BEGIN(INLINE); } YY_BREAK case 16: YY_RULE_SETUP #line 349 "fitshdr.l" { /* Float keyvalue. */ kptr->type = 5; if (sscanf(fitshdrtext, "%lf", &(kptr->keyvalue.f)) < 1) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } BEGIN(INLINE); } YY_BREAK case 17: YY_RULE_SETUP #line 360 "fitshdr.l" { /* Integer complex keyvalue. */ kptr->type = 6; if (sscanf(fitshdrtext, "(%lf,%lf)", kptr->keyvalue.c, kptr->keyvalue.c+1) < 2) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } BEGIN(INLINE); } YY_BREAK case 18: YY_RULE_SETUP #line 372 "fitshdr.l" { /* Floating point complex keyvalue. */ kptr->type = 7; if (sscanf(fitshdrtext, "(%lf,%lf)", kptr->keyvalue.c, kptr->keyvalue.c+1) < 2) { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } BEGIN(INLINE); } YY_BREAK case 19: /* rule 19 can match eol */ YY_RULE_SETUP #line 384 "fitshdr.l" { /* String keyvalue. */ kptr->type = 8; cptr = kptr->keyvalue.s; strcpy(cptr, fitshdrtext+1); /* Squeeze out repeated quotes. */ k = 0; for (j = 0; j < 72; j++) { if (k < j) { cptr[k] = cptr[j]; } if (cptr[j] == '\0') { if (k) cptr[k-1] = '\0'; break; } else if (cptr[j] == '\'' && cptr[j+1] == '\'') { j++; } k++; } if (*cptr) { /* Retain the initial blank in all-blank strings. */ nullfill(cptr+1, 71); } else { nullfill(cptr, 72); } BEGIN(INLINE); } YY_BREAK case 20: YY_RULE_SETUP #line 417 "fitshdr.l" { kptr->status |= FITSHDR_KEYVALUE; BEGIN(ERROR); } YY_BREAK case 21: *yy_cp = (yy_hold_char); /* undo effects of setting up fitshdrtext */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up fitshdrtext again */ YY_RULE_SETUP #line 422 "fitshdr.l" { BEGIN(FLUSH); } YY_BREAK case 22: *yy_cp = (yy_hold_char); /* undo effects of setting up fitshdrtext */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up fitshdrtext again */ YY_RULE_SETUP #line 426 "fitshdr.l" { BEGIN(FLUSH); } YY_BREAK case 23: YY_RULE_SETUP #line 430 "fitshdr.l" { BEGIN(UNITS); } YY_BREAK case 24: YY_RULE_SETUP #line 434 "fitshdr.l" { kptr->status |= FITSHDR_COMMENT; BEGIN(ERROR); } YY_BREAK case 25: YY_RULE_SETUP #line 439 "fitshdr.l" { /* Keyvalue parsing must now also be suspect. */ kptr->status |= FITSHDR_COMMENT; kptr->type = 0; BEGIN(ERROR); } YY_BREAK case 26: YY_RULE_SETUP #line 446 "fitshdr.l" { kptr->ulen = fitshdrleng; yymore(); BEGIN(COMMENT); } YY_BREAK case 27: YY_RULE_SETUP #line 452 "fitshdr.l" { yymore(); BEGIN(COMMENT); } YY_BREAK case 28: YY_RULE_SETUP #line 457 "fitshdr.l" { strcpy(kptr->comment, fitshdrtext); nullfill(kptr->comment, 84); BEGIN(FLUSH); } YY_BREAK case 29: YY_RULE_SETUP #line 463 "fitshdr.l" { if (!continuation) kptr->type = -abs(kptr->type); sprintf(kptr->comment, "%.80s", fitshdr_hdr-80); kptr->comment[80] = '\0'; nullfill(kptr->comment+80, 4); BEGIN(FLUSH); } YY_BREAK case 30: /* rule 30 can match eol */ YY_RULE_SETUP #line 473 "fitshdr.l" { /* Discard the rest of the input line. */ kptr->keyno = ++keyno; /* Null-fill the keyword. */ kptr->keyword[8] = '\0'; nullfill(kptr->keyword, 12); /* Do indexing. */ iptr = keyids; kptr->keyid = -1; for (j = 0; j < nkeyids; j++, iptr++) { cptr = iptr->name; cptr[8] = '\0'; nullfill(cptr, 12); for (k = 0; k < 8; k++, cptr++) { if (*cptr != '.' && *cptr != kptr->keyword[k]) break; } if (k == 8) { /* Found a match. */ iptr->count++; if (iptr->idx[0] == -1) { iptr->idx[0] = keyno-1; } else { iptr->idx[1] = keyno-1; } kptr->keyno = -abs(kptr->keyno); if (kptr->keyid < 0) kptr->keyid = j; } } /* Deal with continued strings. */ if (continuation) { /* Tidy up the previous string keyvalue. */ if ((kptr-1)->type == 8) (kptr-1)->type += 10; cptr = (kptr-1)->keyvalue.s; if (cptr[strlen(cptr)-1] == '&') cptr[strlen(cptr)-1] = '\0'; kptr->type = (kptr-1)->type + 10; } /* Check for keyrecords following the END keyrecord. */ if (end && (end++ > 1) && !blank) { kptr->status |= FITSHDR_TRAILER; } if (kptr->status) (*nreject)++; kptr++; blank = 0; continuation = 0; BEGIN(INITIAL); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(VALUE): case YY_STATE_EOF(INLINE): case YY_STATE_EOF(UNITS): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(ERROR): case YY_STATE_EOF(FLUSH): #line 529 "fitshdr.l" { /* End-of-input. */ fitshdrlex_destroy(); return 0; } YY_BREAK case 31: YY_RULE_SETUP #line 535 "fitshdr.l" ECHO; YY_BREAK #line 10957 "fitshdr.c" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed fitshdrin at a new source and called * fitshdrlex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = fitshdrin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( fitshdrwrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * fitshdrtext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of fitshdrlex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ fitshdrrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; fitshdrrestart(fitshdrin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) fitshdrrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { if ( *yy_cp ) { yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; } else yy_current_state = yy_NUL_trans[yy_current_state]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); yy_current_state = yy_NUL_trans[yy_current_state]; yy_is_jam = (yy_current_state == 0); if ( ! yy_is_jam ) { if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } } return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ fitshdrrestart(fitshdrin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( fitshdrwrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve fitshdrtext */ (yy_hold_char) = *++(yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void fitshdrrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ fitshdrensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = fitshdr_create_buffer(fitshdrin,YY_BUF_SIZE ); } fitshdr_init_buffer(YY_CURRENT_BUFFER,input_file ); fitshdr_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void fitshdr_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * fitshdrpop_buffer_state(); * fitshdrpush_buffer_state(new_buffer); */ fitshdrensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; fitshdr_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (fitshdrwrap()) processing, but the only time this flag * is looked at is after fitshdrwrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void fitshdr_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; fitshdrin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE fitshdr_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) fitshdralloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in fitshdr_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) fitshdralloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in fitshdr_create_buffer()" ); b->yy_is_our_buffer = 1; fitshdr_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with fitshdr_create_buffer() * */ void fitshdr_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) fitshdrfree((void *) b->yy_ch_buf ); fitshdrfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a fitshdrrestart() or at EOF. */ static void fitshdr_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; fitshdr_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then fitshdr_init_buffer was _probably_ * called from fitshdrrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void fitshdr_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) fitshdr_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void fitshdrpush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; fitshdrensure_buffer_stack(); /* This block is copied from fitshdr_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from fitshdr_switch_to_buffer. */ fitshdr_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void fitshdrpop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; fitshdr_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { fitshdr_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void fitshdrensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)fitshdralloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in fitshdrensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)fitshdrrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in fitshdrensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE fitshdr_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) fitshdralloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in fitshdr_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; fitshdr_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to fitshdrlex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * fitshdr_scan_bytes() instead. */ YY_BUFFER_STATE fitshdr_scan_string (yyconst char * yystr ) { return fitshdr_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to fitshdrlex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE fitshdr_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) fitshdralloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in fitshdr_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = fitshdr_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in fitshdr_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up fitshdrtext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ fitshdrtext[fitshdrleng] = (yy_hold_char); \ (yy_c_buf_p) = fitshdrtext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ fitshdrleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int fitshdrget_lineno (void) { return fitshdrlineno; } /** Get the input stream. * */ FILE *fitshdrget_in (void) { return fitshdrin; } /** Get the output stream. * */ FILE *fitshdrget_out (void) { return fitshdrout; } /** Get the length of the current token. * */ int fitshdrget_leng (void) { return fitshdrleng; } /** Get the current token. * */ char *fitshdrget_text (void) { return fitshdrtext; } /** Set the current line number. * @param line_number * */ void fitshdrset_lineno (int line_number ) { fitshdrlineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see fitshdr_switch_to_buffer */ void fitshdrset_in (FILE * in_str ) { fitshdrin = in_str ; } void fitshdrset_out (FILE * out_str ) { fitshdrout = out_str ; } int fitshdrget_debug (void) { return fitshdr_flex_debug; } void fitshdrset_debug (int bdebug ) { fitshdr_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from fitshdrlex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT fitshdrin = stdin; fitshdrout = stdout; #else fitshdrin = (FILE *) 0; fitshdrout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * fitshdrlex_init() */ return 0; } /* fitshdrlex_destroy is for both reentrant and non-reentrant scanners. */ int fitshdrlex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ fitshdr_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; fitshdrpop_buffer_state(); } /* Destroy the stack itself. */ fitshdrfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * fitshdrlex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *fitshdralloc (yy_size_t size ) { return (void *) malloc( size ); } void *fitshdrrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void fitshdrfree (void * ptr ) { free( (char *) ptr ); /* see fitshdrrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 535 "fitshdr.l" /*--------------------------------------------------------------------------*/ void nullfill(char cptr[], int len) { int j, k; /* Null-fill the string. */ for (j = 0; j < len; j++) { if (cptr[j] == '\0') { for (k = j+1; k < len; k++) { cptr[k] = '\0'; } break; } } for (k = j-1; k >= 0; k--) { if (cptr[k] != ' ') break; cptr[k] = '\0'; } return; } pywcs-1.12/wcslib/C/flexed/README0000644001153600020070000000040612310355626020442 0ustar cslocumSTSCI\science00000000000000This directory contains C code generated by flex 2.5.35 under Debian lenny from the Flex description files (*.l) in the parent directory. These pre-generated source files may be used during installation if Flex 2.5.9 or later is not available on the build host. pywcs-1.12/wcslib/C/flexed/wcsbth.c0000644001153600020070000334422412310355626021234 0ustar cslocumSTSCI\science00000000000000#line 2 "wcsbth.c" #line 4 "wcsbth.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define yy_create_buffer wcsbth_create_buffer #define yy_delete_buffer wcsbth_delete_buffer #define yy_flex_debug wcsbth_flex_debug #define yy_init_buffer wcsbth_init_buffer #define yy_flush_buffer wcsbth_flush_buffer #define yy_load_buffer_state wcsbth_load_buffer_state #define yy_switch_to_buffer wcsbth_switch_to_buffer #define yyin wcsbthin #define yyleng wcsbthleng #define yylex wcsbthlex #define yylineno wcsbthlineno #define yyout wcsbthout #define yyrestart wcsbthrestart #define yytext wcsbthtext #define yywrap wcsbthwrap #define yyalloc wcsbthalloc #define yyrealloc wcsbthrealloc #define yyfree wcsbthfree #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE wcsbthrestart(wcsbthin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int wcsbthleng; extern FILE *wcsbthin, *wcsbthout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up wcsbthtext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up wcsbthtext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via wcsbthrestart()), so that the user can continue scanning by * just pointing wcsbthin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when wcsbthtext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int wcsbthleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow wcsbthwrap()'s to do buffer switches * instead of setting up a fresh wcsbthin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void wcsbthrestart (FILE *input_file ); void wcsbth_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE wcsbth_create_buffer (FILE *file,int size ); void wcsbth_delete_buffer (YY_BUFFER_STATE b ); void wcsbth_flush_buffer (YY_BUFFER_STATE b ); void wcsbthpush_buffer_state (YY_BUFFER_STATE new_buffer ); void wcsbthpop_buffer_state (void ); static void wcsbthensure_buffer_stack (void ); static void wcsbth_load_buffer_state (void ); static void wcsbth_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER wcsbth_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE wcsbth_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE wcsbth_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE wcsbth_scan_bytes (yyconst char *bytes,int len ); void *wcsbthalloc (yy_size_t ); void *wcsbthrealloc (void *,yy_size_t ); void wcsbthfree (void * ); #define yy_new_buffer wcsbth_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ wcsbthensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ wcsbth_create_buffer(wcsbthin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ wcsbthensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ wcsbth_create_buffer(wcsbthin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define wcsbthwrap(n) 1 #define YY_SKIP_YYWRAP typedef char YY_CHAR; FILE *wcsbthin = (FILE *) 0, *wcsbthout = (FILE *) 0; typedef int yy_state_type; extern int wcsbthlineno; int wcsbthlineno = 1; extern char *wcsbthtext; #define yytext_ptr wcsbthtext static yyconst flex_int16_t yy_nxt[][128] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68 }, { 67, 69, 69, 69, 69, 69, 69, 69, 69, 69, 68, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 69, 69, 69, 69, 69, 69, 69, 69, 69, 71, 72, 73, 69, 69, 69, 69, 69, 69, 74, 75, 69, 76, 77, 69, 78, 79, 80, 69, 81, 82, 69, 69, 83, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69 }, { 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 84, 84, 84, 84, 84, 84, 84, 84, 84, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68 }, { 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 84, 84, 84, 84, 84, 84, 84, 84, 84, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68 }, { 67, 85, 85, 85, 85, 85, 85, 85, 85, 85, 68, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 }, { 67, 85, 85, 85, 85, 85, 85, 85, 85, 85, 68, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 }, { 67, 87, 87, 87, 87, 87, 87, 87, 87, 87, 68, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87 }, { 67, 87, 87, 87, 87, 87, 87, 87, 87, 87, 68, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87 }, { 67, 89, 89, 89, 89, 89, 89, 89, 89, 89, 68, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89 }, { 67, 89, 89, 89, 89, 89, 89, 89, 89, 89, 68, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89 }, { 67, 91, 91, 91, 91, 91, 91, 91, 91, 91, 68, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91 }, { 67, 91, 91, 91, 91, 91, 91, 91, 91, 91, 68, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91 }, { 67, 93, 93, 93, 93, 93, 93, 93, 93, 93, 68, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93 }, { 67, 93, 93, 93, 93, 93, 93, 93, 93, 93, 68, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93 }, { 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 96, 96, 96, 96, 96, 96, 96, 96, 96, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68 }, { 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 96, 96, 96, 96, 96, 96, 96, 96, 96, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68 }, { 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 68, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 68, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97 }, { 67, 99, 99, 99, 99, 99, 99, 99, 99, 99, 68, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 }, { 67, 99, 99, 99, 99, 99, 99, 99, 99, 99, 68, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 }, { 67, 101, 101, 101, 101, 101, 101, 101, 101, 101, 68, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101 }, { 67, 101, 101, 101, 101, 101, 101, 101, 101, 101, 68, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101 }, { 67, 103, 103, 103, 103, 103, 103, 103, 103, 103, 68, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103 }, { 67, 103, 103, 103, 103, 103, 103, 103, 103, 103, 68, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103 }, { 67, 105, 105, 105, 105, 105, 105, 105, 105, 105, 68, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105 }, { 67, 105, 105, 105, 105, 105, 105, 105, 105, 105, 68, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105 }, { 67, 107, 107, 107, 107, 107, 107, 107, 107, 107, 68, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107 }, { 67, 107, 107, 107, 107, 107, 107, 107, 107, 107, 68, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107 }, { 67, 109, 109, 109, 109, 109, 109, 109, 109, 109, 68, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109 }, { 67, 109, 109, 109, 109, 109, 109, 109, 109, 109, 68, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109 }, { 67, 111, 111, 111, 111, 111, 111, 111, 111, 111, 68, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111 }, { 67, 111, 111, 111, 111, 111, 111, 111, 111, 111, 68, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111 }, { 67, 113, 113, 113, 113, 113, 113, 113, 113, 113, 68, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113 }, { 67, 113, 113, 113, 113, 113, 113, 113, 113, 113, 68, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113 }, { 67, 115, 115, 115, 115, 115, 115, 115, 115, 115, 68, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115 }, { 67, 115, 115, 115, 115, 115, 115, 115, 115, 115, 68, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115 }, { 67, 117, 117, 117, 117, 117, 117, 117, 117, 117, 68, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117 }, { 67, 117, 117, 117, 117, 117, 117, 117, 117, 117, 68, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117 }, { 67, 119, 119, 119, 119, 119, 119, 119, 119, 119, 68, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119 }, { 67, 119, 119, 119, 119, 119, 119, 119, 119, 119, 68, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119 }, { 67, 120, 120, 120, 120, 120, 120, 120, 120, 120, 68, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120 }, { 67, 120, 120, 120, 120, 120, 120, 120, 120, 120, 68, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120 }, { 67, 122, 122, 122, 122, 122, 122, 122, 122, 122, 68, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122 }, { 67, 122, 122, 122, 122, 122, 122, 122, 122, 122, 68, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122 }, { 67, 124, 124, 124, 124, 124, 124, 124, 124, 124, 68, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 67, 124, 124, 124, 124, 124, 124, 124, 124, 124, 68, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124 }, { 67, 126, 126, 126, 126, 126, 126, 126, 126, 126, 68, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126 }, { 67, 126, 126, 126, 126, 126, 126, 126, 126, 126, 68, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126 }, { 67, 128, 128, 128, 128, 128, 128, 128, 128, 128, 68, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, { 67, 128, 128, 128, 128, 128, 128, 128, 128, 128, 68, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }, { 67, 130, 130, 130, 130, 130, 130, 130, 130, 130, 68, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130 }, { 67, 130, 130, 130, 130, 130, 130, 130, 130, 130, 68, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130 }, { 67, 132, 132, 132, 132, 132, 132, 132, 132, 132, 68, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 132, 133, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132 }, { 67, 132, 132, 132, 132, 132, 132, 132, 132, 132, 68, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 132, 133, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132 }, { 67, 135, 135, 135, 135, 135, 135, 135, 135, 135, 68, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 135, 136, 137, 135, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135 }, { 67, 135, 135, 135, 135, 135, 135, 135, 135, 135, 68, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 135, 136, 137, 135, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135 }, { 67, 139, 139, 139, 139, 139, 139, 139, 139, 139, 68, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139 }, { 67, 139, 139, 139, 139, 139, 139, 139, 139, 139, 68, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139 }, { 67, 141, 141, 141, 141, 141, 141, 141, 141, 141, 68, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141 }, { 67, 141, 141, 141, 141, 141, 141, 141, 141, 141, 68, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141 }, { 67, 144, 144, 144, 144, 144, 144, 144, 144, 144, 68, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144 }, { 67, 144, 144, 144, 144, 144, 144, 144, 144, 144, 68, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144 }, { 67, 145, 145, 145, 145, 145, 145, 145, 145, 145, 68, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145 }, { 67, 145, 145, 145, 145, 145, 145, 145, 145, 145, 68, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145 }, { 67, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146 }, { 67, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146 }, { -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67 }, { 67, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68 }, { 67, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69 }, { 67, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, -70, -70, -70, -70, -70, -70, -70, -70, -70, 149, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, 150, -70, -70, 151, -70, -70, 152, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70 }, { 67, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, 153, -71, -71, -71, -71, -71, -71, -71, -71, -71, 154, -71, -71, -71, 155, 156, 157, 158, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71 }, { 67, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, 159, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, 160, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72 }, { 67, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, 161, -73, 162, 163, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73 }, { 67, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, 164, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, 165, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74 }, { 67, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, 166, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75 }, { 67, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, 167, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76 }, { 67, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, 168, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, 169, 170, -77, -77, 171, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77 }, { 67, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, 172, -78, -78, -78, 173, 174, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, 175, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78 }, { 67, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, 176, 177, -79, -79, 178, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79 }, { 67, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, 179, -80, -80, 180, -80, -80, -80, -80, -80, -80, -80, -80, -80, 181, -80, -80, 182, -80, -80, 183, 184, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80 }, { 67, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, 185, -81, -81, -81, 186, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, 187, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81 }, { 67, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, 188, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82 }, { 67, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, 189, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83 }, { 67, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, 190, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, -84, -84, -84, -84, -84, -84, -84, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84 }, { 67, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85 }, { 67, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, 192, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, -86, -86, -86, -86, -86, -86, -86, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86 }, { 67, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87 }, { 67, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, 194, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, -88, -88, -88, -88, -88, -88, -88, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88 }, { 67, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89 }, { 67, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, 197, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, -90, -90, -90, -90, -90, -90, -90, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90 }, { 67, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91 }, { 67, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, 199, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, -92, -92, -92, -92, -92, -92, -92, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92 }, { 67, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93 }, { 67, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94 }, { 67, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, 204, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95 }, { 67, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, 205, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, -96, -96, -96, -96, -96, -96, -96, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96 }, { 67, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97 }, { 67, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, 208, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98 }, { 67, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99 }, { 67, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, 210, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100 }, { 67, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101 }, { 67, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, 211, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, -102, -102, -102, -102, -102, -102, -102, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102 }, { 67, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103 }, { 67, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, 214, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, -104, -104, -104, -104, -104, -104, -104, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104 }, { 67, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105 }, { 67, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, 217, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, -106, -106, -106, -106, -106, -106, -106, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106 }, { 67, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107 }, { 67, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, 221, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108 }, { 67, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109 }, { 67, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, 223, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110 }, { 67, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111 }, { 67, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, 225, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112 }, { 67, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113 }, { 67, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, 227, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114 }, { 67, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115 }, { 67, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, 229, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116 }, { 67, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117 }, { 67, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, 230, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118 }, { 67, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119 }, { 67, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120 }, { 67, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121 }, { 67, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122 }, { 67, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, 231, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, -123, -123, -123, -123, -123, -123, -123, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123 }, { 67, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124 }, { 67, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, 233, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, -125, -125, -125, -125, -125, -125, -125, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125 }, { 67, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126 }, { 67, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 235, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127 }, { 67, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128 }, { 67, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, 237, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129 }, { 67, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130 }, { 67, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, 239, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131 }, { 67, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132 }, { 67, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133 }, { 67, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134 }, { 67, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135 }, { 67, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, 241, -136, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136 }, { 67, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137 }, { 67, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 244, -138, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 246, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 246, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138 }, { 67, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139 }, { 67, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 248, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247 }, { 67, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141 }, { 67, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, 249, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, 250, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142 }, { 67, 251, 251, 251, 251, 251, 251, 251, 251, 251, -143, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251 }, { 67, 252, 252, 252, 252, 252, 252, 252, 252, 252, -144, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252 }, { 67, 253, 253, 253, 253, 253, 253, 253, 253, 253, -145, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253 }, { 67, 254, 254, 254, 254, 254, 254, 254, 254, 254, 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 }, { 67, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147 }, { 67, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, 256, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, 257, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148 }, { 67, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, 258, -149, -149, -149, -149, -149, -149, -149, -149, -149, 259, -149, -149, -149, 260, 261, 262, 263, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149 }, { 67, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, 264, -150, -150, 265, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150 }, { 67, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151 }, { 67, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152 }, { 67, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 266, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153 }, { 67, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 267, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154 }, { 67, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 268, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 269, 270, -155, -155, -155, -155, -155, 271, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155 }, { 67, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, 272, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156 }, { 67, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, 273, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157 }, { 67, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, 274, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158 }, { 67, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, 275, -159, 276, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159 }, { 67, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, 277, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160 }, { 67, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, 278, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161 }, { 67, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, 279, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162 }, { 67, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, 280, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163 }, { 67, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, 281, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164 }, { 67, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 282, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165 }, { 67, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 283, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166 }, { 67, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 284, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167 }, { 67, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168 }, { 67, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, 285, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169 }, { 67, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170 }, { 67, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171 }, { 67, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 286, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172 }, { 67, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 287, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173 }, { 67, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 288, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174 }, { 67, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, 289, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175 }, { 67, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, 290, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176 }, { 67, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, 291, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177 }, { 67, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, 292, -178, -178, -178, -178, -178, -178, 293, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178 }, { 67, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, 294, -179, -179, -179, -179, -179, -179, -179, -179, -179, 295, -179, -179, -179, 296, 297, 298, 299, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179 }, { 67, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, 300, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180 }, { 67, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, 301, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, 302, -181, -181, 303, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181 }, { 67, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182 }, { 67, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183 }, { 67, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, 304, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184 }, { 67, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, 305, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185 }, { 67, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, 306, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186 }, { 67, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, 307, -187, -187, -187, -187, -187, -187, -187, -187, -187, 308, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187 }, { 67, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, 309, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, 310, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188 }, { 67, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, 311, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189 }, { 67, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, 312, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190 }, { 67, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, 313, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, -191, -191, -191, -191, -191, -191, -191, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191 }, { 67, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 315, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192 }, { 67, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, 316, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, -193, -193, -193, -193, -193, -193, -193, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193 }, { 67, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, 318, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194 }, { 67, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, 319, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, -195, -195, -195, -195, -195, -195, -195, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195 }, { 67, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, 322, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196 }, { 67, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, 323, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197 }, { 67, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, 324, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, -198, -198, -198, -198, -198, -198, -198, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198 }, { 67, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, 326, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199 }, { 67, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 327, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, -200, -200, -200, -200, -200, -200, -200, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200 }, { 67, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, 330, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201 }, { 67, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202 }, { 67, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, 333, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203 }, { 67, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, 334, 334, 334, 334, 334, 334, 334, 334, 334, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204 }, { 67, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, 335, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205 }, { 67, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, 336, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, -206, -206, -206, -206, -206, -206, -206, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206 }, { 67, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, 339, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207 }, { 67, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, 340, 340, 340, 340, 340, 340, 340, 340, 340, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208 }, { 67, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, 342, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209 }, { 67, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, 343, 343, 343, 343, 343, 343, 343, 343, 343, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210 }, { 67, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, 344, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211 }, { 67, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, 345, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212 }, { 67, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, 347, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213 }, { 67, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, 348, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214 }, { 67, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, 349, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, -215, -215, -215, -215, -215, -215, -215, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215 }, { 67, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, 352, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216 }, { 67, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, 353, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217 }, { 67, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, 354, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, -218, -218, -218, -218, -218, -218, -218, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218 }, { 67, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, 357, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219 }, { 67, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, 359, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220 }, { 67, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, 360, 361, 361, 361, 361, 361, 361, 361, 361, 361, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221 }, { 67, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, 363, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222 }, { 67, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, 364, 365, 365, 365, 365, 365, 365, 365, 365, 365, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223 }, { 67, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, 367, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224 }, { 67, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, 368, 369, 369, 369, 369, 369, 369, 369, 369, 369, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225 }, { 67, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, 371, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226 }, { 67, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, 372, 373, 373, 373, 373, 373, 373, 373, 373, 373, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227 }, { 67, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, 375, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228 }, { 67, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, 376, 377, 377, 377, 377, 377, 377, 377, 377, 377, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229 }, { 67, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, 378, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230 }, { 67, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, 379, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231 }, { 67, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, 380, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, -232, -232, -232, -232, -232, -232, -232, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232 }, { 67, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, 382, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233 }, { 67, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, 383, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, -234, -234, -234, -234, -234, -234, -234, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234 }, { 67, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, 385, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235 }, { 67, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, 386, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236 }, { 67, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, 388, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237 }, { 67, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 389, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238 }, { 67, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, 239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239 }, { 67, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240 }, { 67, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241 }, { 67, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, 244, -242, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, 246, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, 246, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242 }, { 67, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, 246, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, 246, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243 }, { 67, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, 246, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, 246, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244 }, { 67, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, 244, -245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, 246, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, 246, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245 }, { 67, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, 392, -246, 392, -246, -246, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246 }, { 67, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 248, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247 }, { 67, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, 247, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248 }, { 67, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, 249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, 250, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249 }, { 67, 251, 251, 251, 251, 251, 251, 251, 251, 251, -250, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251 }, { 67, 251, 251, 251, 251, 251, 251, 251, 251, 251, -251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251 }, { 67, 252, 252, 252, 252, 252, 252, 252, 252, 252, -252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252 }, { 67, 253, 253, 253, 253, 253, 253, 253, 253, 253, -253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253 }, { 67, 254, 254, 254, 254, 254, 254, 254, 254, 254, 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 }, { 67, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255 }, { 67, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, 394, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256 }, { 67, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, 395, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257 }, { 67, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, 396, -258, -258, -258, -258, -258, -258, 397, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258 }, { 67, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, 398, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259 }, { 67, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, 399, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, 400, 401, -260, -260, -260, -260, -260, 402, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260 }, { 67, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, 403, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261 }, { 67, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, 404, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262 }, { 67, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, 405, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263 }, { 67, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264 }, { 67, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265 }, { 67, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, 406, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266 }, { 67, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, 407, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267 }, { 67, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, 408, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268 }, { 67, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, 409, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269 }, { 67, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, 410, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270 }, { 67, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, 411, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271 }, { 67, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, 412, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272 }, { 67, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, 413, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273 }, { 67, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, 414, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274 }, { 67, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, 415, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275 }, { 67, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, 416, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276 }, { 67, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, 417, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277 }, { 67, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, 418, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278 }, { 67, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, 419, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279 }, { 67, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, 420, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280 }, { 67, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, 421, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281 }, { 67, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, 422, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282 }, { 67, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, 423, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, 424, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, 425, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283 }, { 67, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, 426, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284 }, { 67, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, 427, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285 }, { 67, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, 428, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286 }, { 67, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, 429, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287 }, { 67, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, 430, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288 }, { 67, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, 431, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289 }, { 67, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, 432, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290 }, { 67, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, 433, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291 }, { 67, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, 434, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292 }, { 67, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, 435, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293 }, { 67, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, 436, -294, -294, -294, -294, -294, -294, 437, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294 }, { 67, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, 438, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295 }, { 67, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 439, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 440, 441, -296, -296, -296, -296, -296, 442, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296 }, { 67, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, 443, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297 }, { 67, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, 444, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298 }, { 67, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, 445, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299 }, { 67, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, 446, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300 }, { 67, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301 }, { 67, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302 }, { 67, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303 }, { 67, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, 447, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304 }, { 67, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, 448, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305 }, { 67, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, 449, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, 450, -306, -306, 451, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306 }, { 67, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, 452, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307 }, { 67, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, 453, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308 }, { 67, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, 454, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309 }, { 67, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, 455, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, 456, -310, -310, -310, -310, -310, 457, -310, -310, -310, 458, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310 }, { 67, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, 459, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311 }, { 67, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312 }, { 67, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313 }, { 67, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314 }, { 67, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, 460, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315 }, { 67, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, 461, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316 }, { 67, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, 462, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317 }, { 67, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318 }, { 67, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319 }, { 67, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320 }, { 67, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321 }, { 67, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322 }, { 67, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, 463, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323 }, { 67, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, 464, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324 }, { 67, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, 465, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325 }, { 67, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326 }, { 67, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327 }, { 67, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328 }, { 67, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329 }, { 67, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330 }, { 67, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331 }, { 67, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, 468, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332 }, { 67, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, 469, 469, 469, 469, 469, 469, 469, 469, 469, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333 }, { 67, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, 470, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, -334, -334, -334, -334, -334, -334, -334, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334 }, { 67, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, 472, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335 }, { 67, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, 473, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336 }, { 67, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, 474, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337 }, { 67, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, 476, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338 }, { 67, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, 477, 477, 477, 477, 477, 477, 477, 477, 477, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339 }, { 67, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, 478, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, -340, -340, -340, -340, -340, -340, -340, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340 }, { 67, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, 480, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341 }, { 67, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, 481, 481, 481, 481, 481, 481, 481, 481, 481, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342 }, { 67, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, 482, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, -343, -343, -343, -343, -343, -343, -343, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343 }, { 67, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344 }, { 67, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345 }, { 67, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346 }, { 67, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347 }, { 67, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348 }, { 67, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349 }, { 67, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350 }, { 67, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351 }, { 67, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352 }, { 67, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353 }, { 67, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354 }, { 67, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355 }, { 67, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356 }, { 67, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357 }, { 67, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, 485, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358 }, { 67, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, 486, 487, 487, 487, 487, 487, 487, 487, 487, 487, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359 }, { 67, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, 488, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360 }, { 67, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, 488, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, -361, -361, -361, -361, -361, -361, -361, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361 }, { 67, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, 491, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362 }, { 67, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, 492, 493, 493, 493, 493, 493, 493, 493, 493, 493, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363 }, { 67, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, 494, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364 }, { 67, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, 494, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, -365, -365, -365, -365, -365, -365, -365, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365 }, { 67, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, 496, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366 }, { 67, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, 497, 498, 498, 498, 498, 498, 498, 498, 498, 498, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367 }, { 67, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, 499, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368 }, { 67, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, 499, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, -369, -369, -369, -369, -369, -369, -369, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369 }, { 67, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, 502, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370 }, { 67, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, 503, 504, 504, 504, 504, 504, 504, 504, 504, 504, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371 }, { 67, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, 505, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372 }, { 67, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, 505, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, -373, -373, -373, -373, -373, -373, -373, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373 }, { 67, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, 507, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374 }, { 67, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, 508, 509, 509, 509, 509, 509, 509, 509, 509, 509, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375 }, { 67, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, 510, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376 }, { 67, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, 510, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, -377, -377, -377, -377, -377, -377, -377, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377 }, { 67, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378 }, { 67, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, 512, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379 }, { 67, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, 513, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380 }, { 67, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, 514, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381 }, { 67, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382 }, { 67, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383 }, { 67, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384 }, { 67, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, 515, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385 }, { 67, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, 516, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386 }, { 67, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, 517, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387 }, { 67, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388 }, { 67, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389 }, { 67, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390 }, { 67, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, 246, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, 246, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391 }, { 67, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392 }, { 67, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393 }, { 67, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394 }, { 67, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395 }, { 67, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396 }, { 67, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 519, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397 }, { 67, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, 520, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398 }, { 67, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, 521, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399 }, { 67, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, 522, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400 }, { 67, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, 523, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401 }, { 67, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, 524, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402 }, { 67, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, 525, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403 }, { 67, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, 526, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404 }, { 67, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, 527, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405 }, { 67, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, 528, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406 }, { 67, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, 529, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407 }, { 67, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, 530, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408 }, { 67, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, 531, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409 }, { 67, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, 532, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410 }, { 67, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, 533, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411 }, { 67, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, 534, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412 }, { 67, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, 535, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413 }, { 67, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, 536, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414 }, { 67, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, 537, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415 }, { 67, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416 }, { 67, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, 538, 538, 538, 538, 538, 538, 538, 538, 538, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417 }, { 67, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, 539, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418 }, { 67, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, 540, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419 }, { 67, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, 541, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420 }, { 67, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, 542, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421 }, { 67, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, 543, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422 }, { 67, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, 544, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, 545, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423 }, { 67, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424 }, { 67, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, 546, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425 }, { 67, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, 547, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, 548, 549, 550, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426 }, { 67, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, 551, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427 }, { 67, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, 552, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, 553, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428 }, { 67, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, 554, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, 555, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429 }, { 67, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430 }, { 67, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431 }, { 67, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432 }, { 67, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, 556, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433 }, { 67, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434 }, { 67, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, 557, -435, -435, -435, 558, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435 }, { 67, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436 }, { 67, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, 559, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437 }, { 67, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, 560, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438 }, { 67, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, 561, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439 }, { 67, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, 562, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440 }, { 67, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, 563, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, -441 }, { 67, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, 564, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, -442 }, { 67, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, 565, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, -443 }, { 67, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, 566, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, -444 }, { 67, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, 567, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, -445 }, { 67, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, 568, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, -446 }, { 67, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, -447 }, { 67, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, -448 }, { 67, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, 569, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, -449 }, { 67, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, 570, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, -450 }, { 67, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, 571, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, -451 }, { 67, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, 572, 572, 572, 572, 572, 572, 572, 572, 572, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, 573, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452 }, { 67, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, -453 }, { 67, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, 574, 574, 574, 574, 574, 574, 574, 574, 574, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, -454 }, { 67, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, 575, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, -455 }, { 67, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, 576, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, -456 }, { 67, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, 577, 577, 577, 577, 577, 577, 577, 577, 577, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, -457 }, { 67, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, 578, 578, 578, 578, 578, 578, 578, 578, 578, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, -458 }, { 67, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, 579, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, -459 }, { 67, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, -460 }, { 67, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, -461 }, { 67, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, -462 }, { 67, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, -463 }, { 67, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, -464 }, { 67, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, -465 }, { 67, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, -466 }, { 67, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, 581, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, -467 }, { 67, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, 582, 582, 582, 582, 582, 582, 582, 582, 582, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, -468 }, { 67, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, 583, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, -469, -469, -469, -469, -469, -469, -469, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, -469 }, { 67, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, 585, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, -470 }, { 67, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, 586, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, -471, -471, -471, -471, -471, -471, -471, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, -471 }, { 67, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, -472 }, { 67, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, -473 }, { 67, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, -474 }, { 67, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, 588, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475 }, { 67, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, 589, 589, 589, 589, 589, 589, 589, 589, 589, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, -476 }, { 67, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, 590, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, -477, -477, -477, -477, -477, -477, -477, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, -477 }, { 67, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, 592, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, -478 }, { 67, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, 593, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, -479, -479, -479, -479, -479, -479, -479, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, -479 }, { 67, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, 595, 595, 595, 595, 595, 595, 595, 595, 595, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, -480 }, { 67, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, 596, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, -481, -481, -481, -481, -481, -481, -481, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, -481 }, { 67, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, 598, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, -482 }, { 67, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, 599, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, -483, -483, -483, -483, -483, -483, -483, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, -483 }, { 67, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, 601, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484 }, { 67, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, 602, 603, 603, 603, 603, 603, 603, 603, 603, 603, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, -485 }, { 67, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, 604, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, -486 }, { 67, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, 604, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, -487, -487, -487, -487, -487, -487, -487, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, -487 }, { 67, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, 606, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, -488 }, { 67, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, 607, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, -489, -489, -489, -489, -489, -489, -489, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, -489 }, { 67, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, 609, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, -490 }, { 67, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, 610, 611, 611, 611, 611, 611, 611, 611, 611, 611, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, -491 }, { 67, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, 612, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, -492 }, { 67, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, 612, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, -493, -493, -493, -493, -493, -493, -493, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, -493 }, { 67, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, 614, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, -494 }, { 67, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, 615, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, -495, -495, -495, -495, -495, -495, -495, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, -495 }, { 67, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496 }, { 67, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, 618, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, -497 }, { 67, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, 618, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, -498, -498, -498, -498, -498, -498, -498, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, -498 }, { 67, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, 620, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, -499 }, { 67, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, 621, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, -500, -500, -500, -500, -500, -500, -500, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500 }, { 67, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, 623, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, -501 }, { 67, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, 624, 625, 625, 625, 625, 625, 625, 625, 625, 625, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, -502 }, { 67, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, 626, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, -503 }, { 67, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, 626, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, -504, -504, -504, -504, -504, -504, -504, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, -504 }, { 67, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, 628, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, -505 }, { 67, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, 629, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, -506, -506, -506, -506, -506, -506, -506, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, -506 }, { 67, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, -507 }, { 67, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, 632, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, -508 }, { 67, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, 632, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, -509, -509, -509, -509, -509, -509, -509, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, -509 }, { 67, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, 634, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, -510 }, { 67, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, 635, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, -511, -511, -511, -511, -511, -511, -511, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, -511 }, { 67, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, -512 }, { 67, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, -513 }, { 67, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, -514 }, { 67, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, -515 }, { 67, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, -516 }, { 67, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, -517 }, { 67, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, -518 }, { 67, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, -519 }, { 67, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, -520 }, { 67, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521 }, { 67, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, -522 }, { 67, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, -523 }, { 67, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, -524 }, { 67, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, -525 }, { 67, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, -526 }, { 67, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, -527 }, { 67, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, -528 }, { 67, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, -529 }, { 67, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, -530 }, { 67, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, -531 }, { 67, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, -532 }, { 67, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, -533 }, { 67, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, -534 }, { 67, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, -535 }, { 67, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, -536 }, { 67, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, 637, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, 638, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, -537 }, { 67, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, 639, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, -538 }, { 67, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, 641, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, -539 }, { 67, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, 642, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, -540 }, { 67, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, 643, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, -541 }, { 67, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, 644, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, -542 }, { 67, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, 645, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, -543 }, { 67, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, 646, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, -544 }, { 67, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, 647, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, -545 }, { 67, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, -546 }, { 67, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, 648, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, -547 }, { 67, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, -548 }, { 67, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, -549 }, { 67, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, -550 }, { 67, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, -551 }, { 67, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, 649, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, -552 }, { 67, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, 650, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, -553 }, { 67, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, 651, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554 }, { 67, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, 652, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, -555 }, { 67, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, 653, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, -556 }, { 67, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, 654, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, -557 }, { 67, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, 655, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, -558 }, { 67, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, -559 }, { 67, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, -560 }, { 67, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, -561 }, { 67, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, -562 }, { 67, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, -563 }, { 67, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, -564 }, { 67, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, -565 }, { 67, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, -566 }, { 67, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, -567 }, { 67, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, 656, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, -568 }, { 67, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, 657, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, -569 }, { 67, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, 658, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, -570 }, { 67, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, 659, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, -571 }, { 67, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, 660, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, -572, -572, -572, -572, -572, -572, -572, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, -572 }, { 67, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, 662, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, -573 }, { 67, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, 663, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, -574, -574, -574, -574, -574, -574, -574, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, -574 }, { 67, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, 665, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, -575 }, { 67, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, 666, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, -576 }, { 67, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, 667, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, -577, -577, -577, -577, -577, -577, -577, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, -577 }, { 67, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, 669, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, -578, -578, -578, -578, -578, -578, -578, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, -578 }, { 67, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, 671, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, -579 }, { 67, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580 }, { 67, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, 673, 673, 673, 673, 673, 673, 673, 673, 673, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, -581 }, { 67, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, 674, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, -582, -582, -582, -582, -582, -582, -582, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, -582 }, { 67, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, 676, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, -583 }, { 67, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, 677, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, -584, -584, -584, -584, -584, -584, -584, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, -584 }, { 67, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, 679, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, -585 }, { 67, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, 680, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, -586 }, { 67, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, 681, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, -587, -587, -587, -587, -587, -587, -587, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, -587 }, { 67, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, 683, 683, 683, 683, 683, 683, 683, 683, 683, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, -588 }, { 67, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, 684, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, -589, -589, -589, -589, -589, -589, -589, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, -589 }, { 67, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, 686, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, -590 }, { 67, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, 687, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, -591, -591, -591, -591, -591, -591, -591, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, -591 }, { 67, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, 689, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, -592 }, { 67, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, 690, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, -593 }, { 67, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, 691, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, -594, -594, -594, -594, -594, -594, -594, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, -594 }, { 67, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, -595 }, { 67, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, -596 }, { 67, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, -597 }, { 67, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, -598 }, { 67, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, -599 }, { 67, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, -600 }, { 67, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, -601 }, { 67, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, 694, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, -602 }, { 67, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, 694, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, -603, -603, -603, -603, -603, -603, -603, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, -603 }, { 67, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, 696, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, -604 }, { 67, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, 697, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, -605, -605, -605, -605, -605, -605, -605, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, 697, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, -605 }, { 67, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, 699, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, -606 }, { 67, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, 700, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, -607 }, { 67, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, 701, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, -608, -608, -608, -608, -608, -608, -608, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, -608 }, { 67, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, -609 }, { 67, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, 704, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, -610 }, { 67, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, 704, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, -611, -611, -611, -611, -611, -611, -611, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, -611 }, { 67, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, 706, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, -612 }, { 67, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, 707, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, -613, -613, -613, -613, -613, -613, -613, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, -613 }, { 67, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, 709, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, -614 }, { 67, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, 710, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, -615 }, { 67, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, 711, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, -616, -616, -616, -616, -616, -616, -616, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, -616 }, { 67, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, -617 }, { 67, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, -618 }, { 67, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, -619 }, { 67, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620 }, { 67, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, -621 }, { 67, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, -622 }, { 67, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, -623 }, { 67, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, 714, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624 }, { 67, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, 714, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, -625, -625, -625, -625, -625, -625, -625, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, -625 }, { 67, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, 716, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, -626 }, { 67, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, 717, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, -627, -627, -627, -627, -627, -627, -627, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627 }, { 67, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, 719, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628 }, { 67, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, 720, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, -629 }, { 67, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, 721, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, -630, -630, -630, -630, -630, -630, -630, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, -630 }, { 67, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, -631 }, { 67, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, -632 }, { 67, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, -633 }, { 67, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, -634 }, { 67, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, -635 }, { 67, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, -636 }, { 67, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, 723, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, -637 }, { 67, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, 724, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, -638 }, { 67, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, 725, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, -639 }, { 67, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, 726, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, -640 }, { 67, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, 728, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, -641 }, { 67, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, 729, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, -642 }, { 67, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, 730, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, -643 }, { 67, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, 731, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, -644 }, { 67, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, 732, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, -645 }, { 67, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, 733, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, -646 }, { 67, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, 734, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, -647 }, { 67, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, 735, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, -648 }, { 67, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, 736, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, -649 }, { 67, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, 737, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, -650 }, { 67, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, 738, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, 739, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, -651 }, { 67, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, 740, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, -652 }, { 67, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, 741, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, -653 }, { 67, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, 742, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, -654 }, { 67, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, 743, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, -655 }, { 67, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, 744, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, -656 }, { 67, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, 745, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, -657 }, { 67, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, 746, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, -658 }, { 67, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, 747, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, -659 }, { 67, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, 748, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, -660 }, { 67, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, 749, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, -661, -661, -661, -661, -661, -661, -661, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, -661 }, { 67, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, 751, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, -662 }, { 67, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, 752, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, -663 }, { 67, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, 753, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, -664, -664, -664, -664, -664, -664, -664, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, 753, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, -664 }, { 67, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, 755, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, -665 }, { 67, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, 756, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, -666 }, { 67, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, 757, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, -667 }, { 67, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, 758, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, -668, -668, -668, -668, -668, -668, -668, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, 758, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, -668 }, { 67, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, 760, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, -669 }, { 67, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, 761, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, -670, -670, -670, -670, -670, -670, -670, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, -670 }, { 67, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, 763, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, -671 }, { 67, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, -672 }, { 67, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, -673 }, { 67, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, -674 }, { 67, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, -675 }, { 67, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, -676 }, { 67, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, -677 }, { 67, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, -678 }, { 67, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679 }, { 67, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, -680 }, { 67, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, -681 }, { 67, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, -682 }, { 67, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, -683 }, { 67, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, -684 }, { 67, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, -685 }, { 67, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, -686 }, { 67, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, -687 }, { 67, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, -688 }, { 67, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, -689 }, { 67, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, -690 }, { 67, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, -691 }, { 67, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, -692 }, { 67, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, -693 }, { 67, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, -694 }, { 67, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, -695 }, { 67, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, -696 }, { 67, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, -697 }, { 67, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, -698 }, { 67, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, -699 }, { 67, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, -700 }, { 67, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, -701 }, { 67, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, -702 }, { 67, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, -703 }, { 67, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, -704 }, { 67, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, -705 }, { 67, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, -706 }, { 67, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, -707 }, { 67, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, -708 }, { 67, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, -709 }, { 67, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, -710 }, { 67, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, -711 }, { 67, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, -712 }, { 67, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, -713 }, { 67, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, -714 }, { 67, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, -715 }, { 67, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, -716 }, { 67, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, -717 }, { 67, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, -718 }, { 67, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, -719 }, { 67, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, -720 }, { 67, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, -721 }, { 67, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, -722 }, { 67, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, 764, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, -723 }, { 67, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, 765, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, -724 }, { 67, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, 766, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, -725 }, { 67, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, 767, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, -726 }, { 67, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, 768, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, -727 }, { 67, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, 769, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, -728 }, { 67, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, 770, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729 }, { 67, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, -730 }, { 67, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, -731 }, { 67, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, -732 }, { 67, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, 771, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, -733 }, { 67, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, 772, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, -734 }, { 67, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, 773, 774, 775, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, -735 }, { 67, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, 776, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, -736 }, { 67, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, -737 }, { 67, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, 777, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, -738 }, { 67, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, -739 }, { 67, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, -740 }, { 67, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, -741 }, { 67, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, -742 }, { 67, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, -743 }, { 67, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, 778, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, -744 }, { 67, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, -745 }, { 67, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, -746 }, { 67, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 779, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, -747 }, { 67, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, 780, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, -748 }, { 67, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, 781, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, -749 }, { 67, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, 782, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, 782, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, -750 }, { 67, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, 783, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, -751 }, { 67, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, 784, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, -752 }, { 67, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, 785, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, -753 }, { 67, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, 786, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, -754 }, { 67, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, 787, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, -755 }, { 67, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756 }, { 67, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, 788, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, -757 }, { 67, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, 789, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, -758 }, { 67, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, 790, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, -759 }, { 67, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, 791, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, -760 }, { 67, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, 792, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, -761 }, { 67, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, 793, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, -762 }, { 67, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, -763 }, { 67, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, -764 }, { 67, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, -765 }, { 67, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, -766 }, { 67, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, -767 }, { 67, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, -768 }, { 67, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, 794, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, -769 }, { 67, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, -770 }, { 67, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, -771 }, { 67, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, -772 }, { 67, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, -773 }, { 67, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, -774 }, { 67, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, -775 }, { 67, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, -776 }, { 67, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, -777 }, { 67, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, 795, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, -778 }, { 67, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, -779 }, { 67, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, -780 }, { 67, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, -781 }, { 67, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, -782 }, { 67, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, -783 }, { 67, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, 796, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, -784 }, { 67, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, 797, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, -785 }, { 67, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, 798, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, -786 }, { 67, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, 799, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, -787 }, { 67, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, 800, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, -788 }, { 67, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, 801, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, -789 }, { 67, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, 802, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, -790 }, { 67, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, 803, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, -791 }, { 67, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, 804, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, -792 }, { 67, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, 805, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, -793 }, { 67, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, 806, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, -794 }, { 67, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, 807, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, -795 }, { 67, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, 808, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, -796 }, { 67, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, 809, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, -797 }, { 67, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, 810, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, -798 }, { 67, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, 811, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, -799 }, { 67, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, 812, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, -800 }, { 67, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, 813, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, -801 }, { 67, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, 814, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, -802 }, { 67, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, 815, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, -803 }, { 67, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, 816, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, -804 }, { 67, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, 817, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, -805 }, { 67, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, 818, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, -806 }, { 67, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, 819, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, 820, -807, 820, -807, -807, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, -807 }, { 67, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 822, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 823, -808, 823, -808, -808, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, -808 }, { 67, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, 825, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, 826, -809, 826, -809, -809, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, -809 }, { 67, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, 828, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, 829, -810, 829, -810, -810, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, -810 }, { 67, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, 831, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, 832, -811, 832, -811, -811, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, -811 }, { 67, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, 834, -812, -812, -812, -812, -812, -812, 835, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, -812 }, { 67, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, 836, -813, -813, -813, -813, -813, -813, 837, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, -813 }, { 67, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, 838, -814, -814, -814, -814, -814, -814, 839, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, -814 }, { 67, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, 840, -815, -815, -815, -815, -815, -815, 841, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, -815 }, { 67, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, 842, -816, -816, -816, -816, -816, -816, 843, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, -816 }, { 67, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, 844, -817, -817, -817, -817, -817, -817, 845, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, -817 }, { 67, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, 846, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, -818 }, { 67, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, 819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, 820, -819, 820, -819, -819, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, -819 }, { 67, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, -820 }, { 67, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, -821 }, { 67, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, 822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, 823, -822, 823, -822, -822, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, -822 }, { 67, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, -823 }, { 67, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, -824 }, { 67, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, 825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, 826, -825, 826, -825, -825, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, -825 }, { 67, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, -826 }, { 67, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, -827 }, { 67, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, 828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, 829, -828, 829, -828, -828, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, -828 }, { 67, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, -829 }, { 67, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, -830 }, { 67, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, 831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, 832, -831, 832, -831, -831, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, -831 }, { 67, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, -832 }, { 67, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, -833 }, { 67, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, 834, -834, -834, -834, -834, -834, -834, 835, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, -834 }, { 67, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 848, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847 }, { 67, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, 836, -836, -836, -836, -836, -836, -836, 837, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, -836 }, { 67, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 850, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849 }, { 67, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, 838, -838, -838, -838, -838, -838, -838, 839, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, -838 }, { 67, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 852, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851 }, { 67, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, 840, -840, -840, -840, -840, -840, -840, 841, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, -840 }, { 67, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 854, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853 }, { 67, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, 842, -842, -842, -842, -842, -842, -842, 843, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, -842 }, { 67, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 856, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855 }, { 67, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, 844, -844, -844, -844, -844, -844, -844, 845, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, -844 }, { 67, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 858, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857 }, { 67, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, 859, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, -846 }, { 67, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 848, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847 }, { 67, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, 847, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, -848 }, { 67, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 850, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849 }, { 67, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, 849, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, -850 }, { 67, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 852, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851 }, { 67, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, 851, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, -852 }, { 67, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 854, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853 }, { 67, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, 853, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, -854 }, { 67, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 856, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855 }, { 67, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, 855, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, -856 }, { 67, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 858, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857 }, { 67, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, 857, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, -858 }, { 67, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, 860, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, -859 }, { 67, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, 861, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, -860 }, { 67, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, 862, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, -861 }, { 67, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, 863, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, -862 }, { 67, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, 864, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, -863 }, { 67, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, 865, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, -864 }, { 67, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, 866, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, -865 }, { 67, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, 867, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, -866 }, { 67, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, 868, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, -867 }, { 67, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, 869, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, -868 }, { 67, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, 870, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, -869 }, { 67, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, 871, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, -870 }, { 67, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, 872, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, -871 }, { 67, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, 873, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, -872 }, { 67, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, 874, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, -873 }, { 67, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, 875, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, -874 }, { 67, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, 876, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, -875 }, { 67, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, 877, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, -876 }, { 67, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, 878, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, -877 }, { 67, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, 879, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, -878 }, { 67, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, 880, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, -879 }, { 67, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, 881, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, -880 }, { 67, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, 882, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, -881 }, { 67, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, 883, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, -882 }, { 67, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, 884, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, -883 }, { 67, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, 885, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, -884 }, { 67, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, 886, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, -885 }, { 67, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, 887, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, -886 }, { 67, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, 888, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, -887 }, { 67, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, 889, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, -888 }, { 67, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, 890, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, -889 }, { 67, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, 891, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, -890 }, { 67, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, 892, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, -891 }, { 67, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, 893, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, -892 }, { 67, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, 894, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, -893 }, { 67, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, 895, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, -894 }, { 67, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, 896, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, -895 }, { 67, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, 897, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, -896 }, { 67, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, 898, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, -897 }, { 67, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, 899, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, -898 }, { 67, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, 900, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, -899 }, { 67, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, 901, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, -900 }, { 67, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, 902, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, -901 }, { 67, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, 903, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, -902 }, { 67, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, 904, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, -903 }, { 67, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, 905, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, -904 }, { 67, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, 906, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, -905 }, { 67, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, 907, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, -906 }, { 67, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, 908, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, -907 }, { 67, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, 909, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, -908 }, { 67, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, 910, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, -909 }, { 67, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, 911, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, -910 }, { 67, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, 912, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, -911 }, { 67, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, 913, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, -912 }, { 67, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, 914, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, -913 }, { 67, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, 915, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, -914 }, { 67, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, 916, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, -915 }, { 67, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, 917, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, -916 }, { 67, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, 918, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, -917 }, { 67, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, 919, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, -918 }, { 67, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, 920, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, -919 }, { 67, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, 921, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, -920 }, { 67, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, 922, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, -921 }, { 67, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, 923, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, -922 }, { 67, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, 924, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, -923 }, { 67, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, 925, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, -924 }, { 67, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, 926, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, -925 }, { 67, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, -926 }, } ; static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up wcsbthtext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ wcsbthleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 283 #define YY_END_OF_BUFFER 284 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[927] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 278, 280, 280, 281, 281, 0, 0, 284, 283, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 283, 148, 148, 140, 140, 149, 149, 141, 141, 161, 161, 161, 283, 182, 182, 171, 171, 187, 187, 198, 198, 199, 199, 230, 230, 265, 265, 243, 243, 266, 266, 244, 244, 268, 268, 201, 202, 200, 209, 209, 210, 210, 218, 218, 219, 219, 270, 270, 272, 272, 271, 274, 274, 274, 273, 276, 276, 279, 278, 277, 280, 281, 283, 282, 0, 0, 0, 64, 58, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 63, 57, 0, 0, 0, 0, 0, 0, 0, 23, 0, 19, 66, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 271, 0, 273, 273, 273, 273, 0, 0, 275, 278, 277, 277, 280, 281, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 65, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 20, 67, 61, 0, 0, 0, 0, 0, 0, 0, 0, 127, 128, 129, 0, 0, 0, 130, 131, 132, 137, 136, 0, 0, 0, 133, 134, 135, 139, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 184, 186, 185, 188, 189, 190, 195, 194, 191, 192, 193, 197, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 206, 207, 208, 0, 0, 0, 215, 216, 217, 273, 0, 273, 22, 18, 26, 0, 69, 74, 0, 13, 44, 79, 39, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 91, 51, 49, 0, 93, 0, 0, 0, 103, 0, 54, 56, 108, 106, 110, 0, 28, 0, 71, 76, 0, 15, 46, 81, 41, 36, 0, 122, 114, 0, 0, 0, 0, 112, 0, 0, 121, 0, 0, 124, 142, 143, 144, 145, 146, 147, 0, 0, 0, 0, 0, 0, 162, 163, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 205, 211, 212, 213, 214, 27, 70, 75, 31, 14, 45, 80, 40, 35, 25, 68, 73, 30, 12, 43, 78, 38, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 97, 99, 101, 62, 0, 0, 0, 0, 0, 0, 0, 29, 72, 77, 32, 16, 47, 82, 42, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 167, 169, 165, 166, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 234, 235, 231, 232, 233, 0, 0, 0, 0, 0, 0, 0, 0, 242, 240, 241, 237, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 159, 155, 158, 152, 153, 157, 150, 151, 154, 156, 181, 177, 180, 174, 176, 179, 172, 173, 175, 178, 229, 225, 228, 222, 223, 227, 220, 221, 224, 226, 260, 250, 259, 248, 249, 258, 245, 246, 247, 257, 264, 256, 263, 254, 255, 262, 251, 252, 253, 261, 0, 0, 0, 0, 0, 0, 0, 90, 50, 48, 0, 0, 0, 0, 102, 0, 52, 55, 105, 107, 109, 0, 113, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 123, 83, 85, 86, 87, 88, 0, 89, 92, 94, 96, 98, 100, 104, 53, 0, 115, 117, 118, 119, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; static yyconst yy_state_type yy_NUL_trans[927] = { 0, 68, 69, 68, 68, 85, 85, 87, 87, 89, 89, 91, 91, 93, 93, 68, 68, 97, 97, 99, 99, 101, 101, 103, 103, 105, 105, 107, 107, 109, 109, 111, 111, 113, 113, 115, 115, 117, 117, 119, 119, 120, 120, 122, 122, 124, 124, 126, 126, 128, 128, 130, 130, 132, 132, 135, 135, 139, 139, 141, 141, 144, 144, 145, 145, 146, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 251, 252, 253, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 251, 251, 252, 253, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 847, 0, 849, 0, 851, 0, 853, 0, 855, 0, 857, 0, 847, 0, 849, 0, 851, 0, 853, 0, 855, 0, 857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ; extern int wcsbth_flex_debug; int wcsbth_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *wcsbthtext; #line 1 "wcsbth.l" /*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsbth.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * wcsbth.l is a Flex description file containing the definition of a lexical * scanner for parsing the WCS keyrecords for one or more image arrays and/or * pixel lists in a FITS binary table header. It can also handle primary image * and image extension headers. * * wcsbth.l requires Flex v2.5.4 or later. Refer to wcshdr.h for a description * of the user interface and operating notes. * * Implementation notes * -------------------- * wcsbth() may be invoked with an option that causes it to recognise the * image-header form of WCS keywords as defaults for each alternate coordinate * representation (up to 27). By design, with this option enabled wcsbth() can * also handle primary image and image extension headers, effectively treating * them as a single-column binary table though with WCS keywords of a different * form. * * NAXIS is always 2 for binary tables, it refers to the two-dimensional nature * of the table. Thus NAXIS does not count the number of image axes in either * image arrays or pixels lists and for the latter there is not even a formal * equivalent of WCSAXESa. Hence NAXIS is always ignored and a first pass * through the header is required to determine the number of images, the number * of alternate coordinate representations for each image (up to 27), and the * number of coordinate axes in each representation; this pass also counts the * number of iPVn_ma and iPSn_ma or TVk_ma and TSk_ma keywords in each * representation. * * On completion of the first pass, the association between column number and * axis number is defined for each representation of a pixel list. Memory is * allocated for an array of the required number of wcsprm structs and each of * these is initialized appropriately. These structs are filled in the second * pass. * * It is permissible for a scalar table column to contain degenerate (single- * point) image arrays and simultaneously form one axis of a pixel list. * * The parser does not check for duplicated keywords, for most keywords it * accepts the last encountered. * * wcsbth() does not currently handle the Green Bank convention. * *===========================================================================*/ /* Options. */ /* Indices for parameterized keywords. */ /* Alternate coordinate system identifier. */ /* Keyvalue data types. */ /* Exclusive start states. */ #line 112 "wcsbth.l" #include #include #include #include #include #include "wcs.h" #include "wcshdr.h" #include "wcsmath.h" /* Codes used for keyvalue data types. */ #define INTEGER 0 #define FLOAT 1 #define STRING 2 /* Bit masks used for keyword types: */ #define IMGAUX 0x1 /* Auxiliary image header, e.g. LONPOLEa or */ /* DATE-OBS. */ #define IMGAXIS 0x2 /* Image header with axis number, e.g. */ /* CTYPEia. */ #define IMGHEAD 0x3 /* Image header of either type. */ #define BIMGARR 0x4 /* Binary table image array with axis */ /* number, e.g. iCTYna. */ #define PIXLIST 0x8 /* Pixel list, e.g. TCTYna. */ #define BINTAB 0xC /* Shared binary table image array (without */ /* axis number) or pixel list, e.g. LONPna */ /* or OBSGXn. */ #define YY_DECL int wcsbth(char *header, int nkeyrec, int relax, int ctrl, \ int keysel, int *colsel, int *nreject, int *nwcs, \ struct wcsprm **wcs) #define YY_INPUT(inbuff, count, bufsize) \ { \ if (wcsbth_nkeyrec) { \ strncpy(inbuff, wcsbth_hdr, 80); \ inbuff[80] = '\n'; \ wcsbth_hdr += 80; \ wcsbth_nkeyrec--; \ count = 81; \ } else { \ count = YY_NULL; \ } \ } /* A convenience macro to get around incompatibilities between unput() and yyless(): put wcsbthtext followed by a blank back onto the input stream. */ #define WCSBTH_PUTBACK \ sprintf(stmp, "%s ", wcsbthtext); \ itmp = strlen(stmp); \ while (itmp) unput(stmp[--itmp]); /* These global variables are required by YY_INPUT. */ char *wcsbth_hdr; int wcsbth_nkeyrec; /* Used in preempting the call to exit() by yy_fatal_error(). */ jmp_buf wcsbth_abort_jmp_env; #define exit(status) longjmp(wcsbth_abort_jmp_env, status) /* Struct used internally for header bookkeeping. */ struct wcsbth_alts { int ncol, ialt, icol, imgherit; short int (*arridx)[27]; short int pixidx[27]; short int pad1; unsigned int *pixlist; unsigned char (*npv)[27]; unsigned char (*nps)[27]; unsigned char pixnpv[27]; unsigned char pixnps[27]; unsigned char pad2[2]; }; int wcsbth_pass1(int keytype, int i, int j, int n, int k, char a, char ptype, struct wcsbth_alts *alts); int wcsbth_init1(struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs); struct wcsprm *wcsbth_idx(struct wcsprm *wcs, struct wcsbth_alts *alts, int keytype, int n, char a); int wcsbth_colax(struct wcsprm *wcs, struct wcsbth_alts *alts, int k, char a); int wcsbth_epoch(void *wptr); int wcsbth_vsource(void *wptr); int wcsbth_final(struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs); #line 16850 "wcsbth.c" #define INITIAL 0 #define CCCCCia 1 #define iCCCna 2 #define iCCCCn 3 #define TCCCna 4 #define TCCCCn 5 #define CCi_ja 6 #define ijCCna 7 #define TCn_ka 8 #define TCCn_ka 9 #define CROTAi 10 #define iCROTn 11 #define TCROTn 12 #define CCi_ma 13 #define iCn_ma 14 #define iCCn_ma 15 #define TCn_ma 16 #define TCCn_ma 17 #define PROJPm 18 #define CCCCCCCC 19 #define CCCCCCCa 20 #define CCCCna 21 #define CCCCCna 22 #define CCCCn 23 #define CCCCCn 24 #define VALUE 25 #define INTEGER_VAL 26 #define FLOAT_VAL 27 #define STRING_VAL 28 #define COMMENT 29 #define DISCARD 30 #define ERROR 31 #define FLUSH 32 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int wcsbthlex_destroy (void ); int wcsbthget_debug (void ); void wcsbthset_debug (int debug_flag ); YY_EXTRA_TYPE wcsbthget_extra (void ); void wcsbthset_extra (YY_EXTRA_TYPE user_defined ); FILE *wcsbthget_in (void ); void wcsbthset_in (FILE * in_str ); FILE *wcsbthget_out (void ); void wcsbthset_out (FILE * out_str ); int wcsbthget_leng (void ); char *wcsbthget_text (void ); int wcsbthget_lineno (void ); void wcsbthset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int wcsbthwrap (void ); #else extern int wcsbthwrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( wcsbthtext, wcsbthleng, 1, wcsbthout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ errno=0; \ while ( (result = read( fileno(wcsbthin), (char *) buf, max_size )) < 0 ) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(wcsbthin); \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int wcsbthlex (void); #define YY_DECL int wcsbthlex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after wcsbthtext and wcsbthleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ if ( wcsbthleng > 0 ) \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ (wcsbthtext[wcsbthleng - 1] == '\n'); \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 202 "wcsbth.l" /* Keyword indices, as used in the WCS papers, e.g. iVn_ma, TPn_ka. */ char a; int i, j, k, m, n; char *cptr, *errmsg, errtxt[80], exclude[1000], *extkey, *hptr, ptype, stmp[16]; int altlin, ialt, icol, incl, ipass, ipx, itmp, ix, jx, keytype, nsel, npass, status, valtype, voff; void *vptr, *wptr; struct wcsbth_alts alts; struct wcsprm *wcsp, wcstem; int (*special)(void *); int wcsbthlex_destroy(void); /* The data structures produced. */ *nwcs = 0; *wcs = 0x0; /* Parameters used to implement YY_INPUT. */ wcsbth_hdr = header; wcsbth_nkeyrec = nkeyrec; /* Our handle on the input stream. */ hptr = header; *nreject = 0; /* Keyword parameters. */ i = j = 0; n = k = 0; m = 0; a = ' '; /* Header bookkeeping. */ alts.ncol = 0; alts.arridx = 0x0; alts.pixlist = 0x0; alts.npv = 0x0; alts.nps = 0x0; for (ialt = 0; ialt < 27; ialt++) { alts.pixidx[ialt] = 0; alts.pixnpv[ialt] = 0; alts.pixnps[ialt] = 0; } /* For decoding the keyvalue. */ keytype = 0; valtype = -1; vptr = 0x0; /* For keywords that require special handling. */ altlin = 0; ptype = ' '; special = 0x0; /* Selection by column number. */ nsel = colsel ? colsel[0] : 0; incl = (nsel > 0); for (icol = 0; icol < 1000; icol++) { exclude[icol] = incl; } for (icol = 1; icol <= abs(nsel); icol++) { itmp = colsel[icol]; if (0 < itmp && itmp < 1000) { exclude[itmp] = !incl; } } exclude[0] = 0; /* Selection by keyword type. */ itmp = keysel; keysel = 0; if (itmp) { if (itmp & WCSHDR_IMGHEAD) keysel |= IMGHEAD; if (itmp & WCSHDR_BIMGARR) keysel |= BIMGARR; if (itmp & WCSHDR_PIXLIST) keysel |= PIXLIST; } if (keysel == 0) { keysel = IMGHEAD | BINTAB; } /* Control variables. */ ipass = 1; npass = 2; /* Return here via longjmp() invoked by yy_fatal_error(). */ if (setjmp(wcsbth_abort_jmp_env)) { return 4; } BEGIN(INITIAL); #line 17151 "wcsbth.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! wcsbthin ) wcsbthin = stdin; if ( ! wcsbthout ) wcsbthout = stdout; if ( ! YY_CURRENT_BUFFER ) { wcsbthensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = wcsbth_create_buffer(wcsbthin,YY_BUF_SIZE ); } wcsbth_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of wcsbthtext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); yy_match: while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) { if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } ++yy_cp; } yy_current_state = -yy_current_state; yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos) + 1; yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 296 "wcsbth.l" { if (ipass == 1) { if (alts.ncol == 0) { sscanf(wcsbthtext, "TFIELDS = %d", &(alts.ncol)); BEGIN(FLUSH); } else { errmsg = "Duplicate or out-of-sequence TFIELDS keyword"; BEGIN(ERROR); } } else { BEGIN(FLUSH); } } YY_BREAK case 2: YY_RULE_SETUP #line 311 "wcsbth.l" { keytype = IMGAXIS; if (!(keytype & keysel)) { /* Ignore this key type. */ BEGIN(DISCARD); } else { if (relax & WCSHDR_ALLIMG) { if (ipass == 1) { sscanf(wcsbthtext, "WCSAXES%c= %d", &a, &i); wcsbth_pass1(IMGAXIS, i, 0, 0, 0, a, ' ', &alts); } BEGIN(FLUSH); } else if (relax & WCSHDR_reject) { errmsg = "Image-header keyword WCSAXESa in binary table"; BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } } YY_BREAK case 3: #line 339 "wcsbth.l" case 4: #line 340 "wcsbth.l" case 5: YY_RULE_SETUP #line 340 "wcsbth.l" { keytype = BIMGARR; /* Note that a blank in the sscanf() format string matches zero or more of them in the input. */ sscanf(wcsbthtext, "WCAX%d%c = %d", &n, &a, &i); if (!(keytype & keysel) || exclude[n]) { /* Ignore this key type or column. */ BEGIN(DISCARD); } else { if (ipass == 1) { wcsbth_pass1(BIMGARR, i, 0, n, 0, a, ' ', &alts); } BEGIN(FLUSH); } } YY_BREAK case 6: /* rule 6 can match eol */ #line 359 "wcsbth.l" case 7: /* rule 7 can match eol */ #line 360 "wcsbth.l" case 8: /* rule 8 can match eol */ YY_RULE_SETUP #line 360 "wcsbth.l" { /* Cross-reference supplier. */ keytype = BIMGARR; errmsg = "Cross-references are not currently implemented"; BEGIN(ERROR); } YY_BREAK case 9: /* rule 9 can match eol */ #line 368 "wcsbth.l" case 10: /* rule 10 can match eol */ #line 369 "wcsbth.l" case 11: /* rule 11 can match eol */ YY_RULE_SETUP #line 369 "wcsbth.l" { /* Cross-reference consumer. */ keytype = BIMGARR; errmsg = "Cross-references are not currently implemented"; BEGIN(ERROR); } YY_BREAK case 12: YY_RULE_SETUP #line 376 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crpix); extkey = "CRPIXja"; BEGIN(CCCCCia); } YY_BREAK case 13: #line 385 "wcsbth.l" case 14: YY_RULE_SETUP #line 385 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crpix); sscanf(wcsbthtext, "%d", &i); if (wcsbthleng == 4) { BEGIN(iCCCna); } else { extkey = "jCRPXn"; BEGIN(iCCCCn); } } YY_BREAK case 15: #line 400 "wcsbth.l" case 16: YY_RULE_SETUP #line 400 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crpix); if (wcsbthleng == 4) { BEGIN(TCCCna); } else { extkey = "TCRPXn"; BEGIN(TCCCCn); } } YY_BREAK case 17: YY_RULE_SETUP #line 412 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.pc); altlin = 1; extkey = "PCi_ja"; BEGIN(CCi_ja); } YY_BREAK case 18: YY_RULE_SETUP #line 421 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.pc); altlin = 1; sscanf(wcsbthtext, "%1d%1d", &i, &j); BEGIN(ijCCna); } YY_BREAK case 19: #line 432 "wcsbth.l" case 20: YY_RULE_SETUP #line 432 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.pc); altlin = 1; if (wcsbthleng == 2) { BEGIN(TCn_ka); } else { extkey = "TPCn_ka"; BEGIN(TCCn_ka); } } YY_BREAK case 21: YY_RULE_SETUP #line 445 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.cd); altlin = 2; extkey = "CDi_ja"; BEGIN(CCi_ja); } YY_BREAK case 22: YY_RULE_SETUP #line 454 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.cd); altlin = 2; sscanf(wcsbthtext, "%1d%1d", &i, &j); BEGIN(ijCCna); } YY_BREAK case 23: #line 465 "wcsbth.l" case 24: YY_RULE_SETUP #line 465 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.cd); altlin = 2; if (wcsbthleng == 2) { BEGIN(TCn_ka); } else { extkey = "TCDn_ka"; BEGIN(TCCn_ka); } } YY_BREAK case 25: YY_RULE_SETUP #line 478 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.cdelt); extkey = "CDELTia"; BEGIN(CCCCCia); } YY_BREAK case 26: #line 487 "wcsbth.l" case 27: YY_RULE_SETUP #line 487 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.cdelt); sscanf(wcsbthtext, "%d", &i); if (wcsbthleng == 4) { BEGIN(iCCCna); } else { extkey = "iCDLTn"; BEGIN(iCCCCn); } } YY_BREAK case 28: #line 502 "wcsbth.l" case 29: YY_RULE_SETUP #line 502 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.cdelt); if (wcsbthleng == 4) { BEGIN(TCCCna); } else { extkey = "TCDLTn"; BEGIN(TCCCCn); } } YY_BREAK case 30: YY_RULE_SETUP #line 514 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crota); altlin = 4; extkey = "CROTAi"; BEGIN(CROTAi); } YY_BREAK case 31: YY_RULE_SETUP #line 523 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crota); altlin = 4; sscanf(wcsbthtext, "%d", &i); extkey = "iCROTn"; BEGIN(iCROTn); } YY_BREAK case 32: YY_RULE_SETUP #line 534 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crota); altlin = 4; extkey = "TCROTn"; BEGIN(TCROTn); } YY_BREAK case 33: YY_RULE_SETUP #line 543 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.cunit); extkey = "CUNITia"; BEGIN(CCCCCia); } YY_BREAK case 34: #line 552 "wcsbth.l" case 35: YY_RULE_SETUP #line 552 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.cunit); sscanf(wcsbthtext, "%d", &i); if (wcsbthleng == 4) { BEGIN(iCCCna); } else { extkey = "iCUNIn"; BEGIN(iCCCCn); } } YY_BREAK case 36: #line 567 "wcsbth.l" case 37: YY_RULE_SETUP #line 567 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.cunit); if (wcsbthleng == 4) { BEGIN(TCCCna); } else { extkey = "TCUNIn"; BEGIN(TCCCCn); } } YY_BREAK case 38: YY_RULE_SETUP #line 579 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.ctype); extkey = "CTYPEia"; BEGIN(CCCCCia); } YY_BREAK case 39: #line 588 "wcsbth.l" case 40: YY_RULE_SETUP #line 588 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.ctype); sscanf(wcsbthtext, "%d", &i); if (wcsbthleng == 4) { BEGIN(iCCCna); } else { extkey = "iCTYPn"; BEGIN(iCCCCn); } } YY_BREAK case 41: #line 603 "wcsbth.l" case 42: YY_RULE_SETUP #line 603 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.ctype); if (wcsbthleng == 4) { BEGIN(TCCCna); } else { extkey = "TCTYPn"; BEGIN(TCCCCn); } } YY_BREAK case 43: YY_RULE_SETUP #line 615 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crval); extkey = "CRVALia"; BEGIN(CCCCCia); } YY_BREAK case 44: #line 624 "wcsbth.l" case 45: YY_RULE_SETUP #line 624 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crval); sscanf(wcsbthtext, "%d", &i); if (wcsbthleng == 4) { BEGIN(iCCCna); } else { extkey = "iCRVLn"; BEGIN(iCCCCn); } } YY_BREAK case 46: #line 639 "wcsbth.l" case 47: YY_RULE_SETUP #line 639 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crval); if (wcsbthleng == 4) { BEGIN(TCCCna); } else { extkey = "TCRVLn"; BEGIN(TCCCCn); } } YY_BREAK case 48: #line 652 "wcsbth.l" case 49: YY_RULE_SETUP #line 652 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.lonpole); if (wcsbthleng == 7) { extkey = "LONPOLEa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 50: #line 665 "wcsbth.l" case 51: YY_RULE_SETUP #line 665 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.latpole); if (wcsbthleng == 7) { extkey = "LATPOLEa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 52: #line 678 "wcsbth.l" case 53: #line 679 "wcsbth.l" case 54: YY_RULE_SETUP #line 679 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.restfrq); if (wcsbthleng == 8) { unput(' '); extkey = "RESTFREQ"; BEGIN(CCCCCCCa); } else if (wcsbthleng == 7) { extkey = "RESTFRQa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 55: #line 696 "wcsbth.l" case 56: YY_RULE_SETUP #line 696 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.restwav); if (wcsbthleng == 7) { extkey = "RESTWAVa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 57: YY_RULE_SETUP #line 708 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.pv); ptype = 'v'; extkey = "PVi_ma"; BEGIN(CCi_ma); } YY_BREAK case 58: #line 718 "wcsbth.l" case 59: YY_RULE_SETUP #line 718 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.pv); ptype = 'v'; sscanf(wcsbthtext, "%d", &i); if (wcsbthleng == 2) { BEGIN(iCn_ma); } else { extkey = "iPVn_ma"; BEGIN(iCCn_ma); } } YY_BREAK case 60: #line 734 "wcsbth.l" case 61: YY_RULE_SETUP #line 734 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.pv); ptype = 'v'; if (wcsbthleng == 2) { BEGIN(TCn_ma); } else { extkey = "TPVn_ma"; BEGIN(TCCn_ma); } } YY_BREAK case 62: YY_RULE_SETUP #line 747 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.pv); ptype = 'v'; BEGIN(PROJPm); } YY_BREAK case 63: YY_RULE_SETUP #line 755 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.ps); ptype = 's'; extkey = "PSi_ma"; BEGIN(CCi_ma); } YY_BREAK case 64: #line 765 "wcsbth.l" case 65: YY_RULE_SETUP #line 765 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.ps); ptype = 's'; sscanf(wcsbthtext, "%d", &i); if (wcsbthleng == 2) { BEGIN(iCn_ma); } else { extkey = "iPSn_ma"; BEGIN(iCCn_ma); } } YY_BREAK case 66: #line 781 "wcsbth.l" case 67: YY_RULE_SETUP #line 781 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.ps); ptype = 's'; if (wcsbthleng == 2) { BEGIN(TCn_ma); } else { extkey = "TPSn_ma"; BEGIN(TCCn_ma); } } YY_BREAK case 68: YY_RULE_SETUP #line 794 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.cname); extkey = "CNAMEia"; BEGIN(CCCCCia); } YY_BREAK case 69: #line 803 "wcsbth.l" case 70: YY_RULE_SETUP #line 803 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.cname); sscanf(wcsbthtext, "%d", &i); if (wcsbthleng == 4) { BEGIN(iCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "iCNAMn"; BEGIN(iCCCCn); } } YY_BREAK case 71: #line 819 "wcsbth.l" case 72: YY_RULE_SETUP #line 819 "wcsbth.l" { valtype = STRING; vptr = &(wcstem.cname); if (wcsbthleng == 4) { BEGIN(TCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "TCNAMn"; BEGIN(TCCCCn); } } YY_BREAK case 73: YY_RULE_SETUP #line 832 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crder); extkey = "CRDERia"; BEGIN(CCCCCia); } YY_BREAK case 74: #line 841 "wcsbth.l" case 75: YY_RULE_SETUP #line 841 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crder); sscanf(wcsbthtext, "%d", &i); if (wcsbthleng == 4) { BEGIN(iCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "iCRDEn"; BEGIN(iCCCCn); } } YY_BREAK case 76: #line 857 "wcsbth.l" case 77: YY_RULE_SETUP #line 857 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.crder); if (wcsbthleng == 4) { BEGIN(TCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "TCRDEn"; BEGIN(TCCCCn); } } YY_BREAK case 78: YY_RULE_SETUP #line 870 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.csyer); extkey = "CSYERia"; BEGIN(CCCCCia); } YY_BREAK case 79: #line 879 "wcsbth.l" case 80: YY_RULE_SETUP #line 879 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.csyer); sscanf(wcsbthtext, "%d", &i); if (wcsbthleng == 4) { BEGIN(iCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "iCSYEn"; BEGIN(iCCCCn); } } YY_BREAK case 81: #line 895 "wcsbth.l" case 82: YY_RULE_SETUP #line 895 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.csyer); if (wcsbthleng == 4) { BEGIN(TCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "TCSYEn"; BEGIN(TCCCCn); } } YY_BREAK case 83: #line 909 "wcsbth.l" case 84: YY_RULE_SETUP #line 909 "wcsbth.l" { valtype = STRING; vptr = wcstem.dateavg; if (wcsbthleng == 8) { extkey = "DATE-AVG"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCn); } } YY_BREAK case 85: YY_RULE_SETUP #line 921 "wcsbth.l" { valtype = STRING; vptr = wcstem.dateobs; extkey = "DATE-OBS"; BEGIN(CCCCCCCC); } YY_BREAK case 86: #line 930 "wcsbth.l" case 87: #line 931 "wcsbth.l" case 88: YY_RULE_SETUP #line 931 "wcsbth.l" { if (relax & WCSHDR_DOBSn) { valtype = STRING; vptr = wcstem.dateobs; yyless(4); BEGIN(CCCCn); } else { keytype = BINTAB; if (relax & WCSHDR_reject) { errmsg = "DOBSna keyword is non-standard"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } } YY_BREAK case 89: YY_RULE_SETUP #line 950 "wcsbth.l" { sscanf(wcsbthtext, "EPOCH%c", &a); if (a == ' ' || (relax & WCSHDR_EPOCHa)) { valtype = FLOAT; vptr = &(wcstem.equinox); special = wcsbth_epoch; unput(a); extkey = "EPOCH"; BEGIN(CCCCCCCa); } else { keytype = IMGAUX; if (relax & WCSHDR_reject) { errmsg = "EPOCH keyword may not have an alternate version code"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } } YY_BREAK case 90: #line 974 "wcsbth.l" case 91: YY_RULE_SETUP #line 974 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.equinox); if (wcsbthleng == 7) { extkey = "EQUINOXa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 92: #line 987 "wcsbth.l" case 93: YY_RULE_SETUP #line 987 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.mjdavg); if (wcsbthleng == 8) { extkey = "MJD-AVG"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCn); } } YY_BREAK case 94: #line 1000 "wcsbth.l" case 95: YY_RULE_SETUP #line 1000 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.mjdobs); if (wcsbthleng == 8) { extkey = "MJD-OBS"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCCn); } } YY_BREAK case 96: #line 1013 "wcsbth.l" case 97: YY_RULE_SETUP #line 1013 "wcsbth.l" { valtype = FLOAT; vptr = wcstem.obsgeo; if (wcsbthleng == 8) { extkey = "OBSGEO-X"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCCn); } } YY_BREAK case 98: #line 1026 "wcsbth.l" case 99: YY_RULE_SETUP #line 1026 "wcsbth.l" { valtype = FLOAT; vptr = wcstem.obsgeo + 1; if (wcsbthleng == 8) { extkey = "OBSGEO-Y"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCCn); } } YY_BREAK case 100: #line 1039 "wcsbth.l" case 101: YY_RULE_SETUP #line 1039 "wcsbth.l" { valtype = FLOAT; vptr = wcstem.obsgeo + 2; if (wcsbthleng == 8) { extkey = "OBSGEO-Z"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCCn); } } YY_BREAK case 102: #line 1052 "wcsbth.l" case 103: YY_RULE_SETUP #line 1052 "wcsbth.l" { valtype = STRING; vptr = wcstem.radesys; if (wcsbthleng == 7) { extkey = "RADESYSa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 104: YY_RULE_SETUP #line 1064 "wcsbth.l" { if (relax & WCSHDR_RADECSYS) { valtype = STRING; vptr = wcstem.radesys; unput(' '); extkey = "RADECSYS"; BEGIN(CCCCCCCa); } else { keytype = IMGAUX; if (relax & WCSHDR_reject) { errmsg = "RADECSYS keyword is non-standard"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } } YY_BREAK case 105: #line 1085 "wcsbth.l" case 106: YY_RULE_SETUP #line 1085 "wcsbth.l" { valtype = STRING; vptr = wcstem.specsys; if (wcsbthleng == 7) { extkey = "SPECSYSa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 107: #line 1098 "wcsbth.l" case 108: YY_RULE_SETUP #line 1098 "wcsbth.l" { valtype = STRING; vptr = wcstem.ssysobs; if (wcsbthleng == 7) { extkey = "SSYSOBSa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 109: #line 1111 "wcsbth.l" case 110: YY_RULE_SETUP #line 1111 "wcsbth.l" { valtype = STRING; vptr = wcstem.ssyssrc; if (wcsbthleng == 7) { extkey = "SSYSSRCa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 111: #line 1124 "wcsbth.l" case 112: YY_RULE_SETUP #line 1124 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.velosys); if (wcsbthleng == 7) { extkey = "VELOSYSa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 113: #line 1137 "wcsbth.l" case 114: YY_RULE_SETUP #line 1137 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.velangl); if (wcsbthleng == 7) { extkey = "VELANGLa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 115: YY_RULE_SETUP #line 1149 "wcsbth.l" { sscanf(wcsbthtext, "VELREF%c", &a); if (a == ' ' || (relax & WCSHDR_VELREFa)) { valtype = INTEGER; vptr = &(wcstem.velref); unput(a); extkey = "VELREF"; BEGIN(CCCCCCCa); } else { keytype = IMGAUX; if (relax & WCSHDR_reject) { errmsg = "VELREF keyword may not have an alternate version code"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } } YY_BREAK case 116: YY_RULE_SETUP #line 1171 "wcsbth.l" { if (relax & WCSHDR_VSOURCE) { valtype = FLOAT; vptr = &(wcstem.zsource); special = wcsbth_vsource; yyless(7); extkey = "VSOURCEa"; BEGIN(CCCCCCCa); } else { keytype = IMGAUX; if (relax & WCSHDR_reject) { errmsg = "VSOURCEa keyword is deprecated"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } } YY_BREAK case 117: #line 1193 "wcsbth.l" case 118: #line 1194 "wcsbth.l" case 119: YY_RULE_SETUP #line 1194 "wcsbth.l" { if (relax & WCSHDR_VSOURCE) { valtype = FLOAT; vptr = &(wcstem.zsource); special = wcsbth_vsource; yyless(4); BEGIN(CCCCna); } else { keytype = BINTAB; if (relax & WCSHDR_reject) { errmsg = "VSOUna keyword is deprecated"; BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } } YY_BREAK case 120: #line 1216 "wcsbth.l" case 121: #line 1217 "wcsbth.l" case 122: YY_RULE_SETUP #line 1217 "wcsbth.l" { valtype = STRING; vptr = wcstem.wcsname; if (wcsbthleng == 7) { extkey = "WCSNAMEa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 123: #line 1230 "wcsbth.l" case 124: YY_RULE_SETUP #line 1230 "wcsbth.l" { valtype = FLOAT; vptr = &(wcstem.zsource); if (wcsbthleng == 7) { extkey = "ZSOURCEa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } YY_BREAK case 125: YY_RULE_SETUP #line 1242 "wcsbth.l" { yyless(0); if (wcsbth_nkeyrec) { wcsbth_nkeyrec = 0; errmsg = "Keyrecords following the END keyrecord were ignored"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } YY_BREAK case 126: YY_RULE_SETUP #line 1253 "wcsbth.l" { yyless(0); BEGIN(DISCARD); } YY_BREAK case 127: #line 1259 "wcsbth.l" case 128: YY_RULE_SETUP #line 1259 "wcsbth.l" { /* Image-header keyword. */ keytype = IMGAXIS; if (relax & WCSHDR_ALLIMG) { sscanf(wcsbthtext, "%d%c", &i, &a); BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Image-header keyword %s in binary table", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 129: YY_RULE_SETUP #line 1278 "wcsbth.l" { /* Invalid axis number in image-header keyword. */ keytype = IMGAXIS; if (relax & WCSHDR_ALLIMG) { /* Will also be flagged by as invalid. */ sscanf(wcsbthtext, "%3d", &i); BEGIN(VALUE); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 130: #line 1293 "wcsbth.l" case 131: #line 1294 "wcsbth.l" case 132: #line 1295 "wcsbth.l" case 133: #line 1296 "wcsbth.l" case 134: #line 1297 "wcsbth.l" case 135: YY_RULE_SETUP #line 1297 "wcsbth.l" { if (vptr) { WCSBTH_PUTBACK; BEGIN((YY_START == iCCCCn) ? iCCCna : TCCCna); } else { keytype = (YY_START == iCCCCn) ? BIMGARR : PIXLIST; if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "%s keyword is non-standard", extkey); BEGIN(ERROR); } else { BEGIN(DISCARD); } } } YY_BREAK case 136: #line 1314 "wcsbth.l" case 137: #line 1315 "wcsbth.l" case 138: #line 1316 "wcsbth.l" case 139: YY_RULE_SETUP #line 1316 "wcsbth.l" { if (vptr && (relax & WCSHDR_LONGKEY)) { WCSBTH_PUTBACK; BEGIN((YY_START == iCCCCn) ? iCCCna : TCCCna); } else { keytype = (YY_START == iCCCna) ? BIMGARR : PIXLIST; if (relax & WCSHDR_reject) { errmsg = errtxt; if (!vptr) { sprintf(errmsg, "%s keyword is non-standard", extkey); } else { sprintf(errmsg, "%s keyword may not have an alternate version code", extkey); } BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } } YY_BREAK case 140: #line 1341 "wcsbth.l" case 141: YY_RULE_SETUP #line 1341 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 142: #line 1346 "wcsbth.l" case 143: #line 1347 "wcsbth.l" case 144: #line 1348 "wcsbth.l" case 145: #line 1349 "wcsbth.l" case 146: #line 1350 "wcsbth.l" case 147: YY_RULE_SETUP #line 1350 "wcsbth.l" { sscanf(wcsbthtext, "%d%c", &n, &a); if (YY_START == TCCCna) i = wcsbth_colax(*wcs, &alts, n, a); keytype = (YY_START == iCCCna) ? BIMGARR : PIXLIST; BEGIN(VALUE); } YY_BREAK case 148: #line 1358 "wcsbth.l" case 149: YY_RULE_SETUP #line 1358 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 150: #line 1363 "wcsbth.l" case 151: #line 1364 "wcsbth.l" case 152: #line 1365 "wcsbth.l" case 153: YY_RULE_SETUP #line 1365 "wcsbth.l" { /* Image-header keyword. */ if (relax & WCSHDR_ALLIMG) { sscanf(wcsbthtext, "%d_%d%c", &i, &j, &a); keytype = IMGAXIS; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Image-header keyword %s in binary table", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 154: #line 1385 "wcsbth.l" case 155: #line 1386 "wcsbth.l" case 156: #line 1387 "wcsbth.l" case 157: #line 1388 "wcsbth.l" case 158: #line 1389 "wcsbth.l" case 159: YY_RULE_SETUP #line 1389 "wcsbth.l" { /* Invalid axis number in image-header keyword. */ if (relax & WCSHDR_ALLIMG) { /* Will be flagged by as invalid. */ sscanf(wcsbthtext, "%d_%d", &i, &j); keytype = IMGAXIS; BEGIN(VALUE); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 160: YY_RULE_SETUP #line 1403 "wcsbth.l" { /* This covers the defunct forms CD00i00j and PC00i00j. */ if (((relax & WCSHDR_PC00i00j) && (altlin == 1)) || ((relax & WCSHDR_CD00i00j) && (altlin == 2))) { sscanf(wcsbthtext, "%3d%3d", &i, &j); a = ' '; keytype = IMGAXIS; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Defunct form of %si_ja keyword", (altlin==1) ? "PC" : "CD"); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 161: YY_RULE_SETUP #line 1424 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 162: #line 1429 "wcsbth.l" case 163: #line 1430 "wcsbth.l" case 164: YY_RULE_SETUP #line 1430 "wcsbth.l" { sscanf(wcsbthtext, "%d%c", &n, &a); keytype = BIMGARR; BEGIN(VALUE); } YY_BREAK case 165: #line 1437 "wcsbth.l" case 166: #line 1438 "wcsbth.l" case 167: #line 1439 "wcsbth.l" case 168: #line 1440 "wcsbth.l" case 169: #line 1441 "wcsbth.l" case 170: YY_RULE_SETUP #line 1441 "wcsbth.l" { if (relax & WCSHDR_LONGKEY) { WCSBTH_PUTBACK; BEGIN(TCn_ka); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "%s keyword is non-standard", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 171: YY_RULE_SETUP #line 1457 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 172: #line 1462 "wcsbth.l" case 173: #line 1463 "wcsbth.l" case 174: #line 1464 "wcsbth.l" case 175: #line 1465 "wcsbth.l" case 176: #line 1466 "wcsbth.l" case 177: YY_RULE_SETUP #line 1466 "wcsbth.l" { sscanf(wcsbthtext, "%d_%d%c", &n, &k, &a); i = wcsbth_colax(*wcs, &alts, n, a); j = wcsbth_colax(*wcs, &alts, k, a); keytype = PIXLIST; BEGIN(VALUE); } YY_BREAK case 178: #line 1475 "wcsbth.l" case 179: #line 1476 "wcsbth.l" case 180: #line 1477 "wcsbth.l" case 181: YY_RULE_SETUP #line 1477 "wcsbth.l" { sscanf(wcsbthtext, "%d_%d", &n, &k); a = ' '; i = wcsbth_colax(*wcs, &alts, n, a); j = wcsbth_colax(*wcs, &alts, k, a); keytype = PIXLIST; BEGIN(VALUE); } YY_BREAK case 182: YY_RULE_SETUP #line 1486 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 183: #line 1491 "wcsbth.l" case 184: YY_RULE_SETUP #line 1491 "wcsbth.l" { yyless(0); BEGIN(CCCCCia); } YY_BREAK case 185: #line 1497 "wcsbth.l" case 186: YY_RULE_SETUP #line 1497 "wcsbth.l" { if (relax & WCSHDR_CROTAia) { yyless(0); BEGIN(CCCCCia); } else if (relax & WCSHDR_reject) { errmsg = "CROTAn keyword may not have an alternate version code"; BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 187: YY_RULE_SETUP #line 1512 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 188: #line 1517 "wcsbth.l" case 189: #line 1518 "wcsbth.l" case 190: #line 1519 "wcsbth.l" case 191: #line 1520 "wcsbth.l" case 192: #line 1521 "wcsbth.l" case 193: YY_RULE_SETUP #line 1521 "wcsbth.l" { WCSBTH_PUTBACK; BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna); } YY_BREAK case 194: #line 1527 "wcsbth.l" case 195: #line 1528 "wcsbth.l" case 196: #line 1529 "wcsbth.l" case 197: YY_RULE_SETUP #line 1529 "wcsbth.l" { if (relax & WCSHDR_CROTAia) { WCSBTH_PUTBACK; BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "%s keyword may not have an alternate version code", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 198: #line 1547 "wcsbth.l" case 199: YY_RULE_SETUP #line 1547 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 200: #line 1552 "wcsbth.l" case 201: YY_RULE_SETUP #line 1552 "wcsbth.l" { /* Image-header keyword. */ if (relax & (WCSHDR_AUXIMG | WCSHDR_ALLIMG)) { if (YY_START == CCCCCCCa) { sscanf(wcsbthtext, "%c", &a); } else { a = 0; unput(wcsbthtext[0]); } keytype = IMGAUX; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Image-header keyword %s in binary table", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 202: YY_RULE_SETUP #line 1576 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 203: #line 1581 "wcsbth.l" case 204: #line 1582 "wcsbth.l" case 205: #line 1583 "wcsbth.l" case 206: #line 1584 "wcsbth.l" case 207: YY_RULE_SETUP #line 1584 "wcsbth.l" { sscanf(wcsbthtext, "%d%c", &n, &a); keytype = BINTAB; BEGIN(VALUE); } YY_BREAK case 208: YY_RULE_SETUP #line 1590 "wcsbth.l" { sscanf(wcsbthtext, "%d", &n); a = ' '; keytype = BINTAB; BEGIN(VALUE); } YY_BREAK case 209: #line 1598 "wcsbth.l" case 210: YY_RULE_SETUP #line 1598 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 211: #line 1603 "wcsbth.l" case 212: #line 1604 "wcsbth.l" case 213: #line 1605 "wcsbth.l" case 214: #line 1606 "wcsbth.l" case 215: #line 1607 "wcsbth.l" case 216: #line 1608 "wcsbth.l" case 217: YY_RULE_SETUP #line 1608 "wcsbth.l" { sscanf(wcsbthtext, "%d", &n); a = 0; keytype = BINTAB; BEGIN(VALUE); } YY_BREAK case 218: #line 1616 "wcsbth.l" case 219: YY_RULE_SETUP #line 1616 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 220: #line 1621 "wcsbth.l" case 221: #line 1622 "wcsbth.l" case 222: #line 1623 "wcsbth.l" case 223: YY_RULE_SETUP #line 1623 "wcsbth.l" { /* Image-header keyword. */ if (relax & WCSHDR_ALLIMG) { sscanf(wcsbthtext, "%d_%d%c", &i, &m, &a); keytype = IMGAXIS; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Image-header keyword %s in binary table", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 224: #line 1643 "wcsbth.l" case 225: #line 1644 "wcsbth.l" case 226: #line 1645 "wcsbth.l" case 227: #line 1646 "wcsbth.l" case 228: #line 1647 "wcsbth.l" case 229: YY_RULE_SETUP #line 1647 "wcsbth.l" { /* Invalid parameter in image-header keyword. */ if (relax & WCSHDR_ALLIMG) { /* Will be flagged by as invalid. */ sscanf(wcsbthtext, "%d_%d", &i, &m); keytype = IMGAXIS; BEGIN(VALUE); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 230: YY_RULE_SETUP #line 1661 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 231: #line 1666 "wcsbth.l" case 232: #line 1667 "wcsbth.l" case 233: #line 1668 "wcsbth.l" case 234: #line 1669 "wcsbth.l" case 235: #line 1670 "wcsbth.l" case 236: #line 1671 "wcsbth.l" case 237: #line 1672 "wcsbth.l" case 238: #line 1673 "wcsbth.l" case 239: #line 1674 "wcsbth.l" case 240: #line 1675 "wcsbth.l" case 241: #line 1676 "wcsbth.l" case 242: YY_RULE_SETUP #line 1676 "wcsbth.l" { if (relax & WCSHDR_LONGKEY) { WCSBTH_PUTBACK; BEGIN((YY_START == iCCn_ma) ? iCn_ma : TCn_ma); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "%s keyword is non-standard", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 243: #line 1693 "wcsbth.l" case 244: YY_RULE_SETUP #line 1693 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 245: #line 1698 "wcsbth.l" case 246: #line 1699 "wcsbth.l" case 247: #line 1700 "wcsbth.l" case 248: #line 1701 "wcsbth.l" case 249: #line 1702 "wcsbth.l" case 250: #line 1703 "wcsbth.l" case 251: #line 1704 "wcsbth.l" case 252: #line 1705 "wcsbth.l" case 253: #line 1706 "wcsbth.l" case 254: #line 1707 "wcsbth.l" case 255: #line 1708 "wcsbth.l" case 256: YY_RULE_SETUP #line 1708 "wcsbth.l" { sscanf(wcsbthtext, "%d_%d%c", &n, &m, &a); if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a); keytype = (YY_START == iCn_ma) ? BIMGARR : PIXLIST; BEGIN(VALUE); } YY_BREAK case 257: #line 1716 "wcsbth.l" case 258: #line 1717 "wcsbth.l" case 259: #line 1718 "wcsbth.l" case 260: #line 1719 "wcsbth.l" case 261: #line 1720 "wcsbth.l" case 262: #line 1721 "wcsbth.l" case 263: #line 1722 "wcsbth.l" case 264: YY_RULE_SETUP #line 1722 "wcsbth.l" { /* Invalid combinations will be flagged by . */ sscanf(wcsbthtext, "%d_%d", &n, &m); a = ' '; if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a); keytype = (YY_START == iCn_ma) ? BIMGARR : PIXLIST; BEGIN(VALUE); } YY_BREAK case 265: #line 1732 "wcsbth.l" case 266: YY_RULE_SETUP #line 1732 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 267: YY_RULE_SETUP #line 1736 "wcsbth.l" { if (relax & WCSHDR_PROJPn) { sscanf(wcsbthtext, "%d", &m); i = 0; a = ' '; keytype = IMGAXIS; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = "PROJPn keyword is defunct"; BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } YY_BREAK case 268: YY_RULE_SETUP #line 1754 "wcsbth.l" { BEGIN(DISCARD); } YY_BREAK case 269: YY_RULE_SETUP #line 1758 "wcsbth.l" { /* Do checks on i, j, m, n, k. */ if (!(keytype & keysel)) { /* Selection by keyword type. */ BEGIN(DISCARD); } else if (exclude[n] || exclude[k]) { /* One or other column is not selected. */ if (k && (exclude[n] != exclude[k])) { /* For keywords such as TCn_ka, both columns must be excluded. User error, so return immediately. */ wcsbthlex_destroy(); return 3; } else { BEGIN(DISCARD); } } else if (i > 99 || j > 99 || m > 99 || n > 999 || k > 999) { if (relax & WCSHDR_reject) { errmsg = errtxt; if (i > 99 || j > 99) { sprintf(errmsg, "Axis number exceeds 99"); } else if (m > 99) { sprintf(errmsg, "Parameter number exceeds 99"); } else if (n > 999 || k > 999) { sprintf(errmsg, "Column number exceeds 999"); } BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } else if (ipass == 2 && npass == 3 && (keytype & BINTAB)) { /* Skip keyvalues that won't be inherited. */ BEGIN(FLUSH); } else if (ipass == 3 && (keytype & IMGHEAD)) { /* IMGHEAD keytypes are always dealt with on the second pass. */ BEGIN(FLUSH); } else if (vptr) { alts.icol = 0; alts.ialt = 0; voff = (char *)vptr - (char *)(&wcstem); if (valtype == INTEGER) { BEGIN(INTEGER_VAL); } else if (valtype == FLOAT) { BEGIN(FLOAT_VAL); } else if (valtype == STRING) { BEGIN(STRING_VAL); } else { errmsg = errtxt; sprintf(errmsg, "Internal parser ERROR, bad data type: %d", valtype); BEGIN(ERROR); } } else { errmsg = "Internal parser ERROR, null pointer"; BEGIN(ERROR); } } YY_BREAK case 270: YY_RULE_SETUP #line 1825 "wcsbth.l" { errmsg = "Invalid KEYWORD = VALUE syntax"; BEGIN(ERROR); } YY_BREAK case 271: YY_RULE_SETUP #line 1830 "wcsbth.l" { if (ipass == 1) { /* Do first-pass bookkeeping. */ wcsbth_pass1(keytype, i, j, n, k, a, ptype, &alts); BEGIN(FLUSH); } else { /* Update each coordinate representation. */ while ((wcsp = wcsbth_idx(*wcs, &alts, keytype, n, a))) { wptr = (void *)((char *)wcsp + voff); /* Read the keyvalue. */ if (special) { special(wptr); } else { sscanf(wcsbthtext, "%d", (int *)wptr); } } BEGIN(COMMENT); } } YY_BREAK case 272: YY_RULE_SETUP #line 1853 "wcsbth.l" { errmsg = "An integer value was expected"; BEGIN(ERROR); } YY_BREAK case 273: YY_RULE_SETUP #line 1858 "wcsbth.l" { if (ipass == 1) { /* Do first-pass bookkeeping. */ wcsbth_pass1(keytype, i, j, n, k, a, ptype, &alts); BEGIN(FLUSH); } else { /* Update each coordinate representation. */ while ((wcsp = wcsbth_idx(*wcs, &alts, keytype, n, a))) { wptr = (void *)((char *)wcsp + voff); /* Apply keyword parameterization. */ if (ptype == 'v') { ipx = wcsp->npv++; wcsp->pv[ipx].i = i; wcsp->pv[ipx].m = m; wptr = &(wcsp->pv[ipx].value); } else if (j) { /* Is the de-reference necessary? */ wptr = *((double **)wptr) + (i - 1)*(wcsp->naxis) + (j - 1); } else if (i) { wptr = *((double **)wptr) + (i - 1); } /* Read the keyvalue. */ if (special) { special(wptr); } else { sscanf(wcsbthtext, "%lf", (double *)wptr); } /* Flag the presence of PC, or CD and/or CROTA. */ if (altlin) { wcsp->altlin |= altlin; altlin = 0; } } BEGIN(COMMENT); } } YY_BREAK case 274: YY_RULE_SETUP #line 1902 "wcsbth.l" { errmsg = "A floating-point value was expected"; BEGIN(ERROR); } YY_BREAK case 275: /* rule 275 can match eol */ YY_RULE_SETUP #line 1907 "wcsbth.l" { if (ipass == 1) { /* Do first-pass bookkeeping. */ wcsbth_pass1(keytype, i, j, n, k, a, ptype, &alts); BEGIN(FLUSH); } else { /* Update each coordinate representation. */ while ((wcsp = wcsbth_idx(*wcs, &alts, keytype, n, a))) { wptr = (void *)((char *)wcsp + voff); /* Apply keyword parameterization. */ if (ptype == 's') { ipx = wcsp->nps++; wcsp->ps[ipx].i = i; wcsp->ps[ipx].m = m; wptr = wcsp->ps[ipx].value; } else if (j) { wptr = *((char (**)[72])wptr) + (i - 1)*(wcsp->naxis) + (j - 1); } else if (i) { wptr = *((char (**)[72])wptr) + (i - 1); } /* Read the keyvalue. */ cptr = (char *)wptr; strcpy(cptr, wcsbthtext+1); /* Squeeze out repeated quotes. */ ix = 0; for (jx = 0; jx < 72; jx++) { if (ix < jx) { cptr[ix] = cptr[jx]; } if (cptr[jx] == '\0') { if (ix) cptr[ix-1] = '\0'; break; } else if (cptr[jx] == '\'' && cptr[jx+1] == '\'') { jx++; } ix++; } } BEGIN(COMMENT); } } YY_BREAK case 276: YY_RULE_SETUP #line 1959 "wcsbth.l" { errmsg = "A string value was expected"; BEGIN(ERROR); } YY_BREAK case 277: #line 1965 "wcsbth.l" case 278: YY_RULE_SETUP #line 1965 "wcsbth.l" { BEGIN(FLUSH); } YY_BREAK case 279: YY_RULE_SETUP #line 1969 "wcsbth.l" { errmsg = "Malformed keycomment"; BEGIN(ERROR); } YY_BREAK case 280: YY_RULE_SETUP #line 1974 "wcsbth.l" { if (ipass == npass) { if (ctrl < 0) { /* Preserve discards. */ if (hptr < wcsbth_hdr-80) { strncpy(hptr, wcsbth_hdr-80, 80); } hptr += 80; } else if (ctrl > 2) { fprintf(stderr, "%.80s\n Discarded.\n", wcsbth_hdr-80); } } BEGIN(FLUSH); } YY_BREAK case 281: YY_RULE_SETUP #line 1991 "wcsbth.l" { (*nreject)++; if (ipass == npass) { if (ctrl == -1) { if (hptr < wcsbth_hdr-80) { /* Preserve rejects. */ strncpy(hptr, wcsbth_hdr-80, 80); } hptr += 80; } if (abs(ctrl) > 1) { fprintf(stderr, "%.80s\n%4d: %s.\n", wcsbth_hdr-80, *nreject, errmsg); } } BEGIN(FLUSH); } YY_BREAK case 282: /* rule 282 can match eol */ YY_RULE_SETUP #line 2011 "wcsbth.l" { /* Throw away the rest of the line and reset for the next one. */ i = j = 0; n = k = 0; m = 0; a = ' '; keytype = 0; valtype = -1; vptr = 0x0; altlin = 0; ptype = ' '; special = 0x0; BEGIN(INITIAL); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(CCCCCia): case YY_STATE_EOF(iCCCna): case YY_STATE_EOF(iCCCCn): case YY_STATE_EOF(TCCCna): case YY_STATE_EOF(TCCCCn): case YY_STATE_EOF(CCi_ja): case YY_STATE_EOF(ijCCna): case YY_STATE_EOF(TCn_ka): case YY_STATE_EOF(TCCn_ka): case YY_STATE_EOF(CROTAi): case YY_STATE_EOF(iCROTn): case YY_STATE_EOF(TCROTn): case YY_STATE_EOF(CCi_ma): case YY_STATE_EOF(iCn_ma): case YY_STATE_EOF(iCCn_ma): case YY_STATE_EOF(TCn_ma): case YY_STATE_EOF(TCCn_ma): case YY_STATE_EOF(PROJPm): case YY_STATE_EOF(CCCCCCCC): case YY_STATE_EOF(CCCCCCCa): case YY_STATE_EOF(CCCCna): case YY_STATE_EOF(CCCCCna): case YY_STATE_EOF(CCCCn): case YY_STATE_EOF(CCCCCn): case YY_STATE_EOF(VALUE): case YY_STATE_EOF(INTEGER_VAL): case YY_STATE_EOF(FLOAT_VAL): case YY_STATE_EOF(STRING_VAL): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(DISCARD): case YY_STATE_EOF(ERROR): case YY_STATE_EOF(FLUSH): #line 2028 "wcsbth.l" { /* End-of-input. */ if (ipass == 1) { if ((status = wcsbth_init1(&alts, nwcs, wcs)) || *nwcs == 0) { wcsbthlex_destroy(); return status; } if (alts.imgherit) npass = 3; if (abs(ctrl) > 2) { if (*nwcs == 1) { fprintf(stderr, "Found one coordinate representation.\n"); } else { fprintf(stderr, "Found %d coordinate representations.\n", *nwcs); } } } if (ipass++ < npass) { wcsbth_hdr = header; wcsbth_nkeyrec = nkeyrec; *nreject = 0; i = j = 0; k = n = 0; m = 0; a = ' '; keytype = 0; valtype = -1; vptr = 0x0; altlin = 0; ptype = ' '; special = 0x0; wcsbthrestart(wcsbthin); } else { wcsbthlex_destroy(); if (ctrl < 0) { *hptr = '\0'; } else if (ctrl == 1) { fprintf(stderr, "%d WCS keyrecords were rejected.\n", *nreject); } return wcsbth_final(&alts, nwcs, wcs); } } YY_BREAK case 283: YY_RULE_SETUP #line 2081 "wcsbth.l" ECHO; YY_BREAK #line 19589 "wcsbth.c" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed wcsbthin at a new source and called * wcsbthlex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = wcsbthin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( wcsbthwrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * wcsbthtext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of wcsbthlex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ wcsbthrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; wcsbthrestart(wcsbthin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) wcsbthrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { if ( *yy_cp ) { yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; } else yy_current_state = yy_NUL_trans[yy_current_state]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); yy_current_state = yy_NUL_trans[yy_current_state]; yy_is_jam = (yy_current_state == 0); if ( ! yy_is_jam ) { if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } } return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up wcsbthtext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ wcsbthrestart(wcsbthin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( wcsbthwrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve wcsbthtext */ (yy_hold_char) = *++(yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void wcsbthrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ wcsbthensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = wcsbth_create_buffer(wcsbthin,YY_BUF_SIZE ); } wcsbth_init_buffer(YY_CURRENT_BUFFER,input_file ); wcsbth_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void wcsbth_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * wcsbthpop_buffer_state(); * wcsbthpush_buffer_state(new_buffer); */ wcsbthensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; wcsbth_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (wcsbthwrap()) processing, but the only time this flag * is looked at is after wcsbthwrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void wcsbth_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; wcsbthin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE wcsbth_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) wcsbthalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in wcsbth_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) wcsbthalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in wcsbth_create_buffer()" ); b->yy_is_our_buffer = 1; wcsbth_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with wcsbth_create_buffer() * */ void wcsbth_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) wcsbthfree((void *) b->yy_ch_buf ); wcsbthfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a wcsbthrestart() or at EOF. */ static void wcsbth_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; wcsbth_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then wcsbth_init_buffer was _probably_ * called from wcsbthrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void wcsbth_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) wcsbth_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void wcsbthpush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; wcsbthensure_buffer_stack(); /* This block is copied from wcsbth_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from wcsbth_switch_to_buffer. */ wcsbth_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void wcsbthpop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; wcsbth_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { wcsbth_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void wcsbthensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)wcsbthalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in wcsbthensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)wcsbthrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in wcsbthensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE wcsbth_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) wcsbthalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in wcsbth_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; wcsbth_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to wcsbthlex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * wcsbth_scan_bytes() instead. */ YY_BUFFER_STATE wcsbth_scan_string (yyconst char * yystr ) { return wcsbth_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to wcsbthlex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE wcsbth_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) wcsbthalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in wcsbth_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = wcsbth_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in wcsbth_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up wcsbthtext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ wcsbthtext[wcsbthleng] = (yy_hold_char); \ (yy_c_buf_p) = wcsbthtext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ wcsbthleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int wcsbthget_lineno (void) { return wcsbthlineno; } /** Get the input stream. * */ FILE *wcsbthget_in (void) { return wcsbthin; } /** Get the output stream. * */ FILE *wcsbthget_out (void) { return wcsbthout; } /** Get the length of the current token. * */ int wcsbthget_leng (void) { return wcsbthleng; } /** Get the current token. * */ char *wcsbthget_text (void) { return wcsbthtext; } /** Set the current line number. * @param line_number * */ void wcsbthset_lineno (int line_number ) { wcsbthlineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see wcsbth_switch_to_buffer */ void wcsbthset_in (FILE * in_str ) { wcsbthin = in_str ; } void wcsbthset_out (FILE * out_str ) { wcsbthout = out_str ; } int wcsbthget_debug (void) { return wcsbth_flex_debug; } void wcsbthset_debug (int bdebug ) { wcsbth_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from wcsbthlex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT wcsbthin = stdin; wcsbthout = stdout; #else wcsbthin = (FILE *) 0; wcsbthout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * wcsbthlex_init() */ return 0; } /* wcsbthlex_destroy is for both reentrant and non-reentrant scanners. */ int wcsbthlex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ wcsbth_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; wcsbthpop_buffer_state(); } /* Destroy the stack itself. */ wcsbthfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * wcsbthlex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *wcsbthalloc (yy_size_t size ) { return (void *) malloc( size ); } void *wcsbthrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void wcsbthfree (void * ptr ) { free( (char *) ptr ); /* see wcsbthrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 2081 "wcsbth.l" /*---------------------------------------------------------------------------- * Perform first-pass tasks: * * 1) Count the number of coordinate axes in each of the 27 possible alternate * image-header coordinate representations. Also count the number of PVi_ma * and PSi_ma keywords in each representation. * * 2) Determine the number of binary table columns that have an image array * with a coordinate representation (up to 999), and count the number of * coordinate axes in each of the 27 possible alternates. Also count the * number of iVn_ma and iSn_ma keywords in each representation. * * 3) Determine the number of alternate pixel list coordinate representations * (up to 27) and the table columns associated with each. Also count the * number of TVn_ma and TSn_ma keywords in each representation. * * In the first pass alts->arridx[icol][27] is used to determine the number of * axes in each of 27 possible image-header coordinate descriptions (icol == 0) * and each of the 27 possible coordinate representations for an image array in * each column. * * The elements of alts->pixlist[icol] are used as bit arrays to flag which of * the 27 possible pixel list coordinate representations are associated with * each table column. *---------------------------------------------------------------------------*/ int wcsbth_pass1( int keytype, int i, int j, int n, int k, char a, char ptype, struct wcsbth_alts *alts) { int ialt, icol, mask, ncol; if (a == 0) { /* Keywords such as DATE-OBS go along for the ride. */ return 0; } ncol = alts->ncol; /* Do we need to allocate memory for alts? */ if (alts->arridx == 0x0) { if (ncol == 0) { /* Can only happen if TFIELDS is missing or out-of-sequence. If n and k are both zero then we may be processing an image header so leave ncol alone - the array will be realloc'd later if required. */ if (n || k) { /* The header is mangled, assume the worst. */ ncol = 999; } } if (!(alts->arridx = calloc((1 + ncol)*27, sizeof(short int))) || !(alts->npv = calloc((1 + ncol)*27, sizeof(unsigned char))) || !(alts->nps = calloc((1 + ncol)*27, sizeof(unsigned char))) || !(alts->pixlist = calloc((1 + ncol), sizeof(unsigned int)))) { if (alts->arridx) free(alts->arridx); if (alts->npv) free(alts->npv); if (alts->nps) free(alts->nps); if (alts->pixlist) free(alts->pixlist); return 2; } alts->ncol = ncol; } else if (n > ncol || k > ncol) { /* Can only happen if TFIELDS or the WCS keyword is wrong; carry on. */ ncol = 999; if (!(alts->arridx = realloc(alts->arridx, 27*(1 + ncol)*sizeof(short int))) || !(alts->npv = realloc(alts->npv, 27*(1 + ncol)*sizeof(unsigned char))) || !(alts->nps = realloc(alts->nps, 27*(1 + ncol)*sizeof(unsigned char))) || !(alts->pixlist = realloc(alts->pixlist, (1 + ncol)*sizeof(unsigned int)))) { if (alts->arridx) free(alts->arridx); if (alts->npv) free(alts->npv); if (alts->nps) free(alts->nps); if (alts->pixlist) free(alts->pixlist); return 2; } /* Since realloc() doesn't initialize the extra memory. */ for (icol = (1 + alts->ncol); icol < (1 + ncol); icol++) { for (ialt = 0; ialt < 27; ialt++) { alts->arridx[icol][ialt] = 0; alts->npv[icol][ialt] = 0; alts->nps[icol][ialt] = 0; alts->pixlist[icol] = 0; } } alts->ncol = ncol; } ialt = 0; if (a != ' ') { ialt = a - 'A' + 1; } /* A BINTAB keytype such as LONPna, in conjunction with an IMGAXIS keytype causes a table column to be recognized as an image array. */ if (keytype & IMGHEAD || keytype & BIMGARR) { /* n == 0 is expected for IMGHEAD keywords. */ if (i == 0 && j == 0) { if (alts->arridx[n][ialt] == 0) { /* Flag that an auxiliary keyword was seen. */ alts->arridx[n][ialt] = -1; } } else { /* Record the maximum axis number found. */ if (alts->arridx[n][ialt] < i) { alts->arridx[n][ialt] = i; } if (alts->arridx[n][ialt] < j) { alts->arridx[n][ialt] = j; } } if (ptype == 'v') { alts->npv[n][ialt]++; } else if (ptype == 's') { alts->nps[n][ialt]++; } } /* BINTAB keytypes, which apply both to pixel lists as well as binary table image arrays, never contribute to recognizing a table column as a pixel list axis. A PIXLIST keytype is required for that. */ if (keytype == PIXLIST) { mask = 1 << ialt; /* n > 0 for PIXLIST keytypes. */ alts->pixlist[n] |= mask; if (k) alts->pixlist[k] |= mask; /* Used as a flag over all columns. */ alts->pixlist[0] |= mask; if (ptype == 'v') { alts->pixnpv[ialt]++; } else if (ptype == 's') { alts->pixnps[ialt]++; } } return 0; } /*---------------------------------------------------------------------------- * Perform initializations at the end of the first pass: * * 1) Determine the required number of wcsprm structs, allocate memory for * an array of them and initialize each one. *---------------------------------------------------------------------------*/ int wcsbth_init1( struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs) { int ialt, icol, inherit[27], ix, mask, ncol, npsmax, npvmax, status = 0; struct wcsprm *wcsp; if (alts->arridx == 0x0) { *nwcs = 0; return 0; } /* Determine the number of axes in each pixel list representation. */ ncol = alts->ncol; for (ialt = 0, mask = 1; ialt < 27; ialt++, mask <<= 1) { alts->pixidx[ialt] = 0; if (alts->pixlist[0] | mask) { for (icol = 1; icol <= ncol; icol++) { if (alts->pixlist[icol] & mask) { alts->pixidx[ialt]++; } } } } /* Find the total number of coordinate representations. */ *nwcs = 0; alts->imgherit = 0; for (ialt = 0; ialt < 27; ialt++) { inherit[ialt] = 0; for (icol = 1; icol <= ncol; icol++) { if (alts->arridx[icol][ialt] < 0) { /* No BIMGARR keytype but there's at least one BINTAB. */ if (alts->arridx[0][ialt] > 0) { /* There is an IMGAXIS keytype that we will inherit, so count this representation. */ alts->arridx[icol][ialt] = alts->arridx[0][ialt]; } else { alts->arridx[icol][ialt] = 0; } } if (alts->arridx[icol][ialt]) { if (alts->arridx[0][ialt]) { /* All IMGHEAD keywords are inherited for this ialt. */ inherit[ialt] = 1; if (alts->arridx[icol][ialt] < alts->arridx[0][ialt]) { /* The extra axes are also inherited. */ alts->arridx[icol][ialt] = alts->arridx[0][ialt]; } } (*nwcs)++; } } /* Count every "a" found in any IMGHEAD keyword... */ if (alts->arridx[0][ialt]) { if (inherit[ialt]) { /* ...but not if the IMGHEAD keywords will be inherited. */ alts->arridx[0][ialt] = 0; alts->imgherit = 1; } else { (*nwcs)++; } } /* We need a struct for every "a" found in a PIXLIST keyword. */ if (alts->pixidx[ialt]) { (*nwcs)++; } } if (*nwcs) { /* Allocate memory for the required number of wcsprm structs. */ if (!(*wcs = calloc(*nwcs, sizeof(struct wcsprm)))) { return 2; } /* Record the current values of NPVMAX and NPSMAX. */ npvmax = wcsnpv(-1); npsmax = wcsnps(-1); /* Initialize each wcsprm struct. */ wcsp = *wcs; *nwcs = 0; for (icol = 0; icol <= ncol; icol++) { for (ialt = 0; ialt < 27; ialt++) { if (alts->arridx[icol][ialt]) { /* Image-header representations that are not for inheritance (icol == 0) or binary table image array representations. */ wcsp->flag = -1; wcsnpv(alts->npv[icol][ialt]); wcsnps(alts->nps[icol][ialt]); if ((status = wcsini(1, (int)(alts->arridx[icol][ialt]), wcsp))) { wcsvfree(nwcs, wcs); break; } /* Record the alternate version code. */ if (ialt) { wcsp->alt[0] = 'A' + ialt - 1; } /* Record the table column number. */ wcsp->colnum = icol; /* On the second pass alts->arridx[icol][27] indexes the array of wcsprm structs. */ alts->arridx[icol][ialt] = (*nwcs)++; wcsp++; } else { /* Signal that this column has no WCS for this "a". */ alts->arridx[icol][ialt] = -1; } } } for (ialt = 0; ialt < 27; ialt++) { if (alts->pixidx[ialt]) { /* Pixel lists representations. */ wcsp->flag = -1; wcsnpv(alts->pixnpv[ialt]); wcsnps(alts->pixnps[ialt]); if ((status = wcsini(1, (int)(alts->pixidx[ialt]), wcsp))) { wcsvfree(nwcs, wcs); break; } /* Record the alternate version code. */ if (ialt) { wcsp->alt[0] = 'A' + ialt - 1; } /* Record the pixel list column numbers. */ mask = (1 << ialt); for (icol = 1, ix = 0; icol <= ncol; icol++) { if (alts->pixlist[icol] & mask) { wcsp->colax[ix++] = icol; } } /* alts->pixidx[] indexes the array of wcsprm structs. */ alts->pixidx[ialt] = (*nwcs)++; wcsp++; } else { /* Signal that this column is not a pixel list axis for this "a". */ alts->pixidx[ialt] = -1; } } /* Restore the original values of NPVMAX and NPSMAX. */ wcsnpv(npvmax); wcsnps(npsmax); } return status; } /*---------------------------------------------------------------------------- * Return a pointer to the next wcsprm struct for a particular column number * and alternate. *---------------------------------------------------------------------------*/ struct wcsprm *wcsbth_idx( struct wcsprm *wcs, struct wcsbth_alts *alts, int keytype, int n, char a) { const char as[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int iwcs; if (!wcs) return 0x0; iwcs = -1; for (; iwcs < 0 && alts->ialt < 27; alts->ialt++) { /* Note that a == 0 applies to every alternate, otherwise this loop simply determines the appropriate value of alts->ialt. */ if (a && a != as[alts->ialt]) continue; if (keytype & (IMGHEAD | BIMGARR)) { for (; iwcs < 0 && alts->icol <= alts->ncol; alts->icol++) { /* Image header keywords, n == 0, apply to all columns, otherwise this loop simply determines the appropriate value of alts->icol. */ if (n && n != alts->icol) continue; iwcs = alts->arridx[alts->icol][alts->ialt]; } /* Break out of the loop to stop alts->ialt from being incremented. */ if (iwcs >= 0) break; /* Start from scratch for the next alts->ialt. */ alts->icol = 0; } if (keytype & (IMGAUX | PIXLIST)) { iwcs = alts->pixidx[alts->ialt]; } } return (iwcs >= 0) ? (wcs + iwcs) : 0x0; } /*---------------------------------------------------------------------------- * Return the axis number associated with the specified column number in a * particular pixel list coordinate representation. *---------------------------------------------------------------------------*/ int wcsbth_colax( struct wcsprm *wcs, struct wcsbth_alts *alts, int n, char a) { int ix; struct wcsprm *wcsp; if (!wcs) return 0; wcsp = wcs; if (a != ' ') { wcsp += alts->pixidx[a-'A'+1]; } for (ix = 0; ix < wcsp->naxis; ix++) { if (wcsp->colax[ix] == n) { return ++ix; } } return 0; } /*---------------------------------------------------------------------------- * Interpret EPOCH keywords. *---------------------------------------------------------------------------*/ int wcsbth_epoch(void *wptr) { double *equinox; /* If EQUINOXa is currently undefined then set it from EPOCHa. */ equinox = (double *)wptr; if (undefined(*equinox)) { sscanf(wcsbthtext, "%lf", equinox); } return 0; } /*---------------------------------------------------------------------------- * Interpret VSOURCE keywords. *---------------------------------------------------------------------------*/ int wcsbth_vsource(void *wptr) { double beta, c = 299792458.0, vsource, *zsource; /* If ZSOURCEa is currently undefined then set it from VSOURCEa. */ zsource = (double *)wptr; if (undefined(*zsource)) { sscanf(wcsbthtext, "%lf", &vsource); /* Convert relativistic Doppler velocity to redshift. */ beta = vsource/c; *zsource = (1.0 + beta)/sqrt(1.0 - beta*beta) - 1.0; } return 0; } /*---------------------------------------------------------------------------- * Tie up loose ends. *---------------------------------------------------------------------------*/ int wcsbth_final( struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs) { int ialt, status; if (alts->arridx) free(alts->arridx); if (alts->npv) free(alts->npv); if (alts->nps) free(alts->nps); if (alts->pixlist) free(alts->pixlist); for (ialt = 0; ialt < *nwcs; ialt++) { /* Interpret -TAB header keywords. */ if ((status = wcstab(*wcs+ialt))) { wcsvfree(nwcs, wcs); return status; } } return 0; } pywcs-1.12/wcslib/C/flexed/wcspih.c0000644001153600020070000156073712310355626021246 0ustar cslocumSTSCI\science00000000000000#line 2 "wcspih.c" #line 4 "wcspih.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define yy_create_buffer wcspih_create_buffer #define yy_delete_buffer wcspih_delete_buffer #define yy_flex_debug wcspih_flex_debug #define yy_init_buffer wcspih_init_buffer #define yy_flush_buffer wcspih_flush_buffer #define yy_load_buffer_state wcspih_load_buffer_state #define yy_switch_to_buffer wcspih_switch_to_buffer #define yyin wcspihin #define yyleng wcspihleng #define yylex wcspihlex #define yylineno wcspihlineno #define yyout wcspihout #define yyrestart wcspihrestart #define yytext wcspihtext #define yywrap wcspihwrap #define yyalloc wcspihalloc #define yyrealloc wcspihrealloc #define yyfree wcspihfree #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE wcspihrestart(wcspihin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int wcspihleng; extern FILE *wcspihin, *wcspihout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up wcspihtext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up wcspihtext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via wcspihrestart()), so that the user can continue scanning by * just pointing wcspihin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when wcspihtext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int wcspihleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow wcspihwrap()'s to do buffer switches * instead of setting up a fresh wcspihin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void wcspihrestart (FILE *input_file ); void wcspih_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE wcspih_create_buffer (FILE *file,int size ); void wcspih_delete_buffer (YY_BUFFER_STATE b ); void wcspih_flush_buffer (YY_BUFFER_STATE b ); void wcspihpush_buffer_state (YY_BUFFER_STATE new_buffer ); void wcspihpop_buffer_state (void ); static void wcspihensure_buffer_stack (void ); static void wcspih_load_buffer_state (void ); static void wcspih_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER wcspih_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE wcspih_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE wcspih_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE wcspih_scan_bytes (yyconst char *bytes,int len ); void *wcspihalloc (yy_size_t ); void *wcspihrealloc (void *,yy_size_t ); void wcspihfree (void * ); #define yy_new_buffer wcspih_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ wcspihensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ wcspih_create_buffer(wcspihin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ wcspihensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ wcspih_create_buffer(wcspihin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define wcspihwrap(n) 1 #define YY_SKIP_YYWRAP typedef char YY_CHAR; FILE *wcspihin = (FILE *) 0, *wcspihout = (FILE *) 0; typedef int yy_state_type; extern int wcspihlineno; int wcspihlineno = 1; extern char *wcspihtext; #define yytext_ptr wcspihtext static yyconst flex_int16_t yy_nxt[][128] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 }, { 33, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 37, 38, 35, 35, 35, 35, 35, 35, 39, 40, 41, 42, 43, 35, 44, 45, 35, 35, 46, 47, 35, 35, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35 }, { 33, 49, 49, 49, 49, 49, 49, 49, 49, 49, 34, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49 }, { 33, 49, 49, 49, 49, 49, 49, 49, 49, 49, 34, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49 }, { 33, 51, 51, 51, 51, 51, 51, 51, 51, 51, 34, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51 }, { 33, 51, 51, 51, 51, 51, 51, 51, 51, 51, 34, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51 }, { 33, 53, 53, 53, 53, 53, 53, 53, 53, 53, 34, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53 }, { 33, 53, 53, 53, 53, 53, 53, 53, 53, 53, 34, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53 }, { 33, 55, 55, 55, 55, 55, 55, 55, 55, 55, 34, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55 }, { 33, 55, 55, 55, 55, 55, 55, 55, 55, 55, 34, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55 }, { 33, 58, 58, 58, 58, 58, 58, 58, 58, 58, 34, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58 }, { 33, 58, 58, 58, 58, 58, 58, 58, 58, 58, 34, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58 }, { 33, 60, 60, 60, 60, 60, 60, 60, 60, 60, 34, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 }, { 33, 60, 60, 60, 60, 60, 60, 60, 60, 60, 34, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 }, { 33, 62, 62, 62, 62, 62, 62, 62, 62, 62, 34, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62 }, { 33, 62, 62, 62, 62, 62, 62, 62, 62, 62, 34, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62 }, { 33, 63, 63, 63, 63, 63, 63, 63, 63, 63, 34, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }, { 33, 63, 63, 63, 63, 63, 63, 63, 63, 63, 34, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 }, { 33, 65, 65, 65, 65, 65, 65, 65, 65, 65, 34, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 65, 66, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65 }, { 33, 65, 65, 65, 65, 65, 65, 65, 65, 65, 34, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 65, 66, 65, 65, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65 }, { 33, 68, 68, 68, 68, 68, 68, 68, 68, 68, 34, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 68, 69, 70, 68, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68 }, { 33, 68, 68, 68, 68, 68, 68, 68, 68, 68, 34, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 68, 69, 70, 68, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68 }, { 33, 72, 72, 72, 72, 72, 72, 72, 72, 72, 34, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { 33, 72, 72, 72, 72, 72, 72, 72, 72, 72, 34, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72 }, { 33, 74, 74, 74, 74, 74, 74, 74, 74, 74, 34, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 76, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74 }, { 33, 74, 74, 74, 74, 74, 74, 74, 74, 74, 34, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 76, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74 }, { 33, 77, 77, 77, 77, 77, 77, 77, 77, 77, 34, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 }, { 33, 77, 77, 77, 77, 77, 77, 77, 77, 77, 34, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 }, { 33, 78, 78, 78, 78, 78, 78, 78, 78, 78, 34, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78 }, { 33, 78, 78, 78, 78, 78, 78, 78, 78, 78, 34, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78 }, { 33, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79 }, { 33, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79 }, { -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33 }, { 33, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34 }, { 33, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35 }, { 33, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 81, -36, -36, -36, -36, -36, -36, -36, -36, -36, 82, -36, -36, -36, 83, 84, 85, 86, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36 }, { 33, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, 87, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37 }, { 33, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 88, -38, 89, 90, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38 }, { 33, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, 91, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, 92, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39 }, { 33, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 93, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40 }, { 33, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 94, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41 }, { 33, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, 95, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42 }, { 33, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 96, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 97, 98, -43, -43, 99, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43 }, { 33, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 100, -44, -44, -44, 101, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44 }, { 33, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 102, -45, -45, 103, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45 }, { 33, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 104, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 105, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46 }, { 33, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 106, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47 }, { 33, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 107, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48 }, { 33, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49 }, { 33, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 108, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, -50, -50, -50, -50, -50, -50, -50, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50 }, { 33, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51 }, { 33, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 110, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52 }, { 33, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53 }, { 33, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 111, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, -54, -54, -54, -54, -54, -54, -54, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54 }, { 33, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55 }, { 33, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56 }, { 33, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 115, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57 }, { 33, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58 }, { 33, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, 117, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59 }, { 33, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60 }, { 33, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61 }, { 33, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62 }, { 33, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63 }, { 33, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, 118, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64 }, { 33, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65 }, { 33, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66 }, { 33, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67 }, { 33, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68 }, { 33, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, 120, -69, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69 }, { 33, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70 }, { 33, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, 123, -71, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, 125, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, 125, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71 }, { 33, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72 }, { 33, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126 }, { 33, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74 }, { 33, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, 128, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, 129, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75 }, { 33, 130, 130, 130, 130, 130, 130, 130, 130, 130, -76, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130 }, { 33, 131, 131, 131, 131, 131, 131, 131, 131, 131, -77, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131 }, { 33, 132, 132, 132, 132, 132, 132, 132, 132, 132, -78, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132 }, { 33, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133 }, { 33, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80 }, { 33, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, 135, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81 }, { 33, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, 136, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82 }, { 33, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, 137, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, 138, 139, -83, -83, -83, -83, -83, 140, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83 }, { 33, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, 141, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84 }, { 33, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, 142, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85 }, { 33, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, 143, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86 }, { 33, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, 144, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87 }, { 33, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, 145, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88 }, { 33, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, 146, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89 }, { 33, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, 147, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90 }, { 33, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, 148, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91 }, { 33, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, 149, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92 }, { 33, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 150, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93 }, { 33, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, 151, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94 }, { 33, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, 152, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95 }, { 33, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96 }, { 33, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, 153, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97 }, { 33, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98 }, { 33, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99 }, { 33, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, 154, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100 }, { 33, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, 155, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101 }, { 33, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, 156, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102 }, { 33, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, 157, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103 }, { 33, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, 158, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104 }, { 33, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, 159, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105 }, { 33, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, 160, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106 }, { 33, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, 161, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107 }, { 33, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, 162, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108 }, { 33, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, 163, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, -109, -109, -109, -109, -109, -109, -109, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109 }, { 33, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, 165, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110 }, { 33, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, 166, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111 }, { 33, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, 167, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, -112, -112, -112, -112, -112, -112, -112, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112 }, { 33, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113 }, { 33, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, 171, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114 }, { 33, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, 172, 172, 172, 172, 172, 172, 172, 172, 172, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115 }, { 33, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, 174, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116 }, { 33, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117 }, { 33, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, 118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118 }, { 33, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119 }, { 33, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120 }, { 33, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, 123, -121, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, 125, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, 125, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121 }, { 33, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, 125, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, 125, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122 }, { 33, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, 125, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, 125, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123 }, { 33, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, 123, -124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, 125, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, 125, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124 }, { 33, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, 178, -125, 178, -125, -125, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125 }, { 33, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126 }, { 33, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 126, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127 }, { 33, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, 128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, 129, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128 }, { 33, 130, 130, 130, 130, 130, 130, 130, 130, 130, -129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130 }, { 33, 130, 130, 130, 130, 130, 130, 130, 130, 130, -130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130 }, { 33, 131, 131, 131, 131, 131, 131, 131, 131, 131, -131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131 }, { 33, 132, 132, 132, 132, 132, 132, 132, 132, 132, -132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132 }, { 33, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133 }, { 33, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134 }, { 33, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, 180, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135 }, { 33, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, 181, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136 }, { 33, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, 182, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137 }, { 33, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 183, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138 }, { 33, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, 184, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139 }, { 33, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, 185, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140 }, { 33, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, 186, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141 }, { 33, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, 187, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142 }, { 33, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, 188, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143 }, { 33, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, 189, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144 }, { 33, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, 190, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145 }, { 33, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, 191, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146 }, { 33, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, 192, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147 }, { 33, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, 193, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148 }, { 33, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, 194, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149 }, { 33, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, 195, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150 }, { 33, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, 196, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151 }, { 33, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 197, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152 }, { 33, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 198, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153 }, { 33, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 199, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154 }, { 33, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 200, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155 }, { 33, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, 201, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156 }, { 33, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, 202, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157 }, { 33, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, 203, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, 204, -158, -158, 205, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158 }, { 33, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, 206, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159 }, { 33, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, 207, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, 208, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160 }, { 33, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, 209, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161 }, { 33, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162 }, { 33, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163 }, { 33, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164 }, { 33, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165 }, { 33, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166 }, { 33, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167 }, { 33, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168 }, { 33, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169 }, { 33, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, 212, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170 }, { 33, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, 213, 213, 213, 213, 213, 213, 213, 213, 213, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171 }, { 33, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 214, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, -172, -172, -172, -172, -172, -172, -172, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172 }, { 33, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 217, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173 }, { 33, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 218, 219, 219, 219, 219, 219, 219, 219, 219, 219, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174 }, { 33, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, 220, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175 }, { 33, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, 220, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, -176, -176, -176, -176, -176, -176, -176, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176 }, { 33, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, 125, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, 125, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177 }, { 33, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178 }, { 33, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179 }, { 33, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, 222, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180 }, { 33, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, 223, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181 }, { 33, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, 224, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182 }, { 33, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, 225, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183 }, { 33, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, 226, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184 }, { 33, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, 227, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185 }, { 33, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, 228, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186 }, { 33, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, 229, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187 }, { 33, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, 230, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188 }, { 33, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, 231, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189 }, { 33, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, 232, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190 }, { 33, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, 233, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191 }, { 33, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 234, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192 }, { 33, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, 235, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193 }, { 33, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, 236, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194 }, { 33, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, 237, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, 238, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195 }, { 33, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, 239, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196 }, { 33, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, 240, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197 }, { 33, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, 241, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198 }, { 33, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, 242, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, 243, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199 }, { 33, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 244, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 245, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200 }, { 33, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, 246, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201 }, { 33, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, 247, -202, -202, -202, 248, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202 }, { 33, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, 249, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203 }, { 33, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, 250, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204 }, { 33, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, 251, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205 }, { 33, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, 252, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206 }, { 33, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, 253, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207 }, { 33, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, 254, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208 }, { 33, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, 255, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209 }, { 33, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210 }, { 33, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, 257, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211 }, { 33, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, 258, 258, 258, 258, 258, 258, 258, 258, 258, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212 }, { 33, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, 259, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, -213, -213, -213, -213, -213, -213, -213, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213 }, { 33, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, 261, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214 }, { 33, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, 262, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, -215, -215, -215, -215, -215, -215, -215, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215 }, { 33, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, 264, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216 }, { 33, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, 265, 266, 266, 266, 266, 266, 266, 266, 266, 266, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217 }, { 33, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, 267, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218 }, { 33, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, 267, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, -219, -219, -219, -219, -219, -219, -219, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219 }, { 33, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, 269, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220 }, { 33, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, 270, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, -221, -221, -221, -221, -221, -221, -221, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221 }, { 33, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222 }, { 33, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223 }, { 33, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224 }, { 33, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225 }, { 33, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226 }, { 33, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227 }, { 33, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228 }, { 33, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229 }, { 33, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230 }, { 33, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, 272, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, 273, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231 }, { 33, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, 274, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232 }, { 33, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, 275, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233 }, { 33, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, 276, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234 }, { 33, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, 277, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235 }, { 33, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, 278, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236 }, { 33, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, 279, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237 }, { 33, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 280, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238 }, { 33, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, 281, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239 }, { 33, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, 282, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, -240 }, { 33, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241 }, { 33, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, 283, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242 }, { 33, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, 284, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243 }, { 33, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, 285, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244 }, { 33, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, 286, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245 }, { 33, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, 287, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246 }, { 33, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, 288, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247 }, { 33, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, 289, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248 }, { 33, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, 290, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249 }, { 33, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, 291, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250 }, { 33, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, 292, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251 }, { 33, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, 293, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252 }, { 33, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, 294, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253 }, { 33, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, 295, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254 }, { 33, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, 296, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255 }, { 33, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256 }, { 33, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, 298, 298, 298, 298, 298, 298, 298, 298, 298, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257 }, { 33, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, 299, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, -258, -258, -258, -258, -258, -258, -258, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258 }, { 33, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, 301, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259 }, { 33, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, 302, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, -260, -260, -260, -260, -260, -260, -260, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, 302, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260 }, { 33, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, 304, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261 }, { 33, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, 305, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262 }, { 33, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, 306, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, -263, -263, -263, -263, -263, -263, -263, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263 }, { 33, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264 }, { 33, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, 309, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265 }, { 33, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, 309, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, -266, -266, -266, -266, -266, -266, -266, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266 }, { 33, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, 311, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267 }, { 33, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, 312, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, -268, -268, -268, -268, -268, -268, -268, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268 }, { 33, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, 314, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269 }, { 33, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, 315, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270 }, { 33, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, 316, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, -271, -271, -271, -271, -271, -271, -271, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271 }, { 33, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, 318, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272 }, { 33, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, 319, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273 }, { 33, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, 320, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274 }, { 33, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, 321, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275 }, { 33, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, 322, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276 }, { 33, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, 323, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277 }, { 33, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, 324, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278 }, { 33, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, 325, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279 }, { 33, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, 326, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280 }, { 33, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, 327, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281 }, { 33, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, 328, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282 }, { 33, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, 329, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283 }, { 33, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, 330, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284 }, { 33, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, 331, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, 332, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285 }, { 33, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, 333, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286 }, { 33, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, 334, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287 }, { 33, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, 335, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288 }, { 33, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, 336, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289 }, { 33, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, 337, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290 }, { 33, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, 338, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291 }, { 33, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, 339, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292 }, { 33, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, 340, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293 }, { 33, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, 341, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294 }, { 33, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, 342, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295 }, { 33, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 343, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296 }, { 33, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297 }, { 33, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298 }, { 33, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299 }, { 33, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300 }, { 33, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301 }, { 33, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302 }, { 33, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303 }, { 33, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304 }, { 33, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305 }, { 33, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306 }, { 33, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307 }, { 33, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308 }, { 33, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309 }, { 33, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310 }, { 33, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311 }, { 33, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312 }, { 33, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313 }, { 33, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314 }, { 33, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315 }, { 33, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316 }, { 33, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317 }, { 33, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, 344, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318 }, { 33, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, 345, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319 }, { 33, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, 346, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320 }, { 33, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, 347, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321 }, { 33, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322 }, { 33, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323 }, { 33, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324 }, { 33, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, 348, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325 }, { 33, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, 349, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326 }, { 33, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, 350, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327 }, { 33, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, 351, 352, 353, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328 }, { 33, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, 354, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329 }, { 33, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330 }, { 33, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, 355, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331 }, { 33, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332 }, { 33, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333 }, { 33, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334 }, { 33, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335 }, { 33, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336 }, { 33, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337 }, { 33, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338 }, { 33, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, 356, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339 }, { 33, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, 357, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340 }, { 33, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, 358, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341 }, { 33, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342 }, { 33, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343 }, { 33, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344 }, { 33, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345 }, { 33, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, 359, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346 }, { 33, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347 }, { 33, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348 }, { 33, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349 }, { 33, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, 360, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350 }, { 33, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351 }, { 33, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352 }, { 33, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353 }, { 33, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354 }, { 33, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355 }, { 33, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356 }, { 33, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357 }, { 33, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, 361, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358 }, { 33, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, 362, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359 }, { 33, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, 363, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360 }, { 33, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, 364, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361 }, { 33, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, 365, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362 }, { 33, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, 366, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, 367, -363, 367, -363, -363, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363 }, { 33, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, 369, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, 370, -364, 370, -364, -364, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364 }, { 33, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, 372, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365 }, { 33, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, 366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, 367, -366, 367, -366, -366, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366 }, { 33, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, -367 }, { 33, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, -368 }, { 33, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, 369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, 370, -369, 370, -369, -369, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, -369 }, { 33, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, -370 }, { 33, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, -371 }, { 33, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, 373, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, -372 }, { 33, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, 374, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, -373 }, { 33, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, 375, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, -374 }, { 33, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, 376, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, -375 }, { 33, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, 377, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, -376 }, { 33, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, 378, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, -377 }, { 33, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, 379, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, -378 }, { 33, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, 380, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, -379 }, { 33, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, 381, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, -380 }, { 33, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, 382, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, -381 }, { 33, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, 383, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, -382 }, { 33, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, 384, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, -383 }, { 33, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, 385, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, -384 }, { 33, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, 386, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, -385 }, { 33, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, 387, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, -386 }, { 33, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, 388, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, -387 }, { 33, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, 389, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, -388 }, { 33, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, 390, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, -389 }, { 33, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, 391, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, -390 }, { 33, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, 392, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, -391 }, { 33, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, 393, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, -392 }, { 33, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, 394, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, -393 }, { 33, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, 395, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, -394 }, { 33, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, 396, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, -395 }, { 33, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, 397, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, -396 }, { 33, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 398, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397 }, { 33, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, 399, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, -398 }, { 33, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, 400, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, -399 }, { 33, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, 401, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, -400 }, { 33, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, 402, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, -401 }, { 33, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, 403, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, -402 }, { 33, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, 404, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, -403 }, { 33, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, 405, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, -404 }, { 33, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, 406, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, -405 }, { 33, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, 407, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, -406 }, { 33, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, 408, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, -407 }, { 33, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, 409, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, -408 }, { 33, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, 410, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, -409 }, { 33, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, 411, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, -410 }, { 33, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, 412, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, -411 }, { 33, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, 413, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, -412 }, { 33, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, 414, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, -413 }, { 33, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, 415, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, -414 }, { 33, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, 416, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, -415 }, { 33, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, 417, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, -416 }, { 33, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, 418, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, -417 }, { 33, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, 419, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418 }, { 33, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, 420, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, -419 }, { 33, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, 421, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, -420 }, { 33, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, 422, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, -421 }, { 33, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, 423, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, -422 }, { 33, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, 424, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, -423 }, { 33, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, 425, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, -424 }, { 33, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, 426, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, -425 }, { 33, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, 427, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, -426 }, { 33, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, 428, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, -427 }, { 33, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, 429, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, -428 }, { 33, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, 430, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, -429 }, { 33, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, 431, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, -430 }, { 33, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, 432, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, -431 }, { 33, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, 433, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, -432 }, { 33, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, 434, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, -433 }, { 33, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, 435, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, -434 }, { 33, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, 436, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, -435 }, { 33, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, 437, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, -436 }, { 33, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, 438, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, -437 }, { 33, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, 439, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, -438 }, { 33, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, 440, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, -439 }, { 33, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, -440 }, } ; static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up wcspihtext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ wcspihleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 94 #define YY_END_OF_BUFFER 95 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[441] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 91, 91, 92, 92, 0, 0, 95, 94, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 63, 63, 79, 79, 47, 47, 59, 59, 59, 77, 77, 66, 64, 65, 81, 81, 83, 83, 82, 85, 85, 85, 84, 87, 87, 90, 89, 88, 91, 92, 94, 93, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 18, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 82, 0, 84, 84, 84, 84, 0, 0, 86, 89, 88, 88, 91, 92, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 78, 44, 45, 46, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 19, 20, 7, 3, 10, 21, 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 57, 53, 56, 50, 51, 55, 48, 49, 52, 54, 76, 72, 75, 69, 70, 74, 67, 68, 71, 73, 0, 0, 0, 0, 25, 12, 11, 0, 0, 0, 0, 0, 31, 0, 13, 15, 33, 34, 35, 36, 37, 0, 0, 0, 40, 41, 22, 23, 0, 24, 26, 27, 0, 28, 29, 30, 32, 14, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; static yyconst yy_state_type yy_NUL_trans[441] = { 0, 34, 35, 49, 49, 51, 51, 53, 53, 55, 55, 58, 58, 60, 60, 62, 62, 63, 63, 65, 65, 68, 68, 72, 72, 74, 74, 77, 77, 78, 78, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 130, 131, 132, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 130, 130, 131, 132, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ; extern int wcspih_flex_debug; int wcspih_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *wcspihtext; #line 1 "wcspih.l" /*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcspih.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * wcspih.l is a Flex description file containing the definition of a lexical * scanner for parsing the WCS keyrecords from a FITS primary image or image * extension header. * * wcspih.l requires Flex v2.5.4 or later. Refer to wcshdr.h for a description * of the user interface and operating notes. * * Implementation notes * -------------------- * Use of the WCSAXESa keyword is not mandatory. Its default value is "the * larger of NAXIS and the largest index of these keywords [i.e. CRPIXj, PCi_j * or CDi_j, CDELTi, CTYPEi, CRVALi, and CUNITi] found in the FITS header". * Consequently the definition of WCSAXESa effectively invalidates the use of * NAXIS for determining the number of coordinate axes and forces a preliminary * pass through the header to determine the "largest index" in headers where * WCSAXESa was omitted. * * Furthermore, since the use of WCSAXESa is optional, there is no way to * determine the number of coordinate representations (the "a" value) other * than by parsing all of the WCS keywords in the header; even if WCSAXESa was * specified for some representations it cannot be known in advance whether it * was specified for all of those present in the header. * * Hence the definition of WCSAXESa forces the scanner to be implemented in two * passes. The first pass is used to determine the number of coordinate * representations (up to 27) and the number of coordinate axes in each. * Effectively WCSAXESa is ignored unless it exceeds the "largest index" in * which case the keywords for the extra axes assume their default values. The * number of PVi_ma and PSi_ma keywords in each representation is also counted * in the first pass. * * On completion of the first pass, memory is allocated for an array of the * required number of wcsprm structs and each of these is initialized * appropriately. These structs are filled in the second pass. * * The parser does not check for duplicated keywords, it accepts the last * encountered. * *===========================================================================*/ /* Options. */ /* Indices for parameterized keywords. */ /* Alternate coordinate system identifier. */ /* Keyvalue data types. */ /* Exclusive start states. */ #line 105 "wcspih.l" #include #include #include #include #include #include "wcs.h" #include "wcshdr.h" #include "wcsmath.h" #define INTEGER 0 #define FLOAT 1 #define STRING 2 #define YY_DECL int wcspih(char *header, int nkeyrec, int relax, int ctrl, \ int *nreject, int *nwcs, struct wcsprm **wcs) #define YY_INPUT(inbuff, count, bufsize) \ { \ if (wcspih_nkeyrec) { \ strncpy(inbuff, wcspih_hdr, 80); \ inbuff[80] = '\n'; \ wcspih_hdr += 80; \ wcspih_nkeyrec--; \ count = 81; \ } else { \ count = YY_NULL; \ } \ } /* These global variables are required by YY_INPUT. */ char *wcspih_hdr; int wcspih_nkeyrec; int wcspih_final(int alts[], double epoch[], double vsource[], int *nwcs, struct wcsprm **wcs); int wcspih_inits(int naxis, int alts[], int npv[], int nps[], int *nwcs, struct wcsprm **wcs); void wcspih_naxes(int naxis, int i, int j, char a, int alts[], int *npptr); /* Used in preempting the call to exit() by yy_fatal_error(). */ jmp_buf wcspih_abort_jmp_env; #define exit(status) longjmp(wcspih_abort_jmp_env, status) #line 8283 "wcspih.c" #define INITIAL 0 #define CROTAi 1 #define PROJPn 2 #define CCCCCia 3 #define CCi_ja 4 #define CCi_ma 5 #define CCCCCCCa 6 #define CCCCCCCC 7 #define VALUE 8 #define INTEGER_VAL 9 #define FLOAT_VAL 10 #define STRING_VAL 11 #define COMMENT 12 #define DISCARD 13 #define ERROR 14 #define FLUSH 15 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int wcspihlex_destroy (void ); int wcspihget_debug (void ); void wcspihset_debug (int debug_flag ); YY_EXTRA_TYPE wcspihget_extra (void ); void wcspihset_extra (YY_EXTRA_TYPE user_defined ); FILE *wcspihget_in (void ); void wcspihset_in (FILE * in_str ); FILE *wcspihget_out (void ); void wcspihset_out (FILE * out_str ); int wcspihget_leng (void ); char *wcspihget_text (void ); int wcspihget_lineno (void ); void wcspihset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int wcspihwrap (void ); #else extern int wcspihwrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( wcspihtext, wcspihleng, 1, wcspihout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ errno=0; \ while ( (result = read( fileno(wcspihin), (char *) buf, max_size )) < 0 ) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(wcspihin); \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int wcspihlex (void); #define YY_DECL int wcspihlex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after wcspihtext and wcspihleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ if ( wcspihleng > 0 ) \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ (wcspihtext[wcspihleng - 1] == '\n'); \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 151 "wcspih.l" /* Keyword indices, as used in the WCS papers, e.g. PCi_ja, PVi_ma. */ char a; int i, j, m; char *cptr, *errmsg, errtxt[80], *hptr, *keep; int altlin, alts[27], ialt, idx, ipx, ix, jx, naxis, *npptr, nps[27], npv[27], pass, status, valtype, voff; double epoch[27], vsource[27]; void *vptr, *wptr; struct wcsprm *wcsp; int wcspihlex_destroy(void); naxis = 0; for (ialt = 0; ialt < 27; ialt++) { alts[ialt] = 0; npv[ialt] = 0; nps[ialt] = 0; epoch[ialt] = UNDEFINED; vsource[ialt] = UNDEFINED; } /* Parameters used to implement YY_INPUT. */ wcspih_hdr = header; wcspih_nkeyrec = nkeyrec; /* Our handle on the input stream. */ hptr = header; keep = 0x0; *nreject = 0; /* Keyword parameters. */ i = j = m = 0; a = ' '; /* For decoding the keyvalue. */ valtype = -1; idx = -1; vptr = 0x0; /* For keywords that require special handling. */ altlin = 0; npptr = 0x0; /* The data structures produced. */ *nwcs = 0; *wcs = 0x0; pass = 1; /* Return here via longjmp() invoked by yy_fatal_error(). */ if (setjmp(wcspih_abort_jmp_env)) { return 3; } BEGIN(INITIAL); #line 8531 "wcspih.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! wcspihin ) wcspihin = stdin; if ( ! wcspihout ) wcspihout = stdout; if ( ! YY_CURRENT_BUFFER ) { wcspihensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = wcspih_create_buffer(wcspihin,YY_BUF_SIZE ); } wcspih_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of wcspihtext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); yy_match: while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) { if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } ++yy_cp; } yy_current_state = -yy_current_state; yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos) + 1; yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 209 "wcspih.l" { if (pass == 1) { sscanf(wcspihtext, "NAXIS = %d", &naxis); } if (naxis < 0) { errmsg = errtxt; sprintf(errmsg, "Negative value of NAXIS ignored: %d", naxis); naxis = 0; BEGIN(ERROR); } else { BEGIN(DISCARD); } } YY_BREAK case 2: YY_RULE_SETUP #line 224 "wcspih.l" { if (pass == 1) { sscanf(wcspihtext, "WCSAXES%c= %d", &a, &i); wcspih_naxes(naxis, i, 0, a, alts, 0); } BEGIN(FLUSH); } YY_BREAK case 3: YY_RULE_SETUP #line 232 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->crpix); BEGIN(CCCCCia); } YY_BREAK case 4: YY_RULE_SETUP #line 238 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->pc); altlin = 1; BEGIN(CCi_ja); } YY_BREAK case 5: YY_RULE_SETUP #line 245 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->cd); altlin = 2; BEGIN(CCi_ja); } YY_BREAK case 6: YY_RULE_SETUP #line 252 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->cdelt); BEGIN(CCCCCia); } YY_BREAK case 7: YY_RULE_SETUP #line 258 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->crota); altlin = 4; BEGIN(CROTAi); } YY_BREAK case 8: YY_RULE_SETUP #line 265 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = &((*wcs)->cunit); BEGIN(CCCCCia); } YY_BREAK case 9: YY_RULE_SETUP #line 271 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = &((*wcs)->ctype); BEGIN(CCCCCia); } YY_BREAK case 10: YY_RULE_SETUP #line 277 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->crval); BEGIN(CCCCCia); } YY_BREAK case 11: YY_RULE_SETUP #line 283 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->lonpole); BEGIN(CCCCCCCa); } YY_BREAK case 12: YY_RULE_SETUP #line 289 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->latpole); BEGIN(CCCCCCCa); } YY_BREAK case 13: YY_RULE_SETUP #line 295 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->restfrq); BEGIN(CCCCCCCa); } YY_BREAK case 14: YY_RULE_SETUP #line 301 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->restfrq); unput(' '); BEGIN(CCCCCCCa); } YY_BREAK case 15: YY_RULE_SETUP #line 308 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->restwav); BEGIN(CCCCCCCa); } YY_BREAK case 16: YY_RULE_SETUP #line 314 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->pv); npptr = npv; BEGIN(CCi_ma); } YY_BREAK case 17: YY_RULE_SETUP #line 321 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->pv); npptr = npv; BEGIN(PROJPn); } YY_BREAK case 18: YY_RULE_SETUP #line 328 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = &((*wcs)->ps); npptr = nps; BEGIN(CCi_ma); } YY_BREAK case 19: YY_RULE_SETUP #line 335 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = &((*wcs)->cname); BEGIN(CCCCCia); } YY_BREAK case 20: YY_RULE_SETUP #line 341 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->crder); BEGIN(CCCCCia); } YY_BREAK case 21: YY_RULE_SETUP #line 347 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->csyer); BEGIN(CCCCCia); } YY_BREAK case 22: YY_RULE_SETUP #line 353 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = (*wcs)->dateavg; if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } YY_BREAK case 23: YY_RULE_SETUP #line 360 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = (*wcs)->dateobs; if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } YY_BREAK case 24: YY_RULE_SETUP #line 367 "wcspih.l" { sscanf(wcspihtext, "EPOCH%c", &a); if (a == ' ' || relax & WCSHDR_EPOCHa) { valtype = FLOAT; if (pass == 2) { vptr = epoch; if (a >= 'A') { vptr = (void *)((double *)vptr + alts[a-'A'+1]); } } unput(' '); BEGIN(CCCCCCCa); } else if (relax & WCSHDR_reject) { errmsg = "EPOCH keyword may not have an alternate version code"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } YY_BREAK case 25: YY_RULE_SETUP #line 391 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->equinox); BEGIN(CCCCCCCa); } YY_BREAK case 26: YY_RULE_SETUP #line 397 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->mjdavg); if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } YY_BREAK case 27: YY_RULE_SETUP #line 404 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->mjdobs); if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } YY_BREAK case 28: YY_RULE_SETUP #line 411 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = (*wcs)->obsgeo; if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } YY_BREAK case 29: YY_RULE_SETUP #line 418 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = (*wcs)->obsgeo + 1; if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } YY_BREAK case 30: YY_RULE_SETUP #line 425 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = (*wcs)->obsgeo + 2; if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } YY_BREAK case 31: YY_RULE_SETUP #line 432 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = (*wcs)->radesys; BEGIN(CCCCCCCa); } YY_BREAK case 32: YY_RULE_SETUP #line 438 "wcspih.l" { if (relax & WCSHDR_RADECSYS) { valtype = STRING; if (pass == 2) vptr = (*wcs)->radesys; unput(' '); BEGIN(CCCCCCCa); } else if (relax & WCSHDR_reject) { errmsg = "RADECSYS is non-standard, use RADESYSa"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } YY_BREAK case 33: YY_RULE_SETUP #line 454 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = (*wcs)->specsys; BEGIN(CCCCCCCa); } YY_BREAK case 34: YY_RULE_SETUP #line 460 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = (*wcs)->ssysobs; BEGIN(CCCCCCCa); } YY_BREAK case 35: YY_RULE_SETUP #line 466 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = (*wcs)->ssyssrc; BEGIN(CCCCCCCa); } YY_BREAK case 36: YY_RULE_SETUP #line 472 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->velangl); BEGIN(CCCCCCCa); } YY_BREAK case 37: YY_RULE_SETUP #line 478 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->velosys); BEGIN(CCCCCCCa); } YY_BREAK case 38: YY_RULE_SETUP #line 484 "wcspih.l" { sscanf(wcspihtext, "VELREF%c", &a); if (a == ' ' || relax & WCSHDR_VELREFa) { valtype = INTEGER; if (pass == 2) vptr = &((*wcs)->velref); unput(a); BEGIN(CCCCCCCa); } else if (relax & WCSHDR_reject) { errmsg = "VELREF keyword may not have an alternate version code"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } YY_BREAK case 39: YY_RULE_SETUP #line 503 "wcspih.l" { sscanf(wcspihtext, "VSOURCE%c", &a); if (relax & WCSHDR_VSOURCE) { valtype = FLOAT; if (pass == 2) { vptr = vsource; if (a >= 'A') { vptr = (void *)((double *)vptr + alts[a-'A'+1]); } } unput(' '); BEGIN(CCCCCCCa); } else if (relax & WCSHDR_reject) { errmsg = "Deprecated VSOURCEa keyword rejected"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } YY_BREAK case 40: YY_RULE_SETUP #line 527 "wcspih.l" { valtype = STRING; if (pass == 2) vptr = (*wcs)->wcsname; BEGIN(CCCCCCCa); } YY_BREAK case 41: YY_RULE_SETUP #line 533 "wcspih.l" { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->zsource); BEGIN(CCCCCCCa); } YY_BREAK case 42: YY_RULE_SETUP #line 539 "wcspih.l" { yyless(0); if (wcspih_nkeyrec) { wcspih_nkeyrec = 0; errmsg = "Keyrecords following the END keyrecord were ignored"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } YY_BREAK case 43: YY_RULE_SETUP #line 550 "wcspih.l" { BEGIN(DISCARD); } YY_BREAK case 44: #line 555 "wcspih.l" case 45: YY_RULE_SETUP #line 555 "wcspih.l" { sscanf(wcspihtext, "%d%c", &i, &a); idx = i - 1; BEGIN(VALUE); } YY_BREAK case 46: YY_RULE_SETUP #line 561 "wcspih.l" { /* Invalid axis number will be caught by . */ sscanf(wcspihtext, "%3d", &i); BEGIN(VALUE); } YY_BREAK case 47: YY_RULE_SETUP #line 567 "wcspih.l" { BEGIN(DISCARD); } YY_BREAK case 48: #line 572 "wcspih.l" case 49: #line 573 "wcspih.l" case 50: #line 574 "wcspih.l" case 51: YY_RULE_SETUP #line 574 "wcspih.l" { sscanf(wcspihtext, "%d_%d%c", &i, &j, &a); if (pass == 2) { wcsp = *wcs; if (a != ' ') { wcsp += alts[a-'A'+1]; } idx = (i-1)*(wcsp->naxis) + j - 1; } BEGIN(VALUE); } YY_BREAK case 52: #line 588 "wcspih.l" case 53: #line 589 "wcspih.l" case 54: #line 590 "wcspih.l" case 55: #line 591 "wcspih.l" case 56: #line 592 "wcspih.l" case 57: YY_RULE_SETUP #line 592 "wcspih.l" { /* Invalid axis numbers will be caught by . */ sscanf(wcspihtext, "%d_%d", &i, &j); BEGIN(VALUE); } YY_BREAK case 58: YY_RULE_SETUP #line 598 "wcspih.l" { /* This covers the defunct forms CD00i00j and PC00i00j. */ if (((relax & WCSHDR_PC00i00j) && (altlin == 1)) || ((relax & WCSHDR_CD00i00j) && (altlin == 2))) { sscanf(wcspihtext, "%3d%3d", &i, &j); a = ' '; if (pass == 2) { idx = (i-1)*((*wcs)->naxis) + j - 1; } BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Defunct form of %si_ja keyword", (altlin==1) ? "PC" : "CD"); BEGIN(ERROR); } else { BEGIN(DISCARD); } } YY_BREAK case 59: YY_RULE_SETUP #line 620 "wcspih.l" { BEGIN(DISCARD); } YY_BREAK case 60: #line 625 "wcspih.l" case 61: YY_RULE_SETUP #line 625 "wcspih.l" { sscanf(wcspihtext, "%d%c", &i, &a); if (a == ' ' || relax & WCSHDR_CROTAia) { idx = i - 1; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = "CROTAn keyword may not have an alternate version code"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } YY_BREAK case 62: YY_RULE_SETUP #line 640 "wcspih.l" { sscanf(wcspihtext, "%d", &i); a = ' '; idx = i - 1; BEGIN(VALUE); } YY_BREAK case 63: YY_RULE_SETUP #line 647 "wcspih.l" { BEGIN(DISCARD); } YY_BREAK case 64: #line 652 "wcspih.l" case 65: YY_RULE_SETUP #line 652 "wcspih.l" { idx = -1; if (YY_START == CCCCCCCa) { sscanf(wcspihtext, "%c", &a); } else { unput(wcspihtext[0]); a = 0; } BEGIN(VALUE); } YY_BREAK case 66: YY_RULE_SETUP #line 664 "wcspih.l" { BEGIN(DISCARD); } YY_BREAK case 67: #line 669 "wcspih.l" case 68: #line 670 "wcspih.l" case 69: #line 671 "wcspih.l" case 70: YY_RULE_SETUP #line 671 "wcspih.l" { sscanf(wcspihtext, "%d_%d%c", &i, &m, &a); idx = -1; BEGIN(VALUE); } YY_BREAK case 71: #line 678 "wcspih.l" case 72: #line 679 "wcspih.l" case 73: #line 680 "wcspih.l" case 74: #line 681 "wcspih.l" case 75: #line 682 "wcspih.l" case 76: YY_RULE_SETUP #line 682 "wcspih.l" { /* Invalid parameters will be caught by . */ sscanf(wcspihtext, "%d_%d", &i, &m); BEGIN(VALUE); } YY_BREAK case 77: YY_RULE_SETUP #line 688 "wcspih.l" { BEGIN(DISCARD); } YY_BREAK case 78: YY_RULE_SETUP #line 692 "wcspih.l" { if (relax & WCSHDR_PROJPn) { sscanf(wcspihtext, "%d", &m); i = 0; a = ' '; idx = -1; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = "Defunct PROJPn keyword rejected"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } YY_BREAK case 79: YY_RULE_SETUP #line 709 "wcspih.l" { BEGIN(DISCARD); } YY_BREAK case 80: YY_RULE_SETUP #line 713 "wcspih.l" { /* Do checks on i, j & m. */ if (i > 99 || j > 99 || m > 99) { if (relax & WCSHDR_reject) { errmsg = errtxt; if (i > 99 || j > 99) { sprintf(errmsg, "Axis number exceeds 99"); } else if (m > 99) { sprintf(errmsg, "Parameter number exceeds 99"); } BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } else { if (valtype == INTEGER) { BEGIN(INTEGER_VAL); } else if (valtype == FLOAT) { BEGIN(FLOAT_VAL); } else if (valtype == STRING) { BEGIN(STRING_VAL); } else { errmsg = errtxt; sprintf(errmsg, "Internal parser ERROR, bad data type: %d", valtype); BEGIN(ERROR); } } } YY_BREAK case 81: YY_RULE_SETUP #line 746 "wcspih.l" { errmsg = "Invalid KEYWORD = VALUE syntax"; BEGIN(ERROR); } YY_BREAK case 82: YY_RULE_SETUP #line 751 "wcspih.l" { if (pass == 1) { wcspih_naxes(naxis, i, j, a, alts, npptr); BEGIN(FLUSH); } else { if (vptr) { /* Determine the coordinate representation. */ for (ialt = 0; ialt < *nwcs; ialt++) { /* The loop here is for keywords that apply */ /* to every alternate; these have a == 0. */ if (a >= 'A') { ialt = alts[a-'A'+1]; } wptr = vptr; if (ialt) { voff = (char *)(*wcs+ialt) - (char *)(*wcs); wptr = (void *)((char *)vptr + voff); } /* Apply keyword parameterization. */ if (idx >= 0) { wptr = *((int **)wptr) + idx; } /* Read the keyvalue. */ sscanf(wcspihtext, "%d", (int *)wptr); if (a) break; } BEGIN(COMMENT); } else { errmsg = "Internal parser ERROR, null int pointer"; BEGIN(ERROR); } } } YY_BREAK case 83: YY_RULE_SETUP #line 792 "wcspih.l" { errmsg = "An integer value was expected"; BEGIN(ERROR); } YY_BREAK case 84: YY_RULE_SETUP #line 797 "wcspih.l" { if (pass == 1) { wcspih_naxes(naxis, i, j, a, alts, npptr); BEGIN(FLUSH); } else { if (vptr) { /* Determine the coordinate representation. */ for (ialt = 0; ialt < *nwcs; ialt++) { /* The loop here is for keywords like MJD-OBS that */ /* apply to every alternate; these have a == 0. */ if (a >= 'A') { ialt = alts[a-'A'+1]; } wptr = vptr; if (ialt) { voff = (char *)(*wcs+ialt) - (char *)(*wcs); wptr = (void *)((char *)vptr + voff); } /* Apply keyword parameterization. */ if (idx >= 0) { wptr = *((double **)wptr) + idx; } else if (npptr == npv) { ipx = (*wcs+ialt)->npv++; (*wcs+ialt)->pv[ipx].i = i; (*wcs+ialt)->pv[ipx].m = m; wptr = &((*wcs+ialt)->pv[ipx].value); } /* Read the keyvalue. */ sscanf(wcspihtext, "%lf", (double *)wptr); /* Flag the presence of PCi_ja, or CDi_ja and/or CROTAia. */ if (altlin) { (*wcs+ialt)->altlin |= altlin; altlin = 0; } if (a) break; } BEGIN(COMMENT); } else { errmsg = "Internal parser ERROR, null float pointer"; BEGIN(ERROR); } } } YY_BREAK case 85: YY_RULE_SETUP #line 850 "wcspih.l" { errmsg = "A floating-point value was expected"; BEGIN(ERROR); } YY_BREAK case 86: /* rule 86 can match eol */ YY_RULE_SETUP #line 855 "wcspih.l" { if (pass == 1) { wcspih_naxes(naxis, i, j, a, alts, npptr); BEGIN(FLUSH); } else { if (vptr) { /* Determine the coordinate representation. */ for (ialt = 0; ialt < *nwcs; ialt++) { /* The loop here is for keywords like DATE-OBS that */ /* apply to every alternate; these have a == 0. */ if (a >= 'A') { ialt = alts[a-'A'+1]; } wptr = vptr; if (ialt) { voff = (char *)(*wcs+ialt) - (char *)(*wcs); wptr = (void *)((char *)vptr + voff); } /* Apply keyword parameterization. */ if (idx >= 0) { wptr = *((char (**)[72])wptr) + idx; } else if (npptr == nps) { ipx = (*wcs+ialt)->nps++; (*wcs+ialt)->ps[ipx].i = i; (*wcs+ialt)->ps[ipx].m = m; wptr = (*wcs+ialt)->ps[ipx].value; } /* Read the keyvalue. */ cptr = (char *)wptr; strcpy(cptr, wcspihtext+1); /* Squeeze out repeated quotes. */ ix = 0; for (jx = 0; jx < 72; jx++) { if (ix < jx) { cptr[ix] = cptr[jx]; } if (cptr[jx] == '\0') { if (ix) cptr[ix-1] = '\0'; break; } else if (cptr[jx] == '\'' && cptr[jx+1] == '\'') { jx++; } ix++; } if (a) break; } BEGIN(COMMENT); } else { errmsg = "Internal parser ERROR, null string pointer"; BEGIN(ERROR); } } } YY_BREAK case 87: YY_RULE_SETUP #line 920 "wcspih.l" { errmsg = "A string value was expected"; BEGIN(ERROR); } YY_BREAK case 88: #line 926 "wcspih.l" case 89: YY_RULE_SETUP #line 926 "wcspih.l" { BEGIN(FLUSH); } YY_BREAK case 90: YY_RULE_SETUP #line 930 "wcspih.l" { errmsg = "Malformed keycomment"; BEGIN(ERROR); } YY_BREAK case 91: YY_RULE_SETUP #line 935 "wcspih.l" { if (pass == 2) { if (ctrl < 0) { /* Preserve discards. */ keep = wcspih_hdr - 80; } else if (ctrl > 2) { fprintf(stderr, "%.80s\n Discarded.\n", wcspih_hdr-80); } } BEGIN(FLUSH); } YY_BREAK case 92: YY_RULE_SETUP #line 948 "wcspih.l" { (*nreject)++; if (pass == 2) { if (ctrl%10 == -1) { /* Preserve rejects. */ keep = wcspih_hdr - 80; } if (abs(ctrl%10) > 1) { fprintf(stderr, "%.80s\n%4d: %s.\n", wcspih_hdr-80, *nreject, errmsg); } } BEGIN(FLUSH); } YY_BREAK case 93: /* rule 93 can match eol */ YY_RULE_SETUP #line 964 "wcspih.l" { if (pass == 2 && keep) { if (hptr < keep) { strncpy(hptr, keep, 80); } hptr += 80; } i = j = m = 0; a = ' '; valtype = -1; keep = 0x0; altlin = 0; npptr = 0x0; BEGIN(INITIAL); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(CROTAi): case YY_STATE_EOF(PROJPn): case YY_STATE_EOF(CCCCCia): case YY_STATE_EOF(CCi_ja): case YY_STATE_EOF(CCi_ma): case YY_STATE_EOF(CCCCCCCa): case YY_STATE_EOF(CCCCCCCC): case YY_STATE_EOF(VALUE): case YY_STATE_EOF(INTEGER_VAL): case YY_STATE_EOF(FLOAT_VAL): case YY_STATE_EOF(STRING_VAL): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(DISCARD): case YY_STATE_EOF(ERROR): case YY_STATE_EOF(FLUSH): #line 981 "wcspih.l" { /* End-of-input. */ if (pass == 1) { if ((status = wcspih_inits(naxis, alts, npv, nps, nwcs, wcs)) || *nwcs == 0) { wcspihlex_destroy(); return status; } if (abs(ctrl%10) > 2) { if (*nwcs == 1) { fprintf(stderr, "Found one coordinate representation.\n"); } else { fprintf(stderr, "Found %d coordinate representations.\n", *nwcs); } } wcspih_hdr = header; wcspih_nkeyrec = nkeyrec; *nreject = 0; pass = 2; i = j = m = 0; a = ' '; valtype = -1; wcspihrestart(wcspihin); } else { wcspihlex_destroy(); if (ctrl < 0) { *hptr = '\0'; } else if (ctrl == 1) { fprintf(stderr, "%d WCS keyrecords were rejected.\n", *nreject); } return wcspih_final(alts, epoch, vsource, nwcs, wcs); } } YY_BREAK case 94: YY_RULE_SETUP #line 1024 "wcspih.l" ECHO; YY_BREAK #line 9681 "wcspih.c" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed wcspihin at a new source and called * wcspihlex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = wcspihin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( wcspihwrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * wcspihtext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of wcspihlex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ wcspihrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; wcspihrestart(wcspihin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) wcspihrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { if ( *yy_cp ) { yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; } else yy_current_state = yy_NUL_trans[yy_current_state]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); yy_current_state = yy_NUL_trans[yy_current_state]; yy_is_jam = (yy_current_state == 0); if ( ! yy_is_jam ) { if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } } return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up wcspihtext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ wcspihrestart(wcspihin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( wcspihwrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve wcspihtext */ (yy_hold_char) = *++(yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void wcspihrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ wcspihensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = wcspih_create_buffer(wcspihin,YY_BUF_SIZE ); } wcspih_init_buffer(YY_CURRENT_BUFFER,input_file ); wcspih_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void wcspih_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * wcspihpop_buffer_state(); * wcspihpush_buffer_state(new_buffer); */ wcspihensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; wcspih_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (wcspihwrap()) processing, but the only time this flag * is looked at is after wcspihwrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void wcspih_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; wcspihin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE wcspih_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) wcspihalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in wcspih_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) wcspihalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in wcspih_create_buffer()" ); b->yy_is_our_buffer = 1; wcspih_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with wcspih_create_buffer() * */ void wcspih_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) wcspihfree((void *) b->yy_ch_buf ); wcspihfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a wcspihrestart() or at EOF. */ static void wcspih_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; wcspih_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then wcspih_init_buffer was _probably_ * called from wcspihrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void wcspih_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) wcspih_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void wcspihpush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; wcspihensure_buffer_stack(); /* This block is copied from wcspih_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from wcspih_switch_to_buffer. */ wcspih_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void wcspihpop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; wcspih_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { wcspih_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void wcspihensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)wcspihalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in wcspihensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)wcspihrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in wcspihensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE wcspih_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) wcspihalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in wcspih_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; wcspih_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to wcspihlex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * wcspih_scan_bytes() instead. */ YY_BUFFER_STATE wcspih_scan_string (yyconst char * yystr ) { return wcspih_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to wcspihlex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE wcspih_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) wcspihalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in wcspih_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = wcspih_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in wcspih_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up wcspihtext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ wcspihtext[wcspihleng] = (yy_hold_char); \ (yy_c_buf_p) = wcspihtext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ wcspihleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int wcspihget_lineno (void) { return wcspihlineno; } /** Get the input stream. * */ FILE *wcspihget_in (void) { return wcspihin; } /** Get the output stream. * */ FILE *wcspihget_out (void) { return wcspihout; } /** Get the length of the current token. * */ int wcspihget_leng (void) { return wcspihleng; } /** Get the current token. * */ char *wcspihget_text (void) { return wcspihtext; } /** Set the current line number. * @param line_number * */ void wcspihset_lineno (int line_number ) { wcspihlineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see wcspih_switch_to_buffer */ void wcspihset_in (FILE * in_str ) { wcspihin = in_str ; } void wcspihset_out (FILE * out_str ) { wcspihout = out_str ; } int wcspihget_debug (void) { return wcspih_flex_debug; } void wcspihset_debug (int bdebug ) { wcspih_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from wcspihlex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT wcspihin = stdin; wcspihout = stdout; #else wcspihin = (FILE *) 0; wcspihout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * wcspihlex_init() */ return 0; } /* wcspihlex_destroy is for both reentrant and non-reentrant scanners. */ int wcspihlex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ wcspih_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; wcspihpop_buffer_state(); } /* Destroy the stack itself. */ wcspihfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * wcspihlex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *wcspihalloc (yy_size_t size ) { return (void *) malloc( size ); } void *wcspihrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void wcspihfree (void * ptr ) { free( (char *) ptr ); /* see wcspihrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 1024 "wcspih.l" /*---------------------------------------------------------------------------- * Determine the number of coordinate representations (up to 27) and the * number of coordinate axes in each, and count the number of PVi_ma and * PSi_ma keywords in each representation. *---------------------------------------------------------------------------*/ void wcspih_naxes(int naxis, int i, int j, char a, int alts[], int *npptr) { /* On the first pass alts[] is used to determine the number of axes */ /* for each of the 27 possible alternate coordinate descriptions. */ int ialt, *ip; if (a == 0) { return; } ialt = 0; if (a != ' ') { ialt = a - 'A' + 1; } ip = alts + ialt; if (*ip < naxis) { *ip = naxis; } /* i or j can be greater than naxis. */ if (*ip < i) { *ip = i; } if (*ip < j) { *ip = j; } if (npptr) { npptr[ialt]++; } } /*---------------------------------------------------------------------------- * Allocate memory for an array of the required number of wcsprm structs and * initialize each of them. *---------------------------------------------------------------------------*/ int wcspih_inits( int naxis, int alts[], int npv[], int nps[], int *nwcs, struct wcsprm **wcs) { int ialt, npsmax, npvmax, status = 0; struct wcsprm *wcsp; /* Find the number of coordinate descriptions. */ *nwcs = 0; for (ialt = 0; ialt < 27; ialt++) { if (alts[ialt]) (*nwcs)++; } if (!(*nwcs) && naxis) { /* NAXIS is non-zero but there were no WCS keywords with an alternate version code; create a default WCS with blank alternate version. */ wcspih_naxes(naxis, 0, 0, ' ', alts, 0x0); *nwcs = 1; } if (*nwcs) { /* Allocate memory for the required number of wcsprm structs. */ if (!(*wcs = calloc(*nwcs, sizeof(struct wcsprm)))) { return 2; } /* Record the current values of NPVMAX and NPSMAX. */ npvmax = wcsnpv(-1); npsmax = wcsnps(-1); /* Initialize each wcsprm struct. */ wcsp = *wcs; *nwcs = 0; for (ialt = 0; ialt < 27; ialt++) { if (alts[ialt]) { wcsp->flag = -1; wcsnpv(npv[ialt]); wcsnps(nps[ialt]); if ((status = wcsini(1, alts[ialt], wcsp))) { wcsvfree(nwcs, wcs); break; } /* Record the alternate version code. */ if (ialt) { wcsp->alt[0] = 'A' + ialt - 1; } /* On the second pass alts[] indexes the array of wcsprm structs. */ alts[ialt] = (*nwcs)++; wcsp++; } } /* Restore the original values of NPVMAX and NPSMAX. */ wcsnpv(npvmax); wcsnps(npsmax); } return status; } /*---------------------------------------------------------------------------- * Interpret special keywords encountered for each coordinate representation. *---------------------------------------------------------------------------*/ int wcspih_final( int alts[], double epoch[], double vsource[], int *nwcs, struct wcsprm **wcs) { int ialt, status; double beta, c = 299792458.0; for (ialt = 0; ialt < *nwcs; ialt++) { /* Check for EPOCH overriding EQUINOXa. */ if (undefined((*wcs+ialt)->equinox) && !undefined(epoch[ialt])) { /* Set EQUINOXa. */ (*wcs+ialt)->equinox = epoch[ialt]; } /* Check for VSOURCEa overriding ZSOURCEa. */ if (undefined((*wcs+ialt)->zsource) && !undefined(vsource[ialt])) { /* Convert relativistic Doppler velocity to redshift. */ beta = vsource[ialt]/c; (*wcs+ialt)->zsource = (1.0+beta)/sqrt(1.0 - beta*beta) - 1.0; } /* Interpret -TAB header keywords. */ if ((status = wcstab(*wcs+ialt))) { wcsvfree(nwcs, wcs); return status; } } return 0; } pywcs-1.12/wcslib/C/flexed/wcsulex.c0000644001153600020070000135070712310355626021435 0ustar cslocumSTSCI\science00000000000000#line 2 "wcsulex.c" #line 4 "wcsulex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define yy_create_buffer wcsulex_create_buffer #define yy_delete_buffer wcsulex_delete_buffer #define yy_flex_debug wcsulex_flex_debug #define yy_init_buffer wcsulex_init_buffer #define yy_flush_buffer wcsulex_flush_buffer #define yy_load_buffer_state wcsulex_load_buffer_state #define yy_switch_to_buffer wcsulex_switch_to_buffer #define yyin wcsulexin #define yyleng wcsulexleng #define yylex wcsulexlex #define yylineno wcsulexlineno #define yyout wcsulexout #define yyrestart wcsulexrestart #define yytext wcsulextext #define yywrap wcsulexwrap #define yyalloc wcsulexalloc #define yyrealloc wcsulexrealloc #define yyfree wcsulexfree #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE wcsulexrestart(wcsulexin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int wcsulexleng; extern FILE *wcsulexin, *wcsulexout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up wcsulextext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up wcsulextext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via wcsulexrestart()), so that the user can continue scanning by * just pointing wcsulexin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when wcsulextext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int wcsulexleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow wcsulexwrap()'s to do buffer switches * instead of setting up a fresh wcsulexin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void wcsulexrestart (FILE *input_file ); void wcsulex_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE wcsulex_create_buffer (FILE *file,int size ); void wcsulex_delete_buffer (YY_BUFFER_STATE b ); void wcsulex_flush_buffer (YY_BUFFER_STATE b ); void wcsulexpush_buffer_state (YY_BUFFER_STATE new_buffer ); void wcsulexpop_buffer_state (void ); static void wcsulexensure_buffer_stack (void ); static void wcsulex_load_buffer_state (void ); static void wcsulex_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER wcsulex_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE wcsulex_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE wcsulex_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE wcsulex_scan_bytes (yyconst char *bytes,int len ); void *wcsulexalloc (yy_size_t ); void *wcsulexrealloc (void *,yy_size_t ); void wcsulexfree (void * ); #define yy_new_buffer wcsulex_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ wcsulexensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ wcsulex_create_buffer(wcsulexin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ wcsulexensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ wcsulex_create_buffer(wcsulexin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define wcsulexwrap(n) 1 #define YY_SKIP_YYWRAP typedef char YY_CHAR; FILE *wcsulexin = (FILE *) 0, *wcsulexout = (FILE *) 0; typedef int yy_state_type; extern int wcsulexlineno; int wcsulexlineno = 1; extern char *wcsulextext; #define yytext_ptr wcsulextext static yyconst flex_int16_t yy_nxt[][128] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 16, 14, 14, 14, 14, 14, 14, 14, 17, 14, 18, 14, 14, 14, 18, 19, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 20, 21, 22, 23, 24, 22, 25, 26, 14, 27, 28, 14, 24, 22, 29, 30, 14, 31, 32, 33, 14, 22, 34, 14, 24, 24, 14, 14, 35, 14, 14, 14, 36, 37, 38, 39, 40, 41, 28, 42, 14, 14, 24, 43, 44, 41, 29, 45, 14, 46, 47, 14, 48, 49, 14, 14, 50, 41, 14, 14, 14, 14, 14 }, { 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 51, 14, 14, 14, 14, 14, 14, 14, 17, 14, 52, 14, 14, 14, 52, 19, 14, 53, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 20, 21, 22, 23, 24, 22, 25, 26, 14, 27, 28, 14, 24, 22, 29, 30, 14, 31, 32, 33, 14, 22, 34, 14, 24, 24, 54, 14, 35, 14, 14, 14, 36, 37, 38, 39, 55, 41, 28, 42, 14, 14, 24, 56, 44, 41, 29, 45, 14, 46, 47, 14, 48, 49, 14, 14, 50, 41, 14, 14, 14, 14, 14 }, { 13, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 59, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57 }, { 13, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 59, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57 }, { 13, 60, 60, 60, 60, 60, 60, 60, 60, 60, 15, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 60, 62, 60, 60, 60, 60, 60, 63, 60, 60, 64, 60, 60, 60, 65, 60, 60, 60, 60, 66, 67, 60, 60, 60, 60, 60, 60, 68, 60, 69, 70, 60, 71, 60, 72, 60, 60, 73, 60, 74, 75, 60, 76, 60, 60, 60, 60, 77, 60, 60, 60, 78, 79, 60, 60, 60, 60, 60 }, { 13, 60, 60, 60, 60, 60, 60, 60, 60, 60, 15, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 60, 62, 60, 60, 60, 60, 60, 63, 60, 60, 64, 60, 60, 60, 65, 60, 60, 60, 60, 66, 67, 60, 60, 60, 60, 60, 60, 68, 60, 69, 70, 60, 71, 60, 72, 60, 60, 73, 60, 74, 75, 60, 76, 60, 60, 60, 60, 77, 60, 60, 60, 78, 79, 60, 60, 60, 60, 60 }, { 13, 80, 80, 80, 80, 80, 80, 80, 80, 80, 15, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 82, 83, 84, 80, 85, 86, 87, 80, 88, 89, 80, 80, 90, 91, 92, 80, 93, 94, 95, 80, 96, 97, 80, 80, 80, 80, 80, 80, 80, 80, 80, 98, 99, 100, 101, 102, 80, 103, 104, 80, 80, 80, 105, 106, 80, 91, 107, 80, 108, 109, 80, 110, 111, 80, 80, 112, 80, 80, 80, 80, 80, 80 }, { 13, 80, 80, 80, 80, 80, 80, 80, 80, 80, 15, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 82, 83, 84, 80, 85, 86, 87, 80, 88, 89, 80, 80, 90, 91, 92, 80, 93, 94, 95, 80, 96, 97, 80, 80, 80, 80, 80, 80, 80, 80, 80, 98, 99, 100, 101, 102, 80, 103, 104, 80, 80, 80, 105, 106, 80, 91, 107, 80, 108, 109, 80, 110, 111, 80, 80, 112, 80, 80, 80, 80, 80, 80 }, { 13, 113, 113, 113, 113, 113, 113, 113, 113, 113, 15, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 113, 113, 113, 113, 113, 113, 113, 115, 113, 116, 117, 113, 117, 118, 119, 113, 120, 120, 120, 120, 120, 120, 120, 120, 120, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 121, 122, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113 }, { 13, 113, 113, 113, 113, 113, 113, 113, 113, 113, 15, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 113, 113, 113, 113, 113, 113, 113, 115, 113, 116, 117, 113, 117, 118, 119, 113, 120, 120, 120, 120, 120, 120, 120, 120, 120, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 121, 122, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113 }, { 13, 123, 123, 123, 123, 123, 123, 123, 123, 123, 15, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123 }, { 13, 123, 123, 123, 123, 123, 123, 123, 123, 123, 15, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123 }, { -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13 }, { 13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14 }, { 13, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15 }, { 13, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 124, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16 }, { 13, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17 }, { 13, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18 }, { 13, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19 }, { 13, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 125, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 126, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20 }, { 13, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 127, -21, -21, -21, -21, -21, -21 }, { 13, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22 }, { 13, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23 }, { 13, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 128, 129, 130, -24, -24, 130, 131, 132, -24, 133, 128, -24, -24, 130, 134, 135, -24, 131, 130, 130, -24, 130, 136, -24, -24, -24, -24, -24, -24, -24, -24, -24, 137, 138, 139, -24, 140, -24, 128, -24, -24, -24, -24, 141, 142, -24, 134, 143, -24, 144, 145, -24, -24, -24, -24, -24, 146, -24, -24, -24, -24, -24, -24 }, { 13, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 128, 129, 130, -25, -25, 130, 131, 132, -25, 133, 128, -25, -25, 130, 134, 135, -25, 131, 130, 130, -25, 130, 136, -25, -25, -25, -25, -25, -25, -25, -25, -25, 137, 138, 139, -25, 140, -25, 128, -25, -25, -25, -25, 141, 142, -25, 134, 143, -25, 144, 145, -25, -25, -25, -25, -25, 146, -25, -25, -25, -25, -25, -25 }, { 13, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 147, -26, -26, -26, -26, -26 }, { 13, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 148, -27, -27, -27, -27, -27, -27 }, { 13, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28 }, { 13, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 149, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29 }, { 13, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, 128, 129, 130, -30, -30, 130, 131, 132, -30, 133, 128, -30, -30, 130, 134, 135, -30, 131, 130, 130, -30, 130, 136, -30, -30, -30, -30, -30, -30, -30, -30, -30, 150, 138, 139, -30, 140, -30, 128, -30, -30, -30, -30, 141, 142, -30, 134, 143, -30, 144, 145, -30, -30, -30, -30, -30, 146, -30, -30, -30, -30, -30, -30 }, { 13, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 151, -31, -31, -31, -31, -31, -31 }, { 13, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 152, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32 }, { 13, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, 128, 129, 130, -33, -33, 130, 131, 132, -33, 133, 128, -33, -33, 130, 134, 135, -33, 131, 130, 130, -33, 130, 136, -33, -33, -33, -33, -33, -33, -33, -33, -33, 137, 138, 139, -33, 140, -33, 128, -33, -33, -33, -33, 141, 142, -33, 134, 143, -33, 144, 145, -33, -33, -33, -33, -33, 146, -33, -33, -33, -33, -33, -33 }, { 13, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 147, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34 }, { 13, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35 }, { 13, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 128, -36, 130, -36, -36, 130, 131, 132, -36, 133, 128, -36, -36, 130, 134, 135, -36, 131, 130, 130, -36, 130, 136, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, 153, 139, 154, 140, -36, 128, -36, -36, -36, -36, 141, 155, 126, 134, -36, -36, 156, 145, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36 }, { 13, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, 157, -37, -37, -37, 158, -37, -37, -37, 159, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, 127, -37, -37, -37, -37, -37, -37 }, { 13, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 128, -38, 130, -38, -38, 130, 131, 132, -38, 133, 128, -38, -38, 130, 134, 135, -38, 131, 130, 130, -38, 130, 136, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 153, 139, 160, 140, -38, 128, 161, -38, -38, -38, 141, 155, -38, 162, -38, -38, 144, 145, 163, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38 }, { 13, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, 128, -39, 130, -39, -39, 130, 131, 132, -39, 133, 128, -39, -39, 130, 134, 135, -39, 131, 130, 130, -39, 130, 136, -39, -39, -39, -39, -39, -39, -39, -39, -39, 164, 153, 139, -39, 165, -39, 128, -39, -39, -39, -39, 141, 155, -39, 134, -39, -39, 144, 145, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39 }, { 13, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 148, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 166, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40 }, { 13, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 128, -41, 130, -41, -41, 130, 131, 132, -41, 133, 128, -41, -41, 130, 134, 135, -41, 131, 130, 130, -41, 130, 136, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 153, 139, -41, 140, -41, 128, -41, -41, -41, -41, 141, 155, -41, 134, -41, -41, 144, 145, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41 }, { 13, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, 128, 129, 130, -42, -42, 130, 131, 132, -42, 133, 128, -42, -42, 130, 134, 135, -42, 131, 130, 130, -42, 130, 136, -42, -42, -42, -42, -42, -42, -42, -42, -42, 137, 138, 139, -42, 140, -42, 128, -42, -42, -42, -42, 141, 142, -42, 134, 143, -42, 144, 145, -42, -42, -42, -42, -42, 146, -42, -42, -42, -42, -42, -42 }, { 13, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 147, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 147, 167, -43, -43, -43, -43, -43, -43 }, { 13, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 128, -44, 130, -44, -44, 130, 131, 132, -44, 133, 128, -44, -44, 130, 134, 135, -44, 131, 130, 130, -44, 130, 136, -44, -44, -44, -44, -44, -44, -44, -44, -44, 168, 153, 139, -44, 140, -44, 128, -44, 169, -44, -44, 141, 155, -44, 170, -44, -44, 144, 145, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44 }, { 13, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 128, -45, 130, -45, -45, 130, 131, 132, -45, 133, 128, -45, -45, 130, 134, 135, -45, 131, 130, 130, -45, 130, 136, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 153, 171, -45, 140, -45, 128, 172, 173, -45, -45, 141, 155, -45, 134, -45, -45, 144, 145, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45 }, { 13, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 174, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46 }, { 13, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 175, -47, 176, 160, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47 }, { 13, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 128, -48, 130, -48, -48, 130, 131, 132, -48, 133, 128, -48, -48, 130, 134, 135, -48, 131, 130, 130, -48, 130, 136, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 153, 139, -48, 140, -48, 128, -48, -48, -48, -48, 141, 155, -48, 134, -48, -48, 144, 145, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48 }, { 13, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, 177, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49 }, { 13, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 128, -50, 130, -50, -50, 130, 131, 132, -50, 133, 128, -50, -50, 130, 134, 135, -50, 131, 130, 130, -50, 130, 136, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 153, 139, -50, 140, -50, 128, -50, -50, -50, -50, 141, 155, -50, 134, -50, -50, 178, 145, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50 }, { 13, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 179, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51 }, { 13, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52 }, { 13, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 180, 181, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53 }, { 13, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54 }, { 13, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, 148, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, 166, -55, -55, -55, -55, -55, 182, -55, -55, -55, -55, -55, -55, -55 }, { 13, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, 147, 183, 184, -56, -56, -56, -56, -56, -56, -56, -56, 147, 167, -56, -56, -56, -56, -56, -56 }, { 13, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, -57, -57, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185 }, { 13, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58 }, { 13, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59 }, { 13, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60 }, { 13, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61 }, { 13, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62 }, { 13, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63 }, { 13, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64 }, { 13, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65 }, { 13, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66 }, { 13, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67 }, { 13, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68 }, { 13, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69 }, { 13, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, 186, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70 }, { 13, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71 }, { 13, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72 }, { 13, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73 }, { 13, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74 }, { 13, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75 }, { 13, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76 }, { 13, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77 }, { 13, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78 }, { 13, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79 }, { 13, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80 }, { 13, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, 187, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, 188, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81 }, { 13, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, 189, -82, -82, -82, -82, -82, -82 }, { 13, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83 }, { 13, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84 }, { 13, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, -85 }, { 13, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86 }, { 13, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, 190, -87, -87, -87, -87, -87 }, { 13, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, 191, -88, -88, -88, -88, -88, -88 }, { 13, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89 }, { 13, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90 }, { 13, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, 192, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91 }, { 13, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, 193, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92 }, { 13, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 194, -93, -93, -93, -93, -93, -93 }, { 13, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, 195, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94 }, { 13, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95 }, { 13, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96 }, { 13, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, 196, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97 }, { 13, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, 197, -98, -98, -98, -98, -98, -98, -98, -98, -98, 188, -98, -98, -98, 198, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98 }, { 13, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, 199, -99, -99, -99, 200, -99, -99, -99, 201, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, 189, -99, -99, -99, -99, -99, -99 }, { 13, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, 202, -100, -100, -100, 203, -100, -100, -100, -100, -100, -100, 204, -100, -100, -100, -100, 205, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100 }, { 13, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, 206, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101 }, { 13, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, 207, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, 208, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102 }, { 13, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103 }, { 13, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104 }, { 13, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, 209, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, 210, 211, -105, -105, -105, -105, -105, -105 }, { 13, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, 212, -106, -106, -106, -106, -106, -106, -106, 213, -106, -106, -106, -106, -106, 214, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106 }, { 13, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, 215, -107, -107, -107, -107, 216, 217, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107 }, { 13, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, 218, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108 }, { 13, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, 219, -109, -109, 220, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109 }, { 13, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110 }, { 13, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, 221, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111 }, { 13, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, 222, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112 }, { 13, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113 }, { 13, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, 223, -114, -114, -114, -114, -114, -114, -114, 224, -114, 225, 226, -114, 226, 227, 228, -114, 229, 229, 229, 229, 229, 229, 229, 229, 229, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, 230, 231, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114 }, { 13, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, 232, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, 233, -115, 233, 234, -115, 235, 236, 236, 236, 236, 236, 236, 236, 236, 236, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115 }, { 13, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, 237, -116, -116, -116, -116, -116, -116, -116, -116, -116, 231, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116 }, { 13, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, 229, 229, 229, 229, 229, 229, 229, 229, 229, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117 }, { 13, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, 237, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118 }, { 13, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, 238, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119 }, { 13, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120 }, { 13, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121 }, { 13, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122 }, { 13, 240, 240, 240, 240, 240, 240, 240, 240, 240, -123, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 }, { 13, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, 124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124 }, { 13, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125 }, { 13, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, 241, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126 }, { 13, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 242, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127 }, { 13, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128 }, { 13, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, 243, -129, -129, -129, -129, -129, -129 }, { 13, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130 }, { 13, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131 }, { 13, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, 130, -132, -132, -132, -132, -132 }, { 13, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, 131, -133, -133, -133, -133, -133, -133 }, { 13, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, 244, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134 }, { 13, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, 130, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135 }, { 13, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, 130, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136 }, { 13, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137 }, { 13, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 245, -138, -138, -138, -138, -138, -138, -138, 246, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 243, -138, -138, -138, -138, -138, -138 }, { 13, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, 128, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139 }, { 13, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, 131, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140 }, { 13, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, 130, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, 130, -141, -141, -141, -141, -141, -141, -141 }, { 13, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, 247, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142 }, { 13, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, 137, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143 }, { 13, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, 248, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144 }, { 13, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, 128, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145 }, { 13, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, 137, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146 }, { 13, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147 }, { 13, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148 }, { 13, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, 147, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149 }, { 13, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150 }, { 13, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151 }, { 13, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 125, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152 }, { 13, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 245, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153 }, { 13, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 163, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154 }, { 13, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 249, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 247, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155 }, { 13, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, 248, -156, 250, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156 }, { 13, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, 251, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157 }, { 13, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, 252, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158 }, { 13, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, 163, -159, -159, -159, -159, -159, 253, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159 }, { 13, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160 }, { 13, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, 254, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161 }, { 13, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, 244, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, 255, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162 }, { 13, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163 }, { 13, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, 128, 129, 130, -164, -164, 130, 131, 132, -164, 133, 128, -164, -164, 130, 134, 135, -164, 131, 130, 130, -164, 130, 136, -164, -164, -164, -164, -164, -164, -164, -164, -164, 137, 138, 139, -164, 140, -164, 128, -164, -164, -164, -164, 141, 142, -164, 134, 143, -164, 144, 145, -164, -164, -164, -164, -164, 146, -164, -164, -164, -164, -164, -164 }, { 13, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 131, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 151, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165 }, { 13, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 151, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166 }, { 13, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 125, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167 }, { 13, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 148, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 151, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168 }, { 13, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, 151, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169 }, { 13, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, 244, -170, -170, -170, 160, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170 }, { 13, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, 128, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171 }, { 13, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 256, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172 }, { 13, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 257, -173, -173, -173, -173, -173, -173, -173 }, { 13, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 160, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174 }, { 13, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, 258, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175 }, { 13, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, 259, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176 }, { 13, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, 260, -177, -177, -177, -177, -177, -177, -177 }, { 13, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, 248, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178 }, { 13, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, 179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179 }, { 13, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180 }, { 13, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181 }, { 13, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, 262, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182 }, { 13, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, 263, -183, -183, -183, -183, -183, -183, -183, 264, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183 }, { 13, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, 265, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184 }, { 13, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, -185, -185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185 }, { 13, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186 }, { 13, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187 }, { 13, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, 266, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188 }, { 13, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, 267, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189 }, { 13, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190 }, { 13, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191 }, { 13, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 268, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192 }, { 13, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193 }, { 13, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194 }, { 13, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, 269, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195 }, { 13, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196 }, { 13, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, 270, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197 }, { 13, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, 271, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198 }, { 13, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, 272, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199 }, { 13, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 273, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200 }, { 13, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, 274, -201, -201, -201, -201, -201, 275, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201 }, { 13, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202 }, { 13, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, 276, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, -203 }, { 13, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, 277, -204, -204, -204, -204, -204, -204, -204, -204, -204, -204 }, { 13, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, -205 }, { 13, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, 278, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, -206 }, { 13, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, -207 }, { 13, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, 279, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, -208 }, { 13, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, -209 }, { 13, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, -210 }, { 13, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, 280, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, -211 }, { 13, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, 281, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, 282, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, -212 }, { 13, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, 283, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, -213 }, { 13, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, 284, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, -214 }, { 13, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, -215 }, { 13, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, 285, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, -216 }, { 13, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, 286, -217, -217, -217, -217, -217, -217, -217 }, { 13, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, 287, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, -218 }, { 13, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, 288, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, -219 }, { 13, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, -220 }, { 13, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, 289, -221, -221, -221, -221, -221, -221, -221 }, { 13, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222 }, { 13, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, 223, -223, -223, -223, -223, -223, -223, -223, 224, -223, 225, 226, -223, 226, 227, 228, -223, 229, 229, 229, 229, 229, 229, 229, 229, 229, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, 230, 231, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, -223 }, { 13, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, 232, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, 233, -224, 233, 234, -224, 235, 236, 236, 236, 236, 236, 236, 236, 236, 236, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, -224 }, { 13, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, 237, -225, -225, -225, -225, -225, -225, -225, -225, -225, 231, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, -225 }, { 13, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, 229, 229, 229, 229, 229, 229, 229, 229, 229, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226 }, { 13, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, 237, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, -227 }, { 13, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, 238, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, -228 }, { 13, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, -229 }, { 13, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, -230 }, { 13, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, -231 }, { 13, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, 232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, 233, -232, 233, 234, -232, 235, 236, 236, 236, 236, 236, 236, 236, 236, 236, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, -232 }, { 13, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, 234, -233, 235, 236, 236, 236, 236, 236, 236, 236, 236, 236, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, -233 }, { 13, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, -234 }, { 13, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, 291, -235, -235, -235, -235, -235, -235, -235, -235, 292, -235, -235, -235, -235, 293, -235, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, -235 }, { 13, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, 295, -236, -236, -236, -236, -236, -236, -236, -236, 296, -236, -236, -236, -236, 293, 297, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, -236 }, { 13, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, 237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, -237 }, { 13, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, 238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, -238 }, { 13, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, -239 }, { 13, 240, 240, 240, 240, 240, 240, 240, 240, 240, -240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240 }, { 13, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, 299, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, -241 }, { 13, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, 253, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, -242 }, { 13, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, 300, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, -243 }, { 13, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, 130, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, -244 }, { 13, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, 301, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, -245 }, { 13, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, 137, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, -246 }, { 13, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, 128, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, -247 }, { 13, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, 128, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, -248 }, { 13, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, 302, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, -249 }, { 13, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, 303, -250, -250, -250, -250, -250, 304, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, -250 }, { 13, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, 148, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, -251 }, { 13, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, 125, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, -252 }, { 13, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, -253 }, { 13, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, 163, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, -254 }, { 13, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, 305, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, -255 }, { 13, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, 306, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256 }, { 13, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, 307, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, -257 }, { 13, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, 308, 309, -258, -258, -258, -258, 310, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, -258 }, { 13, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, 311, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, -259 }, { 13, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, 312, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, -260 }, { 13, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, -261 }, { 13, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, 313, -262, -262, -262, -262, -262, -262, -262, 314, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, -262 }, { 13, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, 263, -263, -263, -263, -263, -263, -263, -263, 264, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, -263 }, { 13, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, -264 }, { 13, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, 315, -265, -265, -265, -265, -265, -265, -265, 316, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, -265 }, { 13, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, 317, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, -266 }, { 13, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, 318, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, -267 }, { 13, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, -268 }, { 13, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, -269 }, { 13, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, -270 }, { 13, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, 319, -271, -271, -271, -271, -271, 320, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, -271 }, { 13, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, 321, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, -272 }, { 13, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, 322, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, -273 }, { 13, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, -274 }, { 13, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, -275 }, { 13, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, 323, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, -276 }, { 13, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, 324, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, -277 }, { 13, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, -278 }, { 13, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, -279 }, { 13, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, -280 }, { 13, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, -281 }, { 13, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, -282 }, { 13, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, -283 }, { 13, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284 }, { 13, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, 325, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, -285 }, { 13, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, 326, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, -286 }, { 13, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, -287 }, { 13, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, 327, 328, -288, -288, -288, -288, 329, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, -288 }, { 13, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, 330, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, -289 }, { 13, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, 291, -290, -290, -290, -290, -290, -290, -290, -290, 292, -290, -290, -290, -290, -290, -290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, -290 }, { 13, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, 291, -291, -291, -291, -291, -291, -291, -291, -291, 292, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, -291 }, { 13, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, -292 }, { 13, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, 291, -293, -293, -293, -293, -293, -293, -293, -293, 292, -293, -293, -293, -293, -293, -293, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, -293 }, { 13, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, 291, -294, -294, -294, -294, -294, -294, -294, -294, 292, -294, -294, -294, -294, 293, -294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, -294 }, { 13, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, 295, -295, -295, -295, -295, -295, -295, -295, -295, 296, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, -295 }, { 13, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296 }, { 13, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, 332, 332, 332, 332, 332, 332, 332, 332, 332, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297 }, { 13, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, 295, -298, -298, -298, -298, -298, -298, -298, -298, 296, -298, -298, -298, -298, 293, 297, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, -298 }, { 13, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, 333, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, -299 }, { 13, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, 137, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, -300 }, { 13, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, 131, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, -301 }, { 13, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, -302 }, { 13, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, 334, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, -303 }, { 13, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, 335, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, -304 }, { 13, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, 163, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, -305 }, { 13, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, 336, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, -306 }, { 13, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, 163, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, -307 }, { 13, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, 337, -308, -308, -308, -308, -308, -308, -308, -308, -308, -308 }, { 13, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, 338, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, -309 }, { 13, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, 339, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, -310 }, { 13, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, 340, -311, -311, -311, -311, -311, -311, -311, 341, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, -311 }, { 13, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, 163, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, -312 }, { 13, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, 313, -313, -313, -313, -313, -313, -313, -313, 314, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, -313 }, { 13, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, -314 }, { 13, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, 315, -315, -315, -315, -315, -315, -315, -315, 316, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, -315 }, { 13, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, -316 }, { 13, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, 342, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, -317 }, { 13, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, -318 }, { 13, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, 343, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, -319 }, { 13, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, 344, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, -320 }, { 13, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, -321 }, { 13, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, -322 }, { 13, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, -323 }, { 13, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, 205, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, -324 }, { 13, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, 345, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, -325 }, { 13, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, 346, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, -326 }, { 13, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, 347, -327, -327, -327, -327, -327, -327, -327, -327, -327, -327 }, { 13, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, 348, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, -328 }, { 13, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, 349, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, -329 }, { 13, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, 350, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, -330 }, { 13, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, 291, -331, -331, -331, -331, -331, -331, -331, -331, 292, -331, -331, -331, -331, -331, -331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, -331 }, { 13, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, 351, -332, -332, -332, -332, -332, -332, -332, -332, 352, -332, -332, -332, -332, -332, -332, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, -332 }, { 13, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, 354, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, -333 }, { 13, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, 151, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, -334 }, { 13, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, 151, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, -335 }, { 13, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, 163, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, -336 }, { 13, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, 125, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, -337 }, { 13, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, 355, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, -338 }, { 13, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, 125, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, -339 }, { 13, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, 340, -340, -340, -340, -340, -340, -340, -340, 341, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, -340 }, { 13, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, -341 }, { 13, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, 356, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, -342 }, { 13, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, 357, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, -343 }, { 13, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, 358, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, -344 }, { 13, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, 359, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, -345 }, { 13, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, -346 }, { 13, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, 360, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, -347 }, { 13, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, 361, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, -348 }, { 13, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, 362, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, -349 }, { 13, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, -350 }, { 13, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, 351, -351, -351, -351, -351, -351, -351, -351, -351, 352, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351 }, { 13, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, -352 }, { 13, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, 351, -353, -353, -353, -353, -353, -353, -353, -353, 352, -353, -353, -353, -353, -353, -353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, -353 }, { 13, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, 363, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, -354 }, { 13, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, 125, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, -355 }, { 13, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, 364, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, -356 }, { 13, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, -357 }, { 13, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, -358 }, { 13, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, -359 }, { 13, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, -360 }, { 13, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, 365, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, -361 }, { 13, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, -362 }, { 13, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, 125, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, -363 }, { 13, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, 366, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, -364 }, { 13, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, -365 }, { 13, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, -366 }, } ; static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up wcsulextext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ (yytext_ptr) -= (yy_more_len); \ wcsulexleng = (size_t) (yy_cp - (yytext_ptr)); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 118 #define YY_END_OF_BUFFER 119 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[367] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 117, 119, 20, 118, 9, 11, 12, 14, 15, 20, 15, 15, 20, 15, 15, 15, 15, 20, 20, 15, 15, 15, 15, 19, 15, 20, 20, 15, 20, 20, 15, 20, 15, 20, 20, 15, 15, 20, 20, 1, 8, 20, 2, 20, 20, 23, 21, 22, 44, 41, 38, 37, 40, 39, 43, 42, 31, 25, 24, 30, 35, 36, 26, 28, 29, 27, 33, 32, 105, 45, 105, 57, 61, 66, 67, 69, 72, 74, 83, 105, 105, 89, 92, 99, 101, 103, 46, 105, 105, 62, 105, 68, 70, 105, 78, 105, 105, 93, 100, 105, 105, 116, 113, 112, 111, 116, 111, 114, 107, 115, 106, 117, 9, 15, 0, 0, 16, 0, 16, 16, 16, 16, 0, 0, 16, 17, 0, 0, 0, 0, 16, 0, 0, 16, 0, 15, 15, 0, 15, 15, 0, 0, 0, 16, 0, 0, 0, 0, 15, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 15, 1, 13, 4, 0, 0, 0, 23, 34, 51, 0, 0, 71, 73, 0, 85, 91, 0, 104, 0, 0, 0, 0, 0, 58, 0, 0, 60, 0, 65, 0, 75, 76, 0, 0, 0, 0, 86, 87, 0, 0, 0, 97, 0, 46, 113, 112, 111, 0, 111, 114, 107, 115, 106, 0, 0, 0, 0, 0, 111, 114, 107, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0, 3, 0, 0, 6, 0, 0, 0, 84, 98, 47, 0, 0, 0, 54, 55, 0, 0, 63, 64, 77, 79, 80, 81, 82, 0, 88, 90, 0, 0, 0, 0, 110, 0, 0, 0, 108, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 56, 0, 0, 52, 53, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 88, 0, 0, 0, 102, 0, 109, 0, 0, 0, 0, 49, 50, 87, 94, 0, 96, 0, 0, 95, 48 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; static yyconst yy_state_type yy_NUL_trans[367] = { 0, 14, 14, 57, 57, 60, 60, 80, 80, 113, 113, 123, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ; extern int wcsulex_flex_debug; int wcsulex_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected static int yy_more_flag = 0; static int yy_more_len = 0; #define yymore() ((yy_more_flag) = 1) #define YY_MORE_ADJ (yy_more_len) #define YY_RESTORE_YY_MORE_OFFSET char *wcsulextext; #line 1 "wcsulex.l" /*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsulex.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * wcsulex.l is a Flex description file containing the definition of a * recursive, multi-buffered lexical scanner that parses FITS units * specifications. * * It requires Flex v2.5.4 or later. * * Refer to wcsunits.h for a description of the user interface and operating * notes. * *===========================================================================*/ /* Options. */ /* Exponents. */ /* Metric prefixes. */ /* Basic and derived SI units. */ /* Additional recognized units: all metric prefixes allowed. */ /* Additional recognized units: only super-metric prefixes allowed. */ /* Additional recognized units: only sub-metric prefixes allowed. */ /* Additional recognized units for which NO metric prefixes are allowed. */ /* All additional recognized units. */ /* Exclusive start states. */ #line 91 "wcsulex.l" /* To get the prototype for fileno() from stdio.h when gcc is invoked with * -std=c89 (same as -ansi) or -std=c99 since we do not define YY_INPUT. */ #define _POSIX_SOURCE 1 #include #include #include #include #include "wcserr.h" #include "wcsmath.h" #include "wcsunits.h" #define YY_DECL int wcsulexe(const char unitstr[], int *func, double *scale, \ double units[], struct wcserr **err) /* Used in preempting the call to exit() by yy_fatal_error(). */ jmp_buf wcsulex_abort_jmp_env; #define exit(status) longjmp(wcsulex_abort_jmp_env, status) #line 6937 "wcsulex.c" #define INITIAL 0 #define PAREN 1 #define PREFIX 2 #define UNITS 3 #define EXPON 4 #define FLUSH 5 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int wcsulexlex_destroy (void ); int wcsulexget_debug (void ); void wcsulexset_debug (int debug_flag ); YY_EXTRA_TYPE wcsulexget_extra (void ); void wcsulexset_extra (YY_EXTRA_TYPE user_defined ); FILE *wcsulexget_in (void ); void wcsulexset_in (FILE * in_str ); FILE *wcsulexget_out (void ); void wcsulexset_out (FILE * out_str ); int wcsulexget_leng (void ); char *wcsulexget_text (void ); int wcsulexget_lineno (void ); void wcsulexset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int wcsulexwrap (void ); #else extern int wcsulexwrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( wcsulextext, wcsulexleng, 1, wcsulexout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ errno=0; \ while ( (result = read( fileno(wcsulexin), (char *) buf, max_size )) < 0 ) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(wcsulexin); \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int wcsulexlex (void); #define YY_DECL int wcsulexlex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after wcsulextext and wcsulexleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ if ( wcsulexleng > 0 ) \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ (wcsulextext[wcsulexleng - 1] == '\n'); \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 113 "wcsulex.l" static const char *function = "wcsulexe"; int bracket = 0; int operator = 0; int paren = 0; int status = 0; int func_r, i, j; double dexp, expon, factor, factor_r, types[WCSUNITS_NTYPE]; YY_BUFFER_STATE buf; void add(double *factor, double types[], double *expon, double *scale, double units[]); int wcsulexlex_destroy(void); *func = 0; for (i = 0; i < WCSUNITS_NTYPE; i++) { units[i] = 0.0; types[i] = 0.0; } expon = 1.0; factor = 1.0; *scale = 1.0; wcsulex_scan_string(unitstr); /* Return here via longjmp() invoked by yy_fatal_error(). */ if (setjmp(wcsulex_abort_jmp_env)) { return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), "Internal units parser error parsing '%s'", unitstr); } BEGIN(INITIAL); #ifdef DEBUG fprintf(stderr, "\n%s ->\n", unitstr); #endif #line 7154 "wcsulex.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! wcsulexin ) wcsulexin = stdin; if ( ! wcsulexout ) wcsulexout = stdout; if ( ! YY_CURRENT_BUFFER ) { wcsulexensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = wcsulex_create_buffer(wcsulexin,YY_BUF_SIZE ); } wcsulex_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { (yy_more_len) = 0; if ( (yy_more_flag) ) { (yy_more_len) = (yy_c_buf_p) - (yytext_ptr); (yy_more_flag) = 0; } yy_cp = (yy_c_buf_p); /* Support of wcsulextext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); yy_match: while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) { if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } ++yy_cp; } yy_current_state = -yy_current_state; yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos) + 1; yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 150 "wcsulex.l" { /* Pretend initial whitespace doesn't exist. */ yy_set_bol(1); } YY_BREAK case 2: YY_RULE_SETUP #line 155 "wcsulex.l" { if (bracket++) { BEGIN(FLUSH); } else { yy_set_bol(1); } } YY_BREAK case 3: YY_RULE_SETUP #line 163 "wcsulex.l" { status = wcserr_set(WCSERR_SET(UNITSERR_BAD_NUM_MULTIPLIER), "Invalid exponent in '%s'", unitstr); BEGIN(FLUSH); } YY_BREAK case 4: YY_RULE_SETUP #line 169 "wcsulex.l" { factor = 10.0; BEGIN(EXPON); } YY_BREAK case 5: YY_RULE_SETUP #line 174 "wcsulex.l" { *func = 1; unput('('); BEGIN(PAREN); } YY_BREAK case 6: YY_RULE_SETUP #line 180 "wcsulex.l" { *func = 2; unput('('); BEGIN(PAREN); } YY_BREAK case 7: YY_RULE_SETUP #line 186 "wcsulex.l" { *func = 3; unput('('); BEGIN(PAREN); } YY_BREAK case 8: YY_RULE_SETUP #line 192 "wcsulex.l" { /* Leading binary multiply. */ status = wcserr_set(WCSERR_SET(UNITSERR_DANGLING_BINOP), "Dangling binary operator in '%s'", unitstr); BEGIN(FLUSH); } YY_BREAK case 9: YY_RULE_SETUP #line 199 "wcsulex.l" /* Discard whitespace in INITIAL context. */ YY_BREAK case 10: YY_RULE_SETUP #line 201 "wcsulex.l" { expon /= 2.0; unput('('); BEGIN(PAREN); } YY_BREAK case 11: YY_RULE_SETUP #line 207 "wcsulex.l" { /* Gather terms in parentheses. */ yyless(0); BEGIN(PAREN); } YY_BREAK case 12: YY_RULE_SETUP #line 213 "wcsulex.l" { if (operator++) { BEGIN(FLUSH); } } YY_BREAK case 13: #line 220 "wcsulex.l" case 14: YY_RULE_SETUP #line 220 "wcsulex.l" { if (operator++) { BEGIN(FLUSH); } else { expon *= -1.0; } } YY_BREAK case 15: YY_RULE_SETUP #line 228 "wcsulex.l" { operator = 0; yyless(0); BEGIN(UNITS); } YY_BREAK case 16: #line 235 "wcsulex.l" case 17: #line 236 "wcsulex.l" case 18: YY_RULE_SETUP #line 236 "wcsulex.l" { operator = 0; yyless(0); BEGIN(PREFIX); } YY_BREAK case 19: YY_RULE_SETUP #line 242 "wcsulex.l" { bracket = !bracket; BEGIN(FLUSH); } YY_BREAK case 20: YY_RULE_SETUP #line 247 "wcsulex.l" { status = wcserr_set(WCSERR_SET(UNITSERR_BAD_INITIAL_SYMBOL), "Invalid symbol in INITIAL context in '%s'", unitstr); BEGIN(FLUSH); } YY_BREAK case 21: YY_RULE_SETUP #line 253 "wcsulex.l" { paren++; operator = 0; yymore(); } YY_BREAK case 22: YY_RULE_SETUP #line 259 "wcsulex.l" { paren--; if (paren) { /* Not balanced yet. */ yymore(); } else { /* Balanced; strip off the outer parentheses and recurse. */ wcsulextext[wcsulexleng-1] = '\0'; buf = YY_CURRENT_BUFFER; status = wcsulexe(wcsulextext+1, &func_r, &factor_r, types, err); wcsulex_switch_to_buffer(buf); if (func_r) { status = wcserr_set(WCSERR_SET(UNITSERR_FUNCTION_CONTEXT), "Function in invalid context in '%s'", unitstr); } if (status) { BEGIN(FLUSH); } else { factor *= factor_r; BEGIN(EXPON); } } } YY_BREAK case 23: /* rule 23 can match eol */ YY_RULE_SETUP #line 287 "wcsulex.l" { yymore(); } YY_BREAK case 24: YY_RULE_SETUP #line 291 "wcsulex.l" { factor = 1e-1; BEGIN(UNITS); } YY_BREAK case 25: YY_RULE_SETUP #line 296 "wcsulex.l" { factor = 1e-2; BEGIN(UNITS); } YY_BREAK case 26: YY_RULE_SETUP #line 301 "wcsulex.l" { factor = 1e-3; BEGIN(UNITS); } YY_BREAK case 27: YY_RULE_SETUP #line 306 "wcsulex.l" { factor = 1e-6; BEGIN(UNITS); } YY_BREAK case 28: YY_RULE_SETUP #line 311 "wcsulex.l" { factor = 1e-9; BEGIN(UNITS); } YY_BREAK case 29: YY_RULE_SETUP #line 316 "wcsulex.l" { factor = 1e-12; BEGIN(UNITS); } YY_BREAK case 30: YY_RULE_SETUP #line 321 "wcsulex.l" { factor = 1e-15; BEGIN(UNITS); } YY_BREAK case 31: YY_RULE_SETUP #line 326 "wcsulex.l" { factor = 1e-18; BEGIN(UNITS); } YY_BREAK case 32: YY_RULE_SETUP #line 331 "wcsulex.l" { factor = 1e-21; BEGIN(UNITS); } YY_BREAK case 33: YY_RULE_SETUP #line 336 "wcsulex.l" { factor = 1e-24; BEGIN(UNITS); } YY_BREAK case 34: YY_RULE_SETUP #line 341 "wcsulex.l" { factor = 1e+1; BEGIN(UNITS); } YY_BREAK case 35: YY_RULE_SETUP #line 346 "wcsulex.l" { factor = 1e+2; BEGIN(UNITS); } YY_BREAK case 36: YY_RULE_SETUP #line 351 "wcsulex.l" { factor = 1e+3; BEGIN(UNITS); } YY_BREAK case 37: YY_RULE_SETUP #line 356 "wcsulex.l" { factor = 1e+6; BEGIN(UNITS); } YY_BREAK case 38: YY_RULE_SETUP #line 361 "wcsulex.l" { factor = 1e+9; BEGIN(UNITS); } YY_BREAK case 39: YY_RULE_SETUP #line 366 "wcsulex.l" { factor = 1e+12; BEGIN(UNITS); } YY_BREAK case 40: YY_RULE_SETUP #line 371 "wcsulex.l" { factor = 1e+15; BEGIN(UNITS); } YY_BREAK case 41: YY_RULE_SETUP #line 376 "wcsulex.l" { factor = 1e+18; BEGIN(UNITS); } YY_BREAK case 42: YY_RULE_SETUP #line 381 "wcsulex.l" { factor = 1e+21; BEGIN(UNITS); } YY_BREAK case 43: YY_RULE_SETUP #line 386 "wcsulex.l" { factor = 1e+24; BEGIN(UNITS); } YY_BREAK case 44: YY_RULE_SETUP #line 391 "wcsulex.l" { /* Internal parser error. */ status = wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), "Internal units parser error parsing '%s'", unitstr); BEGIN(FLUSH); } YY_BREAK case 45: YY_RULE_SETUP #line 398 "wcsulex.l" { /* Ampere. */ types[WCSUNITS_CHARGE] += 1.0; types[WCSUNITS_TIME] -= 1.0; BEGIN(EXPON); } YY_BREAK case 46: YY_RULE_SETUP #line 405 "wcsulex.l" { /* Year (annum). */ factor *= 31557600.0; types[WCSUNITS_TIME] += 1.0; BEGIN(EXPON); } YY_BREAK case 47: YY_RULE_SETUP #line 412 "wcsulex.l" { /* Analogue-to-digital converter units. */ types[WCSUNITS_COUNT] += 1.0; BEGIN(EXPON); } YY_BREAK case 48: YY_RULE_SETUP #line 418 "wcsulex.l" { /* Angstrom. */ factor *= 1e-10; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } YY_BREAK case 49: YY_RULE_SETUP #line 425 "wcsulex.l" { /* Minute of arc. */ factor /= 60.0; types[WCSUNITS_PLANE_ANGLE] += 1.0; BEGIN(EXPON); } YY_BREAK case 50: YY_RULE_SETUP #line 432 "wcsulex.l" { /* Second of arc. */ factor /= 3600.0; types[WCSUNITS_PLANE_ANGLE] += 1.0; BEGIN(EXPON); } YY_BREAK case 51: YY_RULE_SETUP #line 439 "wcsulex.l" { /* Astronomical unit. */ factor *= 1.49598e+11; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } YY_BREAK case 52: YY_RULE_SETUP #line 446 "wcsulex.l" { /* Barn. */ factor *= 1e-28; types[WCSUNITS_LENGTH] += 2.0; BEGIN(EXPON); } YY_BREAK case 53: YY_RULE_SETUP #line 453 "wcsulex.l" { /* Beam, as in Jy/beam. */ types[WCSUNITS_BEAM] += 1.0; BEGIN(EXPON); } YY_BREAK case 54: YY_RULE_SETUP #line 459 "wcsulex.l" { /* Bin (e.g. histogram). */ types[WCSUNITS_BIN] += 1.0; BEGIN(EXPON); } YY_BREAK case 55: YY_RULE_SETUP #line 465 "wcsulex.l" { /* Bit. */ types[WCSUNITS_BIT] += 1.0; BEGIN(EXPON); } YY_BREAK case 56: YY_RULE_SETUP #line 471 "wcsulex.l" { /* Byte. */ factor *= 8.0; types[WCSUNITS_BIT] += 1.0; BEGIN(EXPON); } YY_BREAK case 57: YY_RULE_SETUP #line 478 "wcsulex.l" { /* Coulomb. */ types[WCSUNITS_CHARGE] += 1.0; BEGIN(EXPON); } YY_BREAK case 58: YY_RULE_SETUP #line 484 "wcsulex.l" { /* Candela. */ types[WCSUNITS_LUMINTEN] += 1.0; BEGIN(EXPON); } YY_BREAK case 59: YY_RULE_SETUP #line 490 "wcsulex.l" { /* Channel. */ types[WCSUNITS_BIN] += 1.0; BEGIN(EXPON); } YY_BREAK case 60: YY_RULE_SETUP #line 496 "wcsulex.l" { /* Count. */ types[WCSUNITS_COUNT] += 1.0; BEGIN(EXPON); } YY_BREAK case 61: YY_RULE_SETUP #line 502 "wcsulex.l" { /* Debye. */ factor *= 1e-29 / 3.0; types[WCSUNITS_CHARGE] += 1.0; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } YY_BREAK case 62: YY_RULE_SETUP #line 510 "wcsulex.l" { /* Day. */ factor *= 86400.0; types[WCSUNITS_TIME] += 1.0; BEGIN(EXPON); } YY_BREAK case 63: YY_RULE_SETUP #line 517 "wcsulex.l" { /* Degree. */ types[WCSUNITS_PLANE_ANGLE] += 1.0; BEGIN(EXPON); } YY_BREAK case 64: YY_RULE_SETUP #line 523 "wcsulex.l" { /* Erg. */ factor *= 1e-7; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } YY_BREAK case 65: YY_RULE_SETUP #line 532 "wcsulex.l" { /* Electron volt. */ factor *= 1.6021765e-19; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } YY_BREAK case 66: YY_RULE_SETUP #line 541 "wcsulex.l" { /* Farad. */ types[WCSUNITS_MASS] -= 1.0; types[WCSUNITS_LENGTH] -= 2.0; types[WCSUNITS_TIME] += 3.0; types[WCSUNITS_CHARGE] += 2.0; BEGIN(EXPON); } YY_BREAK case 67: YY_RULE_SETUP #line 550 "wcsulex.l" { /* Gauss. */ factor *= 1e-4; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_TIME] += 1.0; types[WCSUNITS_CHARGE] -= 1.0; BEGIN(EXPON); } YY_BREAK case 68: YY_RULE_SETUP #line 559 "wcsulex.l" { /* Gram. */ factor *= 1e-3; types[WCSUNITS_MASS] += 1.0; BEGIN(EXPON); } YY_BREAK case 69: YY_RULE_SETUP #line 566 "wcsulex.l" { /* Henry. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] += 2.0; types[WCSUNITS_CHARGE] -= 2.0; BEGIN(EXPON); } YY_BREAK case 70: YY_RULE_SETUP #line 575 "wcsulex.l" { /* Hour. */ factor *= 3600.0; types[WCSUNITS_TIME] += 1.0; BEGIN(EXPON); } YY_BREAK case 71: YY_RULE_SETUP #line 582 "wcsulex.l" { /* Hertz. */ types[WCSUNITS_TIME] -= 1.0; BEGIN(EXPON); } YY_BREAK case 72: YY_RULE_SETUP #line 588 "wcsulex.l" { /* Joule. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } YY_BREAK case 73: YY_RULE_SETUP #line 596 "wcsulex.l" { /* Jansky. */ factor *= 1e-26; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } YY_BREAK case 74: YY_RULE_SETUP #line 604 "wcsulex.l" { /* Kelvin. */ types[WCSUNITS_TEMPERATURE] += 1.0; BEGIN(EXPON); } YY_BREAK case 75: YY_RULE_SETUP #line 610 "wcsulex.l" { /* Lumen. */ types[WCSUNITS_LUMINTEN] += 1.0; types[WCSUNITS_SOLID_ANGLE] += 1.0; BEGIN(EXPON); } YY_BREAK case 76: YY_RULE_SETUP #line 617 "wcsulex.l" { /* Lux. */ types[WCSUNITS_LUMINTEN] += 1.0; types[WCSUNITS_SOLID_ANGLE] += 1.0; types[WCSUNITS_LENGTH] -= 2.0; BEGIN(EXPON); } YY_BREAK case 77: YY_RULE_SETUP #line 625 "wcsulex.l" { /* Light year. */ factor *= 2.99792458e8 * 31557600.0; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } YY_BREAK case 78: YY_RULE_SETUP #line 632 "wcsulex.l" { /* Metre. */ types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } YY_BREAK case 79: YY_RULE_SETUP #line 638 "wcsulex.l" { /* Stellar magnitude. */ types[WCSUNITS_MAGNITUDE] += 1.0; BEGIN(EXPON); } YY_BREAK case 80: YY_RULE_SETUP #line 644 "wcsulex.l" { /* Milli-arcsec. */ factor /= 3600e+3; types[WCSUNITS_PLANE_ANGLE] += 1.0; BEGIN(EXPON); } YY_BREAK case 81: YY_RULE_SETUP #line 651 "wcsulex.l" { /* Minute. */ factor *= 60.0; types[WCSUNITS_TIME] += 1.0; BEGIN(EXPON); } YY_BREAK case 82: YY_RULE_SETUP #line 658 "wcsulex.l" { /* Mole. */ types[WCSUNITS_MOLE] += 1.0; BEGIN(EXPON); } YY_BREAK case 83: YY_RULE_SETUP #line 664 "wcsulex.l" { /* Newton. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 1.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } YY_BREAK case 84: YY_RULE_SETUP #line 672 "wcsulex.l" { /* Ohm. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 1.0; types[WCSUNITS_CHARGE] -= 2.0; BEGIN(EXPON); } YY_BREAK case 85: YY_RULE_SETUP #line 681 "wcsulex.l" { /* Pascal. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] -= 1.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } YY_BREAK case 86: YY_RULE_SETUP #line 689 "wcsulex.l" { /* Parsec. */ factor *= 3.0857e16; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } YY_BREAK case 87: YY_RULE_SETUP #line 696 "wcsulex.l" { /* Photon. */ types[WCSUNITS_COUNT] += 1.0; BEGIN(EXPON); } YY_BREAK case 88: YY_RULE_SETUP #line 702 "wcsulex.l" { /* Pixel. */ types[WCSUNITS_PIXEL] += 1.0; BEGIN(EXPON); } YY_BREAK case 89: YY_RULE_SETUP #line 708 "wcsulex.l" { /* Rayleigh. */ factor *= 1e10 / (4.0 * PI); types[WCSUNITS_LENGTH] -= 2.0; types[WCSUNITS_TIME] -= 1.0; types[WCSUNITS_SOLID_ANGLE] -= 1.0; BEGIN(EXPON); } YY_BREAK case 90: YY_RULE_SETUP #line 717 "wcsulex.l" { /* Radian. */ factor *= 180.0 / PI; types[WCSUNITS_PLANE_ANGLE] += 1.0; BEGIN(EXPON); } YY_BREAK case 91: YY_RULE_SETUP #line 724 "wcsulex.l" { /* Rydberg. */ factor *= 13.605692 * 1.6021765e-19; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } YY_BREAK case 92: YY_RULE_SETUP #line 733 "wcsulex.l" { /* Siemen. */ types[WCSUNITS_MASS] -= 1.0; types[WCSUNITS_LENGTH] -= 2.0; types[WCSUNITS_TIME] += 1.0; types[WCSUNITS_CHARGE] += 2.0; BEGIN(EXPON); } YY_BREAK case 93: YY_RULE_SETUP #line 742 "wcsulex.l" { /* Second. */ types[WCSUNITS_TIME] += 1.0; BEGIN(EXPON); } YY_BREAK case 94: YY_RULE_SETUP #line 748 "wcsulex.l" { /* Solar luminosity. */ factor *= 3.8268e26; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 3.0; BEGIN(EXPON); } YY_BREAK case 95: YY_RULE_SETUP #line 757 "wcsulex.l" { /* Solar mass. */ factor *= 1.9891e30; types[WCSUNITS_MASS] += 1.0; BEGIN(EXPON); } YY_BREAK case 96: YY_RULE_SETUP #line 764 "wcsulex.l" { /* Solar radius. */ factor *= 6.9599e8; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } YY_BREAK case 97: YY_RULE_SETUP #line 771 "wcsulex.l" { /* Steradian. */ types[WCSUNITS_SOLID_ANGLE] += 1.0; BEGIN(EXPON); } YY_BREAK case 98: YY_RULE_SETUP #line 777 "wcsulex.l" { /* Sun (with respect to). */ types[WCSUNITS_SOLRATIO] += 1.0; BEGIN(EXPON); } YY_BREAK case 99: YY_RULE_SETUP #line 783 "wcsulex.l" { /* Tesla. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_TIME] += 1.0; types[WCSUNITS_CHARGE] -= 1.0; BEGIN(EXPON); } YY_BREAK case 100: YY_RULE_SETUP #line 791 "wcsulex.l" { /* Unified atomic mass unit. */ factor *= 1.6605387e-27; types[WCSUNITS_MASS] += 1.0; BEGIN(EXPON); } YY_BREAK case 101: YY_RULE_SETUP #line 798 "wcsulex.l" { /* Volt. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 1.0; types[WCSUNITS_TIME] -= 2.0; types[WCSUNITS_CHARGE] -= 1.0; BEGIN(EXPON); } YY_BREAK case 102: YY_RULE_SETUP #line 807 "wcsulex.l" { /* Voxel. */ types[WCSUNITS_VOXEL] += 1.0; BEGIN(EXPON); } YY_BREAK case 103: YY_RULE_SETUP #line 813 "wcsulex.l" { /* Watt. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 3.0; BEGIN(EXPON); } YY_BREAK case 104: YY_RULE_SETUP #line 821 "wcsulex.l" { /* Weber. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] += 1.0; types[WCSUNITS_CHARGE] -= 1.0; BEGIN(EXPON); } YY_BREAK case 105: YY_RULE_SETUP #line 830 "wcsulex.l" { /* Internal parser error. */ status = wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), "Internal units parser error parsing '%s'", unitstr); BEGIN(FLUSH); } YY_BREAK case 106: YY_RULE_SETUP #line 837 "wcsulex.l" { /* Exponentiation. */ if (operator++) { BEGIN(FLUSH); } } YY_BREAK case 107: YY_RULE_SETUP #line 844 "wcsulex.l" { sscanf(wcsulextext, " %d", &i); expon *= (double)i; add(&factor, types, &expon, scale, units); operator = 0; BEGIN(INITIAL); } YY_BREAK case 108: YY_RULE_SETUP #line 852 "wcsulex.l" { sscanf(wcsulextext, " (%d)", &i); expon *= (double)i; add(&factor, types, &expon, scale, units); operator = 0; BEGIN(INITIAL); } YY_BREAK case 109: YY_RULE_SETUP #line 860 "wcsulex.l" { sscanf(wcsulextext, " (%d/%d)", &i, &j); expon *= (double)i / (double)j; add(&factor, types, &expon, scale, units); operator = 0; BEGIN(INITIAL); } YY_BREAK case 110: YY_RULE_SETUP #line 868 "wcsulex.l" { sscanf(wcsulextext, " (%lf)", &dexp); expon *= dexp; add(&factor, types, &expon, scale, units); operator = 0; BEGIN(INITIAL); } YY_BREAK case 111: YY_RULE_SETUP #line 876 "wcsulex.l" { /* Multiply. */ if (operator++) { BEGIN(FLUSH); } else { add(&factor, types, &expon, scale, units); BEGIN(INITIAL); } } YY_BREAK case 112: YY_RULE_SETUP #line 886 "wcsulex.l" { /* Multiply. */ if (operator) { BEGIN(FLUSH); } else { add(&factor, types, &expon, scale, units); unput('('); BEGIN(INITIAL); } } YY_BREAK case 113: YY_RULE_SETUP #line 897 "wcsulex.l" { /* Multiply. */ if (operator) { BEGIN(FLUSH); } else { add(&factor, types, &expon, scale, units); BEGIN(INITIAL); } } YY_BREAK case 114: YY_RULE_SETUP #line 907 "wcsulex.l" { /* Divide. */ if (operator++) { BEGIN(FLUSH); } else { add(&factor, types, &expon, scale, units); expon = -1.0; BEGIN(INITIAL); } } YY_BREAK case 115: YY_RULE_SETUP #line 918 "wcsulex.l" { add(&factor, types, &expon, scale, units); bracket = !bracket; BEGIN(FLUSH); } YY_BREAK case 116: YY_RULE_SETUP #line 924 "wcsulex.l" { status = wcserr_set(WCSERR_SET(UNITSERR_BAD_EXPON_SYMBOL), "Invalid symbol in EXPON context in '%s'", unitstr); BEGIN(FLUSH); } YY_BREAK case 117: YY_RULE_SETUP #line 930 "wcsulex.l" { /* Discard any remaining input. */ } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(PAREN): case YY_STATE_EOF(PREFIX): case YY_STATE_EOF(UNITS): case YY_STATE_EOF(EXPON): case YY_STATE_EOF(FLUSH): #line 934 "wcsulex.l" { /* End-of-string. */ if (YY_START == EXPON) { add(&factor, types, &expon, scale, units); } wcsulexlex_destroy(); if (bracket) { status = wcserr_set(WCSERR_SET(UNITSERR_UNBAL_BRACKET), "Unbalanced bracket in '%s'", unitstr); } else if (paren) { status = wcserr_set(WCSERR_SET(UNITSERR_UNBAL_PAREN), "Unbalanced parenthesis in '%s'", unitstr); } else if (operator == 1) { status = wcserr_set(WCSERR_SET(UNITSERR_DANGLING_BINOP), "Dangling binary operator in '%s'", unitstr); } else if (operator) { status = wcserr_set(WCSERR_SET(UNITSERR_CONSEC_BINOPS), "Consecutive binary operators in '%s'", unitstr); #ifdef DEBUG } else { fprintf(stderr, "EOS\n"); #endif } if (status) { for (i = 0; i < WCSUNITS_NTYPE; i++) { units[i] = 0.0; *scale = 0.0; } } return status; } YY_BREAK case 118: YY_RULE_SETUP #line 970 "wcsulex.l" ECHO; YY_BREAK #line 8410 "wcsulex.c" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed wcsulexin at a new source and called * wcsulexlex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = wcsulexin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( wcsulexwrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * wcsulextext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of wcsulexlex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ wcsulexrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; wcsulexrestart(wcsulexin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) wcsulexrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { if ( *yy_cp ) { yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; } else yy_current_state = yy_NUL_trans[yy_current_state]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); yy_current_state = yy_NUL_trans[yy_current_state]; yy_is_jam = (yy_current_state == 0); if ( ! yy_is_jam ) { if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } } return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up wcsulextext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ wcsulexrestart(wcsulexin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( wcsulexwrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve wcsulextext */ (yy_hold_char) = *++(yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void wcsulexrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ wcsulexensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = wcsulex_create_buffer(wcsulexin,YY_BUF_SIZE ); } wcsulex_init_buffer(YY_CURRENT_BUFFER,input_file ); wcsulex_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void wcsulex_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * wcsulexpop_buffer_state(); * wcsulexpush_buffer_state(new_buffer); */ wcsulexensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; wcsulex_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (wcsulexwrap()) processing, but the only time this flag * is looked at is after wcsulexwrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void wcsulex_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; wcsulexin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE wcsulex_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) wcsulexalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in wcsulex_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) wcsulexalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in wcsulex_create_buffer()" ); b->yy_is_our_buffer = 1; wcsulex_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with wcsulex_create_buffer() * */ void wcsulex_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) wcsulexfree((void *) b->yy_ch_buf ); wcsulexfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a wcsulexrestart() or at EOF. */ static void wcsulex_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; wcsulex_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then wcsulex_init_buffer was _probably_ * called from wcsulexrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void wcsulex_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) wcsulex_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void wcsulexpush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; wcsulexensure_buffer_stack(); /* This block is copied from wcsulex_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from wcsulex_switch_to_buffer. */ wcsulex_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void wcsulexpop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; wcsulex_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { wcsulex_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void wcsulexensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)wcsulexalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in wcsulexensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)wcsulexrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in wcsulexensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE wcsulex_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) wcsulexalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in wcsulex_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; wcsulex_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to wcsulexlex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * wcsulex_scan_bytes() instead. */ YY_BUFFER_STATE wcsulex_scan_string (yyconst char * yystr ) { return wcsulex_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to wcsulexlex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE wcsulex_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) wcsulexalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in wcsulex_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = wcsulex_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in wcsulex_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up wcsulextext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ wcsulextext[wcsulexleng] = (yy_hold_char); \ (yy_c_buf_p) = wcsulextext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ wcsulexleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int wcsulexget_lineno (void) { return wcsulexlineno; } /** Get the input stream. * */ FILE *wcsulexget_in (void) { return wcsulexin; } /** Get the output stream. * */ FILE *wcsulexget_out (void) { return wcsulexout; } /** Get the length of the current token. * */ int wcsulexget_leng (void) { return wcsulexleng; } /** Get the current token. * */ char *wcsulexget_text (void) { return wcsulextext; } /** Set the current line number. * @param line_number * */ void wcsulexset_lineno (int line_number ) { wcsulexlineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see wcsulex_switch_to_buffer */ void wcsulexset_in (FILE * in_str ) { wcsulexin = in_str ; } void wcsulexset_out (FILE * out_str ) { wcsulexout = out_str ; } int wcsulexget_debug (void) { return wcsulex_flex_debug; } void wcsulexset_debug (int bdebug ) { wcsulex_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from wcsulexlex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT wcsulexin = stdin; wcsulexout = stdout; #else wcsulexin = (FILE *) 0; wcsulexout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * wcsulexlex_init() */ return 0; } /* wcsulexlex_destroy is for both reentrant and non-reentrant scanners. */ int wcsulexlex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ wcsulex_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; wcsulexpop_buffer_state(); } /* Destroy the stack itself. */ wcsulexfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * wcsulexlex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *wcsulexalloc (yy_size_t size ) { return (void *) malloc( size ); } void *wcsulexrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void wcsulexfree (void * ptr ) { free( (char *) ptr ); /* see wcsulexrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 970 "wcsulex.l" /*---------------------------------------------------------------------------- * Accumulate a term in a units specification and reset work variables. *---------------------------------------------------------------------------*/ void add( double *factor, double types[], double *expon, double *scale, double units[]) { int i; *scale *= pow(*factor, *expon); for (i = 0; i < WCSUNITS_NTYPE; i++) { units[i] += *expon * types[i]; types[i] = 0.0; } *expon = 1.0; *factor = 1.0; return; } pywcs-1.12/wcslib/C/flexed/wcsutrn.c0000644001153600020070000066655212310355626021457 0ustar cslocumSTSCI\science00000000000000#line 2 "wcsutrn.c" #line 4 "wcsutrn.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define yy_create_buffer wcsutrn_create_buffer #define yy_delete_buffer wcsutrn_delete_buffer #define yy_flex_debug wcsutrn_flex_debug #define yy_init_buffer wcsutrn_init_buffer #define yy_flush_buffer wcsutrn_flush_buffer #define yy_load_buffer_state wcsutrn_load_buffer_state #define yy_switch_to_buffer wcsutrn_switch_to_buffer #define yyin wcsutrnin #define yyleng wcsutrnleng #define yylex wcsutrnlex #define yylineno wcsutrnlineno #define yyout wcsutrnout #define yyrestart wcsutrnrestart #define yytext wcsutrntext #define yywrap wcsutrnwrap #define yyalloc wcsutrnalloc #define yyrealloc wcsutrnrealloc #define yyfree wcsutrnfree #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE wcsutrnrestart(wcsutrnin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int wcsutrnleng; extern FILE *wcsutrnin, *wcsutrnout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up wcsutrntext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up wcsutrntext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via wcsutrnrestart()), so that the user can continue scanning by * just pointing wcsutrnin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when wcsutrntext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int wcsutrnleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow wcsutrnwrap()'s to do buffer switches * instead of setting up a fresh wcsutrnin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void wcsutrnrestart (FILE *input_file ); void wcsutrn_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE wcsutrn_create_buffer (FILE *file,int size ); void wcsutrn_delete_buffer (YY_BUFFER_STATE b ); void wcsutrn_flush_buffer (YY_BUFFER_STATE b ); void wcsutrnpush_buffer_state (YY_BUFFER_STATE new_buffer ); void wcsutrnpop_buffer_state (void ); static void wcsutrnensure_buffer_stack (void ); static void wcsutrn_load_buffer_state (void ); static void wcsutrn_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER wcsutrn_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE wcsutrn_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE wcsutrn_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE wcsutrn_scan_bytes (yyconst char *bytes,int len ); void *wcsutrnalloc (yy_size_t ); void *wcsutrnrealloc (void *,yy_size_t ); void wcsutrnfree (void * ); #define yy_new_buffer wcsutrn_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ wcsutrnensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ wcsutrn_create_buffer(wcsutrnin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ wcsutrnensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ wcsutrn_create_buffer(wcsutrnin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define wcsutrnwrap(n) 1 #define YY_SKIP_YYWRAP typedef char YY_CHAR; FILE *wcsutrnin = (FILE *) 0, *wcsutrnout = (FILE *) 0; typedef int yy_state_type; extern int wcsutrnlineno; int wcsutrnlineno = 1; extern char *wcsutrntext; #define yytext_ptr wcsutrntext static yyconst flex_int16_t yy_nxt[][128] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10, 11, 12, 13, 12, 12, 14, 15, 12, 16, 17, 12, 18, 12, 19, 20, 12, 21, 22, 12, 12, 23, 12, 12, 24, 12, 8, 8, 8, 8, 8, 8, 25, 12, 12, 26, 12, 12, 12, 27, 12, 12, 28, 12, 29, 12, 12, 30, 12, 31, 32, 12, 12, 33, 12, 12, 34, 12, 8, 8, 8, 8, 8 }, { 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 35, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10, 11, 12, 13, 12, 12, 14, 15, 12, 16, 17, 12, 18, 12, 19, 20, 12, 21, 22, 12, 12, 23, 12, 12, 24, 12, 36, 8, 8, 8, 8, 8, 25, 12, 12, 26, 12, 12, 12, 27, 12, 12, 28, 12, 29, 12, 12, 30, 12, 31, 32, 12, 12, 33, 12, 12, 34, 12, 8, 8, 8, 8, 8 }, { 7, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 39, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 37, 37, 37, 37, 37, 37, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 37, 37, 37, 37, 37 }, { 7, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 39, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 37, 37, 37, 37, 37, 37, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 37, 37, 37, 37, 37 }, { 7, 41, 41, 41, 41, 41, 41, 41, 41, 41, 38, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41 }, { 7, 41, 41, 41, 41, 41, 41, 41, 41, 41, 38, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41 }, { -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7 }, { 7, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, -8 }, { 7, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, 42, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9 }, { 7, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 43, 43, 43, 43, 43, 43, 43, 43, -10, -10, -10, -10, -10, -10, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -10, -10, -10, -10, -10 }, { 7, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 43, 43, 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -11, -11, -11, -11, -11, -11, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 46, 43, -11, -11, -11, -11, -11 }, { 7, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -12, -12, -12, -12, -12, -12, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -12, -12, -12, -12, -12 }, { 7, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, 47, 43, 43, 43, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -13, -13, -13, -13, -13, -13, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -13, -13, -13, -13, -13 }, { 7, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, 43, 43, 43, 43, 43, 43, 43, 49, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -14, -14, -14, -14, -14, -14, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -14, -14, -14, -14, -14 }, { 7, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 50, 43, 43, 43, 43, 43, 43, 43, 51, -15, -15, -15, -15, -15, -15, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -15, -15, -15, -15, -15 }, { 7, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 52, 43, -16, -16, -16, -16, -16, -16, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -16, -16, -16, -16, -16 }, { 7, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, 43, 43, 43, 43, 53, 43, 43, 54, 43, 43, 43, 43, 55, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -17, -17, -17, -17, -17, -17, 43, 43, 43, 43, 56, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -17, -17, -17, -17, -17 }, { 7, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, 43, 43, 43, 43, 57, 43, 43, 58, 59, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -18, -18, -18, -18, -18, -18, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -18, -18, -18, -18, -18 }, { 7, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -19, -19, -19, -19, -19, -19, 43, 43, 43, 43, 43, 43, 43, 60, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -19, -19, -19, -19, -19 }, { 7, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 61, 43, 43, 43, 43, 43, 43, 43, 62, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -20, -20, -20, -20, -20, -20, 63, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -20, -20, -20, -20, -20 }, { 7, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, 64, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -21, -21, -21, -21, -21, -21, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -21, -21, -21, -21, -21 }, { 7, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, 43, 43, 43, 43, 65, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -22, -22, -22, -22, -22, -22, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -22, -22, -22, -22, -22 }, { 7, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 66, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -23, -23, -23, -23, -23, -23, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 67, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -23, -23, -23, -23, -23 }, { 7, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 43, 43, 43, 43, 68, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 69, 43, 43, 43, 43, 43, 43, 43, 43, -24, -24, -24, -24, -24, -24, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -24, -24, -24, -24, -24 }, { 7, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -25, -25, -25, -25, -25, -25, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 70, 43, 43, 43, 71, 43, 43, 43, 43, 43, 43, 43, 43, -25, -25, -25, -25, -25 }, { 7, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -26, -26, -26, -26, -26, -26, 72, 43, 43, 43, 73, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -26, -26, -26, -26, -26 }, { 7, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -27, -27, -27, -27, -27, -27, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 50, 43, 43, 43, 43, 43, 43, 43, 51, -27, -27, -27, -27, -27 }, { 7, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -28, -28, -28, -28, -28, -28, 43, 43, 43, 43, 56, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -28, -28, -28, -28, -28 }, { 7, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -29, -29, -29, -29, -29, -29, 43, 43, 43, 43, 74, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -29, -29, -29, -29, -29 }, { 7, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -30, -30, -30, -30, -30, -30, 63, 43, 43, 43, 43, 43, 43, 43, 75, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -30, -30, -30, -30, -30 }, { 7, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -31, -31, -31, -31, -31, -31, 76, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -31, -31, -31, -31, -31 }, { 7, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -32, -32, -32, -32, -32, -32, 43, 43, 43, 43, 77, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -32, -32, -32, -32, -32 }, { 7, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -33, -33, -33, -33, -33, -33, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 67, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -33, -33, -33, -33, -33 }, { 7, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -34, -34, -34, -34, -34, -34, 43, 43, 43, 43, 78, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -34, -34, -34, -34, -34 }, { 7, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 79, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, 80, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35 }, { 7, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36 }, { 7, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37 }, { 7, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38 }, { 7, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 81, 81, 81, 81, 81 }, { 7, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, -40, -40, -40, -40, -40, -40, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, -40, -40, -40, -40, -40 }, { 7, 85, 85, 85, 85, 85, 85, 85, 85, 85, -41, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 }, { 7, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, 42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42 }, { 7, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -43, -43, -43, -43, -43, -43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -43, -43, -43, -43, -43 }, { 7, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, 43, 43, 86, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -44, -44, -44, -44, -44, -44, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -44, -44, -44, -44, -44 }, { 7, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, 87, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -45, -45, -45, -45, -45, -45, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -45, -45, -45, -45, -45 }, { 7, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -46, -46, -46, -46, -46, -46, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 88, 43, 43, 43, 43, 43, 43, -46, -46, -46, -46, -46 }, { 7, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 89, 43, -47, -47, -47, -47, -47, -47, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -47, -47, -47, -47, -47 }, { 7, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, 43, 43, 43, 43, 43, 43, 90, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -48, -48, -48, -48, -48, -48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -48, -48, -48, -48, -48 }, { 7, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 91, -49, -49, -49, -49, -49, -49, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -49, -49, -49, -49, -49 }, { 7, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -50, -50, -50, -50, -50, -50, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -50, -50, -50, -50, -50 }, { 7, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -51, -51, -51, -51, -51, -51, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -51, -51, -51, -51, -51 }, { 7, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -52, -52, -52, -52, -52, -52, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -52, -52, -52, -52, -52 }, { 7, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 92, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -53, -53, -53, -53, -53, -53, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -53, -53, -53, -53, -53 }, { 7, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 93, -54, -54, -54, -54, -54, -54, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -54, -54, -54, -54, -54 }, { 7, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -55, -55, -55, -55, -55, -55, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -55, -55, -55, -55, -55 }, { 7, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -56, -56, -56, -56, -56, -56, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 94, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -56, -56, -56, -56, -56 }, { 7, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 95, 43, 43, 43, 43, 43, 43, -57, -57, -57, -57, -57, -57, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -57, -57, -57, -57, -57 }, { 7, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 96, -58, -58, -58, -58, -58, -58, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -58, -58, -58, -58, -58 }, { 7, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 97, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -59, -59, -59, -59, -59, -59, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -59, -59, -59, -59, -59 }, { 7, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -60, -60, -60, -60, -60, -60, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 98, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -60, -60, -60, -60, -60 }, { 7, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 99, 43, 43, 43, 43, 43, 43, 43, -61, -61, -61, -61, -61, -61, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -61, -61, -61, -61, -61 }, { 7, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 100, 43, 43, -62, -62, -62, -62, -62, -62, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -62, -62, -62, -62, -62 }, { 7, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -63, -63, -63, -63, -63, -63, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 101, 43, 43, 43, 43, 43, 43, 43, -63, -63, -63, -63, -63 }, { 7, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, 43, 43, 43, 102, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -64, -64, -64, -64, -64, -64, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -64, -64, -64, -64, -64 }, { 7, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, 43, 43, 103, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -65, -65, -65, -65, -65, -65, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -65, -65, -65, -65, -65 }, { 7, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 104, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -66, -66, -66, -66, -66, -66, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -66, -66, -66, -66, -66 }, { 7, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -67, -67, -67, -67, -67, -67, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 105, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -67, -67, -67, -67, -67 }, { 7, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, 106, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -68, -68, -68, -68, -68, -68, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -68, -68, -68, -68, -68 }, { 7, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -69, -69, -69, -69, -69, -69, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -69, -69, -69, -69, -69 }, { 7, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -70, -70, -70, -70, -70, -70, 43, 43, 43, 43, 43, 43, 107, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -70, -70, -70, -70, -70 }, { 7, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -71, -71, -71, -71, -71, -71, 43, 43, 108, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -71, -71, -71, -71, -71 }, { 7, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -72, -72, -72, -72, -72, -72, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 109, 43, -72, -72, -72, -72, -72 }, { 7, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -73, -73, -73, -73, -73, -73, 43, 43, 43, 43, 43, 43, 110, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -73, -73, -73, -73, -73 }, { 7, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -74, -74, -74, -74, -74, -74, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 111, 43, 43, 43, 43, 43, 43, -74, -74, -74, -74, -74 }, { 7, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -75, -75, -75, -75, -75, -75, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 112, 43, 43, -75, -75, -75, -75, -75 }, { 7, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -76, -76, -76, -76, -76, -76, 43, 43, 43, 113, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -76, -76, -76, -76, -76 }, { 7, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -77, -77, -77, -77, -77, -77, 43, 43, 114, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -77, -77, -77, -77, -77 }, { 7, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -78, -78, -78, -78, -78, -78, 115, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -78, -78, -78, -78, -78 }, { 7, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, 79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, 80, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, -79 }, { 7, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, -80 }, { 7, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, -81 }, { 7, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 81, 81, 81, 81, 81 }, { 7, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, -83 }, { 7, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, -84, -84, -84, -84, -84, -84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, -84, -84, -84, -84, -84 }, { 7, 85, 85, 85, 85, 85, 85, 85, 85, 85, -85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 }, { 7, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 116, 43, 43, 43, 43, 43, 117, 43, 43, 43, 43, 43, 43, 43, -86, -86, -86, -86, -86, -86, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -86, -86, -86, -86, -86 }, { 7, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 118, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -87, -87, -87, -87, -87, -87, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -87, -87, -87, -87, -87 }, { 7, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -88, -88, -88, -88, -88, -88, 43, 43, 43, 43, 119, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -88, -88, -88, -88, -88 }, { 7, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 120, 43, 43, 43, 43, 43, 43, 43, -89, -89, -89, -89, -89, -89, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -89, -89, -89, -89, -89 }, { 7, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 121, 43, 43, 43, 43, 43, 43, 43, 43, -90, -90, -90, -90, -90, -90, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -90, -90, -90, -90, -90 }, { 7, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -91, -91, -91, -91, -91, -91, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -91, -91, -91, -91, -91 }, { 7, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 122, 43, 43, 43, 43, -92, -92, -92, -92, -92, -92, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -92, -92, -92, -92, -92 }, { 7, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -93, -93, -93, -93, -93, -93, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -93, -93, -93, -93, -93 }, { 7, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -94, -94, -94, -94, -94, -94, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 123, 43, 43, 43, 43, -94, -94, -94, -94, -94 }, { 7, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, 43, 43, 43, 43, 124, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 125, 43, 43, 43, 43, 43, 43, 43, 43, -95, -95, -95, -95, -95, -95, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -95, -95, -95, -95, -95 }, { 7, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -96, -96, -96, -96, -96, -96, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -96, -96, -96, -96, -96 }, { 7, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -97, -97, -97, -97, -97, -97, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -97, -97, -97, -97, -97 }, { 7, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -98, -98, -98, -98, -98, -98, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -98, -98, -98, -98, -98 }, { 7, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, 43, 43, 126, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -99, -99, -99, -99, -99, -99, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -99, -99, -99, -99, -99 }, { 7, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, 43, 43, 43, 43, 127, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -100, -100, -100, -100, -100, -100, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -100, -100, -100, -100, -100 }, { 7, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -101, -101, -101, -101, -101, -101, 43, 43, 128, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -101, -101, -101, -101, -101 }, { 7, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, 43, 43, 43, 43, 43, 43, 43, 43, 129, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -102, -102, -102, -102, -102, -102, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -102, -102, -102, -102, -102 }, { 7, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 130, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -103, -103, -103, -103, -103, -103, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -103, -103, -103, -103, -103 }, { 7, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 131, 43, 43, 43, 43, 43, 43, -104, -104, -104, -104, -104, -104, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -104, -104, -104, -104, -104 }, { 7, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -105, -105, -105, -105, -105, -105, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 132, 43, 43, 43, 43, 43, 43, -105, -105, -105, -105, -105 }, { 7, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 133, 43, 43, 43, 43, 43, 43, 43, 43, -106, -106, -106, -106, -106, -106, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -106, -106, -106, -106, -106 }, { 7, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -107, -107, -107, -107, -107, -107, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 134, 43, 43, 43, 43, 43, 43, 43, -107, -107, -107, -107, -107 }, { 7, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -108, -108, -108, -108, -108, -108, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 135, 43, 43, 43, 43, 43, 136, 43, 43, 43, 43, 43, 43, 43, -108, -108, -108, -108, -108 }, { 7, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -109, -109, -109, -109, -109, -109, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 137, 43, 43, 43, 43, 43, 43, 43, -109, -109, -109, -109, -109 }, { 7, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -110, -110, -110, -110, -110, -110, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 138, 43, 43, 43, 43, 43, 43, 43, 43, -110, -110, -110, -110, -110 }, { 7, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -111, -111, -111, -111, -111, -111, 43, 43, 43, 43, 139, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 140, 43, 43, 43, 43, 43, 43, 43, 43, -111, -111, -111, -111, -111 }, { 7, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -112, -112, -112, -112, -112, -112, 43, 43, 43, 43, 141, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -112, -112, -112, -112, -112 }, { 7, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -113, -113, -113, -113, -113, -113, 43, 43, 43, 43, 43, 43, 43, 43, 142, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -113, -113, -113, -113, -113 }, { 7, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -114, -114, -114, -114, -114, -114, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 143, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -114, -114, -114, -114, -114 }, { 7, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -115, -115, -115, -115, -115, -115, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 144, 43, 43, 43, 43, 43, 43, 43, 43, -115, -115, -115, -115, -115 }, { 7, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, 43, 43, 43, 43, 43, 43, 43, 43, 145, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -116, -116, -116, -116, -116, -116, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -116, -116, -116, -116, -116 }, { 7, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, 43, 43, 43, 43, 146, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -117, -117, -117, -117, -117, -117, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -117, -117, -117, -117, -117 }, { 7, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -118, -118, -118, -118, -118, -118, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -118, -118, -118, -118, -118 }, { 7, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -119, -119, -119, -119, -119, -119, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -119, -119, -119, -119, -119 }, { 7, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -120, -120, -120, -120, -120, -120, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -120, -120, -120, -120, -120 }, { 7, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, 43, 43, 43, 43, 147, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -121, -121, -121, -121, -121, -121, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -121, -121, -121, -121, -121 }, { 7, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, 43, 43, 43, 43, 43, 43, 43, 43, 148, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -122, -122, -122, -122, -122, -122, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -122, -122, -122, -122, -122 }, { 7, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -123, -123, -123, -123, -123, -123, 43, 43, 43, 43, 43, 43, 43, 43, 149, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -123, -123, -123, -123, -123 }, { 7, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 150, 43, 43, 43, 43, 43, 43, 43, 43, -124, -124, -124, -124, -124, -124, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -124, -124, -124, -124, -124 }, { 7, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, 43, 43, 43, 43, 151, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -125, -125, -125, -125, -125, -125, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -125, -125, -125, -125, -125 }, { 7, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, 152, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -126, -126, -126, -126, -126, -126, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -126, -126, -126, -126, -126 }, { 7, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 153, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -127, -127, -127, -127, -127, -127, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -127, -127, -127, -127, -127 }, { 7, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -128, -128, -128, -128, -128, -128, 154, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -128, -128, -128, -128, -128 }, { 7, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, 155, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -129, -129, -129, -129, -129, -129, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -129, -129, -129, -129, -129 }, { 7, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 156, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -130, -130, -130, -130, -130, -130, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -130, -130, -130, -130, -130 }, { 7, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 157, 43, 43, 43, 43, 43, 43, 43, -131, -131, -131, -131, -131, -131, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -131, -131, -131, -131, -131 }, { 7, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -132, -132, -132, -132, -132, -132, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 158, 43, 43, 43, 43, 43, 43, 43, -132, -132, -132, -132, -132 }, { 7, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 159, 43, 43, 43, 43, 43, 43, 43, -133, -133, -133, -133, -133, -133, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -133, -133, -133, -133, -133 }, { 7, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -134, -134, -134, -134, -134, -134, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 160, 43, 43, 43, 43, 43, 43, -134, -134, -134, -134, -134 }, { 7, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -135, -135, -135, -135, -135, -135, 43, 43, 43, 43, 43, 43, 43, 43, 161, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -135, -135, -135, -135, -135 }, { 7, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -136, -136, -136, -136, -136, -136, 43, 43, 43, 43, 162, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -136, -136, -136, -136, -136 }, { 7, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -137, -137, -137, -137, -137, -137, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -137, -137, -137, -137, -137 }, { 7, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -138, -138, -138, -138, -138, -138, 43, 43, 43, 43, 163, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -138, -138, -138, -138, -138 }, { 7, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -139, -139, -139, -139, -139, -139, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 164, 43, 43, 43, 43, 43, 43, 43, 43, -139, -139, -139, -139, -139 }, { 7, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -140, -140, -140, -140, -140, -140, 43, 43, 43, 43, 165, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -140, -140, -140, -140, -140 }, { 7, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -141, -141, -141, -141, -141, -141, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 166, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -141, -141, -141, -141, -141 }, { 7, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -142, -142, -142, -142, -142, -142, 167, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -142, -142, -142, -142, -142 }, { 7, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -143, -143, -143, -143, -143, -143, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 168, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -143, -143, -143, -143, -143 }, { 7, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -144, -144, -144, -144, -144, -144, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 69, 43, 43, 43, 43, 43, 43, 43, -144, -144, -144, -144, -144 }, { 7, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 169, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -145, -145, -145, -145, -145, -145, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -145, -145, -145, -145, -145 }, { 7, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, 43, 43, 170, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -146, -146, -146, -146, -146, -146, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -146, -146, -146, -146, -146 }, { 7, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, 43, 43, 43, 43, 171, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -147, -147, -147, -147, -147, -147, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -147, -147, -147, -147, -147 }, { 7, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 172, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -148, -148, -148, -148, -148, -148, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -148, -148, -148, -148, -148 }, { 7, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -149, -149, -149, -149, -149, -149, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 173, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -149, -149, -149, -149, -149 }, { 7, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 174, 43, 43, 43, 43, 43, 43, 43, -150, -150, -150, -150, -150, -150, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -150, -150, -150, -150, -150 }, { 7, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 175, 43, 43, 43, 43, 43, 43, 43, -151, -151, -151, -151, -151, -151, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -151, -151, -151, -151, -151 }, { 7, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 176, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -152, -152, -152, -152, -152, -152, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -152, -152, -152, -152, -152 }, { 7, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 177, 43, 43, 43, 43, 43, 43, 43, -153, -153, -153, -153, -153, -153, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -153, -153, -153, -153, -153 }, { 7, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -154, -154, -154, -154, -154, -154, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 178, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -154, -154, -154, -154, -154 }, { 7, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 179, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -155, -155, -155, -155, -155, -155, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -155, -155, -155, -155, -155 }, { 7, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, 43, 43, 43, 180, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -156, -156, -156, -156, -156, -156, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -156, -156, -156, -156, -156 }, { 7, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -157, -157, -157, -157, -157, -157, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -157, -157, -157, -157, -157 }, { 7, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -158, -158, -158, -158, -158, -158, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -158, -158, -158, -158, -158 }, { 7, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -159, -159, -159, -159, -159, -159, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -159, -159, -159, -159, -159 }, { 7, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -160, -160, -160, -160, -160, -160, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 181, 43, 43, 43, 43, 43, 43, 43, 43, -160, -160, -160, -160, -160 }, { 7, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -161, -161, -161, -161, -161, -161, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 182, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -161, -161, -161, -161, -161 }, { 7, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -162, -162, -162, -162, -162, -162, 43, 43, 183, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -162, -162, -162, -162, -162 }, { 7, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -163, -163, -163, -163, -163, -163, 43, 43, 43, 43, 184, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -163, -163, -163, -163, -163 }, { 7, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -164, -164, -164, -164, -164, -164, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 185, 43, 43, 43, 43, 43, 43, 43, -164, -164, -164, -164, -164 }, { 7, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -165, -165, -165, -165, -165, -165, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 186, 43, 43, 43, 43, 43, 43, 43, -165, -165, -165, -165, -165 }, { 7, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -166, -166, -166, -166, -166, -166, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 177, 43, 43, 43, 43, 43, 43, 43, -166, -166, -166, -166, -166 }, { 7, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -167, -167, -167, -167, -167, -167, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 187, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -167, -167, -167, -167, -167 }, { 7, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -168, -168, -168, -168, -168, -168, 43, 43, 43, 188, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -168, -168, -168, -168, -168 }, { 7, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 189, 43, 43, 43, 43, 43, 43, 43, -169, -169, -169, -169, -169, -169, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -169, -169, -169, -169, -169 }, { 7, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 190, 43, 43, 43, 43, 43, 43, 43, -170, -170, -170, -170, -170, -170, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -170, -170, -170, -170, -170 }, { 7, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 191, 43, 43, 43, 43, 43, 43, 43, -171, -171, -171, -171, -171, -171, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -171, -171, -171, -171, -171 }, { 7, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 192, 43, 43, 43, 43, 43, 43, 43, -172, -172, -172, -172, -172, -172, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -172, -172, -172, -172, -172 }, { 7, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -173, -173, -173, -173, -173, -173, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 193, 43, 43, 43, 43, 43, 43, 43, -173, -173, -173, -173, -173 }, { 7, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -174, -174, -174, -174, -174, -174, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -174, -174, -174, -174, -174 }, { 7, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -175, -175, -175, -175, -175, -175, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -175, -175, -175, -175, -175 }, { 7, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 194, 43, 43, 43, 43, 43, 43, 43, -176, -176, -176, -176, -176, -176, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -176, -176, -176, -176, -176 }, { 7, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -177, -177, -177, -177, -177, -177, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -177, -177, -177, -177, -177 }, { 7, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -178, -178, -178, -178, -178, -178, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 195, 43, 43, 43, 43, 43, 43, 43, -178, -178, -178, -178, -178 }, { 7, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 196, 43, 43, 43, 43, 43, 43, 43, -179, -179, -179, -179, -179, -179, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -179, -179, -179, -179, -179 }, { 7, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 197, 43, 43, 43, 43, 43, 43, 43, -180, -180, -180, -180, -180, -180, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -180, -180, -180, -180, -180 }, { 7, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -181, -181, -181, -181, -181, -181, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 198, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -181, -181, -181, -181, -181 }, { 7, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -182, -182, -182, -182, -182, -182, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 189, 43, 43, 43, 43, 43, 43, 43, -182, -182, -182, -182, -182 }, { 7, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -183, -183, -183, -183, -183, -183, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 190, 43, 43, 43, 43, 43, 43, 43, -183, -183, -183, -183, -183 }, { 7, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -184, -184, -184, -184, -184, -184, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 199, 43, 43, 43, 43, 43, 43, 43, -184, -184, -184, -184, -184 }, { 7, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -185, -185, -185, -185, -185, -185, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -185, -185, -185, -185, -185 }, { 7, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -186, -186, -186, -186, -186, -186, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -186, -186, -186, -186, -186 }, { 7, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -187, -187, -187, -187, -187, -187, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 200, 43, 43, 43, 43, 43, 43, 43, -187, -187, -187, -187, -187 }, { 7, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -188, -188, -188, -188, -188, -188, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 201, 43, 43, 43, 43, 43, 43, 43, -188, -188, -188, -188, -188 }, { 7, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -189, -189, -189, -189, -189, -189, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -189, -189, -189, -189, -189 }, { 7, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -190, -190, -190, -190, -190, -190, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -190, -190, -190, -190, -190 }, { 7, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -191, -191, -191, -191, -191, -191, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -191, -191, -191, -191, -191 }, { 7, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -192, -192, -192, -192, -192, -192, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -192, -192, -192, -192, -192 }, { 7, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -193, -193, -193, -193, -193, -193, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -193, -193, -193, -193, -193 }, { 7, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -194, -194, -194, -194, -194, -194, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -194, -194, -194, -194, -194 }, { 7, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -195, -195, -195, -195, -195, -195, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -195, -195, -195, -195, -195 }, { 7, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -196, -196, -196, -196, -196, -196, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -196, -196, -196, -196, -196 }, { 7, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -197, -197, -197, -197, -197, -197, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -197, -197, -197, -197, -197 }, { 7, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -198, -198, -198, -198, -198, -198, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 202, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -198, -198, -198, -198, -198 }, { 7, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -199, -199, -199, -199, -199, -199, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -199, -199, -199, -199, -199 }, { 7, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -200, -200, -200, -200, -200, -200, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -200, -200, -200, -200, -200 }, { 7, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -201, -201, -201, -201, -201, -201, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -201, -201, -201, -201, -201 }, { 7, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -202, -202, -202, -202, -202, -202, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, -202, -202, -202, -202, -202 }, } ; static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up wcsutrntext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ wcsutrnleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 37 #define YY_END_OF_BUFFER 38 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[203] = { 0, 0, 0, 0, 0, 36, 36, 38, 3, 2, 31, 31, 31, 10, 31, 14, 31, 31, 20, 31, 31, 31, 28, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 2, 1, 35, 37, 35, 32, 36, 2, 31, 31, 31, 31, 31, 31, 31, 13, 15, 17, 31, 31, 19, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 2, 1, 33, 33, 34, 32, 36, 31, 31, 31, 9, 11, 12, 31, 16, 31, 31, 22, 21, 23, 31, 31, 31, 26, 27, 31, 31, 31, 31, 31, 9, 31, 31, 31, 31, 27, 31, 31, 31, 7, 8, 9, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 29, 29, 30, 31, 31, 31, 9, 31, 31, 31, 31, 31, 31, 30, 31, 31, 31, 31, 31, 20, 20, 31, 25, 31, 31, 31, 29, 29, 30, 31, 31, 31, 31, 20, 20, 31, 31, 31, 5, 6, 11, 18, 18, 20, 20, 24, 25, 24, 26, 27, 31, 31, 31, 11, 20, 20, 26, 27, 5, 6, 11, 18, 18, 24, 24, 26, 27, 31, 11, 26, 27, 4 } ; static yyconst yy_state_type yy_NUL_trans[203] = { 0, 8, 8, 37, 37, 41, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ; extern int wcsutrn_flex_debug; int wcsutrn_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *wcsutrntext; #line 1 "wcsutrn.l" /*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsutrn.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * wcsutrn.l is a Flex description file containing the definition of a lexical * scanner that translates non-standard FITS units specifications. * * It requires Flex v2.5.4 or later. * * Refer to wcsunits.h for a description of the user interface and operating * notes. * *===========================================================================*/ /* Options. */ /* Exclusive start states. */ #line 55 "wcsutrn.l" /* To get the prototype for fileno() from stdio.h when gcc is invoked with * -std=c89 (same as -ansi) or -std=c99 since we do not define YY_INPUT. */ #define _POSIX_SOURCE 1 #include #include #include #include #include "wcserr.h" #include "wcsunits.h" #define YY_DECL int wcsutrne(int ctrl, char unitstr[], struct wcserr **err) /* Used in preempting the call to exit() by yy_fatal_error(). */ jmp_buf wcsutrn_abort_jmp_env; #define exit(status) longjmp(wcsutrn_abort_jmp_env, status) #line 4048 "wcsutrn.c" #define INITIAL 0 #define NEXT 1 #define FLUSH 2 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int wcsutrnlex_destroy (void ); int wcsutrnget_debug (void ); void wcsutrnset_debug (int debug_flag ); YY_EXTRA_TYPE wcsutrnget_extra (void ); void wcsutrnset_extra (YY_EXTRA_TYPE user_defined ); FILE *wcsutrnget_in (void ); void wcsutrnset_in (FILE * in_str ); FILE *wcsutrnget_out (void ); void wcsutrnset_out (FILE * out_str ); int wcsutrnget_leng (void ); char *wcsutrnget_text (void ); int wcsutrnget_lineno (void ); void wcsutrnset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int wcsutrnwrap (void ); #else extern int wcsutrnwrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( wcsutrntext, wcsutrnleng, 1, wcsutrnout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ errno=0; \ while ( (result = read( fileno(wcsutrnin), (char *) buf, max_size )) < 0 ) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(wcsutrnin); \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int wcsutrnlex (void); #define YY_DECL int wcsutrnlex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after wcsutrntext and wcsutrnleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ if ( wcsutrnleng > 0 ) \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ (wcsutrntext[wcsutrnleng - 1] == '\n'); \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 75 "wcsutrn.l" static const char *function = "wcsutrne"; char orig[80], subs[80]; int bracket = 0; int unsafe = 0; int status = -1; YY_BUFFER_STATE inbuff; int wcsutrnlex_destroy(void); *orig = '\0'; *subs = '\0'; inbuff = wcsutrn_scan_string(unitstr); *unitstr = '\0'; /* Return here via longjmp() invoked by yy_fatal_error(). */ if (setjmp(wcsutrn_abort_jmp_env)) { return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), "Internal units translator error parsing '%s'", unitstr); } BEGIN(INITIAL); #ifdef DEBUG fprintf(stderr, "\n%s ->\n", unitstr); #endif #line 4253 "wcsutrn.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! wcsutrnin ) wcsutrnin = stdin; if ( ! wcsutrnout ) wcsutrnout = stdout; if ( ! YY_CURRENT_BUFFER ) { wcsutrnensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = wcsutrn_create_buffer(wcsutrnin,YY_BUF_SIZE ); } wcsutrn_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of wcsutrntext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); yy_match: while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) ++yy_cp; yy_current_state = -yy_current_state; yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 1: YY_RULE_SETUP #line 103 "wcsutrn.l" { /* Looks like a keycomment. */ strcat(unitstr, "["); bracket = 1; } YY_BREAK case 2: YY_RULE_SETUP #line 109 "wcsutrn.l" /* Discard leading whitespace. */ YY_BREAK case 3: /* rule 3 can match eol */ YY_RULE_SETUP #line 111 "wcsutrn.l" { /* Non-alphabetic character. */ strcat(unitstr, wcsutrntext); if (bracket && *wcsutrntext == ']') { BEGIN(FLUSH); } } YY_BREAK case 4: YY_RULE_SETUP #line 119 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "Angstrom"); BEGIN(NEXT); } YY_BREAK case 5: YY_RULE_SETUP #line 125 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "arcmin"); BEGIN(NEXT); } YY_BREAK case 6: YY_RULE_SETUP #line 131 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "arcsec"); BEGIN(NEXT); } YY_BREAK case 7: YY_RULE_SETUP #line 137 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "beam"); BEGIN(NEXT); } YY_BREAK case 8: YY_RULE_SETUP #line 143 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "byte"); BEGIN(NEXT); } YY_BREAK case 9: YY_RULE_SETUP #line 149 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "d"); BEGIN(NEXT); } YY_BREAK case 10: YY_RULE_SETUP #line 155 "wcsutrn.l" { unsafe = 1; strcpy(orig, wcsutrntext); strcpy(subs, (ctrl & 4) ? "d" : "D"); BEGIN(NEXT); } YY_BREAK case 11: YY_RULE_SETUP #line 162 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "deg"); BEGIN(NEXT); } YY_BREAK case 12: YY_RULE_SETUP #line 168 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "GHz"); BEGIN(NEXT); } YY_BREAK case 13: YY_RULE_SETUP #line 174 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "h"); BEGIN(NEXT); } YY_BREAK case 14: YY_RULE_SETUP #line 180 "wcsutrn.l" { unsafe = 1; strcpy(orig, wcsutrntext); strcpy(subs, (ctrl & 2) ? "h" : "H"); BEGIN(NEXT); } YY_BREAK case 15: YY_RULE_SETUP #line 187 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "Hz"); BEGIN(NEXT); } YY_BREAK case 16: YY_RULE_SETUP #line 193 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "kHz"); BEGIN(NEXT); } YY_BREAK case 17: YY_RULE_SETUP #line 199 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "Jy"); BEGIN(NEXT); } YY_BREAK case 18: YY_RULE_SETUP #line 205 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "K"); BEGIN(NEXT); } YY_BREAK case 19: YY_RULE_SETUP #line 211 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "km"); BEGIN(NEXT); } YY_BREAK case 20: YY_RULE_SETUP #line 217 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "m"); BEGIN(NEXT); } YY_BREAK case 21: YY_RULE_SETUP #line 223 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "min"); BEGIN(NEXT); } YY_BREAK case 22: YY_RULE_SETUP #line 229 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "MHz"); BEGIN(NEXT); } YY_BREAK case 23: YY_RULE_SETUP #line 235 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "ohm"); BEGIN(NEXT); } YY_BREAK case 24: YY_RULE_SETUP #line 241 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "Pa"); BEGIN(NEXT); } YY_BREAK case 25: YY_RULE_SETUP #line 247 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "pixel"); BEGIN(NEXT); } YY_BREAK case 26: YY_RULE_SETUP #line 253 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "rad"); BEGIN(NEXT); } YY_BREAK case 27: YY_RULE_SETUP #line 259 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "s"); BEGIN(NEXT); } YY_BREAK case 28: YY_RULE_SETUP #line 265 "wcsutrn.l" { unsafe = 1; strcpy(orig, wcsutrntext); strcpy(subs, (ctrl & 1) ? "s" : "S"); BEGIN(NEXT); } YY_BREAK case 29: YY_RULE_SETUP #line 272 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "V"); BEGIN(NEXT); } YY_BREAK case 30: YY_RULE_SETUP #line 278 "wcsutrn.l" { strcpy(orig, wcsutrntext); strcpy(subs, "yr"); BEGIN(NEXT); } YY_BREAK case 31: YY_RULE_SETUP #line 284 "wcsutrn.l" { /* Not a recognized alias. */ strcpy(orig, wcsutrntext); strcpy(subs, orig); BEGIN(NEXT); } YY_BREAK case 32: YY_RULE_SETUP #line 291 "wcsutrn.l" { /* Reject the alias match. */ strcat(orig, wcsutrntext); strcpy(subs, orig); } YY_BREAK case 33: /* rule 33 can match eol */ YY_RULE_SETUP #line 297 "wcsutrn.l" { /* Discard separating whitespace. */ unput(wcsutrntext[wcsutrnleng-1]); } YY_BREAK case 34: YY_RULE_SETUP #line 302 "wcsutrn.l" { /* Compress separating whitespace. */ strcat(unitstr, subs); strcat(unitstr, " "); if (strcmp(orig, subs)) status = 0; unput(wcsutrntext[wcsutrnleng-1]); *subs = '\0'; BEGIN(INITIAL); } YY_BREAK case 35: YY_RULE_SETUP #line 312 "wcsutrn.l" { /* Copy anything else unchanged. */ strcat(unitstr, subs); if (strcmp(orig, subs)) status = 0; unput(*wcsutrntext); *subs = '\0'; BEGIN(INITIAL); } YY_BREAK case 36: YY_RULE_SETUP #line 321 "wcsutrn.l" { /* Copy out remaining input. */ strcat(unitstr, wcsutrntext); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(NEXT): case YY_STATE_EOF(FLUSH): #line 326 "wcsutrn.l" { /* End-of-string. */ if (*subs) { strcat(unitstr, subs); if (strcmp(orig, subs)) status = 0; } wcsutrnlex_destroy(); if (unsafe) { return wcserr_set(WCSERR_SET(UNITSERR_UNSAFE_TRANS), "Unsafe unit translation in '%s'", unitstr); } return status; } YY_BREAK case 37: YY_RULE_SETUP #line 341 "wcsutrn.l" ECHO; YY_BREAK #line 4667 "wcsutrn.c" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed wcsutrnin at a new source and called * wcsutrnlex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = wcsutrnin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( wcsutrnwrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * wcsutrntext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of wcsutrnlex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ wcsutrnrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; wcsutrnrestart(wcsutrnin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) wcsutrnrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { if ( *yy_cp ) { yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; } else yy_current_state = yy_NUL_trans[yy_current_state]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; yy_current_state = yy_NUL_trans[yy_current_state]; yy_is_jam = (yy_current_state == 0); return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up wcsutrntext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ wcsutrnrestart(wcsutrnin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( wcsutrnwrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve wcsutrntext */ (yy_hold_char) = *++(yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void wcsutrnrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ wcsutrnensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = wcsutrn_create_buffer(wcsutrnin,YY_BUF_SIZE ); } wcsutrn_init_buffer(YY_CURRENT_BUFFER,input_file ); wcsutrn_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void wcsutrn_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * wcsutrnpop_buffer_state(); * wcsutrnpush_buffer_state(new_buffer); */ wcsutrnensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; wcsutrn_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (wcsutrnwrap()) processing, but the only time this flag * is looked at is after wcsutrnwrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void wcsutrn_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; wcsutrnin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE wcsutrn_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) wcsutrnalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in wcsutrn_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) wcsutrnalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in wcsutrn_create_buffer()" ); b->yy_is_our_buffer = 1; wcsutrn_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with wcsutrn_create_buffer() * */ void wcsutrn_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) wcsutrnfree((void *) b->yy_ch_buf ); wcsutrnfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a wcsutrnrestart() or at EOF. */ static void wcsutrn_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; wcsutrn_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then wcsutrn_init_buffer was _probably_ * called from wcsutrnrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void wcsutrn_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) wcsutrn_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void wcsutrnpush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; wcsutrnensure_buffer_stack(); /* This block is copied from wcsutrn_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from wcsutrn_switch_to_buffer. */ wcsutrn_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void wcsutrnpop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; wcsutrn_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { wcsutrn_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void wcsutrnensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)wcsutrnalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in wcsutrnensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)wcsutrnrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in wcsutrnensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE wcsutrn_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) wcsutrnalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in wcsutrn_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; wcsutrn_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to wcsutrnlex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * wcsutrn_scan_bytes() instead. */ YY_BUFFER_STATE wcsutrn_scan_string (yyconst char * yystr ) { return wcsutrn_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to wcsutrnlex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE wcsutrn_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) wcsutrnalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in wcsutrn_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = wcsutrn_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in wcsutrn_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up wcsutrntext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ wcsutrntext[wcsutrnleng] = (yy_hold_char); \ (yy_c_buf_p) = wcsutrntext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ wcsutrnleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int wcsutrnget_lineno (void) { return wcsutrnlineno; } /** Get the input stream. * */ FILE *wcsutrnget_in (void) { return wcsutrnin; } /** Get the output stream. * */ FILE *wcsutrnget_out (void) { return wcsutrnout; } /** Get the length of the current token. * */ int wcsutrnget_leng (void) { return wcsutrnleng; } /** Get the current token. * */ char *wcsutrnget_text (void) { return wcsutrntext; } /** Set the current line number. * @param line_number * */ void wcsutrnset_lineno (int line_number ) { wcsutrnlineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see wcsutrn_switch_to_buffer */ void wcsutrnset_in (FILE * in_str ) { wcsutrnin = in_str ; } void wcsutrnset_out (FILE * out_str ) { wcsutrnout = out_str ; } int wcsutrnget_debug (void) { return wcsutrn_flex_debug; } void wcsutrnset_debug (int bdebug ) { wcsutrn_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from wcsutrnlex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT wcsutrnin = stdin; wcsutrnout = stdout; #else wcsutrnin = (FILE *) 0; wcsutrnout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * wcsutrnlex_init() */ return 0; } /* wcsutrnlex_destroy is for both reentrant and non-reentrant scanners. */ int wcsutrnlex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ wcsutrn_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; wcsutrnpop_buffer_state(); } /* Destroy the stack itself. */ wcsutrnfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * wcsutrnlex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *wcsutrnalloc (yy_size_t size ) { return (void *) malloc( size ); } void *wcsutrnrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void wcsutrnfree (void * ptr ) { free( (char *) ptr ); /* see wcsutrnrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 341 "wcsutrn.l" pywcs-1.12/wcslib/C/getwcstab.c0000644001153600020070000001036312310355626020445 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: getwcstab.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include "getwcstab.h" /*--------------------------------------------------------------------------*/ int fits_read_wcstab( fitsfile *fptr, int nwtb, wtbarr *wtb, int *status) { int anynul, colnum, hdunum, iwtb, m, naxis, nostat; long *naxes = 0, nelem; wtbarr *wtbp; if (*status) return *status; if (fptr == 0) { return (*status = NULL_INPUT_PTR); } if (nwtb == 0) return 0; /* Zero the array pointers. */ wtbp = wtb; for (iwtb = 0; iwtb < nwtb; iwtb++, wtbp++) { *wtbp->arrayp = 0x0; } /* Save HDU number so that we can move back to it later. */ fits_get_hdu_num(fptr, &hdunum); wtbp = wtb; for (iwtb = 0; iwtb < nwtb; iwtb++, wtbp++) { /* Move to the required binary table extension. */ if (fits_movnam_hdu(fptr, BINARY_TBL, (char *)(wtbp->extnam), wtbp->extver, status)) { goto cleanup; } /* Locate the table column. */ if (fits_get_colnum(fptr, CASEINSEN, (char *)(wtbp->ttype), &colnum, status)) { goto cleanup; } /* Get the array dimensions and check for consistency. */ if (wtbp->ndim < 1) { *status = NEG_AXIS; goto cleanup; } if (!(naxes = calloc(wtbp->ndim, sizeof(long)))) { *status = MEMORY_ALLOCATION; goto cleanup; } if (fits_read_tdim(fptr, colnum, wtbp->ndim, &naxis, naxes, status)) { goto cleanup; } if (naxis != wtbp->ndim) { if (wtbp->kind == 'c' && wtbp->ndim == 2) { /* Allow TDIMn to be omitted for degenerate coordinate arrays. */ naxis = 2; naxes[1] = naxes[0]; naxes[0] = 1; } else { *status = BAD_TDIM; goto cleanup; } } if (wtbp->kind == 'c') { /* Coordinate array; calculate the array size. */ nelem = naxes[0]; for (m = 0; m < naxis-1; m++) { *(wtbp->dimlen + m) = naxes[m+1]; nelem *= naxes[m+1]; } } else { /* Index vector; check length. */ if ((nelem = naxes[0]) != *(wtbp->dimlen)) { /* N.B. coordinate array precedes the index vectors. */ *status = BAD_TDIM; goto cleanup; } } free(naxes); naxes = 0; /* Allocate memory for the array. */ if (!(*wtbp->arrayp = calloc((size_t)nelem, sizeof(double)))) { *status = MEMORY_ALLOCATION; goto cleanup; } /* Read the array from the table. */ if (fits_read_col_dbl(fptr, colnum, wtbp->row, 1L, nelem, 0.0, *wtbp->arrayp, &anynul, status)) { goto cleanup; } } cleanup: /* Move back to the starting HDU. */ nostat = 0; fits_movabs_hdu(fptr, hdunum, 0, &nostat); /* Release allocated memory. */ if (naxes) free(naxes); if (*status) { wtbp = wtb; for (iwtb = 0; iwtb < nwtb; iwtb++, wtbp++) { if (*wtbp->arrayp) free(*wtbp->arrayp); } } return *status; } pywcs-1.12/wcslib/C/getwcstab.h0000644001153600020070000001640512310355626020455 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: getwcstab.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * Summary of the getwcstab routines * --------------------------------- * fits_read_wcstab(), an implementation of a FITS table reading routine for * 'TAB' coordinates, is provided for CFITSIO programmers. It has been * incorporated into CFITSIO as of v3.006 with the definitions in this file, * getwcstab.h, moved into fitsio.h. * * fits_read_wcstab() is not included in the WCSLIB object library but the * source code is presented here as it may be useful for programmers using an * older version of CFITSIO than 3.006, or as a programming template for * non-CFITSIO programmers. * * * fits_read_wcstab() - FITS 'TAB' table reading routine * ---------------------------------------------------- * fits_read_wcstab() extracts arrays from a binary table required in * constructing 'TAB' coordinates. * * Given: * fptr fitsfile * * Pointer to the file handle returned, for example, by * the fits_open_file() routine in CFITSIO. * * nwtb int Number of arrays to be read from the binary table(s). * * Given and returned: * wtb wtbarr * Address of the first element of an array of wtbarr * typedefs. This wtbarr typedef is defined to match the * wtbarr struct defined in WCSLIB. An array of such * structs returned by the WCSLIB function wcstab() as * discussed in the notes below. * * Returned: * status int * CFITSIO status value. * * Function return value: * int CFITSIO status value. * * Notes: * In order to maintain WCSLIB and CFITSIO as independent libraries it is not * permissible for any CFITSIO library code to include WCSLIB header files, * or vice versa. However, the CFITSIO function fits_read_wcstab() accepts * an array of wtbarr structs defined in wcs.h within WCSLIB. * * The problem therefore is to define the wtbarr struct within fitsio.h * without including wcs.h, especially noting that wcs.h will often (but not * always) be included together with fitsio.h in an applications program that * uses fits_read_wcstab(). * * The solution adopted is for WCSLIB to define "struct wtbarr" while * fitsio.h defines "typedef wtbarr" as an untagged struct with identical * members. This allows both wcs.h and fitsio.h to define a wtbarr data type * without conflict by virtue of the fact that structure tags and typedef * names share different name spaces in C; Appendix A, Sect. A11.1 (p227) of * the K&R ANSI edition states that: * * Identifiers fall into several name spaces that do not interfere with one * another; the same identifier may be used for different purposes, even in * the same scope, if the uses are in different name spaces. These classes * are: objects, functions, typedef names, and enum constants; labels; tags * of structures, unions, and enumerations; and members of each structure * or union individually. * * Therefore, declarations within WCSLIB look like * = struct wtbarr *w; * * while within CFITSIO they are simply * = wtbarr *w; * * As suggested by the commonality of the names, these are really the same * aggregate data type. However, in passing a (struct wtbarr *) to * fits_read_wcstab() a cast to (wtbarr *) is formally required. * * When using WCSLIB and CFITSIO together in C++ the situation is complicated * by the fact that typedefs and structs share the same namespace; C++ * Annotated Reference Manual, Sect. 7.1.3 (p105). In that case the wtbarr * struct in wcs.h is renamed by preprocessor macro substitution to wtbarr_s * to distinguish it from the typedef defined in fitsio.h. However, the * scope of this macro substitution is limited to wcs.h itself and CFITSIO * programmer code, whether in C++ or C, should always use the wtbarr * typedef. * * * wtbarr typedef * -------------- * The wtbarr typedef is defined as a struct containing the following members: * * int i * Image axis number. * * int m * Array axis number for index vectors. * * int kind * Character identifying the array type: * - c: coordinate array, * - i: index vector. * * char extnam[72] * EXTNAME identifying the binary table extension. * * int extver * EXTVER identifying the binary table extension. * * int extlev * EXTLEV identifying the binary table extension. * * char ttype[72] * TTYPEn identifying the column of the binary table that contains the * array. * * long row * Table row number. * * int ndim * Expected dimensionality of the array. * * int *dimlen * Address of the first element of an array of int of length ndim into * which the array axis lengths are to be written. * * double **arrayp * Pointer to an array of double which is to be allocated by the user * and into which the array is to be written. * *===========================================================================*/ #ifndef WCSLIB_GETWCSTAB #define WCSLIB_GETWCSTAB #ifdef __cplusplus extern "C" { #endif #include typedef struct { int i; /* Image axis number. */ int m; /* Array axis number for index vectors. */ int kind; /* Array type, 'c' (coord) or 'i' (index). */ char extnam[72]; /* EXTNAME of binary table extension. */ int extver; /* EXTVER of binary table extension. */ int extlev; /* EXTLEV of binary table extension. */ char ttype[72]; /* TTYPEn of column containing the array. */ long row; /* Table row number. */ int ndim; /* Expected array dimensionality. */ int *dimlen; /* Where to write the array axis lengths. */ double **arrayp; /* Where to write the address of the array */ /* allocated to store the array. */ } wtbarr; int fits_read_wcstab(fitsfile *fptr, int nwtb, wtbarr *wtb, int *status); #ifdef __cplusplus } #endif #endif /* WCSLIB_GETWCSTAB */ pywcs-1.12/wcslib/C/GNUmakefile0000644001153600020070000003327512310355626020377 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # GNU makefile for building WCSLIB 4.10 and its test suite. # # Summary of the main targets # --------------------------- # build: Build the library. # # clean: Delete intermediate object files. # # cleaner: clean, and also delete the test executables. # # cleanest (distclean or realclean): cleaner, and also delete the object # library the C source files generated by 'flex'. # # check (or test): Compile and run the test programs. By default they are # executed in batch mode, and non-graphical tests only report # "PASS" on success. Use # # make MODE=interactive check # # to run them interactively with full diagnostic output. To skip # graphical tests even if PGPLOT is available, use # # make CHECK=nopgplot check # # tests: Compile the test programs (but don't run them). # # Notes: # 1) If you need to make changes then preferably modify ../makedefs.in # instead and re-run configure. # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: GNUmakefile,v 4.10 2012/02/05 23:41:44 cal103 Exp $ #----------------------------------------------------------------------------- # Get configure settings. include ../makedefs FLEXMODS := $(patsubst %.l,%.c,$(wildcard *.l)) MODULES := $(sort \ $(patsubst %.c,%.o, \ $(filter-out getwcstab.c,$(wildcard *.c)) $(FLEXMODS))) ifeq "$(WCSTRIG)" "MACRO" CPPFLAGS += -DWCSTRIG_MACRO MODULES := $(filter-out wcstrig.o, $(MODULES)) else ifeq "$(WCSTRIG)" "NATIVE" MODULES := $(filter-out wcstrig.o, $(MODULES)) endif endif # For building the sharable library. PICLIB := libwcs-PIC.a CPPFLAGS += -I. -I.. vpath %.c test vpath %.h .. vpath %.in .. # For building and exercising the test suite # ------------------------------------------ # Signals tfitshdr to use wcshdr(). ifneq "$(DO_WCSHDR)" "" CPPFLAGS += -DDO_WCSHDR endif # Test programs that don't require CFITSIO or PGPLOT. TEST_N := tlin tlog tprj1 tsph tsphdpa tspx ttab1 twcs twcssub tpih1 tbth1 \ tfitshdr tunits twcsfix # Test programs that require CFITSIO (they don't need PGPLOT). TEST_C := twcstab twcshdr # Test programs that require PGPLOT but not PGSBOX. TEST_P := tspc tprj2 tcel1 tcel2 ttab2 ttab3 twcsmix # Test programs that require PGPLOT and PGSBOX. TEST_B := tpih2 # Test programs that aren't automatically exercised. TEST_X := tsphdpa twcshdr TESTS := $(TEST_N) # Add test programs that require CFITSIO if we have it. ifneq "$(CFITSIOINC)" "" ifneq "$(CFITSIOLIB)" "" TESTS += $(TEST_C) endif endif # Add test programs that require PGPLOT if we have it. ifneq "$(CHECK)" "nopgplot" ifneq "$(PGPLOTINC)" "" ifneq "$(PGPLOTLIB)" "" TESTS += $(TEST_P) $(TEST_B) endif endif endif # Remove tests that aren't automatically exercised. TESTS := $(filter-out $(TEST_X), $(TESTS)) PGSBOXLIB := ../pgsbox/libpgsbox-$(LIBVER).a # Pattern rules #-------------- ifeq "$(FLEX)" "flex" %.c : %.l -@ echo '' -@ $(RM) $@ $(FLEX) $(FLFLAGS) -t $< | sed -e 's/^[ ]*#/#/' > $@ else %.c : %.l -@ echo '' -@ $(RM) $@ cp flexed/$@ . endif $(WCSLIB)(%.o) : %.c -@ echo '' $(CC) $(CPPFLAGS) $(CFLAGS) -c $< $(AR) r $(WCSLIB) $% -@ $(RM) $% $(PICLIB)(%.o) : %.c -@ echo '' $(CC) $(CPPFLAGS) $(CFLAGS) $(SHRFLAGS) -c $< $(AR) r $(PICLIB) $% -@ $(RM) $% %.i : %.c -@ echo '' -@ $(RM) $@ $(CPP) $(CPPFLAGS) $(CFLAGS) $< > $@ # Print out include file dependencies. %.d : %.c -@ echo '' -@ $(CPP) $(CPPFLAGS) $(CFLAGS) $< | \ sed -n -e 's|^# 1 "\([^/].*\.h\)".*|\1|p' | \ sort -u # Use 'make FLAVOUR=Linux run_%' to have VALGRIND defined (from flavours). run_% : % -@ echo '' -@ $(TIMER) @ if [ '$(MODE)' = interactive -o '$(VALGRIND)' ] ; then \ printf 'Press to run $<: ' ; \ read DUMMY ; \ fi ; \ if [ '$(VALGRIND)' ] ; then \ if [ '$<' = tunits ] ; then \ $(VALGRIND) ./$< < test/units_test ; \ else \ $(VALGRIND) ./$< ; \ fi ; \ else \ if [ '$(filter $<, $(TEST_N) $(TEST_C))' ] ; then \ if [ '$<' = tunits ] ; then \ if [ '$(MODE)' = interactive ] ; then \ ./$< < test/units_test 2>&1 | tee $<.out ; \ else \ ./$< < test/units_test > $<.out 2>&1 ; \ fi ; \ else \ if [ '$(MODE)' = interactive ] ; then \ ./$< < /dev/null 2>&1 | tee $<.out ; \ else \ ./$< < /dev/null > $<.out 2>&1 ; \ fi ; \ fi ; \ if grep 'PASS:' $<.out > /dev/null ; then \ if [ '$(MODE)' != interactive ] ; then \ head -2 $<.out ; \ grep 'PASS:' $<.out ; \ fi ; \ echo 'PASS: C/$<' >> test_results ; \ elif [ -f 'test/$<.out' ] ; then \ trap 'rm -f run_test.tmp' 0 1 2 3 15 ; \ sed -e 's/0x[0-9a-f][0-9a-f][0-9a-f]*/0x
/g' $<.out > \ run_test.tmp ; \ mv -f run_test.tmp $<.out ; \ if cmp -s $<.out test/$<.out ; then \ if [ '$(MODE)' != interactive ] ; then \ head -1 $<.out ; \ fi ; \ echo '' ; \ echo 'PASS: Output agrees with C/test/$<.out' ; \ echo 'PASS: C/$<' >> test_results ; \ else \ if [ '$(MODE)' != interactive ] ; then \ cat $<.out ; \ fi ; \ echo '' ; \ echo 'FAIL: Output disagrees with C/test/$<.out' ; \ echo 'FAIL: C/$<' >> test_results ; \ fi ; \ elif [ '$(MODE)' != interactive ] ; then \ cat $<.out ; \ echo 'FAIL: C/$<' >> test_results ; \ fi ; \ elif [ '$(MODE)' = interactive ] ; then \ ./$< ; \ else \ if [ '$<' = tcel2 ] ; then \ echo N | ./$< ; \ else \ ./$< < /dev/null 2>&1 ; \ fi ; \ fi ; \ fi -@ echo '' # Static and static pattern rules #-------------------------------- .PHONY : build check clean cleaner cleanest distclean install lib realclean \ run_% test tests build : lib lib : $(FLEXMODS) $(WCSLIB) $(SHRLIB) $(WCSLIB) : $(MODULES:%=$(WCSLIB)(%)) -@ echo '' $(RANLIB) $@ $(SHRLIB) : $(PICLIB) -@ echo '' -@ $(RM) -r tmp mkdir tmp && \ cd tmp && \ trap 'cd .. ; $(RM) -r tmp' 0 1 2 3 15 ; \ $(AR) x ../$(PICLIB) && \ $(SHRLD) $(LDFLAGS) -o $@ *.o && \ mv $@ .. $(PICLIB) : $(MODULES:%.o=$(PICLIB)(%.o)) ; install : build - if [ ! -d "$(LIBDIR)" ] ; then \ $(INSTALL) -d -m 2775 $(LIBDIR) ; \ fi $(INSTALL) -m 644 $(WCSLIB) $(LIBDIR) $(RANLIB) $(LIBDIR)/$(WCSLIB) - if [ -h "$(LIBDIR)/libwcs.a" ] ; then \ $(RM) $(LIBDIR)/libwcs.a ; \ fi - $(LN_S) $(WCSLIB) $(LIBDIR)/libwcs.a - if [ "$(SHRLIB)" != "" ] ; then \ $(INSTALL) -m 644 $(SHRLIB) $(LIBDIR) ; \ if [ -h "$(LIBDIR)/$(SONAME)" ] ; then \ $(RM) $(LIBDIR)/$(SONAME) ; \ fi ; \ $(LN_S) $(SHRLIB) $(LIBDIR)/$(SONAME) ; \ if [ "$(SHRLN)" != "" ] ; then \ if [ -h "$(LIBDIR)/$(SHRLN)" ] ; then \ $(RM) $(LIBDIR)/$(SHRLN) ; \ fi ; \ $(LN_S) $(SONAME) $(LIBDIR)/$(SHRLN) ; \ fi ; \ fi - if [ ! -d "$(INCDIR)" ] ; then \ $(INSTALL) -d -m 2775 $(INCDIR) ; \ fi $(INSTALL) -m 444 *.h $(INCDIR) $(RM) $(INCLINK) $(LN_S) $(notdir $(INCDIR)) $(INCLINK) clean : - $(RM) -r *.o *.i a.out t*.out core *.dSYM $(EXTRA_CLEAN) cleaner : clean - $(RM) .gdb_history - $(RM) $(TEST_N) $(TEST_X) - $(RM) $(TEST_P) tpih2 twcstab twcshdr - $(RM) tofits bth.fits pih.fits wcstab.fits - $(RM) t*_cfitsio test_results cleanest distclean realclean : cleaner - $(RM) ../wcsconfig.h ../wcsconfig_tests.h - $(RM) fitshdr.c wcsbth.c wcspih.c wcsulex.c wcsutrn.c - $(RM) $(PICLIB) libwcs-*.a libwcs.so.* libwcs.*.dylib check test : tests $(TESTS:%=run_%) tests : $(TESTS) $(TEST_X) $(TEST_N) : % : test/%.c $(WCSLIB) -@ echo '' $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $< $(WCSLIB) $(LIBS) -@ $(RM) $@.o $(TEST_P) : % : test/%.c $(WCSLIB) -@ echo '' $(CC) $(CPPFLAGS) $(PGPLOTINC) $(CFLAGS) -c -o $@.o $< $(LD) $(LDFLAGS) -o $@ $@.o $(PGPLOTLIB) $(WCSLIB) $(FLIBS) $(LIBS) -@ $(RM) $@.o tpih2 : test/tpih2.c $(PGSBOXLIB) $(WCSLIB) -@ echo '' $(CC) $(CPPFLAGS) -I../pgsbox $(PGPLOTINC) $(CFLAGS) -c -o $@.o $< $(LD) $(LDFLAGS) -o $@ $@.o $(PGSBOXLIB) $(PGPLOTLIB) $(WCSLIB) \ $(FLIBS) $(LIBS) -@ $(RM) $@.o tfitshdr_cfitsio tpih1_cfitsio tbth1_cfitsio : %_cfitsio : test/%.c $(WCSLIB) -@ echo '' $(CC) -DDO_CFITSIO $(CPPFLAGS) $(CFITSIOINC) $(CFLAGS) \ $(LDFLAGS) -o $@ $< $(CFITSIOLIB) $(WCSLIB) $(LIBS) -@ $(RM) $@.o tpih2_cfitsio : test/tpih2.c $(PGSBOXLIB) $(WCSLIB) -@ echo '' $(CC) -DDO_CFITSIO $(CPPFLAGS) -I../pgsbox $(PGPLOTINC) \ $(CFITSIOINC) $(CFLAGS) -c -o $@.o $< $(LD) $(LDFLAGS) -o $@ $@.o $(PGSBOXLIB) $(PGPLOTLIB) \ $(CFITSIOLIB) $(WCSLIB) $(FLIBS) $(LIBS) -@ $(RM) $@.o twcstab : test/twcstab.c $(GETWCSTAB) $(WCSLIB) -@ echo '' $(CC) $(CPPFLAGS) $(CFITSIOINC) $(CFLAGS) $(LDFLAGS) -o $@ $< \ $(GETWCSTAB) $(CFITSIOLIB) $(WCSLIB) $(LIBS) -@ $(RM) $@.o twcshdr : test/twcshdr.c $(GETWCSTAB) $(WCSLIB) -@ echo '' $(CC) $(CPPFLAGS) $(CFITSIOINC) $(CFLAGS) $(LDFLAGS) -o $@ $< \ $(GETWCSTAB) $(CFITSIOLIB) $(WCSLIB) $(LIBS) -@ $(RM) $@.o getwcstab.o : getwcstab.c getwcstab.h -@ echo '' $(CC) $(CPPFLAGS) $(CFLAGS) $(CFITSIOINC) -c $< $(PGSBOXLIB) : -@ echo '' $(MAKE) -C ../pgsbox lib tofits : test/tofits.c $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< pih.fits : test/pih.keyrec tofits ./tofits < $< > $@ bth.fits : test/bth.keyrec tofits ./tofits < $< > $@ GNUmakefile : ../makedefs ; ../makedefs ../wcsconfig.h ../wcsconfig_tests.h : makedefs.in wcsconfig.h.in \ wcsconfig_tests.h.in ../config.status -@ $(RM) ../wcsconfig.h ../wcsconfig_tests.h cd .. && ./config.status show :: -@ -@ echo ' FLEXMODS := $(FLEXMODS)' -@ -@ echo ' MODULES := $(MODULES)' # Dependencies (use the %.d pattern rule to list them) #----------------------------------------------------- $(WCSLIB)(cel.o) : cel.h prj.h sph.h wcsconfig.h wcserr.h wcsmath.h \ wcsprintf.h wcstrig.h $(WCSLIB)(fitshdr.o) : wcsconfig.h fitshdr.h $(WCSLIB)(lin.o) : lin.h wcserr.h wcsprintf.h $(WCSLIB)(log.o) : log.h $(WCSLIB)(prj.o) : prj.h wcsconfig.h wcserr.h wcsmath.h wcsprintf.h \ wcstrig.h wcsutil.h $(WCSLIB)(spc.o) : spc.h spx.h wcserr.h wcsmath.h wcsprintf.h wcstrig.h \ wcsutil.h $(WCSLIB)(sph.o) : sph.h wcsconfig.h wcstrig.h $(WCSLIB)(spx.o) : spx.h wcserr.h wcsmath.h $(WCSLIB)(tab.o) : tab.h wcserr.h wcsmath.h wcsprintf.h $(WCSLIB)(wcs.o) : cel.h lin.h log.h prj.h spc.h sph.h spx.h tab.h \ wcs.h wcsconfig.h wcserr.h wcsmath.h wcsprintf.h \ wcstrig.h wcsunits.h wcsutil.h $(WCSLIB)(wcsbth.o) : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h wcserr.h \ wcshdr.h wcsmath.h $(WCSLIB)(wcserr.o) : wcserr.h wcsprintf.h $(WCSLIB)(wcsfix.o) : cel.h lin.h prj.h spc.h sph.h spx.h tab.h wcs.h \ wcserr.h wcsfix.h wcsmath.h wcsunits.h wcsutil.h $(WCSLIB)(wcshdr.o) : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h wcserr.h \ wcshdr.h wcsmath.h wcsutil.h $(WCSLIB)(wcspih.o) : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h wcserr.h \ wcshdr.h wcsmath.h $(WCSLIB)(wcsprintf.o): wcsprintf.h $(WCSLIB)(wcstrig.o) : wcsconfig.h wcsmath.h wcstrig.h $(WCSLIB)(wcsulex.o) : wcserr.h wcsmath.h wcsunits.h $(WCSLIB)(wcsunits.o) : wcserr.h wcsunits.h $(WCSLIB)(wcsutil.o) : wcsutil.h $(WCSLIB)(wcsutrn.o) : wcserr.h wcsunits.h tbth1 tbth1_cfitsio : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h wcsconfig.h \ wcsconfig_tests.h wcserr.h wcsfix.h wcshdr.h tcel1 : cel.h prj.h wcserr.h tcel2 : cel.h prj.h wcserr.h tfitshdr tfitshdr_cfitsio : fitshdr.h wcsconfig.h wcsconfig_tests.h tlin : lin.h wcserr.h tlog : log.h tpih1 tpih1_cfitsio : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h wcsconfig.h \ wcsconfig_tests.h wcserr.h wcsfix.h wcshdr.h wcsprintf.h tpih2 tpih2_cfitsio : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h wcsconfig.h \ wcsconfig_tests.h wcserr.h wcshdr.h tprj1 : prj.h wcsconfig.h wcserr.h wcstrig.h tprj2 : prj.h wcserr.h tspc : spc.h spx.h wcsconfig.h wcserr.h wcstrig.h tsph : sph.h wcsconfig.h wcstrig.h tsphdpa : sph.h tspx : spx.h wcserr.h ttab1 : tab.h wcserr.h ttab2 : tab.h wcserr.h ttab3 : prj.h tab.h wcserr.h tunits : wcserr.h wcsunits.h twcs : cel.h lin.h log.h prj.h spc.h sph.h spx.h tab.h wcs.h wcsconfig.h \ wcsconfig_tests.h wcserr.h wcsfix.h wcshdr.h wcslib.h wcsmath.h \ wcsprintf.h wcstrig.h wcsunits.h wcsutil.h twcsfix : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h wcserr.h wcsfix.h \ wcsunits.h twcshdr : cel.h fitshdr.h getwcstab.h lin.h log.h prj.h spc.h sph.h spx.h \ tab.h wcs.h wcsconfig.h wcserr.h wcsfix.h wcshdr.h wcslib.h \ wcsmath.h wcsprintf.h wcstrig.h wcsunits.h wcsutil.h twcsmix : cel.h lin.h prj.h spc.h sph.h spx.h tab.h wcs.h wcserr.h twcssub : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h wcserr.h twcstab : cel.h fitshdr.h getwcstab.h lin.h log.h prj.h spc.h sph.h spx.h \ tab.h wcs.h wcsconfig.h wcserr.h wcsfix.h wcshdr.h wcslib.h \ wcsmath.h wcsprintf.h wcstrig.h wcsunits.h wcsutil.h run_tbth1 run_tbth1_cfitsio : bth.fits run_tfitshdr run_tfitshdr_cfitsio : pih.fits run_tpih1 run_tpih1_cfitsio : pih.fits run_tpih2 run_tpih2_cfitsio : pih.fits pywcs-1.12/wcslib/C/lin.c0000644001153600020070000004063012310355626017244 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: lin.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include "wcserr.h" #include "wcsprintf.h" #include "lin.h" const int LINSET = 137; /* Map status return value to message. */ const char *lin_errmsg[] = { "Success", "Null linprm pointer passed", "Memory allocation failed", "PCi_ja matrix is singular"}; /* Convenience macro for invoking wcserr_set(). */ #define LIN_ERRMSG(status) WCSERR_SET(status), lin_errmsg[status] /*--------------------------------------------------------------------------*/ int linini(alloc, naxis, lin) int alloc, naxis; struct linprm *lin; { static const char *function = "linini"; int i, j; double *pc; struct wcserr **err; if (lin == 0x0) return LINERR_NULL_POINTER; /* Initialize error message handling. */ err = &(lin->err); if (lin->flag != -1) { if (lin->err) free(lin->err); } lin->err = 0x0; /* Initialize memory management. */ if (lin->flag == -1 || lin->m_flag != LINSET) { lin->m_flag = 0; lin->m_naxis = 0x0; lin->m_crpix = 0x0; lin->m_pc = 0x0; lin->m_cdelt = 0x0; } if (naxis < 1) { return wcserr_set(WCSERR_SET(LINERR_MEMORY), "naxis must be positive (got %d)", naxis); } /* Allocate memory for arrays if required. */ if (alloc || lin->crpix == 0x0 || lin->pc == 0x0 || lin->cdelt == 0x0) { /* Was sufficient allocated previously? */ if (lin->m_flag == LINSET && lin->m_naxis < naxis) { /* No, free it. */ linfree(lin); } if (alloc || lin->crpix == 0x0) { if (lin->m_crpix) { /* In case the caller fiddled with it. */ lin->crpix = lin->m_crpix; } else { if (!(lin->crpix = calloc(naxis, sizeof(double)))) { return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); } lin->m_flag = LINSET; lin->m_naxis = naxis; lin->m_crpix = lin->crpix; } } if (alloc || lin->pc == 0x0) { if (lin->m_pc) { /* In case the caller fiddled with it. */ lin->pc = lin->m_pc; } else { if (!(lin->pc = calloc(naxis*naxis, sizeof(double)))) { linfree(lin); return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); } lin->m_flag = LINSET; lin->m_naxis = naxis; lin->m_pc = lin->pc; } } if (alloc || lin->cdelt == 0x0) { if (lin->m_cdelt) { /* In case the caller fiddled with it. */ lin->cdelt = lin->m_cdelt; } else { if (!(lin->cdelt = calloc(naxis, sizeof(double)))) { linfree(lin); return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); } lin->m_flag = LINSET; lin->m_naxis = naxis; lin->m_cdelt = lin->cdelt; } } } /* Free memory allocated by linset(). */ if (lin->flag == LINSET) { if (lin->piximg) free(lin->piximg); if (lin->imgpix) free(lin->imgpix); } lin->piximg = 0x0; lin->imgpix = 0x0; lin->i_naxis = 0x0; lin->flag = 0; lin->naxis = naxis; /* CRPIXja defaults to 0.0. */ for (j = 0; j < naxis; j++) { lin->crpix[j] = 0.0; } /* PCi_ja defaults to the unit matrix. */ pc = lin->pc; for (i = 0; i < naxis; i++) { for (j = 0; j < naxis; j++) { if (j == i) { *pc = 1.0; } else { *pc = 0.0; } pc++; } } /* CDELTia defaults to 1.0. */ for (i = 0; i < naxis; i++) { lin->cdelt[i] = 1.0; } return 0; } /*--------------------------------------------------------------------------*/ int lincpy(alloc, linsrc, lindst) int alloc; const struct linprm *linsrc; struct linprm *lindst; { static const char *function = "lincpy"; int i, j, naxis, status; const double *srcp; double *dstp; struct wcserr **err; if (linsrc == 0x0) return LINERR_NULL_POINTER; if (lindst == 0x0) return LINERR_NULL_POINTER; err = &(lindst->err); naxis = linsrc->naxis; if (naxis < 1) { return wcserr_set(WCSERR_SET(LINERR_MEMORY), "naxis must be positive (got %d)", naxis); } if ((status = linini(alloc, naxis, lindst))) { return status; } srcp = linsrc->crpix; dstp = lindst->crpix; for (j = 0; j < naxis; j++) { *(dstp++) = *(srcp++); } srcp = linsrc->pc; dstp = lindst->pc; for (i = 0; i < naxis; i++) { for (j = 0; j < naxis; j++) { *(dstp++) = *(srcp++); } } srcp = linsrc->cdelt; dstp = lindst->cdelt; for (i = 0; i < naxis; i++) { *(dstp++) = *(srcp++); } return 0; } /*--------------------------------------------------------------------------*/ int linfree(lin) struct linprm *lin; { if (lin == 0x0) return LINERR_NULL_POINTER; if (lin->flag != -1) { /* Free memory allocated by linini(). */ if (lin->m_flag == LINSET) { if (lin->crpix == lin->m_crpix) lin->crpix = 0x0; if (lin->pc == lin->m_pc) lin->pc = 0x0; if (lin->cdelt == lin->m_cdelt) lin->cdelt = 0x0; if (lin->m_crpix) free(lin->m_crpix); if (lin->m_pc) free(lin->m_pc); if (lin->m_cdelt) free(lin->m_cdelt); } } lin->m_flag = 0; lin->m_naxis = 0; lin->m_crpix = 0x0; lin->m_pc = 0x0; lin->m_cdelt = 0x0; /* Free memory allocated by linset(). */ if (lin->flag == LINSET) { if (lin->piximg) free(lin->piximg); if (lin->imgpix) free(lin->imgpix); } lin->piximg = 0x0; lin->imgpix = 0x0; lin->i_naxis = 0; if (lin->err) free(lin->err); lin->err = 0x0; lin->flag = 0; return 0; } /*--------------------------------------------------------------------------*/ int linprt(lin) const struct linprm *lin; { int i, j, k; if (lin == 0x0) return LINERR_NULL_POINTER; if (lin->flag != LINSET) { wcsprintf("The linprm struct is UNINITIALIZED.\n"); return 0; } wcsprintf(" flag: %d\n", lin->flag); wcsprintf(" naxis: %d\n", lin->naxis); WCSPRINTF_PTR(" crpix: ", lin->crpix, "\n"); wcsprintf(" "); for (i = 0; i < lin->naxis; i++) { wcsprintf(" %- 11.5g", lin->crpix[i]); } wcsprintf("\n"); k = 0; WCSPRINTF_PTR(" pc: ", lin->pc, "\n"); for (i = 0; i < lin->naxis; i++) { wcsprintf(" pc[%d][]:", i); for (j = 0; j < lin->naxis; j++) { wcsprintf(" %- 11.5g", lin->pc[k++]); } wcsprintf("\n"); } WCSPRINTF_PTR(" cdelt: ", lin->cdelt, "\n"); wcsprintf(" "); for (i = 0; i < lin->naxis; i++) { wcsprintf(" %- 11.5g", lin->cdelt[i]); } wcsprintf("\n"); wcsprintf(" unity: %d\n", lin->unity); WCSPRINTF_PTR(" err: ", lin->err, "\n"); if (lin->err) { wcserr_prt(lin->err, " "); } if (lin->piximg == 0x0) { wcsprintf(" piximg: (nil)\n"); } else { k = 0; for (i = 0; i < lin->naxis; i++) { wcsprintf("piximg[%d][]:", i); for (j = 0; j < lin->naxis; j++) { wcsprintf(" %- 11.5g", lin->piximg[k++]); } wcsprintf("\n"); } } if (lin->imgpix == 0x0) { wcsprintf(" imgpix: (nil)\n"); } else { k = 0; for (i = 0; i < lin->naxis; i++) { wcsprintf("imgpix[%d][]:", i); for (j = 0; j < lin->naxis; j++) { wcsprintf(" %- 11.5g", lin->imgpix[k++]); } wcsprintf("\n"); } } wcsprintf(" m_flag: %d\n", lin->m_flag); wcsprintf(" m_naxis: %d\n", lin->m_naxis); WCSPRINTF_PTR(" m_crpix: ", lin->m_crpix, ""); if (lin->m_crpix == lin->crpix) wcsprintf(" (= crpix)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_pc: ", lin->m_pc, ""); if (lin->m_pc == lin->pc) wcsprintf(" (= pc)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_cdelt: ", lin->m_cdelt, ""); if (lin->m_cdelt == lin->cdelt) wcsprintf(" (= cdelt)"); wcsprintf("\n"); return 0; } /*--------------------------------------------------------------------------*/ int linset(lin) struct linprm *lin; { static const char *function = "linset"; int i, j, n, status; double *pc, *piximg; struct wcserr **err; if (lin == 0x0) return LINERR_NULL_POINTER; err = &(lin->err); n = lin->naxis; /* Check for a unit matrix. */ lin->unity = 1; pc = lin->pc; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (j == i) { if (*(pc++) != 1.0) { lin->unity = 0; break; } } else { if (*(pc++) != 0.0) { lin->unity = 0; break; } } } } if (lin->unity) { if (lin->flag == LINSET) { /* Free memory that may have been allocated previously. */ if (lin->piximg) free(lin->piximg); if (lin->imgpix) free(lin->imgpix); } lin->piximg = 0x0; lin->imgpix = 0x0; lin->i_naxis = 0; } else { if (lin->flag != LINSET || lin->i_naxis < n) { if (lin->flag == LINSET) { /* Free memory that may have been allocated previously. */ if (lin->piximg) free(lin->piximg); if (lin->imgpix) free(lin->imgpix); } /* Allocate memory for internal arrays. */ if (!(lin->piximg = calloc(n*n, sizeof(double)))) { return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); } if (!(lin->imgpix = calloc(n*n, sizeof(double)))) { free(lin->piximg); return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); } lin->i_naxis = n; } /* Compute the pixel-to-image transformation matrix. */ pc = lin->pc; piximg = lin->piximg; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { *(piximg++) = lin->cdelt[i] * (*(pc++)); } } /* Compute the image-to-pixel transformation matrix. */ if ((status = matinv(n, lin->piximg, lin->imgpix))) { return wcserr_set(LIN_ERRMSG(status)); } } lin->flag = LINSET; return 0; } /*--------------------------------------------------------------------------*/ int linp2x(lin, ncoord, nelem, pixcrd, imgcrd) struct linprm *lin; int ncoord, nelem; const double pixcrd[]; double imgcrd[]; { int i, j, k, n, status; double temp; register const double *pix; register double *img, *piximg; /* Initialize. */ if (lin == 0x0) return LINERR_NULL_POINTER; if (lin->flag != LINSET) { if ((status = linset(lin))) return status; } n = lin->naxis; /* Convert pixel coordinates to intermediate world coordinates. */ pix = pixcrd; img = imgcrd; if (lin->unity) { for (k = 0; k < ncoord; k++) { for (i = 0; i < n; i++) { *(img++) = lin->cdelt[i] * (*(pix++) - lin->crpix[i]); } pix += (nelem - n); img += (nelem - n); } } else { for (k = 0; k < ncoord; k++) { for (i = 0; i < n; i++) { img[i] = 0.0; } for (j = 0; j < n; j++) { /* Column-wise multiplication allows this to be cached. */ temp = *(pix++) - lin->crpix[j]; piximg = lin->piximg + j; for (i = 0; i < n; i++, piximg += n) { img[i] += *piximg * temp; } } pix += (nelem - n); img += nelem; } } return 0; } /*--------------------------------------------------------------------------*/ int linx2p(lin, ncoord, nelem, imgcrd, pixcrd) struct linprm *lin; int ncoord, nelem; const double imgcrd[]; double pixcrd[]; { int i, j, k, n, status; register const double *img; register double *imgpix, *pix; /* Initialize. */ if (lin == 0x0) return LINERR_NULL_POINTER; if (lin->flag != LINSET) { if ((status = linset(lin))) return status; } n = lin->naxis; /* Convert intermediate world coordinates to pixel coordinates. */ img = imgcrd; pix = pixcrd; if (lin->unity) { for (k = 0; k < ncoord; k++) { for (j = 0; j < n; j++) { *(pix++) = (*(img++) / lin->cdelt[j]) + lin->crpix[j]; } pix += (nelem - n); img += (nelem - n); } } else { for (k = 0; k < ncoord; k++) { imgpix = lin->imgpix; for (j = 0; j < n; j++) { *pix = 0.0; for (i = 0; i < n; i++) { *pix += *imgpix * img[i]; imgpix++; } *(pix++) += lin->crpix[j]; } pix += (nelem - n); img += nelem; } } return 0; } /*--------------------------------------------------------------------------*/ int matinv(int n, const double mat[], double inv[]) { register int i, ij, ik, j, k, kj, pj; int itemp, *mxl, *lxm, pivot; double colmax, *lu, *rowmax, dtemp; /* Allocate memory for internal arrays. */ if (!(mxl = calloc(n, sizeof(int)))) { return LINERR_MEMORY; } if (!(lxm = calloc(n, sizeof(int)))) { free(mxl); return LINERR_MEMORY; } if (!(rowmax = calloc(n, sizeof(double)))) { free(mxl); free(lxm); return LINERR_MEMORY; } if (!(lu = calloc(n*n, sizeof(double)))) { free(mxl); free(lxm); free(rowmax); return LINERR_MEMORY; } /* Initialize arrays. */ for (i = 0, ij = 0; i < n; i++) { /* Vector that records row interchanges. */ mxl[i] = i; rowmax[i] = 0.0; for (j = 0; j < n; j++, ij++) { dtemp = fabs(mat[ij]); if (dtemp > rowmax[i]) rowmax[i] = dtemp; lu[ij] = mat[ij]; } /* A row of zeroes indicates a singular matrix. */ if (rowmax[i] == 0.0) { free(mxl); free(lxm); free(rowmax); free(lu); return LINERR_SINGULAR_MTX; } } /* Form the LU triangular factorization using scaled partial pivoting. */ for (k = 0; k < n; k++) { /* Decide whether to pivot. */ colmax = fabs(lu[k*n+k]) / rowmax[k]; pivot = k; for (i = k+1; i < n; i++) { ik = i*n + k; dtemp = fabs(lu[ik]) / rowmax[i]; if (dtemp > colmax) { colmax = dtemp; pivot = i; } } if (pivot > k) { /* We must pivot, interchange the rows of the design matrix. */ for (j = 0, pj = pivot*n, kj = k*n; j < n; j++, pj++, kj++) { dtemp = lu[pj]; lu[pj] = lu[kj]; lu[kj] = dtemp; } /* Amend the vector of row maxima. */ dtemp = rowmax[pivot]; rowmax[pivot] = rowmax[k]; rowmax[k] = dtemp; /* Record the interchange for later use. */ itemp = mxl[pivot]; mxl[pivot] = mxl[k]; mxl[k] = itemp; } /* Gaussian elimination. */ for (i = k+1; i < n; i++) { ik = i*n + k; /* Nothing to do if lu[ik] is zero. */ if (lu[ik] != 0.0) { /* Save the scaling factor. */ lu[ik] /= lu[k*n+k]; /* Subtract rows. */ for (j = k+1; j < n; j++) { lu[i*n+j] -= lu[ik]*lu[k*n+j]; } } } } /* mxl[i] records which row of mat corresponds to row i of lu. */ /* lxm[i] records which row of lu corresponds to row i of mat. */ for (i = 0; i < n; i++) { lxm[mxl[i]] = i; } /* Determine the inverse matrix. */ for (i = 0, ij = 0; i < n; i++) { for (j = 0; j < n; j++, ij++) { inv[ij] = 0.0; } } for (k = 0; k < n; k++) { inv[lxm[k]*n+k] = 1.0; /* Forward substitution. */ for (i = lxm[k]+1; i < n; i++) { for (j = lxm[k]; j < i; j++) { inv[i*n+k] -= lu[i*n+j]*inv[j*n+k]; } } /* Backward substitution. */ for (i = n-1; i >= 0; i--) { for (j = i+1; j < n; j++) { inv[i*n+k] -= lu[i*n+j]*inv[j*n+k]; } inv[i*n+k] /= lu[i*n+i]; } } free(mxl); free(lxm); free(rowmax); free(lu); return 0; } pywcs-1.12/wcslib/C/lin.h0000644001153600020070000004111112310355626017244 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: lin.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the FITS World Coordinate System * (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the lin routines * --------------------------- * These routines apply the linear transformation defined by the FITS WCS * standard. They are based on the linprm struct which contains all * information needed for the computations. The struct contains some members * that must be set by the user, and others that are maintained by these * routines, somewhat like a C++ class but with no encapsulation. * * Three routines, linini(), lincpy(), and linfree() are provided to manage the * linprm struct, and another, linprt(), prints its contents. * * A setup routine, linset(), computes intermediate values in the linprm struct * from parameters in it that were supplied by the user. The struct always * needs to be set up by linset() but need not be called explicitly - refer to * the explanation of linprm::flag. * * linp2x() and linx2p() implement the WCS linear transformations. * * An auxiliary matrix inversion routine, matinv(), is included. It uses * LU-triangular factorization with scaled partial pivoting. * * * linini() - Default constructor for the linprm struct * ---------------------------------------------------- * linini() allocates memory for arrays in a linprm struct and sets all members * of the struct to default values. * * PLEASE NOTE: every linprm struct should be initialized by linini(), possibly * repeatedly. On the first invokation, and only the first invokation, * linprm::flag must be set to -1 to initialize memory management, regardless * of whether linini() will actually be used to allocate memory. * * Given: * alloc int If true, allocate memory unconditionally for arrays in * the linprm struct. * * If false, it is assumed that pointers to these arrays * have been set by the user except if they are null * pointers in which case memory will be allocated for * them regardless. (In other words, setting alloc true * saves having to initalize these pointers to zero.) * * naxis int The number of world coordinate axes, used to determine * array sizes. * * Given and returned: * lin struct linprm* * Linear transformation parameters. Note that, in order * to initialize memory management linprm::flag should be * set to -1 when lin is initialized for the first time * (memory leaks may result if it had already been * initialized). * * Function return value: * int Status return value: * 0: Success. * 1: Null linprm pointer passed. * 2: Memory allocation failed. * * For returns > 1, a detailed error message is set in * linprm::err if enabled, see wcserr_enable(). * * * lincpy() - Copy routine for the linprm struct * --------------------------------------------- * lincpy() does a deep copy of one linprm struct to another, using linini() to * allocate memory for its arrays if required. Only the "information to be * provided" part of the struct is copied; a call to linset() is required to * initialize the remainder. * * Given: * alloc int If true, allocate memory for the crpix, pc, and cdelt * arrays in the destination. Otherwise, it is assumed * that pointers to these arrays have been set by the * user except if they are null pointers in which case * memory will be allocated for them regardless. * * linsrc const struct linprm* * Struct to copy from. * * Given and returned: * lindst struct linprm* * Struct to copy to. linprm::flag should be set to -1 * if lindst was not previously initialized (memory leaks * may result if it was previously initialized). * * Function return value: * int Status return value: * 0: Success. * 1: Null linprm pointer passed. * 2: Memory allocation failed. * * For returns > 1, a detailed error message is set in * linprm::err if enabled, see wcserr_enable(). * * * linfree() - Destructor for the linprm struct * -------------------------------------------- * linfree() frees memory allocated for the linprm arrays by linini() and/or * linset(). linini() keeps a record of the memory it allocates and linfree() * will only attempt to free this. * * PLEASE NOTE: linfree() must not be invoked on a linprm struct that was not * initialized by linini(). * * Given: * lin struct linprm* * Linear transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null linprm pointer passed. * * * linprt() - Print routine for the linprm struct * ---------------------------------------------- * linprt() prints the contents of a linprm struct using wcsprintf(). Mainly * intended for diagnostic purposes. * * Given: * lin const struct linprm* * Linear transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null linprm pointer passed. * * * linset() - Setup routine for the linprm struct * ---------------------------------------------- * linset(), if necessary, allocates memory for the linprm::piximg and * linprm::imgpix arrays and sets up the linprm struct according to information * supplied within it - refer to the explanation of linprm::flag. * * Note that this routine need not be called directly; it will be invoked by * linp2x() and linx2p() if the linprm::flag is anything other than a * predefined magic value. * * Given and returned: * lin struct linprm* * Linear transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null linprm pointer passed. * 2: Memory allocation failed. * 3: PCi_ja matrix is singular. * * For returns > 1, a detailed error message is set in * linprm::err if enabled, see wcserr_enable(). * * * linp2x() - Pixel-to-world linear transformation * ----------------------------------------------- * linp2x() transforms pixel coordinates to intermediate world coordinates. * * Given and returned: * lin struct linprm* * Linear transformation parameters. * * Given: * ncoord, * nelem int The number of coordinates, each of vector length nelem * but containing lin.naxis coordinate elements. * * pixcrd const double[ncoord][nelem] * Array of pixel coordinates. * * Returned: * imgcrd double[ncoord][nelem] * Array of intermediate world coordinates. * * Function return value: * int Status return value: * 0: Success. * 1: Null linprm pointer passed. * 2: Memory allocation failed. * 3: PCi_ja matrix is singular. * * For returns > 1, a detailed error message is set in * linprm::err if enabled, see wcserr_enable(). * * * linx2p() - World-to-pixel linear transformation * ----------------------------------------------- * linx2p() transforms intermediate world coordinates to pixel coordinates. * * Given and returned: * lin struct linprm* * Linear transformation parameters. * * Given: * ncoord, * nelem int The number of coordinates, each of vector length nelem * but containing lin.naxis coordinate elements. * * imgcrd const double[ncoord][nelem] * Array of intermediate world coordinates. * * Returned: * pixcrd double[ncoord][nelem] * Array of pixel coordinates. * * int Status return value: * 0: Success. * 1: Null linprm pointer passed. * 2: Memory allocation failed. * 3: PCi_ja matrix is singular. * * For returns > 1, a detailed error message is set in * linprm::err if enabled, see wcserr_enable(). * * * linprm struct - Linear transformation parameters * ------------------------------------------------ * The linprm struct contains all of the information required to perform a * linear transformation. It consists of certain members that must be set by * the user ("given") and others that are set by the WCSLIB routines * ("returned"). * * int flag * (Given and returned) This flag must be set to zero whenever any of the * following members of the linprm struct are set or modified: * * - linprm::naxis (q.v., not normally set by the user), * - linprm::pc, * - linprm::cdelt. * * This signals the initialization routine, linset(), to recompute the * returned members of the linprm struct. linset() will reset flag to * indicate that this has been done. * * PLEASE NOTE: flag should be set to -1 when linini() is called for the * first time for a particular linprm struct in order to initialize memory * management. It must ONLY be used on the first initialization otherwise * memory leaks may result. * * int naxis * (Given or returned) Number of pixel and world coordinate elements. * * If linini() is used to initialize the linprm struct (as would normally * be the case) then it will set naxis from the value passed to it as a * function argument. The user should not subsequently modify it. * * double *crpix * (Given) Pointer to the first element of an array of double containing * the coordinate reference pixel, CRPIXja. * * double *pc * (Given) Pointer to the first element of the PCi_ja (pixel coordinate) * transformation matrix. The expected order is * = struct linprm lin; = lin.pc = {PC1_1, PC1_2, PC2_1, PC2_2}; * * This may be constructed conveniently from a 2-D array via * = double m[2][2] = {{PC1_1, PC1_2}, = {PC2_1, PC2_2}}; * * which is equivalent to * = double m[2][2]; = m[0][0] = PC1_1; = m[0][1] = PC1_2; = m[1][0] = PC2_1; = m[1][1] = PC2_2; * * The storage order for this 2-D array is the same as for the 1-D array, * whence * = lin.pc = *m; * * would be legitimate. * * double *cdelt * (Given) Pointer to the first element of an array of double containing * the coordinate increments, CDELTia. * * int unity * (Returned) True if the linear transformation matrix is unity. * * int padding * (An unused variable inserted for alignment purposes only.) * * double *piximg * (Returned) Pointer to the first element of the matrix containing the * product of the CDELTia diagonal matrix and the PCi_ja matrix. * * double *imgpix * (Returned) Pointer to the first element of the inverse of the * linprm::piximg matrix. * * struct wcserr *err * (Returned) If enabled, when an error status is returned this struct * contains detailed information about the error, see wcserr_enable(). * * int i_naxis * (For internal use only.) * int m_flag * (For internal use only.) * int m_naxis * (For internal use only.) * int m_padding * (For internal use only.) * double *m_crpix * (For internal use only.) * double *m_pc * (For internal use only.) * double *m_cdelt * (For internal use only.) * void *padding2 * (For internal use only.) * * * Global variable: const char *lin_errmsg[] - Status return messages * ------------------------------------------------------------------ * Error messages to match the status value returned from each function. * *===========================================================================*/ #ifndef WCSLIB_LIN #define WCSLIB_LIN #include "wcserr.h" #ifdef __cplusplus extern "C" { #endif extern const char *lin_errmsg[]; enum lin_errmsg_enum { LINERR_SUCCESS = 0, /* Success. */ LINERR_NULL_POINTER = 1, /* Null linprm pointer passed. */ LINERR_MEMORY = 2, /* Memory allocation failed. */ LINERR_SINGULAR_MTX = 3 /* PCi_ja matrix is singular. */ }; struct linprm { /* Initialization flag (see the prologue above). */ /*------------------------------------------------------------------------*/ int flag; /* Set to zero to force initialization. */ /* Parameters to be provided (see the prologue above). */ /*------------------------------------------------------------------------*/ int naxis; /* The number of axes, given by NAXIS. */ double *crpix; /* CRPIXja keywords for each pixel axis. */ double *pc; /* PCi_ja linear transformation matrix. */ double *cdelt; /* CDELTia keywords for each coord axis. */ /* Information derived from the parameters supplied. */ /*------------------------------------------------------------------------*/ double *piximg; /* Product of CDELTia and PCi_ja matrices. */ double *imgpix; /* Inverse of the piximg matrix. */ int unity; /* True if the PCi_ja matrix is unity. */ /* Error handling */ /*------------------------------------------------------------------------*/ int padding; /* (Dummy inserted for alignment purposes.) */ struct wcserr *err; /* Private - the remainder are for memory management. */ /*------------------------------------------------------------------------*/ int i_naxis; int m_flag, m_naxis, m_padding; double *m_crpix, *m_pc, *m_cdelt; void *padding2; }; /* Size of the linprm struct in int units, used by the Fortran wrappers. */ #define LINLEN (sizeof(struct linprm)/sizeof(int)) int linini(int alloc, int naxis, struct linprm *lin); int lincpy(int alloc, const struct linprm *linsrc, struct linprm *lindst); int linfree(struct linprm *lin); int linprt(const struct linprm *lin); int linset(struct linprm *lin); int linp2x(struct linprm *lin, int ncoord, int nelem, const double pixcrd[], double imgcrd[]); int linx2p(struct linprm *lin, int ncoord, int nelem, const double imgcrd[], double pixcrd[]); int matinv(int n, const double mat[], double inv[]); /* Deprecated. */ #define linini_errmsg lin_errmsg #define lincpy_errmsg lin_errmsg #define linfree_errmsg lin_errmsg #define linprt_errmsg lin_errmsg #define linset_errmsg lin_errmsg #define linp2x_errmsg lin_errmsg #define linx2p_errmsg lin_errmsg #ifdef __cplusplus } #endif #endif /* WCSLIB_LIN */ pywcs-1.12/wcslib/C/log.c0000644001153600020070000000552612310355626017250 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: log.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include "log.h" /* Map status return value to message. */ const char *log_errmsg[] = { "Success", "", "Invalid log-coordinate reference value", "One or more of the x coordinates were invalid", "One or more of the world coordinates were invalid"}; /*--------------------------------------------------------------------------*/ int logx2s( double crval, int nx, int sx, int slogc, const double x[], double logc[], int stat[]) { register int ix; register int *statp; register const double *xp; register double *logcp; if (crval <= 0.0) { return LOGERR_BAD_LOG_REF_VAL; } xp = x; logcp = logc; statp = stat; for (ix = 0; ix < nx; ix++, xp += sx, logcp += slogc) { *logcp = crval * exp((*xp) / crval); *(statp++) = 0; } return 0; } /*--------------------------------------------------------------------------*/ int logs2x( double crval, int nlogc, int slogc, int sx, const double logc[], double x[], int stat[]) { int status; register int ilogc; register int *statp; register const double *logcp; register double *xp; if (crval <= 0.0) { return LOGERR_BAD_LOG_REF_VAL; } xp = x; logcp = logc; statp = stat; status = 0; for (ilogc = 0; ilogc < nlogc; ilogc++, logcp += slogc, xp += sx) { if (*logcp > 0.0) { *xp = crval * log(*logcp / crval); *(statp++) = 0; } else { *(statp++) = 1; status = LOGERR_BAD_WORLD; } } return status; } pywcs-1.12/wcslib/C/log.h0000644001153600020070000001351112310355626017246 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: log.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement logarithmic coordinate systems as * defined by the FITS World Coordinate System (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * "Representations of spectral coordinates in FITS", * Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. * 2006, A&A, 446, 747 (Paper III) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the log routines * --------------------------- * These routines implement the part of the FITS WCS standard that deals with * logarithmic coordinates. They define methods to be used for computing * logarithmic world coordinates from intermediate world coordinates (a linear * transformation of image pixel coordinates), and vice versa. * * logx2s() and logs2x() implement the WCS logarithmic coordinate * transformations. * * Argument checking: * ------------------ * The input log-coordinate values are only checked for values that would * result in floating point exceptions and the same is true for the * log-coordinate reference value. * * Accuracy: * --------- * No warranty is given for the accuracy of these routines (refer to the * copyright notice); intending users must satisfy for themselves their * adequacy for the intended purpose. However, closure effectively to within * double precision rounding error was demonstrated by test routine tlog.c * which accompanies this software. * * * logx2s() - Transform to logarithmic coordinates * ----------------------------------------------- * logx2s() transforms intermediate world coordinates to logarithmic * coordinates. * * Given and returned: * crval double Log-coordinate reference value (CRVALia). * * Given: * nx int Vector length. * * sx int Vector stride. * * slogc int Vector stride. * * x const double[] * Intermediate world coordinates, in SI units. * * Returned: * logc double[] Logarithmic coordinates, in SI units. * * stat int[] Status return value status for each vector element: * 0: Success. * * Function return value: * int Status return value: * 0: Success. * 2: Invalid log-coordinate reference value. * * * logs2x() - Transform logarithmic coordinates * -------------------------------------------- * logs2x() transforms logarithmic world coordinates to intermediate world * coordinates. * * Given and returned: * crval double Log-coordinate reference value (CRVALia). * * Given: * nlogc int Vector length. * * slogc int Vector stride. * * sx int Vector stride. * * logc const double[] * Logarithmic coordinates, in SI units. * * Returned: * x double[] Intermediate world coordinates, in SI units. * * stat int[] Status return value status for each vector element: * 0: Success. * 1: Invalid value of logc. * * Function return value: * int Status return value: * 0: Success. * 2: Invalid log-coordinate reference value. * 4: One or more of the world-coordinate values * are incorrect, as indicated by the stat vector. * * * Global variable: const char *log_errmsg[] - Status return messages * ------------------------------------------------------------------ * Error messages to match the status value returned from each function. * *===========================================================================*/ #ifndef WCSLIB_LOG #define WCSLIB_LOG #ifdef __cplusplus extern "C" { #endif extern const char *log_errmsg[]; enum log_errmsg_enum { LOGERR_SUCCESS = 0, /* Success. */ LOGERR_NULL_POINTER = 1, /* Null pointer passed. */ LOGERR_BAD_LOG_REF_VAL = 2, /* Invalid log-coordinate reference value. */ LOGERR_BAD_X = 3, /* One or more of the x coordinates were invalid. */ LOGERR_BAD_WORLD = 4 /* One or more of the world coordinates were invalid. */ }; int logx2s(double crval, int nx, int sx, int slogc, const double x[], double logc[], int stat[]); int logs2x(double crval, int nlogc, int slogc, int sx, const double logc[], double x[], int stat[]); #ifdef __cplusplus } #endif #endif /* WCSLIB_LOG */ pywcs-1.12/wcslib/C/prj.c0000644001153600020070000052601612310355626017264 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: prj.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include #include "wcserr.h" #include "wcsmath.h" #include "wcsprintf.h" #include "wcstrig.h" #include "wcsutil.h" #include "prj.h" /* Projection categories. */ const int ZENITHAL = 1; const int CYLINDRICAL = 2; const int PSEUDOCYLINDRICAL = 3; const int CONVENTIONAL = 4; const int CONIC = 5; const int POLYCONIC = 6; const int QUADCUBE = 7; const int HEALPIX = 8; const char prj_categories[9][32] = {"undefined", "zenithal", "cylindrical", "pseudocylindrical", "conventional", "conic", "polyconic", "quadcube", "HEALPix"}; /* Projection codes. */ const int prj_ncode = 27; const char prj_codes[27][4] = {"AZP", "SZP", "TAN", "STG", "SIN", "ARC", "ZPN", "ZEA", "AIR", "CYP", "CEA", "CAR", "MER", "COP", "COE", "COD", "COO", "SFL", "PAR", "MOL", "AIT", "BON", "PCO", "TSC", "CSC", "QSC", "HPX"}; const int AZP = 101; const int SZP = 102; const int TAN = 103; const int STG = 104; const int SIN = 105; const int ARC = 106; const int ZPN = 107; const int ZEA = 108; const int AIR = 109; const int CYP = 201; const int CEA = 202; const int CAR = 203; const int MER = 204; const int SFL = 301; const int PAR = 302; const int MOL = 303; const int AIT = 401; const int COP = 501; const int COE = 502; const int COD = 503; const int COO = 504; const int BON = 601; const int PCO = 602; const int TSC = 701; const int CSC = 702; const int QSC = 703; const int HPX = 801; /* Map status return value to message. */ const char *prj_errmsg[] = { "Success", "Null prjprm pointer passed", "Invalid projection parameters", "One or more of the (x,y) coordinates were invalid", "One or more of the (phi,theta) coordinates were invalid"}; /* Convenience macros for generating common error messages. */ #define PRJERR_BAD_PARAM_SET(function) \ wcserr_set(&(prj->err), PRJERR_BAD_PARAM, function, __FILE__, __LINE__, \ "Invalid parameters for %s projection", prj->name); #define PRJERR_BAD_PIX_SET(function) \ wcserr_set(&(prj->err), PRJERR_BAD_PIX, function, __FILE__, __LINE__, \ "One or more of the (x, y) coordinates were invalid for %s projection", \ prj->name); #define PRJERR_BAD_WORLD_SET(function) \ wcserr_set(&(prj->err), PRJERR_BAD_WORLD, function, __FILE__, __LINE__, \ "One or more of the (lat, lng) coordinates were invalid for " \ "%s projection", prj->name); #define copysign(X, Y) ((Y) < 0.0 ? -fabs(X) : fabs(X)) /*============================================================================ * Generic routines. * * prjini initializes a prjprm struct to default values. * * prjprt prints the contents of a prjprm struct. * * prjset invokes the specific initialization routine based on the projection * code in the prjprm struct. * * prjx2s invokes the specific deprojection routine based on the pointer-to- * function stored in the prjprm struct. * * prjs2x invokes the specific projection routine based on the pointer-to- * function stored in the prjprm struct. * *---------------------------------------------------------------------------*/ int prjini(prj) struct prjprm *prj; { register int k; if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = 0; strcpy(prj->code, " "); prj->pv[0] = 0.0; prj->pv[1] = UNDEFINED; prj->pv[2] = UNDEFINED; prj->pv[3] = UNDEFINED; for (k = 4; k < PVN; prj->pv[k++] = 0.0); prj->r0 = 0.0; prj->phi0 = UNDEFINED; prj->theta0 = UNDEFINED; prj->bounds = 1; strcpy(prj->name, "undefined"); for (k = 9; k < 40; prj->name[k++] = '\0'); prj->category = 0; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 0; prj->conformal = 0; prj->global = 0; prj->divergent = 0; prj->x0 = 0.0; prj->y0 = 0.0; for (k = 0; k < 10; prj->w[k++] = 0.0); prj->m = 0; prj->n = 0; prj->err = 0x0; return 0; } /*--------------------------------------------------------------------------*/ int prjfree(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->err) free(prj->err); prj->err = 0x0; return 0; } /*--------------------------------------------------------------------------*/ int prjprt(prj) const struct prjprm *prj; { char hext[32]; int i, n; if (prj == 0x0) return PRJERR_NULL_POINTER; wcsprintf(" flag: %d\n", prj->flag); wcsprintf(" code: \"%s\"\n", prj->code); wcsprintf(" r0: %9f\n", prj->r0); wcsprintf(" pv:"); if (prj->pvrange) { n = (prj->pvrange)%100; if (prj->pvrange/100) { wcsprintf(" (0)"); } else { wcsprintf(" %- 11.5g", prj->pv[0]); n--; } for (i = 1; i <= n; i++) { if (i%5 == 1) { wcsprintf("\n "); } if (undefined(prj->pv[i])) { wcsprintf(" UNDEFINED "); } else { wcsprintf(" %- 11.5g", prj->pv[i]); } } wcsprintf("\n"); } else { wcsprintf(" (not used)\n"); } if (undefined(prj->phi0)) { wcsprintf(" phi0: UNDEFINED\n"); } else { wcsprintf(" phi0: %9f\n", prj->phi0); } if (undefined(prj->theta0)) { wcsprintf(" theta0: UNDEFINED\n"); } else { wcsprintf(" theta0: %9f\n", prj->theta0); } wcsprintf(" bounds: %d\n", prj->bounds); wcsprintf("\n"); wcsprintf(" name: \"%s\"\n", prj->name); wcsprintf(" category: %d (%s)\n", prj->category, prj_categories[prj->category]); wcsprintf(" pvrange: %d\n", prj->pvrange); wcsprintf(" simplezen: %d\n", prj->simplezen); wcsprintf(" equiareal: %d\n", prj->equiareal); wcsprintf(" conformal: %d\n", prj->conformal); wcsprintf(" global: %d\n", prj->global); wcsprintf(" divergent: %d\n", prj->divergent); wcsprintf(" x0: %f\n", prj->x0); wcsprintf(" y0: %f\n", prj->y0); WCSPRINTF_PTR(" err: ", prj->err, "\n"); if (prj->err) { wcserr_prt(prj->err, " "); } wcsprintf(" w[]:"); for (i = 0; i < 5; i++) { wcsprintf(" %- 11.5g", prj->w[i]); } wcsprintf("\n "); for (i = 5; i < 10; i++) { wcsprintf(" %- 11.5g", prj->w[i]); } wcsprintf("\n"); wcsprintf(" m: %d\n", prj->m); wcsprintf(" n: %d\n", prj->n); wcsprintf(" prjx2s: %s\n", wcsutil_fptr2str((int (*)())prj->prjx2s, hext)); wcsprintf(" prjs2x: %s\n", wcsutil_fptr2str((int (*)())prj->prjs2x, hext)); return 0; } /*--------------------------------------------------------------------------*/ int prjset(prj) struct prjprm *prj; { static const char *function = "prjset"; int status; struct wcserr **err; if (prj == 0x0) return PRJERR_NULL_POINTER; err = &(prj->err); /* Invoke the relevant initialization routine. */ prj->code[3] = '\0'; if (strcmp(prj->code, "AZP") == 0) { status = azpset(prj); } else if (strcmp(prj->code, "SZP") == 0) { status = szpset(prj); } else if (strcmp(prj->code, "TAN") == 0) { status = tanset(prj); } else if (strcmp(prj->code, "STG") == 0) { status = stgset(prj); } else if (strcmp(prj->code, "SIN") == 0) { status = sinset(prj); } else if (strcmp(prj->code, "ARC") == 0) { status = arcset(prj); } else if (strcmp(prj->code, "ZPN") == 0) { status = zpnset(prj); } else if (strcmp(prj->code, "ZEA") == 0) { status = zeaset(prj); } else if (strcmp(prj->code, "AIR") == 0) { status = airset(prj); } else if (strcmp(prj->code, "CYP") == 0) { status = cypset(prj); } else if (strcmp(prj->code, "CEA") == 0) { status = ceaset(prj); } else if (strcmp(prj->code, "CAR") == 0) { status = carset(prj); } else if (strcmp(prj->code, "MER") == 0) { status = merset(prj); } else if (strcmp(prj->code, "SFL") == 0) { status = sflset(prj); } else if (strcmp(prj->code, "PAR") == 0) { status = parset(prj); } else if (strcmp(prj->code, "MOL") == 0) { status = molset(prj); } else if (strcmp(prj->code, "AIT") == 0) { status = aitset(prj); } else if (strcmp(prj->code, "COP") == 0) { status = copset(prj); } else if (strcmp(prj->code, "COE") == 0) { status = coeset(prj); } else if (strcmp(prj->code, "COD") == 0) { status = codset(prj); } else if (strcmp(prj->code, "COO") == 0) { status = cooset(prj); } else if (strcmp(prj->code, "BON") == 0) { status = bonset(prj); } else if (strcmp(prj->code, "PCO") == 0) { status = pcoset(prj); } else if (strcmp(prj->code, "TSC") == 0) { status = tscset(prj); } else if (strcmp(prj->code, "CSC") == 0) { status = cscset(prj); } else if (strcmp(prj->code, "QSC") == 0) { status = qscset(prj); } else if (strcmp(prj->code, "HPX") == 0) { status = hpxset(prj); } else { /* Unrecognized projection code. */ status = wcserr_set(WCSERR_SET(PRJERR_BAD_PARAM), "Unrecognized projection code '%s'", prj->code); } return status; } /*--------------------------------------------------------------------------*/ int prjx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int status; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag == 0) { if ((status = prjset(prj))) return status; } return prj->prjx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat); } /*--------------------------------------------------------------------------*/ int prjs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int status; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag == 0) { if ((status = prjset(prj))) return status; } return prj->prjs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat); } /*============================================================================ * Internal helper routine used by the *set() routines that forces * (x,y) = (0,0) at (phi0,theta0). *---------------------------------------------------------------------------*/ int prjoff(prj, phi0, theta0) struct prjprm *prj; const double phi0, theta0; { int stat; double x0, y0; if (prj == 0x0) return PRJERR_NULL_POINTER; prj->x0 = 0.0; prj->y0 = 0.0; if (undefined(prj->phi0) || undefined(prj->theta0)) { /* Set both to the projection-specific default if either undefined. */ prj->phi0 = phi0; prj->theta0 = theta0; } else { if (prj->prjs2x(prj, 1, 1, 1, 1, &(prj->phi0), &(prj->theta0), &x0, &y0, &stat)) { return PRJERR_BAD_PARAM_SET("prjoff"); } prj->x0 = x0; prj->y0 = y0; } return 0; } /*============================================================================ * AZP: zenithal/azimuthal perspective projection. * * Given: * prj->pv[1] Distance parameter, mu in units of r0. * prj->pv[2] Tilt angle, gamma in degrees. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 90.0 if undefined. * * Returned: * prj->flag AZP * prj->code "AZP" * prj->x0 Offset in x. * prj->y0 Offset in y. * prj->w[0] r0*(mu+1) * prj->w[1] tan(gamma) * prj->w[2] sec(gamma) * prj->w[3] cos(gamma) * prj->w[4] sin(gamma) * prj->w[5] asin(-1/mu) for |mu| >= 1, -90 otherwise * prj->w[6] mu*cos(gamma) * prj->w[7] 1 if |mu*cos(gamma)| < 1, 0 otherwise * prj->prjx2s Pointer to azpx2s(). * prj->prjs2x Pointer to azps2x(). *===========================================================================*/ int azpset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = AZP; strcpy(prj->code, "AZP"); if (undefined(prj->pv[1])) prj->pv[1] = 0.0; if (undefined(prj->pv[2])) prj->pv[2] = 0.0; if (prj->r0 == 0.0) prj->r0 = R2D; strcpy(prj->name, "zenithal/azimuthal perspective"); prj->category = ZENITHAL; prj->pvrange = 102; prj->simplezen = prj->pv[2] == 0.0; prj->equiareal = 0; prj->conformal = 0; prj->global = 0; prj->divergent = prj->pv[1] <= 1.0; prj->w[0] = prj->r0*(prj->pv[1] + 1.0); if (prj->w[0] == 0.0) { return PRJERR_BAD_PARAM_SET("azpset"); } prj->w[3] = cosd(prj->pv[2]); if (prj->w[3] == 0.0) { return PRJERR_BAD_PARAM_SET("azpset"); } prj->w[2] = 1.0/prj->w[3]; prj->w[4] = sind(prj->pv[2]); prj->w[1] = prj->w[4] / prj->w[3]; if (fabs(prj->pv[1]) > 1.0) { prj->w[5] = asind(-1.0/prj->pv[1]); } else { prj->w[5] = -90.0; } prj->w[6] = prj->pv[1] * prj->w[3]; prj->w[7] = (fabs(prj->w[6]) < 1.0) ? 1.0 : 0.0; prj->prjx2s = azpx2s; prj->prjs2x = azps2x; return prjoff(prj, 0.0, 90.0); } /*--------------------------------------------------------------------------*/ int azpx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double a, b, q, r, s, t, xj, yj, yc, yc2; const double tol = 1.0e-13; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != AZP) { if ((status = azpset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; yc = yj*prj->w[3]; yc2 = yc*yc; q = prj->w[0] + yj*prj->w[4]; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + yc2); if (r == 0.0) { *phip = 0.0; *thetap = 90.0; *(statp++) = 0; } else { *phip = atan2d(xj, -yc); s = r / q; t = s*prj->pv[1]/sqrt(s*s + 1.0); s = atan2d(1.0, s); if (fabs(t) > 1.0) { if (fabs(t) > 1.0+tol) { *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("azpx2s"); continue; } t = copysign(90.0, t); } else { t = asind(t); } a = s - t; b = s + t + 180.0; if (a > 90.0) a -= 360.0; if (b > 90.0) b -= 360.0; *thetap = (a > b) ? a : b; *(statp++) = 0; } } } return status; } /*--------------------------------------------------------------------------*/ int azps2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double a, b, cosphi, costhe, r, s, sinphi, sinthe, t; register int iphi, itheta, istat, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != AZP) { if ((status = azpset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinphi; *yp = cosphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { sincosd(*thetap, &sinthe, &costhe); for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { s = prj->w[1]*(*yp); t = (prj->pv[1] + sinthe) + costhe*s; if (t == 0.0) { *xp = 0.0; *yp = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_WORLD_SET("azps2x"); } else { r = prj->w[0]*costhe/t; /* Bounds checking. */ istat = 0; if (prj->bounds) { if (*thetap < prj->w[5]) { /* Overlap. */ istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("azps2x"); } else if (prj->w[7] > 0.0) { /* Divergence. */ t = prj->pv[1] / sqrt(1.0 + s*s); if (fabs(t) <= 1.0) { s = atand(-s); t = asind(t); a = s - t; b = s + t + 180.0; if (a > 90.0) a -= 360.0; if (b > 90.0) b -= 360.0; if (*thetap < ((a > b) ? a : b)) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("azps2x"); } } } } *xp = r*(*xp) - prj->x0; *yp = -r*(*yp)*prj->w[2] - prj->y0; *(statp++) = istat; } } } return status; } /*============================================================================ * SZP: slant zenithal perspective projection. * * Given: * prj->pv[1] Distance of the point of projection from the centre of the * generating sphere, mu in units of r0. * prj->pv[2] Native longitude, phi_c, and ... * prj->pv[3] Native latitude, theta_c, on the planewards side of the * intersection of the line through the point of projection * and the centre of the generating sphere, phi_c in degrees. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 90.0 if undefined. * * Returned: * prj->flag SZP * prj->code "SZP" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] 1/r0 * prj->w[1] xp = -mu*cos(theta_c)*sin(phi_c) * prj->w[2] yp = mu*cos(theta_c)*cos(phi_c) * prj->w[3] zp = mu*sin(theta_c) + 1 * prj->w[4] r0*xp * prj->w[5] r0*yp * prj->w[6] r0*zp * prj->w[7] (zp - 1)^2 * prj->w[8] asin(1-zp) if |1 - zp| < 1, -90 otherwise * prj->prjx2s Pointer to szpx2s(). * prj->prjs2x Pointer to szps2x(). *===========================================================================*/ int szpset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = SZP; strcpy(prj->code, "SZP"); if (undefined(prj->pv[1])) prj->pv[1] = 0.0; if (undefined(prj->pv[2])) prj->pv[2] = 0.0; if (undefined(prj->pv[3])) prj->pv[3] = 90.0; if (prj->r0 == 0.0) prj->r0 = R2D; strcpy(prj->name, "slant zenithal perspective"); prj->category = ZENITHAL; prj->pvrange = 103; prj->simplezen = prj->pv[3] == 90.0; prj->equiareal = 0; prj->conformal = 0; prj->global = 0; prj->divergent = prj->pv[1] <= 1.0; prj->w[0] = 1.0/prj->r0; prj->w[3] = prj->pv[1] * sind(prj->pv[3]) + 1.0; if (prj->w[3] == 0.0) { return PRJERR_BAD_PARAM_SET("szpset"); } prj->w[1] = -prj->pv[1] * cosd(prj->pv[3]) * sind(prj->pv[2]); prj->w[2] = prj->pv[1] * cosd(prj->pv[3]) * cosd(prj->pv[2]); prj->w[4] = prj->r0 * prj->w[1]; prj->w[5] = prj->r0 * prj->w[2]; prj->w[6] = prj->r0 * prj->w[3]; prj->w[7] = (prj->w[3] - 1.0) * prj->w[3] - 1.0; if (fabs(prj->w[3] - 1.0) < 1.0) { prj->w[8] = asind(1.0 - prj->w[3]); } else { prj->w[8] = -90.0; } prj->prjx2s = szpx2s; prj->prjs2x = szps2x; return prjoff(prj, 0.0, 90.0); } /*--------------------------------------------------------------------------*/ int szpx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double a, b, c, d, r2, sinth1, sinth2, sinthe, t, x1, xr, xy, y1, yr, z; const double tol = 1.0e-13; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != SZP) { if ((status = szpset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xr = (*xp + prj->x0)*prj->w[0]; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xr; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yr = (*yp + prj->y0)*prj->w[0]; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xr = *phip; r2 = xr*xr + yr*yr; x1 = (xr - prj->w[1])/prj->w[3]; y1 = (yr - prj->w[2])/prj->w[3]; xy = xr*x1 + yr*y1; if (r2 < 1.0e-10) { /* Use small angle formula. */ z = r2/2.0; *thetap = 90.0 - R2D*sqrt(r2/(1.0 + xy)); } else { t = x1*x1 + y1*y1; a = t + 1.0; b = xy - t; c = r2 - xy - xy + t - 1.0; d = b*b - a*c; /* Check for a solution. */ if (d < 0.0) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("szpx2s"); continue; } d = sqrt(d); /* Choose solution closest to pole. */ sinth1 = (-b + d)/a; sinth2 = (-b - d)/a; sinthe = (sinth1 > sinth2) ? sinth1 : sinth2; if (sinthe > 1.0) { if (sinthe-1.0 < tol) { sinthe = 1.0; } else { sinthe = (sinth1 < sinth2) ? sinth1 : sinth2; } } if (sinthe < -1.0) { if (sinthe+1.0 > -tol) { sinthe = -1.0; } } if (sinthe > 1.0 || sinthe < -1.0) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("szpx2s"); continue; } *thetap = asind(sinthe); z = 1.0 - sinthe; } *phip = atan2d(xr - x1*z, -(yr - y1*z)); *(statp++) = 0; } } return status; } /*--------------------------------------------------------------------------*/ int szps2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double a, b, cosphi, r, s, sinphi, t, u, v; register int iphi, itheta, istat, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != SZP) { if ((status = szpset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinphi; *yp = cosphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { s = 1.0 - sind(*thetap); t = prj->w[3] - s; if (t == 0.0) { for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = 0.0; *yp = 0.0; *(statp++) = 1; } if (!status) status = PRJERR_BAD_WORLD_SET("szps2x"); } else { r = prj->w[6]*cosd(*thetap)/t; u = prj->w[4]*s/t + prj->x0; v = prj->w[5]*s/t + prj->y0; for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { /* Bounds checking. */ istat = 0; if (prj->bounds) { if (*thetap < prj->w[8]) { /* Divergence. */ istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("szps2x"); } else if (fabs(prj->pv[1]) > 1.0) { /* Overlap. */ s = prj->w[1]*(*xp) - prj->w[2]*(*yp); t = 1.0/sqrt(prj->w[7] + s*s); if (fabs(t) <= 1.0) { s = atan2d(s, prj->w[3] - 1.0); t = asind(t); a = s - t; b = s + t + 180.0; if (a > 90.0) a -= 360.0; if (b > 90.0) b -= 360.0; if (*thetap < ((a > b) ? a : b)) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("szps2x"); } } } } *xp = r*(*xp) - u; *yp = -r*(*yp) - v; *(statp++) = istat; } } } return status; } /*============================================================================ * TAN: gnomonic projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 90.0 if undefined. * * Returned: * prj->flag TAN * prj->code "TAN" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->prjx2s Pointer to tanx2s(). * prj->prjs2x Pointer to tans2x(). *===========================================================================*/ int tanset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = TAN; strcpy(prj->code, "TAN"); if (prj->r0 == 0.0) prj->r0 = R2D; strcpy(prj->name, "gnomonic"); prj->category = ZENITHAL; prj->pvrange = 0; prj->simplezen = 1; prj->equiareal = 0; prj->conformal = 0; prj->global = 0; prj->divergent = 1; prj->prjx2s = tanx2s; prj->prjs2x = tans2x; return prjoff(prj, 0.0, 90.0); } /*--------------------------------------------------------------------------*/ int tanx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double r, xj, yj, yj2; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != TAN) { if ((status = tanset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; yj2 = yj*yj; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + yj2); if (r == 0.0) { *phip = 0.0; } else { *phip = atan2d(xj, -yj); } *thetap = atan2d(prj->r0, r); *(statp++) = 0; } } return 0; } /*--------------------------------------------------------------------------*/ int tans2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double cosphi, r, s, sinphi; register int iphi, itheta, istat, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != TAN) { if ((status = tanset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinphi; *yp = cosphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { s = sind(*thetap); if (s == 0.0) { for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = 0.0; *yp = 0.0; *(statp++) = 1; } if (!status) status = PRJERR_BAD_WORLD_SET("tans2x"); } else { r = prj->r0*cosd(*thetap)/s; istat = 0; if (prj->bounds && s < 0.0) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("tans2x"); } for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - prj->y0; *(statp++) = istat; } } } return status; } /*============================================================================ * STG: stereographic projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 90.0 if undefined. * * Returned: * prj->flag STG * prj->code "STG" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] 2*r0 * prj->w[1] 1/(2*r0) * prj->prjx2s Pointer to stgx2s(). * prj->prjs2x Pointer to stgs2x(). *===========================================================================*/ int stgset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = STG; strcpy(prj->code, "STG"); strcpy(prj->name, "stereographic"); prj->category = ZENITHAL; prj->pvrange = 0; prj->simplezen = 1; prj->equiareal = 0; prj->conformal = 1; prj->global = 0; prj->divergent = 1; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 360.0/PI; prj->w[1] = PI/360.0; } else { prj->w[0] = 2.0*prj->r0; prj->w[1] = 1.0/prj->w[0]; } prj->prjx2s = stgx2s; prj->prjs2x = stgs2x; return prjoff(prj, 0.0, 90.0); } /*--------------------------------------------------------------------------*/ int stgx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double r, xj, yj, yj2; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != STG) { if ((status = stgset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; yj2 = yj*yj; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + yj2); if (r == 0.0) { *phip = 0.0; } else { *phip = atan2d(xj, -yj); } *thetap = 90.0 - 2.0*atand(r*prj->w[1]); *(statp++) = 0; } } return 0; } /*--------------------------------------------------------------------------*/ int stgs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double cosphi, r, s, sinphi; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != STG) { if ((status = stgset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinphi; *yp = cosphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { s = 1.0 + sind(*thetap); if (s == 0.0) { for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = 0.0; *yp = 0.0; *(statp++) = 1; } if (!status) status = PRJERR_BAD_WORLD_SET("stgs2x"); } else { r = prj->w[0]*cosd(*thetap)/s; for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - prj->y0; *(statp++) = 0; } } } return status; } /*============================================================================ * SIN: orthographic/synthesis projection. * * Given: * prj->pv[1:2] Obliqueness parameters, xi and eta. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 90.0 if undefined. * * Returned: * prj->flag SIN * prj->code "SIN" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] 1/r0 * prj->w[1] xi**2 + eta**2 * prj->w[2] xi**2 + eta**2 + 1 * prj->w[3] xi**2 + eta**2 - 1 * prj->prjx2s Pointer to sinx2s(). * prj->prjs2x Pointer to sins2x(). *===========================================================================*/ int sinset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = SIN; strcpy(prj->code, "SIN"); if (undefined(prj->pv[1])) prj->pv[1] = 0.0; if (undefined(prj->pv[2])) prj->pv[2] = 0.0; if (prj->r0 == 0.0) prj->r0 = R2D; strcpy(prj->name, "orthographic/synthesis"); prj->category = ZENITHAL; prj->pvrange = 102; prj->simplezen = (prj->pv[1] == 0.0 && prj->pv[2] == 0.0); prj->equiareal = 0; prj->conformal = 0; prj->global = 0; prj->divergent = 0; prj->w[0] = 1.0/prj->r0; prj->w[1] = prj->pv[1]*prj->pv[1] + prj->pv[2]*prj->pv[2]; prj->w[2] = prj->w[1] + 1.0; prj->w[3] = prj->w[1] - 1.0; prj->prjx2s = sinx2s; prj->prjs2x = sins2x; return prjoff(prj, 0.0, 90.0); } /*--------------------------------------------------------------------------*/ int sinx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; const double tol = 1.0e-13; double a, b, c, d, eta, r2, sinth1, sinth2, sinthe, x0, xi, x1, xy, y0, y02, y1, z; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != SIN) { if ((status = sinset(prj))) return status; } xi = prj->pv[1]; eta = prj->pv[2]; if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { x0 = (*xp + prj->x0)*prj->w[0]; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = x0; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { y0 = (*yp + prj->y0)*prj->w[0]; y02 = y0*y0; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { /* Compute intermediaries. */ x0 = *phip; r2 = x0*x0 + y02; if (prj->w[1] == 0.0) { /* Orthographic projection. */ if (r2 != 0.0) { *phip = atan2d(x0, -y0); } else { *phip = 0.0; } if (r2 < 0.5) { *thetap = acosd(sqrt(r2)); } else if (r2 <= 1.0) { *thetap = asind(sqrt(1.0 - r2)); } else { *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("sinx2s") continue; } } else { /* "Synthesis" projection. */ xy = x0*xi + y0*eta; if (r2 < 1.0e-10) { /* Use small angle formula. */ z = r2/2.0; *thetap = 90.0 - R2D*sqrt(r2/(1.0 + xy)); } else { a = prj->w[2]; b = xy - prj->w[1]; c = r2 - xy - xy + prj->w[3]; d = b*b - a*c; /* Check for a solution. */ if (d < 0.0) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("sinx2s") continue; } d = sqrt(d); /* Choose solution closest to pole. */ sinth1 = (-b + d)/a; sinth2 = (-b - d)/a; sinthe = (sinth1 > sinth2) ? sinth1 : sinth2; if (sinthe > 1.0) { if (sinthe-1.0 < tol) { sinthe = 1.0; } else { sinthe = (sinth1 < sinth2) ? sinth1 : sinth2; } } if (sinthe < -1.0) { if (sinthe+1.0 > -tol) { sinthe = -1.0; } } if (sinthe > 1.0 || sinthe < -1.0) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("sinx2s") continue; } *thetap = asind(sinthe); z = 1.0 - sinthe; } x1 = -y0 + eta*z; y1 = x0 - xi*z; if (x1 == 0.0 && y1 == 0.0) { *phip = 0.0; } else { *phip = atan2d(y1,x1); } } *(statp++) = 0; } } return status; } /*--------------------------------------------------------------------------*/ int sins2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double cosphi, costhe, sinphi, r, t, z, z1, z2; register int iphi, itheta, istat, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != SIN) { if ((status = sinset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinphi; *yp = cosphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { t = (90.0 - fabs(*thetap))*D2R; if (t < 1.0e-5) { if (*thetap > 0.0) { z = t*t/2.0; } else { z = 2.0 - t*t/2.0; } costhe = t; } else { z = 1.0 - sind(*thetap); costhe = cosd(*thetap); } r = prj->r0*costhe; if (prj->w[1] == 0.0) { /* Orthographic projection. */ istat = 0; if (prj->bounds && *thetap < 0.0) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("sins2x"); } for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - prj->y0; *(statp++) = istat; } } else { /* "Synthesis" projection. */ z *= prj->r0; z1 = prj->pv[1]*z - prj->x0; z2 = prj->pv[2]*z - prj->y0; for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { istat = 0; if (prj->bounds) { t = -atand(prj->pv[1]*(*xp) - prj->pv[2]*(*yp)); if (*thetap < t) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("sins2x"); } } *xp = r*(*xp) + z1; *yp = -r*(*yp) + z2; *(statp++) = istat; } } } return status; } /*============================================================================ * ARC: zenithal/azimuthal equidistant projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 90.0 if undefined. * * Returned: * prj->flag ARC * prj->code "ARC" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*(pi/180) * prj->w[1] (180/pi)/r0 * prj->prjx2s Pointer to arcx2s(). * prj->prjs2x Pointer to arcs2x(). *===========================================================================*/ int arcset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = ARC; strcpy(prj->code, "ARC"); strcpy(prj->name, "zenithal/azimuthal equidistant"); prj->category = ZENITHAL; prj->pvrange = 0; prj->simplezen = 1; prj->equiareal = 0; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 1.0; prj->w[1] = 1.0; } else { prj->w[0] = prj->r0*D2R; prj->w[1] = 1.0/prj->w[0]; } prj->prjx2s = arcx2s; prj->prjs2x = arcs2x; return prjoff(prj, 0.0, 90.0); } /*--------------------------------------------------------------------------*/ int arcx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double r, xj, yj, yj2; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != ARC) { if ((status = arcset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; yj2 = yj*yj; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + yj2); if (r == 0.0) { *phip = 0.0; *thetap = 90.0; } else { *phip = atan2d(xj, -yj); *thetap = 90.0 - r*prj->w[1]; } *(statp++) = 0; } } return 0; } /*--------------------------------------------------------------------------*/ int arcs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double cosphi, r, sinphi; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != ARC) { if ((status = arcset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinphi; *yp = cosphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { r = prj->w[0]*(90.0 - *thetap); for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - prj->y0; *(statp++) = 0; } } return 0; } /*============================================================================ * ZPN: zenithal/azimuthal polynomial projection. * * Given: * prj->pv[] Polynomial coefficients. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 90.0 if undefined. * * Returned: * prj->flag ZPN * prj->code "ZPN" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->n Degree of the polynomial, N. * prj->w[0] Co-latitude of the first point of inflection, radian. * prj->w[1] Radius of the first point of inflection (N > 1), radian. * prj->prjx2s Pointer to zpnx2s(). * prj->prjs2x Pointer to zpns2x(). *===========================================================================*/ int zpnset(prj) struct prjprm *prj; { int j, k, m; double d, d1, d2, r, zd, zd1, zd2; const double tol = 1.0e-13; if (prj == 0x0) return PRJERR_NULL_POINTER; strcpy(prj->code, "ZPN"); prj->flag = ZPN; if (undefined(prj->pv[1])) prj->pv[1] = 0.0; if (undefined(prj->pv[2])) prj->pv[2] = 0.0; if (undefined(prj->pv[3])) prj->pv[3] = 0.0; if (prj->r0 == 0.0) prj->r0 = R2D; strcpy(prj->name, "zenithal/azimuthal polynomial"); prj->category = ZENITHAL; prj->pvrange = 30; prj->simplezen = 1; prj->equiareal = 0; prj->conformal = 0; prj->global = 0; prj->divergent = 0; /* Find the highest non-zero coefficient. */ for (k = PVN-1; k >= 0 && prj->pv[k] == 0.0; k--); if (k < 0) { return PRJERR_BAD_PARAM_SET("zpnset"); } prj->n = k; if (k < 2) { /* No point of inflection. */ prj->w[0] = PI; } else { /* Find the point of inflection closest to the pole. */ zd1 = 0.0; d1 = prj->pv[1]; if (d1 <= 0.0) { return PRJERR_BAD_PARAM_SET("zpnset"); } /* Find the point where the derivative first goes negative. */ for (j = 0; j < 180; j++) { zd2 = j*D2R; d2 = 0.0; for (m = k; m > 0; m--) { d2 = d2*zd2 + m*prj->pv[m]; } if (d2 <= 0.0) break; zd1 = zd2; d1 = d2; } if (j == 180) { /* No negative derivative -> no point of inflection. */ zd = PI; prj->global = 1; } else { /* Find where the derivative is zero. */ for (j = 1; j <= 10; j++) { zd = zd1 - d1*(zd2-zd1)/(d2-d1); d = 0.0; for (m = k; m > 0; m--) { d = d*zd + m*prj->pv[m]; } if (fabs(d) < tol) break; if (d < 0.0) { zd2 = zd; d2 = d; } else { zd1 = zd; d1 = d; } } } r = 0.0; for (m = k; m >= 0; m--) { r = r*zd + prj->pv[m]; } prj->w[0] = zd; prj->w[1] = r; } prj->prjx2s = zpnx2s; prj->prjs2x = zpns2x; return prjoff(prj, 0.0, 90.0); } /*--------------------------------------------------------------------------*/ int zpnx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int j, k, m, mx, my, rowlen, rowoff, status; double a, b, c, d, lambda, r, r1, r2, rt, xj, yj, yj2, zd, zd1, zd2; const double tol = 1.0e-13; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != ZPN) { if ((status = zpnset(prj))) return status; } k = prj->n; if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; yj2 = yj*yj; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + yj2)/prj->r0; if (r == 0.0) { *phip = 0.0; } else { *phip = atan2d(xj, -yj); } if (k < 1) { /* Constant - no solution. */ return PRJERR_BAD_PARAM_SET("zpnx2s"); } else if (k == 1) { /* Linear. */ zd = (r - prj->pv[0])/prj->pv[1]; } else if (k == 2) { /* Quadratic. */ a = prj->pv[2]; b = prj->pv[1]; c = prj->pv[0] - r; d = b*b - 4.0*a*c; if (d < 0.0) { *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); continue; } d = sqrt(d); /* Choose solution closest to pole. */ zd1 = (-b + d)/(2.0*a); zd2 = (-b - d)/(2.0*a); zd = (zd1zd2) ? zd1 : zd2; if (zd < 0.0) { if (zd < -tol) { *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); continue; } zd = 0.0; } else if (zd > PI) { if (zd > PI+tol) { *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); continue; } zd = PI; } } else { /* Higher order - solve iteratively. */ zd1 = 0.0; r1 = prj->pv[0]; zd2 = prj->w[0]; r2 = prj->w[1]; if (r < r1) { if (r < r1-tol) { *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); continue; } zd = zd1; } else if (r > r2) { if (r > r2+tol) { *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); continue; } zd = zd2; } else { /* Disect the interval. */ for (j = 0; j < 100; j++) { lambda = (r2 - r)/(r2 - r1); if (lambda < 0.1) { lambda = 0.1; } else if (lambda > 0.9) { lambda = 0.9; } zd = zd2 - lambda*(zd2 - zd1); rt = 0.0; for (m = k; m >= 0; m--) { rt = (rt * zd) + prj->pv[m]; } if (rt < r) { if (r-rt < tol) break; r1 = rt; zd1 = zd; } else { if (rt-r < tol) break; r2 = rt; zd2 = zd; } if (fabs(zd2-zd1) < tol) break; } } } *thetap = 90.0 - zd*R2D; *(statp++) = 0; } } return status; } /*--------------------------------------------------------------------------*/ int zpns2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int m, mphi, mtheta, rowlen, rowoff, status; double cosphi, r, s, sinphi; register int iphi, itheta, istat, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != ZPN) { if ((status = zpnset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinphi; *yp = cosphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { s = (90.0 - *thetap)*D2R; r = 0.0; for (m = prj->n; m >= 0; m--) { r = r*s + prj->pv[m]; } r *= prj->r0; istat = 0; if (prj->bounds && s > prj->w[0]) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("zpns2x"); } for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - prj->y0; *(statp++) = istat; } } return status; } /*============================================================================ * ZEA: zenithal/azimuthal equal area projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 90.0 if undefined. * * Returned: * prj->flag ZEA * prj->code "ZEA" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] 2*r0 * prj->w[1] 1/(2*r0) * prj->prjx2s Pointer to zeax2s(). * prj->prjs2x Pointer to zeas2x(). *===========================================================================*/ int zeaset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = ZEA; strcpy(prj->code, "ZEA"); strcpy(prj->name, "zenithal/azimuthal equal area"); prj->category = ZENITHAL; prj->pvrange = 0; prj->simplezen = 1; prj->equiareal = 1; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 360.0/PI; prj->w[1] = PI/360.0; } else { prj->w[0] = 2.0*prj->r0; prj->w[1] = 1.0/prj->w[0]; } prj->prjx2s = zeax2s; prj->prjs2x = zeas2x; return prjoff(prj, 0.0, 90.0); } /*--------------------------------------------------------------------------*/ int zeax2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double r, s, xj, yj, yj2; const double tol = 1.0e-12; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != ZEA) { if ((status = zeaset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; yj2 = yj*yj; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + yj2); if (r == 0.0) { *phip = 0.0; } else { *phip = atan2d(xj, -yj); } s = r*prj->w[1]; if (fabs(s) > 1.0) { if (fabs(r - prj->w[0]) < tol) { *thetap = -90.0; } else { *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("zeax2s"); continue; } } else { *thetap = 90.0 - 2.0*asind(s); } *(statp++) = 0; } } return status; } /*--------------------------------------------------------------------------*/ int zeas2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double cosphi, r, sinphi; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != ZEA) { if ((status = zeaset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinphi; *yp = cosphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { r = prj->w[0]*sind((90.0 - *thetap)/2.0); for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - prj->y0; *(statp++) = 0; } } return 0; } /*============================================================================ * AIR: Airy's projection. * * Given: * prj->pv[1] Latitude theta_b within which the error is minimized, in * degrees. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 90.0 if undefined. * * Returned: * prj->flag AIR * prj->code "AIR" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] 2*r0 * prj->w[1] ln(cos(xi_b))/tan(xi_b)**2, where xi_b = (90-theta_b)/2 * prj->w[2] 1/2 - prj->w[1] * prj->w[3] 2*r0*prj->w[2] * prj->w[4] tol, cutoff for using small angle approximation, in * radians. * prj->w[5] prj->w[2]*tol * prj->w[6] (180/pi)/prj->w[2] * prj->prjx2s Pointer to airx2s(). * prj->prjs2x Pointer to airs2x(). *===========================================================================*/ int airset(prj) struct prjprm *prj; { const double tol = 1.0e-4; double cosxi; if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = AIR; strcpy(prj->code, "AIR"); if (undefined(prj->pv[1])) prj->pv[1] = 90.0; if (prj->r0 == 0.0) prj->r0 = R2D; strcpy(prj->name, "Airy's zenithal"); prj->category = ZENITHAL; prj->pvrange = 101; prj->simplezen = 1; prj->equiareal = 0; prj->conformal = 0; prj->global = 0; prj->divergent = 1; prj->w[0] = 2.0*prj->r0; if (prj->pv[1] == 90.0) { prj->w[1] = -0.5; prj->w[2] = 1.0; } else if (prj->pv[1] > -90.0) { cosxi = cosd((90.0 - prj->pv[1])/2.0); prj->w[1] = log(cosxi)*(cosxi*cosxi)/(1.0-cosxi*cosxi); prj->w[2] = 0.5 - prj->w[1]; } else { return PRJERR_BAD_PARAM_SET("airset"); } prj->w[3] = prj->w[0] * prj->w[2]; prj->w[4] = tol; prj->w[5] = prj->w[2]*tol; prj->w[6] = R2D/prj->w[2]; prj->prjx2s = airx2s; prj->prjs2x = airs2x; return prjoff(prj, 0.0, 90.0); } /*--------------------------------------------------------------------------*/ int airx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int k, mx, my, rowlen, rowoff, status; double cosxi, lambda, r, r1, r2, rt, tanxi, x1, x2, xi, xj, yj, yj2; const double tol = 1.0e-12; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != AIR) { if ((status = airset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; yj2 = yj*yj; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + yj2)/prj->w[0]; if (r == 0.0) { *phip = 0.0; } else { *phip = atan2d(xj, -yj); } if (r == 0.0) { xi = 0.0; } else if (r < prj->w[5]) { xi = r*prj->w[6]; } else { /* Find a solution interval. */ x1 = x2 = 1.0; r1 = r2 = 0.0; for (k = 0; k < 30; k++) { x2 = x1/2.0; tanxi = sqrt(1.0-x2*x2)/x2; r2 = -(log(x2)/tanxi + prj->w[1]*tanxi); if (r2 >= r) break; x1 = x2; r1 = r2; } if (k == 30) { *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("airx2s"); continue; } for (k = 0; k < 100; k++) { /* Weighted division of the interval. */ lambda = (r2-r)/(r2-r1); if (lambda < 0.1) { lambda = 0.1; } else if (lambda > 0.9) { lambda = 0.9; } cosxi = x2 - lambda*(x2-x1); tanxi = sqrt(1.0-cosxi*cosxi)/cosxi; rt = -(log(cosxi)/tanxi + prj->w[1]*tanxi); if (rt < r) { if (r-rt < tol) break; r1 = rt; x1 = cosxi; } else { if (rt-r < tol) break; r2 = rt; x2 = cosxi; } } if (k == 100) { *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("airx2s"); continue; } xi = acosd(cosxi); } *thetap = 90.0 - 2.0*xi; *(statp++) = 0; } } return status; } /*--------------------------------------------------------------------------*/ int airs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double cosphi, cosxi, r, tanxi, xi, sinphi; register int iphi, itheta, istat, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != AIR) { if ((status = airset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinphi; *yp = cosphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { istat = 0; if (*thetap == 90.0) { r = 0.0; } else if (*thetap > -90.0) { xi = D2R*(90.0 - *thetap)/2.0; if (xi < prj->w[4]) { r = xi*prj->w[3]; } else { cosxi = cosd((90.0 - *thetap)/2.0); tanxi = sqrt(1.0-cosxi*cosxi)/cosxi; r = -prj->w[0]*(log(cosxi)/tanxi + prj->w[1]*tanxi); } } else { r = 0.0; istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("airs2x"); } for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - prj->y0; *(statp++) = istat; } } return status; } /*============================================================================ * CYP: cylindrical perspective projection. * * Given: * prj->pv[1] Distance of point of projection from the centre of the * generating sphere, mu, in units of r0. * prj->pv[2] Radius of the cylinder of projection, lambda, in units of * r0. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag CYP * prj->code "CYP" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*lambda*(pi/180) * prj->w[1] (180/pi)/(r0*lambda) * prj->w[2] r0*(mu + lambda) * prj->w[3] 1/(r0*(mu + lambda)) * prj->prjx2s Pointer to cypx2s(). * prj->prjs2x Pointer to cyps2x(). *===========================================================================*/ int cypset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = CYP; strcpy(prj->code, "CYP"); if (undefined(prj->pv[1])) prj->pv[1] = 1.0; if (undefined(prj->pv[2])) prj->pv[2] = 1.0; strcpy(prj->name, "cylindrical perspective"); prj->category = CYLINDRICAL; prj->pvrange = 102; prj->simplezen = 0; prj->equiareal = 0; prj->conformal = 0; prj->global = prj->pv[1] < -1.0 || 0.0 < prj->pv[1]; prj->divergent = !prj->global; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = prj->pv[2]; if (prj->w[0] == 0.0) { return PRJERR_BAD_PARAM_SET("cypset"); } prj->w[1] = 1.0/prj->w[0]; prj->w[2] = R2D*(prj->pv[1] + prj->pv[2]); if (prj->w[2] == 0.0) { return PRJERR_BAD_PARAM_SET("cypset"); } prj->w[3] = 1.0/prj->w[2]; } else { prj->w[0] = prj->r0*prj->pv[2]*D2R; if (prj->w[0] == 0.0) { return PRJERR_BAD_PARAM_SET("cypset"); } prj->w[1] = 1.0/prj->w[0]; prj->w[2] = prj->r0*(prj->pv[1] + prj->pv[2]); if (prj->w[2] == 0.0) { return PRJERR_BAD_PARAM_SET("cypset"); } prj->w[3] = 1.0/prj->w[2]; } prj->prjx2s = cypx2s; prj->prjs2x = cyps2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int cypx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double eta, s, t; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != CYP) { if ((status = cypset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { s = prj->w[1]*(*xp + prj->x0); phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = s; phip += rowlen; } } /* Do y dependence. */ yp = y; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { eta = prj->w[3]*(*yp + prj->y0); t = atan2d(eta,1.0) + asind(eta*prj->pv[1]/sqrt(eta*eta+1.0)); for (ix = 0; ix < mx; ix++, thetap += spt) { *thetap = t; *(statp++) = 0; } } return 0; } /*--------------------------------------------------------------------------*/ int cyps2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double eta, xi; register int iphi, itheta, istat, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != CYP) { if ((status = cypset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { xi = prj->w[0]*(*phip) - prj->x0; xp = x + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = xi; xp += rowlen; } } /* Do theta dependence. */ thetap = theta; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { eta = prj->pv[1] + cosd(*thetap); istat = 0; if (eta == 0.0) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("cyps2x"); } else { eta = prj->w[2]*sind(*thetap)/eta; } eta -= prj->y0; for (iphi = 0; iphi < mphi; iphi++, yp += sxy) { *yp = eta; *(statp++) = istat; } } return status; } /*============================================================================ * CEA: cylindrical equal area projection. * * Given: * prj->pv[1] Square of the cosine of the latitude at which the * projection is conformal, lambda. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag CEA * prj->code "CEA" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*(pi/180) * prj->w[1] (180/pi)/r0 * prj->w[2] r0/lambda * prj->w[3] lambda/r0 * prj->prjx2s Pointer to ceax2s(). * prj->prjs2x Pointer to ceas2x(). *===========================================================================*/ int ceaset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = CEA; strcpy(prj->code, "CEA"); if (undefined(prj->pv[1])) prj->pv[1] = 1.0; strcpy(prj->name, "cylindrical equal area"); prj->category = CYLINDRICAL; prj->pvrange = 101; prj->simplezen = 0; prj->equiareal = 1; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 1.0; prj->w[1] = 1.0; if (prj->pv[1] <= 0.0 || prj->pv[1] > 1.0) { return PRJERR_BAD_PARAM_SET("ceaset"); } prj->w[2] = prj->r0/prj->pv[1]; prj->w[3] = prj->pv[1]/prj->r0; } else { prj->w[0] = prj->r0*D2R; prj->w[1] = R2D/prj->r0; if (prj->pv[1] <= 0.0 || prj->pv[1] > 1.0) { return PRJERR_BAD_PARAM_SET("ceaset"); } prj->w[2] = prj->r0/prj->pv[1]; prj->w[3] = prj->pv[1]/prj->r0; } prj->prjx2s = ceax2s; prj->prjs2x = ceas2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int ceax2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double s; const double tol = 1.0e-13; register int istat, ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != CEA) { if ((status = ceaset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { s = prj->w[1]*(*xp + prj->x0); phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = s; phip += rowlen; } } /* Do y dependence. */ yp = y; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { s = prj->w[3]*(*yp + prj->y0); istat = 0; if (fabs(s) > 1.0) { if (fabs(s) > 1.0+tol) { s = 0.0; istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("ceax2s"); } else { s = copysign(90.0, s); } } else { s = asind(s); } for (ix = 0; ix < mx; ix++, thetap += spt) { *thetap = s; *(statp++) = istat; } } return status; } /*--------------------------------------------------------------------------*/ int ceas2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double eta, xi; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != CEA) { if ((status = ceaset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { xi = prj->w[0]*(*phip) - prj->x0; xp = x + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = xi; xp += rowlen; } } /* Do theta dependence. */ thetap = theta; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { eta = prj->w[2]*sind(*thetap) - prj->y0; for (iphi = 0; iphi < mphi; iphi++, yp += sxy) { *yp = eta; *(statp++) = 0; } } return 0; } /*============================================================================ * CAR: Plate carree projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag CAR * prj->code "CAR" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*(pi/180) * prj->w[1] (180/pi)/r0 * prj->prjx2s Pointer to carx2s(). * prj->prjs2x Pointer to cars2x(). *===========================================================================*/ int carset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = CAR; strcpy(prj->code, "CAR"); strcpy(prj->name, "plate caree"); prj->category = CYLINDRICAL; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 0; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 1.0; prj->w[1] = 1.0; } else { prj->w[0] = prj->r0*D2R; prj->w[1] = 1.0/prj->w[0]; } prj->prjx2s = carx2s; prj->prjs2x = cars2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int carx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double s, t; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != CAR) { if ((status = carset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { s = prj->w[1]*(*xp + prj->x0); phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = s; phip += rowlen; } } /* Do y dependence. */ yp = y; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { t = prj->w[1]*(*yp + prj->y0); for (ix = 0; ix < mx; ix++, thetap += spt) { *thetap = t; *(statp++) = 0; } } return 0; } /*--------------------------------------------------------------------------*/ int cars2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double eta, xi; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != CAR) { if ((status = carset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { xi = prj->w[0]*(*phip) - prj->x0; xp = x + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = xi; xp += rowlen; } } /* Do theta dependence. */ thetap = theta; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { eta = prj->w[0]*(*thetap) - prj->y0; for (iphi = 0; iphi < mphi; iphi++, yp += sxy) { *yp = eta; *(statp++) = 0; } } return 0; } /*============================================================================ * MER: Mercator's projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag MER * prj->code "MER" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*(pi/180) * prj->w[1] (180/pi)/r0 * prj->prjx2s Pointer to merx2s(). * prj->prjs2x Pointer to mers2x(). *===========================================================================*/ int merset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = MER; strcpy(prj->code, "MER"); strcpy(prj->name, "Mercator's"); prj->category = CYLINDRICAL; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 0; prj->conformal = 1; prj->global = 0; prj->divergent = 1; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 1.0; prj->w[1] = 1.0; } else { prj->w[0] = prj->r0*D2R; prj->w[1] = 1.0/prj->w[0]; } prj->prjx2s = merx2s; prj->prjs2x = mers2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int merx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double s, t; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != MER) { if ((status = merset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { s = prj->w[1]*(*xp + prj->x0); phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = s; phip += rowlen; } } /* Do y dependence. */ yp = y; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { t = 2.0*atand(exp((*yp + prj->y0)/prj->r0)) - 90.0; for (ix = 0; ix < mx; ix++, thetap += spt) { *thetap = t; *(statp++) = 0; } } return 0; } /*--------------------------------------------------------------------------*/ int mers2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double eta, xi; register int iphi, itheta, istat, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != MER) { if ((status = merset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { xi = prj->w[0]*(*phip) - prj->x0; xp = x + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = xi; xp += rowlen; } } /* Do theta dependence. */ thetap = theta; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { istat = 0; if (*thetap <= -90.0 || *thetap >= 90.0) { eta = 0.0; istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("mers2x"); } else { eta = prj->r0*log(tand((*thetap+90.0)/2.0)) - prj->y0; } for (iphi = 0; iphi < mphi; iphi++, yp += sxy) { *yp = eta; *(statp++) = istat; } } return status; } /*============================================================================ * SFL: Sanson-Flamsteed ("global sinusoid") projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag SFL * prj->code "SFL" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*(pi/180) * prj->w[1] (180/pi)/r0 * prj->prjx2s Pointer to sflx2s(). * prj->prjs2x Pointer to sfls2x(). *===========================================================================*/ int sflset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = SFL; strcpy(prj->code, "SFL"); strcpy(prj->name, "Sanson-Flamsteed"); prj->category = PSEUDOCYLINDRICAL; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 1; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 1.0; prj->w[1] = 1.0; } else { prj->w[0] = prj->r0*D2R; prj->w[1] = 1.0/prj->w[0]; } prj->prjx2s = sflx2s; prj->prjs2x = sfls2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int sflx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double s, t, yj; register int istat, ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != SFL) { if ((status = sflset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { s = prj->w[1]*(*xp + prj->x0); phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = s; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; s = cos(yj/prj->r0); istat = 0; if (s == 0.0) { istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("sflx2s"); } else { s = 1.0/s; } t = prj->w[1]*yj; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { *phip *= s; *thetap = t; *(statp++) = 0; } } return status; } /*--------------------------------------------------------------------------*/ int sfls2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double eta, xi; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != SFL) { if ((status = sflset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { xi = prj->w[0]*(*phip); xp = x + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = xi; xp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { xi = cosd(*thetap); eta = prj->w[0]*(*thetap) - prj->y0; for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = xi*(*xp) - prj->x0; *yp = eta; *(statp++) = 0; } } return 0; } /*============================================================================ * PAR: parabolic projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag PAR * prj->code "PAR" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*(pi/180) * prj->w[1] (180/pi)/r0 * prj->w[2] pi*r0 * prj->w[3] 1/(pi*r0) * prj->prjx2s Pointer to parx2s(). * prj->prjs2x Pointer to pars2x(). *===========================================================================*/ int parset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = PAR; strcpy(prj->code, "PAR"); strcpy(prj->name, "parabolic"); prj->category = PSEUDOCYLINDRICAL; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 1; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 1.0; prj->w[1] = 1.0; prj->w[2] = 180.0; prj->w[3] = 1.0/prj->w[2]; } else { prj->w[0] = prj->r0*D2R; prj->w[1] = 1.0/prj->w[0]; prj->w[2] = PI*prj->r0; prj->w[3] = 1.0/prj->w[2]; } prj->prjx2s = parx2s; prj->prjs2x = pars2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int parx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double r, s, t, xj; const double tol = 1.0e-13; register int istat, ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != PAR) { if ((status = parset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; s = prj->w[1]*xj; t = fabs(xj) - tol; phip = phi + rowoff; thetap = theta + rowoff; for (iy = 0; iy < my; iy++) { *phip = s; *thetap = t; phip += rowlen; thetap += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { r = prj->w[3]*(*yp + prj->y0); istat = 0; if (r > 1.0 || r < -1.0) { s = 0.0; t = 0.0; istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("parx2s"); } else { s = 1.0 - 4.0*r*r; if (s == 0.0) { /* Deferred test. */ istat = -1; } else { s = 1.0/s; } t = 3.0*asind(r); } for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { if (istat < 0) { if (*thetap < 0.0) { *(statp++) = 0; } else { *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("parx2s"); } } *phip *= s; *thetap = t; } } return status; } /*--------------------------------------------------------------------------*/ int pars2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double eta, s, xi; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != PAR) { if ((status = parset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { xi = prj->w[0]*(*phip); xp = x + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = xi; xp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { s = sind((*thetap)/3.0); xi = (1.0 - 4.0*s*s); eta = prj->w[2]*s - prj->y0; for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = xi*(*xp) - prj->x0; *yp = eta; *(statp++) = 0; } } return 0; } /*============================================================================ * MOL: Mollweide's projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag MOL * prj->code "MOL" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] sqrt(2)*r0 * prj->w[1] sqrt(2)*r0/90 * prj->w[2] 1/(sqrt(2)*r0) * prj->w[3] 90/r0 * prj->prjx2s Pointer to molx2s(). * prj->prjs2x Pointer to mols2x(). *===========================================================================*/ int molset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = MOL; strcpy(prj->code, "MOL"); if (prj->r0 == 0.0) prj->r0 = R2D; strcpy(prj->name, "Mollweide's"); prj->category = PSEUDOCYLINDRICAL; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 1; prj->conformal = 0; prj->global = 1; prj->divergent = 0; prj->w[0] = SQRT2*prj->r0; prj->w[1] = prj->w[0]/90.0; prj->w[2] = 1.0/prj->w[0]; prj->w[3] = 90.0/prj->r0; prj->w[4] = 2.0/PI; prj->prjx2s = molx2s; prj->prjs2x = mols2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int molx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double r, s, t, xj, y0, yj, z; const double tol = 1.0e-12; register int istat, ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != MOL) { if ((status = molset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; s = prj->w[3]*xj; t = fabs(xj) - tol; phip = phi + rowoff; thetap = theta + rowoff; for (iy = 0; iy < my; iy++) { *phip = s; *thetap = t; phip += rowlen; thetap += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; y0 = yj/prj->r0; r = 2.0 - y0*y0; istat = 0; if (r <= tol) { if (r < -tol) { istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("molx2s"); } else { /* OK if fabs(x) < tol whence phi = 0.0. */ istat = -1; } r = 0.0; s = 0.0; } else { r = sqrt(r); s = 1.0/r; } z = yj*prj->w[2]; if (fabs(z) > 1.0) { if (fabs(z) > 1.0+tol) { z = 0.0; istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("molx2s"); } else { z = copysign(1.0, z) + y0*r/PI; } } else { z = asin(z)*prj->w[4] + y0*r/PI; } if (fabs(z) > 1.0) { if (fabs(z) > 1.0+tol) { z = 0.0; istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("molx2s"); } else { z = copysign(1.0, z); } } t = asind(z); for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { if (istat < 0) { if (*thetap < 0.0) { *(statp++) = 0; } else { *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("molx2s"); } } *phip *= s; *thetap = t; } } return status; } /*--------------------------------------------------------------------------*/ int mols2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int k, mphi, mtheta, rowlen, rowoff, status; double eta, gamma, resid, u, v, v0, v1, xi; const double tol = 1.0e-13; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != MOL) { if ((status = molset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { xi = prj->w[1]*(*phip); xp = x + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = xi; xp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { if (fabs(*thetap) == 90.0) { xi = 0.0; eta = copysign(prj->w[0], *thetap); } else if (*thetap == 0.0) { xi = 1.0; eta = 0.0; } else { u = PI*sind(*thetap); v0 = -PI; v1 = PI; v = u; for (k = 0; k < 100; k++) { resid = (v - u) + sin(v); if (resid < 0.0) { if (resid > -tol) break; v0 = v; } else { if (resid < tol) break; v1 = v; } v = (v0 + v1)/2.0; } gamma = v/2.0; xi = cos(gamma); eta = prj->w[0]*sin(gamma); } eta -= prj->y0; for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = xi*(*xp) - prj->x0; *yp = eta; *(statp++) = 0; } } return 0; } /*============================================================================ * AIT: Hammer-Aitoff projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag AIT * prj->code "AIT" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] 2*r0**2 * prj->w[1] 1/(2*r0)**2 * prj->w[2] 1/(4*r0)**2 * prj->w[3] 1/(2*r0) * prj->prjx2s Pointer to aitx2s(). * prj->prjs2x Pointer to aits2x(). *===========================================================================*/ int aitset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = AIT; strcpy(prj->code, "AIT"); if (prj->r0 == 0.0) prj->r0 = R2D; strcpy(prj->name, "Hammer-Aitoff"); prj->category = CONVENTIONAL; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 1; prj->conformal = 0; prj->global = 1; prj->divergent = 0; prj->w[0] = 2.0*prj->r0*prj->r0; prj->w[1] = 1.0/(2.0*prj->w[0]); prj->w[2] = prj->w[1]/4.0; prj->w[3] = 1.0/(2.0*prj->r0); prj->prjx2s = aitx2s; prj->prjs2x = aits2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int aitx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double s, t, x0, xj, y0, yj, yj2, z; const double tol = 1.0e-13; register int ix, iy, istat, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != AIT) { if ((status = aitset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; s = 1.0 - xj*xj*prj->w[2]; t = xj*prj->w[3]; phip = phi + rowoff; thetap = theta + rowoff; for (iy = 0; iy < my; iy++) { *phip = s; *thetap = t; phip += rowlen; thetap += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; yj2 = yj*yj*prj->w[1]; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { s = *phip - yj2; istat = 0; if (s < 0.5) { if (s < 0.5-tol) { istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("aitx2s"); } s = 0.5; } z = sqrt(s); x0 = 2.0*z*z - 1.0; y0 = z*(*thetap); if (x0 == 0.0 && y0 == 0.0) { *phip = 0.0; } else { *phip = 2.0*atan2d(y0, x0); } t = z*yj/prj->r0; if (fabs(t) > 1.0) { if (fabs(t) > 1.0+tol) { istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("aitx2s"); } t = copysign(90.0, t); } else { t = asind(t); } *thetap = t; *(statp++) = istat; } } return status; } /*--------------------------------------------------------------------------*/ int aits2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double cosphi, costhe, sinphi, sinthe, w; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != AIT) { if ((status = aitset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { w = (*phip)/2.0; sincosd(w, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinphi; *yp = cosphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { sincosd(*thetap, &sinthe, &costhe); for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { w = sqrt(prj->w[0]/(1.0 + costhe*(*yp))); *xp = 2.0*w*costhe*(*xp) - prj->x0; *yp = w*sinthe - prj->y0; *(statp++) = 0; } } return 0; } /*============================================================================ * COP: conic perspective projection. * * Given: * prj->pv[1] sigma = (theta2+theta1)/2 * prj->pv[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the * latitudes of the standard parallels, in degrees. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to sigma if undefined. * prj->theta0 Reset to sigma if undefined. * * Returned: * prj->flag COP * prj->code "COP" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] C = sin(sigma) * prj->w[1] 1/C * prj->w[2] Y0 = r0*cos(delta)*cot(sigma) * prj->w[3] r0*cos(delta) * prj->w[4] 1/(r0*cos(delta) * prj->w[5] cot(sigma) * prj->prjx2s Pointer to copx2s(). * prj->prjs2x Pointer to cops2x(). *===========================================================================*/ int copset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = COP; strcpy(prj->code, "COP"); strcpy(prj->name, "conic perspective"); if (undefined(prj->pv[1])) { return PRJERR_BAD_PARAM_SET("copset"); } if (undefined(prj->pv[2])) prj->pv[2] = 0.0; if (prj->r0 == 0.0) prj->r0 = R2D; prj->category = CONIC; prj->pvrange = 102; prj->simplezen = 0; prj->equiareal = 0; prj->conformal = 0; prj->global = 0; prj->divergent = 1; prj->w[0] = sind(prj->pv[1]); if (prj->w[0] == 0.0) { return PRJERR_BAD_PARAM_SET("copset"); } prj->w[1] = 1.0/prj->w[0]; prj->w[3] = prj->r0*cosd(prj->pv[2]); if (prj->w[3] == 0.0) { return PRJERR_BAD_PARAM_SET("copset"); } prj->w[4] = 1.0/prj->w[3]; prj->w[5] = 1.0/tand(prj->pv[1]); prj->w[2] = prj->w[3]*prj->w[5]; prj->prjx2s = copx2s; prj->prjs2x = cops2x; return prjoff(prj, 0.0, prj->pv[1]); } /*--------------------------------------------------------------------------*/ int copx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double alpha, dy, dy2, r, xj; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != COP) { if ((status = copset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { dy = prj->w[2] - (*yp + prj->y0); dy2 = dy*dy; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + dy2); if (prj->pv[1] < 0.0) r = -r; if (r == 0.0) { alpha = 0.0; } else { alpha = atan2d(xj/r, dy/r); } *phip = alpha*prj->w[1]; *thetap = prj->pv[1] + atand(prj->w[5] - r*prj->w[4]); *(statp++) = 0; } } return 0; } /*--------------------------------------------------------------------------*/ int cops2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double alpha, cosalpha, r, s, t, sinalpha, y0; register int iphi, itheta, istat, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != COP) { if ((status = copset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { alpha = prj->w[0]*(*phip); sincosd(alpha, &sinalpha, &cosalpha); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinalpha; *yp = cosalpha; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; y0 = prj->y0 - prj->w[2]; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { t = *thetap - prj->pv[1]; s = cosd(t); istat = 0; if (s == 0.0) { r = 0.0; istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("cops2x"); } else { r = prj->w[2] - prj->w[3]*sind(t)/s; if (prj->bounds && r*prj->w[0] < 0.0) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("cops2x"); } } for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - y0; *(statp++) = istat; } } return status; } /*============================================================================ * COE: conic equal area projection. * * Given: * prj->pv[1] sigma = (theta2+theta1)/2 * prj->pv[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the * latitudes of the standard parallels, in degrees. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to sigma if undefined. * prj->theta0 Reset to sigma if undefined. * * Returned: * prj->flag COE * prj->code "COE" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] C = (sin(theta1) + sin(theta2))/2 * prj->w[1] 1/C * prj->w[2] Y0 = chi*sqrt(psi - 2C*sind(sigma)) * prj->w[3] chi = r0/C * prj->w[4] psi = 1 + sin(theta1)*sin(theta2) * prj->w[5] 2C * prj->w[6] (1 + sin(theta1)*sin(theta2))*(r0/C)**2 * prj->w[7] C/(2*r0**2) * prj->w[8] chi*sqrt(psi + 2C) * prj->prjx2s Pointer to coex2s(). * prj->prjs2x Pointer to coes2x(). *===========================================================================*/ int coeset(prj) struct prjprm *prj; { double theta1, theta2; if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = COE; strcpy(prj->code, "COE"); strcpy(prj->name, "conic equal area"); if (undefined(prj->pv[1])) { return PRJERR_BAD_PARAM_SET("coeset"); } if (undefined(prj->pv[2])) prj->pv[2] = 0.0; if (prj->r0 == 0.0) prj->r0 = R2D; prj->category = CONIC; prj->pvrange = 102; prj->simplezen = 0; prj->equiareal = 1; prj->conformal = 0; prj->global = 1; prj->divergent = 0; theta1 = prj->pv[1] - prj->pv[2]; theta2 = prj->pv[1] + prj->pv[2]; prj->w[0] = (sind(theta1) + sind(theta2))/2.0; if (prj->w[0] == 0.0) { return PRJERR_BAD_PARAM_SET("coeset"); } prj->w[1] = 1.0/prj->w[0]; prj->w[3] = prj->r0/prj->w[0]; prj->w[4] = 1.0 + sind(theta1)*sind(theta2); prj->w[5] = 2.0*prj->w[0]; prj->w[6] = prj->w[3]*prj->w[3]*prj->w[4]; prj->w[7] = 1.0/(2.0*prj->r0*prj->w[3]); prj->w[8] = prj->w[3]*sqrt(prj->w[4] + prj->w[5]); prj->w[2] = prj->w[3]*sqrt(prj->w[4] - prj->w[5]*sind(prj->pv[1])); prj->prjx2s = coex2s; prj->prjs2x = coes2x; return prjoff(prj, 0.0, prj->pv[1]); } /*--------------------------------------------------------------------------*/ int coex2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double alpha, dy, dy2, r, t, w, xj; const double tol = 1.0e-12; register int ix, iy, istat, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != COE) { if ((status = coeset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { dy = prj->w[2] - (*yp + prj->y0); dy2 = dy*dy; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + dy2); if (prj->pv[1] < 0.0) r = -r; if (r == 0.0) { alpha = 0.0; } else { alpha = atan2d(xj/r, dy/r); } istat = 0; if (fabs(r - prj->w[8]) < tol) { t = -90.0; } else { w = (prj->w[6] - r*r)*prj->w[7]; if (fabs(w) > 1.0) { if (fabs(w-1.0) < tol) { t = 90.0; } else if (fabs(w+1.0) < tol) { t = -90.0; } else { t = 0.0; istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("coex2s"); } } else { t = asind(w); } } *phip = alpha*prj->w[1]; *thetap = t; *(statp++) = istat; } } return status; } /*--------------------------------------------------------------------------*/ int coes2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double alpha, cosalpha, r, sinalpha, y0; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != COE) { if ((status = coeset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { alpha = prj->w[0]*(*phip); sincosd(alpha, &sinalpha, &cosalpha); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinalpha; *yp = cosalpha; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; y0 = prj->y0 - prj->w[2]; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { if (*thetap == -90.0) { r = prj->w[8]; } else { r = prj->w[3]*sqrt(prj->w[4] - prj->w[5]*sind(*thetap)); } for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - y0; *(statp++) = 0; } } return 0; } /*============================================================================ * COD: conic equidistant projection. * * Given: * prj->pv[1] sigma = (theta2+theta1)/2 * prj->pv[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the * latitudes of the standard parallels, in degrees. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to sigma if undefined. * prj->theta0 Reset to sigma if undefined. * * Returned: * prj->flag COD * prj->code "COD" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] C = r0*sin(sigma)*sin(delta)/delta * prj->w[1] 1/C * prj->w[2] Y0 = delta*cot(delta)*cot(sigma) * prj->w[3] Y0 + sigma * prj->prjx2s Pointer to codx2s(). * prj->prjs2x Pointer to cods2x(). *===========================================================================*/ int codset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = COD; strcpy(prj->code, "COD"); strcpy(prj->name, "conic equidistant"); if (undefined(prj->pv[1])) { return PRJERR_BAD_PARAM_SET("codset"); } if (undefined(prj->pv[2])) prj->pv[2] = 0.0; if (prj->r0 == 0.0) prj->r0 = R2D; prj->category = CONIC; prj->pvrange = 102; prj->simplezen = 0; prj->equiareal = 0; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->pv[2] == 0.0) { prj->w[0] = prj->r0*sind(prj->pv[1])*D2R; } else { prj->w[0] = prj->r0*sind(prj->pv[1])*sind(prj->pv[2])/prj->pv[2]; } if (prj->w[0] == 0.0) { return PRJERR_BAD_PARAM_SET("codset"); } prj->w[1] = 1.0/prj->w[0]; prj->w[2] = prj->r0*cosd(prj->pv[2])*cosd(prj->pv[1])/prj->w[0]; prj->w[3] = prj->w[2] + prj->pv[1]; prj->prjx2s = codx2s; prj->prjs2x = cods2x; return prjoff(prj, 0.0, prj->pv[1]); } /*--------------------------------------------------------------------------*/ int codx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double alpha, dy, dy2, r, xj; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != COD) { if ((status = codset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { dy = prj->w[2] - (*yp + prj->y0); dy2 = dy*dy; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + dy2); if (prj->pv[1] < 0.0) r = -r; if (r == 0.0) { alpha = 0.0; } else { alpha = atan2d(xj/r, dy/r); } *phip = alpha*prj->w[1]; *thetap = prj->w[3] - r; *(statp++) = 0; } } return 0; } /*--------------------------------------------------------------------------*/ int cods2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double alpha, cosalpha, r, sinalpha, y0; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != COD) { if ((status = codset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { alpha = prj->w[0]*(*phip); sincosd(alpha, &sinalpha, &cosalpha); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinalpha; *yp = cosalpha; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; y0 = prj->y0 - prj->w[2]; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { r = prj->w[3] - *thetap; for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - y0; *(statp++) = 0; } } return 0; } /*============================================================================ * COO: conic orthomorphic projection. * * Given: * prj->pv[1] sigma = (theta2+theta1)/2 * prj->pv[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the * latitudes of the standard parallels, in degrees. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to sigma if undefined. * prj->theta0 Reset to sigma if undefined. * * Returned: * prj->flag COO * prj->code "COO" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] C = ln(cos(theta2)/cos(theta1))/ln(tan(tau2)/tan(tau1)) * where tau1 = (90 - theta1)/2 * tau2 = (90 - theta2)/2 * prj->w[1] 1/C * prj->w[2] Y0 = psi*tan((90-sigma)/2)**C * prj->w[3] psi = (r0*cos(theta1)/C)/tan(tau1)**C * prj->w[4] 1/psi * prj->prjx2s Pointer to coox2s(). * prj->prjs2x Pointer to coos2x(). *===========================================================================*/ int cooset(prj) struct prjprm *prj; { double cos1, cos2, tan1, tan2, theta1, theta2; if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = COO; strcpy(prj->code, "COO"); strcpy(prj->name, "conic orthomorphic"); if (undefined(prj->pv[1])) { return PRJERR_BAD_PARAM_SET("cooset"); } if (undefined(prj->pv[2])) prj->pv[2] = 0.0; if (prj->r0 == 0.0) prj->r0 = R2D; prj->category = CONIC; prj->pvrange = 102; prj->simplezen = 0; prj->equiareal = 0; prj->conformal = 1; prj->global = 0; prj->divergent = 1; theta1 = prj->pv[1] - prj->pv[2]; theta2 = prj->pv[1] + prj->pv[2]; tan1 = tand((90.0 - theta1)/2.0); cos1 = cosd(theta1); if (theta1 == theta2) { prj->w[0] = sind(theta1); } else { tan2 = tand((90.0 - theta2)/2.0); cos2 = cosd(theta2); prj->w[0] = log(cos2/cos1)/log(tan2/tan1); } if (prj->w[0] == 0.0) { return PRJERR_BAD_PARAM_SET("cooset"); } prj->w[1] = 1.0/prj->w[0]; prj->w[3] = prj->r0*(cos1/prj->w[0])/pow(tan1,prj->w[0]); if (prj->w[3] == 0.0) { return PRJERR_BAD_PARAM_SET("cooset"); } prj->w[2] = prj->w[3]*pow(tand((90.0 - prj->pv[1])/2.0),prj->w[0]); prj->w[4] = 1.0/prj->w[3]; prj->prjx2s = coox2s; prj->prjs2x = coos2x; return prjoff(prj, 0.0, prj->pv[1]); } /*--------------------------------------------------------------------------*/ int coox2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double alpha, dy, dy2, r, t, xj; register int ix, iy, istat, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != COO) { if ((status = cooset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { dy = prj->w[2] - (*yp + prj->y0); dy2 = dy*dy; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + dy2); if (prj->pv[1] < 0.0) r = -r; if (r == 0.0) { alpha = 0.0; } else { alpha = atan2d(xj/r, dy/r); } istat = 0; if (r == 0.0) { if (prj->w[0] < 0.0) { t = -90.0; } else { t = 0.0; istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("coox2s"); } } else { t = 90.0 - 2.0*atand(pow(r*prj->w[4],prj->w[1])); } *phip = alpha*prj->w[1]; *thetap = t; *(statp++) = istat; } } return status; } /*--------------------------------------------------------------------------*/ int coos2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double alpha, cosalpha, r, sinalpha, y0; register int iphi, itheta, istat, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != COO) { if ((status = cooset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { alpha = prj->w[0]*(*phip); sincosd(alpha, &sinalpha, &cosalpha); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = sinalpha; *yp = cosalpha; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; y0 = prj->y0 - prj->w[2]; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { istat = 0; if (*thetap == -90.0) { r = 0.0; if (prj->w[0] >= 0.0) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("coos2x"); } } else { r = prj->w[3]*pow(tand((90.0 - *thetap)/2.0),prj->w[0]); } for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *xp = r*(*xp) - prj->x0; *yp = -r*(*yp) - y0; *(statp++) = istat; } } return status; } /*============================================================================ * BON: Bonne's projection. * * Given: * prj->pv[1] Bonne conformal latitude, theta1, in degrees. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag BON * prj->code "BON" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[1] r0*pi/180 * prj->w[2] Y0 = r0*(cot(theta1) + theta1*pi/180) * prj->prjx2s Pointer to bonx2s(). * prj->prjs2x Pointer to bons2x(). *===========================================================================*/ int bonset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = BON; strcpy(prj->code, "BON"); strcpy(prj->name, "Bonne's"); if (undefined(prj->pv[1])) { return PRJERR_BAD_PARAM_SET("bonset"); } if (prj->pv[1] == 0.0) { /* Sanson-Flamsteed. */ return sflset(prj); } prj->category = POLYCONIC; prj->pvrange = 101; prj->simplezen = 0; prj->equiareal = 1; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[1] = 1.0; prj->w[2] = prj->r0*cosd(prj->pv[1])/sind(prj->pv[1]) + prj->pv[1]; } else { prj->w[1] = prj->r0*D2R; prj->w[2] = prj->r0*(cosd(prj->pv[1])/sind(prj->pv[1]) + prj->pv[1]*D2R); } prj->prjx2s = bonx2s; prj->prjs2x = bons2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int bonx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double alpha, dy, dy2, costhe, r, s, t, xj; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->pv[1] == 0.0) { /* Sanson-Flamsteed. */ return sflx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat); } if (prj->flag != BON) { if ((status = bonset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { dy = prj->w[2] - (*yp + prj->y0); dy2 = dy*dy; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; r = sqrt(xj*xj + dy2); if (prj->pv[1] < 0.0) r = -r; if (r == 0.0) { alpha = 0.0; } else { alpha = atan2d(xj/r, dy/r); } t = (prj->w[2] - r)/prj->w[1]; costhe = cosd(t); if (costhe == 0.0) { s = 0.0; } else { s = alpha*(r/prj->r0)/costhe; } *phip = s; *thetap = t; *(statp++) = 0; } } return 0; } /*--------------------------------------------------------------------------*/ int bons2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double alpha, cosalpha, r, s, sinalpha, y0; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->pv[1] == 0.0) { /* Sanson-Flamsteed. */ return sfls2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat); } if (prj->flag != BON) { if ((status = bonset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } y0 = prj->y0 - prj->w[2]; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { s = prj->r0*(*phip); xp = x + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = s; xp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { r = prj->w[2] - prj->w[1]*(*thetap); s = cosd(*thetap)/r; for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { alpha = s*(*xp); sincosd(alpha, &sinalpha, &cosalpha); *xp = r*sinalpha - prj->x0; *yp = -r*cosalpha - y0; *(statp++) = 0; } } return 0; } /*============================================================================ * PCO: polyconic projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag PCO * prj->code "PCO" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*(pi/180) * prj->w[1] 1/r0 * prj->w[2] 2*r0 * prj->prjx2s Pointer to pcox2s(). * prj->prjs2x Pointer to pcos2x(). *===========================================================================*/ int pcoset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = PCO; strcpy(prj->code, "PCO"); strcpy(prj->name, "polyconic"); prj->category = POLYCONIC; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 0; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 1.0; prj->w[1] = 1.0; prj->w[2] = 360.0/PI; } else { prj->w[0] = prj->r0*D2R; prj->w[1] = 1.0/prj->w[0]; prj->w[2] = 2.0*prj->r0; } prj->prjx2s = pcox2s; prj->prjs2x = pcos2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int pcox2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double f, fneg, fpos, lambda, tanthe, the, theneg, thepos, w, x1, xj, xx, yj, ymthe, y1; const double tol = 1.0e-12; register int ix, iy, k, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != PCO) { if ((status = pcoset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xj = *xp + prj->x0; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xj; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yj = *yp + prj->y0; w = fabs(yj*prj->w[1]); for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xj = *phip; if (w < tol) { *phip = xj*prj->w[1]; *thetap = 0.0; } else if (fabs(w-90.0) < tol) { *phip = 0.0; *thetap = copysign(90.0, yj); } else { /* Iterative solution using weighted division of the interval. */ if (yj > 0.0) { thepos = 90.0; } else { thepos = -90.0; } theneg = 0.0; xx = xj*xj; ymthe = yj - prj->w[0]*thepos; fpos = xx + ymthe*ymthe; fneg = -999.0; for (k = 0; k < 64; k++) { if (fneg < -100.0) { /* Equal division of the interval. */ the = (thepos+theneg)/2.0; } else { /* Weighted division of the interval. */ lambda = fpos/(fpos-fneg); if (lambda < 0.1) { lambda = 0.1; } else if (lambda > 0.9) { lambda = 0.9; } the = thepos - lambda*(thepos-theneg); } /* Compute the residue. */ ymthe = yj - prj->w[0]*(the); tanthe = tand(the); f = xx + ymthe*(ymthe - prj->w[2]/tanthe); /* Check for convergence. */ if (fabs(f) < tol) break; if (fabs(thepos-theneg) < tol) break; /* Redefine the interval. */ if (f > 0.0) { thepos = the; fpos = f; } else { theneg = the; fneg = f; } } x1 = prj->r0 - ymthe*tanthe; y1 = xj*tanthe; if (x1 == 0.0 && y1 == 0.0) { *phip = 0.0; } else { *phip = atan2d(y1, x1)/sind(the); } *thetap = the; } *(statp++) = 0; } } return 0; } /*--------------------------------------------------------------------------*/ int pcos2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int mphi, mtheta, rowlen, rowoff, status; double alpha, costhe, cotthe, sinthe, therad; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != PCO) { if ((status = pcoset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { xp = x + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = *phip; xp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { therad = (*thetap)*D2R; sincosd(*thetap, &sinthe, &costhe); for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { if (sinthe == 0.0) { *xp = prj->w[0]*(*xp) - prj->x0; *yp = -prj->y0; } else { alpha = (*xp)*sinthe; cotthe = costhe/sinthe; *xp = prj->r0*cotthe*sind(alpha) - prj->x0; *yp = prj->r0*(cotthe*(1.0 - cosd(alpha)) + therad) - prj->y0; } *(statp++) = 0; } } return 0; } /*============================================================================ * TSC: tangential spherical cube projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag TSC * prj->code "TSC" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*(pi/4) * prj->w[1] (4/pi)/r0 * prj->prjx2s Pointer to tscx2s(). * prj->prjs2x Pointer to tscs2x(). *===========================================================================*/ int tscset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = TSC; strcpy(prj->code, "TSC"); strcpy(prj->name, "tangential spherical cube"); prj->category = QUADCUBE; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 0; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 45.0; prj->w[1] = 1.0/45.0; } else { prj->w[0] = prj->r0*PI/4.0; prj->w[1] = 1.0/prj->w[0]; } prj->prjx2s = tscx2s; prj->prjs2x = tscs2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int tscx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int mx, my, rowlen, rowoff, status; double l, m, n, xf, yf; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != TSC) { if ((status = tscset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xf = (*xp + prj->x0)*prj->w[1]; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xf; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yf = (*yp + prj->y0)*prj->w[1]; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xf = *phip; /* Check bounds. */ if (fabs(xf) <= 1.0) { if (fabs(yf) > 3.0) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("tscx2s"); continue; } } else { if (fabs(xf) > 7.0 || fabs(yf) > 1.0) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("tscx2s"); continue; } } /* Map negative faces to the other side. */ if (xf < -1.0) xf += 8.0; /* Determine the face. */ if (xf > 5.0) { /* face = 4 */ xf = xf - 6.0; m = -1.0/sqrt(1.0 + xf*xf + yf*yf); l = -m*xf; n = -m*yf; } else if (xf > 3.0) { /* face = 3 */ xf = xf - 4.0; l = -1.0/sqrt(1.0 + xf*xf + yf*yf); m = l*xf; n = -l*yf; } else if (xf > 1.0) { /* face = 2 */ xf = xf - 2.0; m = 1.0/sqrt(1.0 + xf*xf + yf*yf); l = -m*xf; n = m*yf; } else if (yf > 1.0) { /* face = 0 */ yf = yf - 2.0; n = 1.0/sqrt(1.0 + xf*xf + yf*yf); l = -n*yf; m = n*xf; } else if (yf < -1.0) { /* face = 5 */ yf = yf + 2.0; n = -1.0/sqrt(1.0 + xf*xf + yf*yf); l = -n*yf; m = -n*xf; } else { /* face = 1 */ l = 1.0/sqrt(1.0 + xf*xf + yf*yf); m = l*xf; n = l*yf; } if (l == 0.0 && m == 0.0) { *phip = 0.0; } else { *phip = atan2d(m, l); } *thetap = asind(n); *(statp++) = 0; } } return status; } /*--------------------------------------------------------------------------*/ int tscs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int face, mphi, mtheta, rowlen, rowoff, status; double cosphi, costhe, l, m, n, sinphi, sinthe, x0, xf, y0, yf, zeta; const double tol = 1.0e-12; register int iphi, istat, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != TSC) { if ((status = tscset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = cosphi; *yp = sinphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { sincosd(*thetap, &sinthe, &costhe); for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { l = costhe*(*xp); m = costhe*(*yp); n = sinthe; face = 0; zeta = n; if (l > zeta) { face = 1; zeta = l; } if (m > zeta) { face = 2; zeta = m; } if (-l > zeta) { face = 3; zeta = -l; } if (-m > zeta) { face = 4; zeta = -m; } if (-n > zeta) { face = 5; zeta = -n; } switch (face) { case 1: xf = m/zeta; yf = n/zeta; x0 = 0.0; y0 = 0.0; break; case 2: xf = -l/zeta; yf = n/zeta; x0 = 2.0; y0 = 0.0; break; case 3: xf = -m/zeta; yf = n/zeta; x0 = 4.0; y0 = 0.0; break; case 4: xf = l/zeta; yf = n/zeta; x0 = 6.0; y0 = 0.0; break; case 5: xf = m/zeta; yf = l/zeta; x0 = 0.0; y0 = -2.0; break; default: /* face == 0 */ xf = m/zeta; yf = -l/zeta; x0 = 0.0; y0 = 2.0; break; } istat = 0; if (fabs(xf) > 1.0) { if (fabs(xf) > 1.0+tol) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("tscs2x"); } xf = copysign(1.0, xf); } if (fabs(yf) > 1.0) { if (fabs(yf) > 1.0+tol) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("tscs2x"); } yf = copysign(1.0, yf); } *xp = prj->w[0]*(xf + x0) - prj->x0; *yp = prj->w[0]*(yf + y0) - prj->y0; *(statp++) = istat; } } return status; } /*============================================================================ * CSC: COBE quadrilateralized spherical cube projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag CSC * prj->code "CSC" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*(pi/4) * prj->w[1] (4/pi)/r0 * prj->prjx2s Pointer to cscx2s(). * prj->prjs2x Pointer to cscs2x(). *===========================================================================*/ int cscset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = CSC; strcpy(prj->code, "CSC"); strcpy(prj->name, "COBE quadrilateralized spherical cube"); prj->category = QUADCUBE; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 0; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 45.0; prj->w[1] = 1.0/45.0; } else { prj->w[0] = prj->r0*PI/4.0; prj->w[1] = 1.0/prj->w[0]; } prj->prjx2s = cscx2s; prj->prjs2x = cscs2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int cscx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int face, mx, my, rowlen, rowoff, status; double l, m, n; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; float chi, psi, xf, xx, yf, yy, z0, z1, z2, z3, z4, z5, z6; const float p00 = -0.27292696; const float p10 = -0.07629969; const float p20 = -0.22797056; const float p30 = 0.54852384; const float p40 = -0.62930065; const float p50 = 0.25795794; const float p60 = 0.02584375; const float p01 = -0.02819452; const float p11 = -0.01471565; const float p21 = 0.48051509; const float p31 = -1.74114454; const float p41 = 1.71547508; const float p51 = -0.53022337; const float p02 = 0.27058160; const float p12 = -0.56800938; const float p22 = 0.30803317; const float p32 = 0.98938102; const float p42 = -0.83180469; const float p03 = -0.60441560; const float p13 = 1.50880086; const float p23 = -0.93678576; const float p33 = 0.08693841; const float p04 = 0.93412077; const float p14 = -1.41601920; const float p24 = 0.33887446; const float p05 = -0.63915306; const float p15 = 0.52032238; const float p06 = 0.14381585; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != CSC) { if ((status = cscset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xf = (*xp + prj->x0)*prj->w[1]; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xf; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yf = (*yp + prj->y0)*prj->w[1]; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xf = *phip; /* Check bounds. */ if (fabs(xf) <= 1.0) { if (fabs(yf) > 3.0) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("cscx2s"); continue; } } else { if (fabs(xf) > 7.0 || fabs(yf) > 1.0) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("cscx2s"); continue; } } /* Map negative faces to the other side. */ if (xf < -1.0) xf += 8.0; /* Determine the face. */ if (xf > 5.0) { face = 4; xf = xf - 6.0; } else if (xf > 3.0) { face = 3; xf = xf - 4.0; } else if (xf > 1.0) { face = 2; xf = xf - 2.0; } else if (yf > 1.0) { face = 0; yf = yf - 2.0; } else if (yf < -1.0) { face = 5; yf = yf + 2.0; } else { face = 1; } xx = xf*xf; yy = yf*yf; z0 = p00 + xx*(p10 + xx*(p20 + xx*(p30 + xx*(p40 + xx*(p50 + xx*(p60)))))); z1 = p01 + xx*(p11 + xx*(p21 + xx*(p31 + xx*(p41 + xx*(p51))))); z2 = p02 + xx*(p12 + xx*(p22 + xx*(p32 + xx*(p42)))); z3 = p03 + xx*(p13 + xx*(p23 + xx*(p33))); z4 = p04 + xx*(p14 + xx*(p24)); z5 = p05 + xx*(p15); z6 = p06; chi = z0 + yy*(z1 + yy*(z2 + yy*(z3 + yy*(z4 + yy*(z5 + yy*z6))))); chi = xf + xf*(1.0 - xx)*chi; z0 = p00 + yy*(p10 + yy*(p20 + yy*(p30 + yy*(p40 + yy*(p50 + yy*(p60)))))); z1 = p01 + yy*(p11 + yy*(p21 + yy*(p31 + yy*(p41 + yy*(p51))))); z2 = p02 + yy*(p12 + yy*(p22 + yy*(p32 + yy*(p42)))); z3 = p03 + yy*(p13 + yy*(p23 + yy*(p33))); z4 = p04 + yy*(p14 + yy*(p24)); z5 = p05 + yy*(p15); z6 = p06; psi = z0 + xx*(z1 + xx*(z2 + xx*(z3 + xx*(z4 + xx*(z5 + xx*z6))))); psi = yf + yf*(1.0 - yy)*psi; switch (face) { case 1: l = 1.0/sqrt(chi*chi + psi*psi + 1.0); m = chi*l; n = psi*l; break; case 2: m = 1.0/sqrt(chi*chi + psi*psi + 1.0); l = -chi*m; n = psi*m; break; case 3: l = -1.0/sqrt(chi*chi + psi*psi + 1.0); m = chi*l; n = -psi*l; break; case 4: m = -1.0/sqrt(chi*chi + psi*psi + 1.0); l = -chi*m; n = -psi*m; break; case 5: n = -1.0/sqrt(chi*chi + psi*psi + 1.0); l = -psi*n; m = -chi*n; break; default: /* face == 0 */ n = 1.0/sqrt(chi*chi + psi*psi + 1.0); l = -psi*n; m = chi*n; break; } if (l == 0.0 && m == 0.0) { *phip = 0.0; } else { *phip = atan2d(m, l); } *thetap = asind(n); *(statp++) = 0; } } return status; } /*--------------------------------------------------------------------------*/ int cscs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int face, mphi, mtheta, rowlen, rowoff, status; double cosphi, costhe, eta, l, m, n, sinphi, sinthe, xi, zeta; const float tol = 1.0e-7; register int iphi, istat, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; float chi, chi2, chi2psi2, chi4, chipsi, psi, psi2, psi4, chi2co, psi2co, x0, xf, y0, yf; const float gstar = 1.37484847732; const float mm = 0.004869491981; const float gamma = -0.13161671474; const float omega1 = -0.159596235474; const float d0 = 0.0759196200467; const float d1 = -0.0217762490699; const float c00 = 0.141189631152; const float c10 = 0.0809701286525; const float c01 = -0.281528535557; const float c11 = 0.15384112876; const float c20 = -0.178251207466; const float c02 = 0.106959469314; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != CSC) { if ((status = cscset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = cosphi; *yp = sinphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { sincosd(*thetap, &sinthe, &costhe); for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { l = costhe*(*xp); m = costhe*(*yp); n = sinthe; face = 0; zeta = n; if (l > zeta) { face = 1; zeta = l; } if (m > zeta) { face = 2; zeta = m; } if (-l > zeta) { face = 3; zeta = -l; } if (-m > zeta) { face = 4; zeta = -m; } if (-n > zeta) { face = 5; zeta = -n; } switch (face) { case 1: xi = m; eta = n; x0 = 0.0; y0 = 0.0; break; case 2: xi = -l; eta = n; x0 = 2.0; y0 = 0.0; break; case 3: xi = -m; eta = n; x0 = 4.0; y0 = 0.0; break; case 4: xi = l; eta = n; x0 = 6.0; y0 = 0.0; break; case 5: xi = m; eta = l; x0 = 0.0; y0 = -2.0; break; default: /* face == 0 */ xi = m; eta = -l; x0 = 0.0; y0 = 2.0; break; } chi = xi/zeta; psi = eta/zeta; chi2 = chi*chi; psi2 = psi*psi; chi2co = 1.0 - chi2; psi2co = 1.0 - psi2; /* Avoid floating underflows. */ chipsi = fabs(chi*psi); chi4 = (chi2 > 1.0e-16) ? chi2*chi2 : 0.0; psi4 = (psi2 > 1.0e-16) ? psi2*psi2 : 0.0; chi2psi2 = (chipsi > 1.0e-16) ? chi2*psi2 : 0.0; xf = chi*(chi2 + chi2co*(gstar + psi2*(gamma*chi2co + mm*chi2 + psi2co*(c00 + c10*chi2 + c01*psi2 + c11*chi2psi2 + c20*chi4 + c02*psi4)) + chi2*(omega1 - chi2co*(d0 + d1*chi2)))); yf = psi*(psi2 + psi2co*(gstar + chi2*(gamma*psi2co + mm*psi2 + chi2co*(c00 + c10*psi2 + c01*chi2 + c11*chi2psi2 + c20*psi4 + c02*chi4)) + psi2*(omega1 - psi2co*(d0 + d1*psi2)))); istat = 0; if (fabs(xf) > 1.0) { if (fabs(xf) > 1.0+tol) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("cscs2x"); } xf = copysign(1.0, xf); } if (fabs(yf) > 1.0) { if (fabs(yf) > 1.0+tol) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("cscs2x"); } yf = copysign(1.0, yf); } *xp = prj->w[0]*(xf + x0) - prj->x0; *yp = prj->w[0]*(yf + y0) - prj->y0; *(statp++) = istat; } } return status; } /*============================================================================ * QSC: quadrilaterilized spherical cube projection. * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag QSC * prj->code "QSC" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->w[0] r0*(pi/4) * prj->w[1] (4/pi)/r0 * prj->prjx2s Pointer to qscx2s(). * prj->prjs2x Pointer to qscs2x(). *===========================================================================*/ int qscset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = QSC; strcpy(prj->code, "QSC"); strcpy(prj->name, "quadrilateralized spherical cube"); prj->category = QUADCUBE; prj->pvrange = 0; prj->simplezen = 0; prj->equiareal = 1; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 45.0; prj->w[1] = 1.0/45.0; } else { prj->w[0] = prj->r0*PI/4.0; prj->w[1] = 1.0/prj->w[0]; } prj->prjx2s = qscx2s; prj->prjs2x = qscs2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int qscx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int direct, face, mx, my, rowlen, rowoff, status; double cosw, l, m, n, omega, sinw, tau, xf, yf, w, zeco, zeta; const double tol = 1.0e-12; register int ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != QSC) { if ((status = qscset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { xf = (*xp + prj->x0)*prj->w[1]; phip = phi + rowoff; for (iy = 0; iy < my; iy++) { *phip = xf; phip += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yf = (*yp + prj->y0)*prj->w[1]; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { xf = *phip; /* Check bounds. */ if (fabs(xf) <= 1.0) { if (fabs(yf) > 3.0) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("qscx2s"); continue; } } else { if (fabs(xf) > 7.0 || fabs(yf) > 1.0) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("qscx2s"); continue; } } /* Map negative faces to the other side. */ if (xf < -1.0) xf += 8.0; /* Determine the face. */ if (xf > 5.0) { face = 4; xf -= 6.0; } else if (xf > 3.0) { face = 3; xf -= 4.0; } else if (xf > 1.0) { face = 2; xf -= 2.0; } else if (yf > 1.0) { face = 0; yf -= 2.0; } else if (yf < -1.0) { face = 5; yf += 2.0; } else { face = 1; } direct = (fabs(xf) > fabs(yf)); if (direct) { if (xf == 0.0) { omega = 0.0; tau = 1.0; zeta = 1.0; zeco = 0.0; } else { w = 15.0*yf/xf; omega = sind(w)/(cosd(w) - SQRT2INV); tau = 1.0 + omega*omega; zeco = xf*xf*(1.0 - 1.0/sqrt(1.0 + tau)); zeta = 1.0 - zeco; } } else { if (yf == 0.0) { omega = 0.0; tau = 1.0; zeta = 1.0; zeco = 0.0; } else { w = 15.0*xf/yf; sincosd(w, &sinw, &cosw); omega = sinw/(cosw - SQRT2INV); tau = 1.0 + omega*omega; zeco = yf*yf*(1.0 - 1.0/sqrt(1.0 + tau)); zeta = 1.0 - zeco; } } if (zeta < -1.0) { if (zeta < -1.0-tol) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("qscx2s"); continue; } zeta = -1.0; zeco = 2.0; w = 0.0; } else { w = sqrt(zeco*(2.0-zeco)/tau); } switch (face) { case 1: l = zeta; if (direct) { m = w; if (xf < 0.0) m = -m; n = m*omega; } else { n = w; if (yf < 0.0) n = -n; m = n*omega; } break; case 2: m = zeta; if (direct) { l = w; if (xf > 0.0) l = -l; n = -l*omega; } else { n = w; if (yf < 0.0) n = -n; l = -n*omega; } break; case 3: l = -zeta; if (direct) { m = w; if (xf > 0.0) m = -m; n = -m*omega; } else { n = w; if (yf < 0.0) n = -n; m = -n*omega; } break; case 4: m = -zeta; if (direct) { l = w; if (xf < 0.0) l = -l; n = l*omega; } else { n = w; if (yf < 0.0) n = -n; l = n*omega; } break; case 5: n = -zeta; if (direct) { m = w; if (xf < 0.0) m = -m; l = m*omega; } else { l = w; if (yf < 0.0) l = -l; m = l*omega; } break; default: /* face == 0 */ n = zeta; if (direct) { m = w; if (xf < 0.0) m = -m; l = -m*omega; } else { l = w; if (yf > 0.0) l = -l; m = -l*omega; } break; } if (l == 0.0 && m == 0.0) { *phip = 0.0; } else { *phip = atan2d(m, l); } *thetap = asind(n); *(statp++) = 0; } } return status; } /*--------------------------------------------------------------------------*/ int qscs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int face, mphi, mtheta, rowlen, rowoff, status; double cosphi, costhe, eta, l, m, n, omega, p, sinphi, sinthe, t, tau, x0, xf, xi, y0, yf, zeco, zeta; const double tol = 1.0e-12; register int iphi, istat, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != QSC) { if ((status = qscset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } status = 0; /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { sincosd(*phip, &sinphi, &cosphi); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *xp = cosphi; *yp = sinphi; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { sincosd(*thetap, &sinthe, &costhe); for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { if (fabs(*thetap) == 90.0) { *xp = -prj->x0; *yp = copysign(2.0*prj->w[0], *thetap) - prj->y0; *(statp++) = 0; continue; } l = costhe*(*xp); m = costhe*(*yp); n = sinthe; face = 0; zeta = n; if (l > zeta) { face = 1; zeta = l; } if (m > zeta) { face = 2; zeta = m; } if (-l > zeta) { face = 3; zeta = -l; } if (-m > zeta) { face = 4; zeta = -m; } if (-n > zeta) { face = 5; zeta = -n; } zeco = 1.0 - zeta; switch (face) { case 1: xi = m; eta = n; if (zeco < 1.0e-8) { /* Small angle formula. */ t = (*thetap)*D2R; p = atan2(*yp, *xp); zeco = (p*p + t*t)/2.0; } x0 = 0.0; y0 = 0.0; break; case 2: xi = -l; eta = n; if (zeco < 1.0e-8) { /* Small angle formula. */ t = (*thetap)*D2R; p = atan2(*yp, *xp) - PI/2.0; zeco = (p*p + t*t)/2.0; } x0 = 2.0; y0 = 0.0; break; case 3: xi = -m; eta = n; if (zeco < 1.0e-8) { /* Small angle formula. */ t = (*thetap)*D2R; p = atan2(*yp, *xp); p -= copysign(PI, p); zeco = (p*p + t*t)/2.0; } x0 = 4.0; y0 = 0.0; break; case 4: xi = l; eta = n; if (zeco < 1.0e-8) { /* Small angle formula. */ t = (*thetap)*D2R; p = atan2(*yp, *xp) + PI/2.0; zeco = (p*p + t*t)/2.0; } x0 = 6; y0 = 0.0; break; case 5: xi = m; eta = l; if (zeco < 1.0e-8) { /* Small angle formula. */ t = (*thetap + 90.0)*D2R; zeco = t*t/2.0; } x0 = 0.0; y0 = -2; break; default: /* face == 0 */ xi = m; eta = -l; if (zeco < 1.0e-8) { /* Small angle formula. */ t = (90.0 - *thetap)*D2R; zeco = t*t/2.0; } x0 = 0.0; y0 = 2.0; break; } xf = 0.0; yf = 0.0; if (xi != 0.0 || eta != 0.0) { if (-xi > fabs(eta)) { omega = eta/xi; tau = 1.0 + omega*omega; xf = -sqrt(zeco/(1.0 - 1.0/sqrt(1.0+tau))); yf = (xf/15.0)*(atand(omega) - asind(omega/sqrt(tau+tau))); } else if (xi > fabs(eta)) { omega = eta/xi; tau = 1.0 + omega*omega; xf = sqrt(zeco/(1.0 - 1.0/sqrt(1.0+tau))); yf = (xf/15.0)*(atand(omega) - asind(omega/sqrt(tau+tau))); } else if (-eta >= fabs(xi)) { omega = xi/eta; tau = 1.0 + omega*omega; yf = -sqrt(zeco/(1.0 - 1.0/sqrt(1.0+tau))); xf = (yf/15.0)*(atand(omega) - asind(omega/sqrt(tau+tau))); } else if (eta >= fabs(xi)) { omega = xi/eta; tau = 1.0 + omega*omega; yf = sqrt(zeco/(1.0 - 1.0/sqrt(1.0+tau))); xf = (yf/15.0)*(atand(omega) - asind(omega/sqrt(tau+tau))); } } istat = 0; if (fabs(xf) > 1.0) { if (fabs(xf) > 1.0+tol) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("qscs2x"); } xf = copysign(1.0, xf); } if (fabs(yf) > 1.0) { if (fabs(yf) > 1.0+tol) { istat = 1; if (!status) status = PRJERR_BAD_WORLD_SET("qscs2x"); } yf = copysign(1.0, yf); } *xp = prj->w[0]*(xf + x0) - prj->x0; *yp = prj->w[0]*(yf + y0) - prj->y0; *(statp++) = istat; } } return status; } /*============================================================================ * HPX: HEALPix projection. * * Given: * prj->pv[1] H - the number of facets in longitude. * prj->pv[2] K - the number of facets in latitude * * Given and/or returned: * prj->r0 Reset to 180/pi if 0. * prj->phi0 Reset to 0.0 if undefined. * prj->theta0 Reset to 0.0 if undefined. * * Returned: * prj->flag HPX * prj->code "HPX" * prj->x0 Fiducial offset in x. * prj->y0 Fiducial offset in y. * prj->m True if H is odd. * prj->n True if K is odd. * prj->w[0] r0*(pi/180) * prj->w[1] (180/pi)/r0 * prj->w[2] (K-1)/K * prj->w[3] 90*K/H * prj->w[4] (K+1)/2 * prj->w[5] 90*(K-1)/H * prj->w[6] 180/H * prj->w[7] H/360 * prj->w[8] r0*(pi/180)*(90*K/H) * prj->w[9] r0*(pi/180)*(180/H) * prj->prjx2s Pointer to hpxx2s(). * prj->prjs2x Pointer to hpxs2x(). *===========================================================================*/ int hpxset(prj) struct prjprm *prj; { if (prj == 0x0) return PRJERR_NULL_POINTER; prj->flag = HPX; strcpy(prj->code, "HPX"); if (undefined(prj->pv[1])) prj->pv[1] = 4.0; if (undefined(prj->pv[2])) prj->pv[2] = 3.0; strcpy(prj->name, "HEALPix"); prj->category = HEALPIX; prj->pvrange = 102; prj->simplezen = 0; prj->equiareal = 1; prj->conformal = 0; prj->global = 1; prj->divergent = 0; if (prj->pv[1] <= 0.0 || prj->pv[2] <= 0.0) { return PRJERR_BAD_PARAM_SET("hpxset"); } prj->m = ((int)(prj->pv[1]+0.5))%2; prj->n = ((int)(prj->pv[2]+0.5))%2; if (prj->r0 == 0.0) { prj->r0 = R2D; prj->w[0] = 1.0; prj->w[1] = 1.0; } else { prj->w[0] = prj->r0*D2R; prj->w[1] = R2D/prj->r0; } prj->w[2] = (prj->pv[2] - 1.0) / prj->pv[2]; prj->w[3] = 90.0 * prj->pv[2] / prj->pv[1]; prj->w[4] = (prj->pv[2] + 1.0) / 2.0; prj->w[5] = 90.0 * (prj->pv[2] - 1.0) / prj->pv[1]; prj->w[6] = 180.0 / prj->pv[1]; prj->w[7] = prj->pv[1] / 360.0; prj->w[8] = prj->w[3] * prj->w[0]; prj->w[9] = prj->w[6] * prj->w[0]; prj->prjx2s = hpxx2s; prj->prjs2x = hpxs2x; return prjoff(prj, 0.0, 0.0); } /*--------------------------------------------------------------------------*/ int hpxx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat) struct prjprm *prj; int nx, ny, sxy, spt; const double x[], y[]; double phi[], theta[]; int stat[]; { int h, mx, my, offset, rowlen, rowoff, status; double absy, s, sigma, t, yr; const double slim = prj->w[6] + 1e-12; const double ylim = prj->w[9] * prj->w[4]; register int istat, ix, iy, *statp; register const double *xp, *yp; register double *phip, *thetap; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != HPX) { if ((status = hpxset(prj))) return status; } if (ny > 0) { mx = nx; my = ny; } else { mx = 1; my = 1; ny = nx; } status = 0; /* Do x dependence. */ xp = x; rowoff = 0; rowlen = nx*spt; for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { s = prj->w[1] * (*xp + prj->x0); /* x_c for K odd or theta > 0. */ t = -180.0 + (2.0 * floor((*xp + 180.0) * prj->w[7]) + 1.0) * prj->w[6]; t = prj->w[1] * (*xp - t); phip = phi + rowoff; thetap = theta + rowoff; for (iy = 0; iy < my; iy++) { /* theta[] is used to hold (x - x_c). */ *phip = s; *thetap = t; phip += rowlen; thetap += rowlen; } } /* Do y dependence. */ yp = y; phip = phi; thetap = theta; statp = stat; for (iy = 0; iy < ny; iy++, yp += sxy) { yr = prj->w[1]*(*yp + prj->y0); absy = fabs(yr); istat = 0; if (absy <= prj->w[5]) { /* Equatorial regime. */ t = asind(yr/prj->w[3]); for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { *thetap = t; *(statp++) = 0; } } else if (absy <= ylim) { /* Polar regime. */ offset = (prj->n || *yp > 0.0) ? 0 : 1; sigma = prj->w[4] - absy / prj->w[6]; if (sigma == 0.0) { s = 1e9; t = 90.0; } else { t = 1.0 - sigma*sigma/prj->pv[2]; if (t < -1.0) { s = 0.0; t = 0.0; istat = 1; if (!status) status = PRJERR_BAD_PIX_SET("hpxx2s"); } else { s = 1.0/sigma; t = asind(t); } } if (*yp < 0.0) t = -t; for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { if (offset) { /* Offset the southern polar half-facets for even K. */ h = (int)floor(*phip / prj->w[6]) + prj->m; if (h%2) { *thetap -= prj->w[6]; } else { *thetap += prj->w[6]; } } /* Recall that theta[] holds (x - x_c). */ s *= *thetap; if (fabs(s) < slim) { if (s != 0.0) s -= *thetap; *phip += s; *thetap = t; *(statp++) = istat; } else { /* Out-of-bounds. */ *phip = 0.0; *thetap = 0.0; *(statp++) = 1; if (!status) status = PRJERR_BAD_PIX_SET("hpxx2s"); } } } else { /* Beyond latitude range. */ for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) { *phip = 0.0; *thetap = 0.0; *(statp++) = 1; } if (!status) status = PRJERR_BAD_PIX_SET("hpxx2s"); } } return status; } /*--------------------------------------------------------------------------*/ int hpxs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat) struct prjprm *prj; int nphi, ntheta, spt, sxy; const double phi[], theta[]; double x[], y[]; int stat[]; { int h, mphi, mtheta, offset, rowlen, rowoff, status; double abssin, eta, sigma, sinthe, t, xi; register int iphi, itheta, *statp; register const double *phip, *thetap; register double *xp, *yp; /* Initialize. */ if (prj == 0x0) return PRJERR_NULL_POINTER; if (prj->flag != HPX) { if ((status = hpxset(prj))) return status; } if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Do phi dependence. */ phip = phi; rowoff = 0; rowlen = nphi*sxy; for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { xi = prj->w[0] * (*phip) - prj->x0; /* phi_c for K odd or theta > 0. */ t = -180.0 + (2.0*floor((*phip+180.0) * prj->w[7]) + 1.0) * prj->w[6]; t = prj->w[0] * (*phip - t); xp = x + rowoff; yp = y + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { /* y[] is used to hold (phi - phi_c). */ *xp = xi; *yp = t; xp += rowlen; yp += rowlen; } } /* Do theta dependence. */ thetap = theta; xp = x; yp = y; statp = stat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { sinthe = sind(*thetap); abssin = fabs(sinthe); if (abssin <= prj->w[2]) { /* Equatorial regime. */ eta = prj->w[8] * sinthe - prj->y0; for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { *yp = eta; *(statp++) = 0; } } else { /* Polar regime. */ offset = (prj->n || *thetap > 0.0) ? 0 : 1; sigma = sqrt(prj->pv[2]*(1.0 - abssin)); xi = sigma - 1.0; eta = prj->w[9] * (prj->w[4] - sigma); if (*thetap < 0) eta = -eta; eta -= prj->y0; for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) { if (offset) { /* Offset the southern polar half-facets for even K. */ h = (int)floor((*xp + prj->x0) / prj->w[9]) + prj->m; if (h%2) { *yp -= prj->w[9]; } else { *yp += prj->w[9]; } } /* Recall that y[] holds (phi - phi_c). */ *xp += *yp * xi; *yp = eta; *(statp++) = 0; /* Put the phi = 180 meridian in the expected place. */ if (180.0 < *xp) *xp = 360.0 - *xp; } } } return 0; } pywcs-1.12/wcslib/C/prj.h0000644001153600020070000006631012310355626017265 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: prj.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the spherical map projections * recognized by the FITS World Coordinate System (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * "Representations of celestial coordinates in FITS", * Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (Paper II) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the prj routines * --------------------------- * These routines implement the spherical map projections defined by the FITS * WCS standard. They are based on the prjprm struct which contains all * information needed for the computations. The struct contains some members * that must be set by the user, and others that are maintained by these * routines, somewhat like a C++ class but with no encapsulation. * * Routine prjini() is provided to initialize the prjprm struct with default * values, prjfree() reclaims any memory that may have been allocated to store * an error message, and prjprt() prints its contents. * * Setup routines for each projection with names of the form ???set(), where * "???" is the down-cased three-letter projection code, compute intermediate * values in the prjprm struct from parameters in it that were supplied by the * user. The struct always needs to be set by the projection's setup routine * but that need not be called explicitly - refer to the explanation of * prjprm::flag. * * Each map projection is implemented via separate functions for the spherical * projection, ???s2x(), and deprojection, ???x2s(). * * A set of driver routines, prjset(), prjx2s(), and prjs2x(), provides a * generic interface to the specific projection routines which they invoke * via pointers-to-functions stored in the prjprm struct. * * In summary, the routines are: * - prjini() Initialization routine for the prjprm struct. * - prjprt() Routine to print the prjprm struct. * * - prjset(), prjx2s(), prjs2x(): Generic driver routines * * - azpset(), azpx2s(), azps2x(): AZP (zenithal/azimuthal perspective) * - szpset(), szpx2s(), szps2x(): SZP (slant zenithal perspective) * - tanset(), tanx2s(), tans2x(): TAN (gnomonic) * - stgset(), stgx2s(), stgs2x(): STG (stereographic) * - sinset(), sinx2s(), sins2x(): SIN (orthographic/synthesis) * - arcset(), arcx2s(), arcs2x(): ARC (zenithal/azimuthal equidistant) * - zpnset(), zpnx2s(), zpns2x(): ZPN (zenithal/azimuthal polynomial) * - zeaset(), zeax2s(), zeas2x(): ZEA (zenithal/azimuthal equal area) * - airset(), airx2s(), airs2x(): AIR (Airy) * - cypset(), cypx2s(), cyps2x(): CYP (cylindrical perspective) * - ceaset(), ceax2s(), ceas2x(): CEA (cylindrical equal area) * - carset(), carx2s(), cars2x(): CAR (Plate carree) * - merset(), merx2s(), mers2x(): MER (Mercator) * - sflset(), sflx2s(), sfls2x(): SFL (Sanson-Flamsteed) * - parset(), parx2s(), pars2x(): PAR (parabolic) * - molset(), molx2s(), mols2x(): MOL (Mollweide) * - aitset(), aitx2s(), aits2x(): AIT (Hammer-Aitoff) * - copset(), copx2s(), cops2x(): COP (conic perspective) * - coeset(), coex2s(), coes2x(): COE (conic equal area) * - codset(), codx2s(), cods2x(): COD (conic equidistant) * - cooset(), coox2s(), coos2x(): COO (conic orthomorphic) * - bonset(), bonx2s(), bons2x(): BON (Bonne) * - pcoset(), pcox2s(), pcos2x(): PCO (polyconic) * - tscset(), tscx2s(), tscs2x(): TSC (tangential spherical cube) * - cscset(), cscx2s(), cscs2x(): CSC (COBE spherical cube) * - qscset(), qscx2s(), qscs2x(): QSC (quadrilateralized spherical cube) * - hpxset(), hpxx2s(), hpxs2x(): HPX (HEALPix) * * Argument checking (projection routines): * ---------------------------------------- * The values of phi and theta (the native longitude and latitude) normally lie * in the range [-180,180] for phi, and [-90,90] for theta. However, all * projection routines will accept any value of phi and will not normalize it. * * The projection routines do not explicitly check that theta lies within the * range [-90,90]. They do check for any value of theta that produces an * invalid argument to the projection equations (e.g. leading to division by * zero). The projection routines for AZP, SZP, TAN, SIN, ZPN, and COP also * return error 2 if (phi,theta) corresponds to the overlapped (far) side of * the projection but also return the corresponding value of (x,y). This * strict bounds checking may be relaxed at any time by setting prjprm::bounds * to 0 (rather than 1); the projections need not be reinitialized. * * Argument checking (deprojection routines): * ------------------------------------------ * Error checking on the projected coordinates (x,y) is limited to that * required to ascertain whether a solution exists. Where a solution does * exist no check is made that the value of phi and theta obtained lie within * the ranges [-180,180] for phi, and [-90,90] for theta. * * Accuracy: * --------- * No warranty is given for the accuracy of these routines (refer to the * copyright notice); intending users must satisfy for themselves their * adequacy for the intended purpose. However, closure to a precision of at * least 1E-10 degree of longitude and latitude has been verified for typical * projection parameters on the 1 degree graticule of native longitude and * latitude (to within 5 degrees of any latitude where the projection may * diverge). Refer to the tprj1.c and tprj2.c test routines that accompany * this software. * * * prjini() - Default constructor for the prjprm struct * ---------------------------------------------------- * prjini() sets all members of a prjprm struct to default values. It should * be used to initialize every prjprm struct. * * Returned: * prj struct prjprm* * Projection parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null prjprm pointer passed. * * * prjfree() - Destructor for the prjprm struct * -------------------------------------------- * prjfree() frees any memory that may have been allocated to store an error * message in the prjprm struct. * * Given: * prj struct prjprm* * Projection parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null prjprm pointer passed. * * * prjprt() - Print routine for the prjprm struct * ---------------------------------------------- * prjprt() prints the contents of a prjprm struct using wcsprintf(). Mainly * intended for diagnostic purposes. * * Given: * prj const struct prjprm* * Projection parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null prjprm pointer passed. * * * prjset() - Generic setup routine for the prjprm struct * ------------------------------------------------------ * prjset() sets up a prjprm struct according to information supplied within * it. * * Note that this routine need not be called directly; it will be invoked by * prjx2s() and prjs2x() if prj.flag is anything other than a predefined magic * value. * * The one important distinction between prjset() and the setup routines for * the specific projections is that the projection code must be defined in the * prjprm struct in order for prjset() to identify the required projection. * Once prjset() has initialized the prjprm struct, prjx2s() and prjs2x() use * the pointers to the specific projection and deprojection routines contained * therein. * * Given and returned: * prj struct prjprm* * Projection parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null prjprm pointer passed. * 2: Invalid projection parameters. * * For returns > 1, a detailed error message is set in * prjprm::err if enabled, see wcserr_enable(). * * * prjx2s() - Generic Cartesian-to-spherical deprojection * ------------------------------------------------------ * Deproject Cartesian (x,y) coordinates in the plane of projection to native * spherical coordinates (phi,theta). * * The projection is that specified by prjprm::code. * * Given and returned: * prj struct prjprm* * Projection parameters. * * Given: * nx,ny int Vector lengths. * * sxy,spt int Vector strides. * * x,y const double[] * Projected coordinates. * * Returned: * phi,theta double[] Longitude and latitude (phi,theta) of the projected * point in native spherical coordinates [deg]. * * stat int[] Status return value for each vector element: * 0: Success. * 1: Invalid value of (x,y). * * Function return value: * int Status return value: * 0: Success. * 1: Null prjprm pointer passed. * 2: Invalid projection parameters. * 3: One or more of the (x,y) coordinates were * invalid, as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * prjprm::err if enabled, see wcserr_enable(). * * * prjs2x() - Generic spherical-to-Cartesian projection * ---------------------------------------------------- * Project native spherical coordinates (phi,theta) to Cartesian (x,y) * coordinates in the plane of projection. * * The projection is that specified by prjprm::code. * * Given and returned: * prj struct prjprm* * Projection parameters. * * Given: * nphi, * ntheta int Vector lengths. * * spt,sxy int Vector strides. * * phi,theta const double[] * Longitude and latitude (phi,theta) of the projected * point in native spherical coordinates [deg]. * * Returned: * x,y double[] Projected coordinates. * * stat int[] Status return value for each vector element: * 0: Success. * 1: Invalid value of (phi,theta). * * Function return value: * int Status return value: * 0: Success. * 1: Null prjprm pointer passed. * 2: Invalid projection parameters. * 4: One or more of the (phi,theta) coordinates * were, invalid, as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * prjprm::err if enabled, see wcserr_enable(). * * * ???set() - Specific setup routines for the prjprm struct * -------------------------------------------------------- * Set up a prjprm struct for a particular projection according to information * supplied within it. * * Given and returned: * prj struct prjprm* * Projection parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null prjprm pointer passed. * 2: Invalid projection parameters. * * For returns > 1, a detailed error message is set in * prjprm::err if enabled, see wcserr_enable(). * * * ???x2s() - Specific Cartesian-to-spherical deprojection routines * ---------------------------------------------------------------- * Transform (x,y) coordinates in the plane of projection to native spherical * coordinates (phi,theta). * * Given and returned: * prj struct prjprm* * Projection parameters. * * Given: * nx,ny int Vector lengths. * * sxy,spt int Vector strides. * * x,y const double[] * Projected coordinates. * * Returned: * phi,theta double[] Longitude and latitude of the projected point in * native spherical coordinates [deg]. * * stat int[] Status return value for each vector element: * 0: Success. * 1: Invalid value of (x,y). * * Function return value: * int Status return value: * 0: Success. * 1: Null prjprm pointer passed. * 2: Invalid projection parameters. * 3: One or more of the (x,y) coordinates were * invalid, as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * prjprm::err if enabled, see wcserr_enable(). * * * ???s2x() - Specific spherical-to-Cartesian projection routines *--------------------------------------------------------------- * Transform native spherical coordinates (phi,theta) to (x,y) coordinates in * the plane of projection. * * Given and returned: * prj struct prjprm* * Projection parameters. * * Given: * nphi, * ntheta int Vector lengths. * * spt,sxy int Vector strides. * * phi,theta const double[] * Longitude and latitude of the projected point in * native spherical coordinates [deg]. * * Returned: * x,y double[] Projected coordinates. * * stat int[] Status return value for each vector element: * 0: Success. * 1: Invalid value of (phi,theta). * * Function return value: * int Status return value: * 0: Success. * 1: Null prjprm pointer passed. * 2: Invalid projection parameters. * 4: One or more of the (phi,theta) coordinates * were, invalid, as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * prjprm::err if enabled, see wcserr_enable(). * * * prjprm struct - Projection parameters * ------------------------------------- * The prjprm struct contains all information needed to project or deproject * native spherical coordinates. It consists of certain members that must be * set by the user ("given") and others that are set by the WCSLIB routines * ("returned"). Some of the latter are supplied for informational purposes * while others are for internal use only. * * int flag * (Given and returned) This flag must be set to zero whenever any of the * following prjprm struct members are set or changed: * * - prjprm::code, * - prjprm::r0, * - prjprm::pv[], * - prjprm::phi0, * - prjprm::theta0. * * This signals the initialization routine (prjset() or ???set()) to * recompute the returned members of the prjprm struct. flag will then be * reset to indicate that this has been done. * * Note that flag need not be reset when prjprm::bounds is changed. * * char code[4] * (Given) Three-letter projection code defined by the FITS standard. * * double r0 * (Given) The radius of the generating sphere for the projection, a linear * scaling parameter. If this is zero, it will be reset to its default * value of 180/pi (the value for FITS WCS). * * double pv[30] * (Given) Projection parameters. These correspond to the PVi_ma keywords * in FITS, so pv[0] is PVi_0a, pv[1] is PVi_1a, etc., where i denotes the * latitude-like axis. Many projections use pv[1] (PVi_1a), some also use * pv[2] (PVi_2a) and SZP uses pv[3] (PVi_3a). ZPN is currently the only * projection that uses any of the others. * * Usage of the pv[] array as it applies to each projection is described in * the prologue to each trio of projection routines in prj.c. * * double phi0 * (Given) The native longitude, phi_0 [deg], and ... * double theta0 * (Given) ... the native latitude, theta_0 [deg], of the reference point, * i.e. the point (x,y) = (0,0). If undefined (set to a magic value by * prjini()) the initialization routine will set this to a * projection-specific default. * * int bounds * (Given) Controls strict bounds checking for the AZP, SZP, TAN, SIN, ZPN, * and COP projections; set to zero to disable checking. * * The remaining members of the prjprm struct are maintained by the setup * routines and must not be modified elsewhere: * * char name[40] * (Returned) Long name of the projection. * * Provided for information only, not used by the projection routines. * * int category * (Returned) Projection category matching the value of the relevant global * variable: * * - ZENITHAL, * - CYLINDRICAL, * - PSEUDOCYLINDRICAL, * - CONVENTIONAL, * - CONIC, * - POLYCONIC, * - QUADCUBE, and * - HEALPIX. * * The category name may be identified via the prj_categories character * array, e.g. * = struct prjprm prj; = ... = printf("%s\n", prj_categories[prj.category]); * * Provided for information only, not used by the projection routines. * * int pvrange * (Returned) Range of projection parameter indices: 100 times the first * allowed index plus the number of parameters, e.g. TAN is 0 (no * parameters), SZP is 103 (1 to 3), and ZPN is 30 (0 to 29). * * Provided for information only, not used by the projection routines. * * int simplezen * (Returned) True if the projection is a radially-symmetric zenithal * projection. * * Provided for information only, not used by the projection routines. * * int equiareal * (Returned) True if the projection is equal area. * * Provided for information only, not used by the projection routines. * * int conformal * (Returned) True if the projection is conformal. * * Provided for information only, not used by the projection routines. * * int global * (Returned) True if the projection can represent the whole sphere in a * finite, non-overlapped mapping. * * Provided for information only, not used by the projection routines. * * int divergent * (Returned) True if the projection diverges in latitude. * * Provided for information only, not used by the projection routines. * * double x0 * (Returned) The offset in x, and ... * double y0 * (Returned) ... the offset in y used to force (x,y) = (0,0) at * (phi_0,theta_0). * * struct wcserr *err * (Returned) If enabled, when an error status is returned this struct * contains detailed information about the error, see wcserr_enable(). * * void *padding * (An unused variable inserted for alignment purposes only.) * * double w[10] * (Returned) Intermediate floating-point values derived from the * projection parameters, cached here to save recomputation. * * Usage of the w[] array as it applies to each projection is described in * the prologue to each trio of projection routines in prj.c. * * int n * (Returned) Intermediate integer value (used only for the ZPN and HPX * projections). * * int (*prjx2s)(PRJX2S_ARGS) * (Returned) Pointer to the projection ... * int (*prjs2x)(PRJ_ARGS) * (Returned) ... and deprojection routines. * * * Global variable: const char *prj_errmsg[] - Status return messages * ------------------------------------------------------------------ * Error messages to match the status value returned from each function. * *===========================================================================*/ #ifndef WCSLIB_PROJ #define WCSLIB_PROJ #include "wcserr.h" #ifdef __cplusplus extern "C" { #endif /* Total number of projection parameters; 0 to PVN-1. */ #define PVN 30 extern const char *prj_errmsg[]; enum prj_errmsg_enum { PRJERR_SUCCESS = 0, /* Success. */ PRJERR_NULL_POINTER = 1, /* Null prjprm pointer passed. */ PRJERR_BAD_PARAM = 2, /* Invalid projection parameters. */ PRJERR_BAD_PIX = 3, /* One or more of the (x, y) coordinates were invalid. */ PRJERR_BAD_WORLD = 4 /* One or more of the (phi, theta) coordinates were invalid. */ }; extern const int CONIC, CONVENTIONAL, CYLINDRICAL, POLYCONIC, PSEUDOCYLINDRICAL, QUADCUBE, ZENITHAL, HEALPIX; extern const char prj_categories[9][32]; extern const int prj_ncode; extern const char prj_codes[27][4]; #ifdef PRJX2S_ARGS #undef PRJX2S_ARGS #endif #ifdef PRJS2X_ARGS #undef PRJS2X_ARGS #endif /* For use in declaring deprojection function prototypes. */ #define PRJX2S_ARGS struct prjprm *prj, int nx, int ny, int sxy, int spt, \ const double x[], const double y[], double phi[], double theta[], int stat[] /* For use in declaring projection function prototypes. */ #define PRJS2X_ARGS struct prjprm *prj, int nx, int ny, int sxy, int spt, \ const double phi[], const double theta[], double x[], double y[], int stat[] struct prjprm { /* Initialization flag (see the prologue above). */ /*------------------------------------------------------------------------*/ int flag; /* Set to zero to force initialization. */ /* Parameters to be provided (see the prologue above). */ /*------------------------------------------------------------------------*/ char code[4]; /* Three-letter projection code. */ double r0; /* Radius of the generating sphere. */ double pv[PVN]; /* Projection parameters. */ double phi0, theta0; /* Fiducial native coordinates. */ int bounds; /* Enable strict bounds checking. */ /* Information derived from the parameters supplied. */ /*------------------------------------------------------------------------*/ char name[40]; /* Projection name. */ int category; /* Projection category. */ int pvrange; /* Range of projection parameter indices. */ int simplezen; /* Is it a simple zenithal projection? */ int equiareal; /* Is it an equal area projection? */ int conformal; /* Is it a conformal projection? */ int global; /* Can it map the whole sphere? */ int divergent; /* Does the projection diverge in latitude? */ double x0, y0; /* Fiducial offsets. */ /* Error handling */ /*------------------------------------------------------------------------*/ struct wcserr *err; /* Private */ /*------------------------------------------------------------------------*/ void *padding; /* (Dummy inserted for alignment purposes.) */ double w[10]; /* Intermediate values. */ int m, n; /* Intermediate values. */ int (*prjx2s)(PRJX2S_ARGS); /* Pointers to the spherical projection and */ int (*prjs2x)(PRJS2X_ARGS); /* deprojection functions. */ }; /* Size of the prjprm struct in int units, used by the Fortran wrappers. */ #define PRJLEN (sizeof(struct prjprm)/sizeof(int)) /* Use the preprocessor to help declare function prototypes (see above). */ int prjini(struct prjprm *prj); int prjfree(struct prjprm *prj); int prjprt(const struct prjprm *prj); int prjset(struct prjprm *prj); int prjx2s(PRJX2S_ARGS); int prjs2x(PRJS2X_ARGS); int azpset(struct prjprm *prj); int azpx2s(PRJX2S_ARGS); int azps2x(PRJS2X_ARGS); int szpset(struct prjprm *prj); int szpx2s(PRJX2S_ARGS); int szps2x(PRJS2X_ARGS); int tanset(struct prjprm *prj); int tanx2s(PRJX2S_ARGS); int tans2x(PRJS2X_ARGS); int stgset(struct prjprm *prj); int stgx2s(PRJX2S_ARGS); int stgs2x(PRJS2X_ARGS); int sinset(struct prjprm *prj); int sinx2s(PRJX2S_ARGS); int sins2x(PRJS2X_ARGS); int arcset(struct prjprm *prj); int arcx2s(PRJX2S_ARGS); int arcs2x(PRJS2X_ARGS); int zpnset(struct prjprm *prj); int zpnx2s(PRJX2S_ARGS); int zpns2x(PRJS2X_ARGS); int zeaset(struct prjprm *prj); int zeax2s(PRJX2S_ARGS); int zeas2x(PRJS2X_ARGS); int airset(struct prjprm *prj); int airx2s(PRJX2S_ARGS); int airs2x(PRJS2X_ARGS); int cypset(struct prjprm *prj); int cypx2s(PRJX2S_ARGS); int cyps2x(PRJS2X_ARGS); int ceaset(struct prjprm *prj); int ceax2s(PRJX2S_ARGS); int ceas2x(PRJS2X_ARGS); int carset(struct prjprm *prj); int carx2s(PRJX2S_ARGS); int cars2x(PRJS2X_ARGS); int merset(struct prjprm *prj); int merx2s(PRJX2S_ARGS); int mers2x(PRJS2X_ARGS); int sflset(struct prjprm *prj); int sflx2s(PRJX2S_ARGS); int sfls2x(PRJS2X_ARGS); int parset(struct prjprm *prj); int parx2s(PRJX2S_ARGS); int pars2x(PRJS2X_ARGS); int molset(struct prjprm *prj); int molx2s(PRJX2S_ARGS); int mols2x(PRJS2X_ARGS); int aitset(struct prjprm *prj); int aitx2s(PRJX2S_ARGS); int aits2x(PRJS2X_ARGS); int copset(struct prjprm *prj); int copx2s(PRJX2S_ARGS); int cops2x(PRJS2X_ARGS); int coeset(struct prjprm *prj); int coex2s(PRJX2S_ARGS); int coes2x(PRJS2X_ARGS); int codset(struct prjprm *prj); int codx2s(PRJX2S_ARGS); int cods2x(PRJS2X_ARGS); int cooset(struct prjprm *prj); int coox2s(PRJX2S_ARGS); int coos2x(PRJS2X_ARGS); int bonset(struct prjprm *prj); int bonx2s(PRJX2S_ARGS); int bons2x(PRJS2X_ARGS); int pcoset(struct prjprm *prj); int pcox2s(PRJX2S_ARGS); int pcos2x(PRJS2X_ARGS); int tscset(struct prjprm *prj); int tscx2s(PRJX2S_ARGS); int tscs2x(PRJS2X_ARGS); int cscset(struct prjprm *prj); int cscx2s(PRJX2S_ARGS); int cscs2x(PRJS2X_ARGS); int qscset(struct prjprm *prj); int qscx2s(PRJX2S_ARGS); int qscs2x(PRJS2X_ARGS); int hpxset(struct prjprm *prj); int hpxx2s(PRJX2S_ARGS); int hpxs2x(PRJS2X_ARGS); /* Deprecated. */ #define prjini_errmsg prj_errmsg #define prjprt_errmsg prj_errmsg #define prjset_errmsg prj_errmsg #define prjx2s_errmsg prj_errmsg #define prjs2x_errmsg prj_errmsg #ifdef __cplusplus } #endif #endif /* WCSLIB_PROJ */ pywcs-1.12/wcslib/C/spc.c0000644001153600020070000010527112310355626017252 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: spc.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include #include "wcserr.h" #include "wcsmath.h" #include "wcsprintf.h" #include "wcstrig.h" #include "wcsutil.h" #include "spc.h" #include "spx.h" /* Spectral algorithm codes. */ #define F2S 100; /* Axis linear in frequency. */ #define W2S 200; /* Axis linear in vacuum wavelengths. */ #define A2S 300; /* Axis linear in air wavelengths. */ #define V2S 400; /* Axis linear in velocity. */ #define GRI 500; /* Grism in vacuum. */ #define GRA 600; /* Grism in air. */ /* S-type spectral variables. */ #define FREQ 0; /* Frequency-like. */ #define AFRQ 1; /* Frequency-like. */ #define ENER 2; /* Frequency-like. */ #define WAVN 3; /* Frequency-like. */ #define VRAD 4; /* Frequency-like. */ #define WAVE 10; /* Vacuum wavelength-like. */ #define VOPT 11; /* Vacuum wavelength-like. */ #define ZOPT 12; /* Vacuum wavelength-like. */ #define AWAV 20; /* Air wavelength-like. */ #define VELO 30; /* Velocity-like. */ #define BETA 31; /* Velocity-like. */ /* Map status return value to message. */ const char *spc_errmsg[] = { "Success", "Null spcprm pointer passed", "Invalid spectral parameters", "One or more of x coordinates were invalid", "One or more of the spec coordinates were invalid"}; /* Convenience macro for invoking wcserr_set(). */ #define SPC_ERRMSG(status) WCSERR_SET(status), spc_errmsg[status] #define C 2.99792458e8 /*--------------------------------------------------------------------------*/ int spcini(struct spcprm *spc) { register int k; if (spc == 0x0) return SPCERR_NULL_POINTER; spc->flag = 0; strcpy(spc->type, " "); strcpy(spc->code, " "); spc->crval = UNDEFINED; spc->restfrq = 0.0; spc->restwav = 0.0; for (k = 0; k < 7; k++) { spc->pv[k] = UNDEFINED; } for (k = 0; k < 6; k++) { spc->w[k] = 0.0; } spc->isGrism = 0; spc->err = 0x0; spc->spxX2P = 0x0; spc->spxP2S = 0x0; spc->spxS2P = 0x0; spc->spxP2X = 0x0; return SPCERR_SUCCESS; } /*--------------------------------------------------------------------------*/ int spcfree(spc) struct spcprm *spc; { if (spc == 0x0) return SPCERR_NULL_POINTER; if (spc->err) free(spc->err); spc->err = 0x0; return SPCERR_SUCCESS; } /*--------------------------------------------------------------------------*/ int spcprt(const struct spcprm *spc) { char hext[32]; int i; if (spc == 0x0) return SPCERR_NULL_POINTER; wcsprintf(" flag: %d\n", spc->flag); wcsprintf(" type: \"%s\"\n", spc->type); wcsprintf(" code: \"%s\"\n", spc->code); if (undefined(spc->crval)) { wcsprintf(" crval: UNDEFINED\n"); } else { wcsprintf(" crval: %- 11.4g\n", spc->crval); } wcsprintf(" restfrq: %f\n", spc->restfrq); wcsprintf(" restwav: %f\n", spc->restwav); wcsprintf(" pv:"); if (spc->isGrism) { for (i = 0; i < 5; i++) { if (undefined(spc->pv[i])) { wcsprintf(" UNDEFINED "); } else { wcsprintf(" %- 11.4g", spc->pv[i]); } } wcsprintf("\n "); for (i = 5; i < 7; i++) { if (undefined(spc->pv[i])) { wcsprintf(" UNDEFINED "); } else { wcsprintf(" %- 11.4g", spc->pv[i]); } } wcsprintf("\n"); } else { wcsprintf(" (not used)\n"); } wcsprintf(" w:"); for (i = 0; i < 3; i++) { wcsprintf(" %- 11.4g", spc->w[i]); } if (spc->isGrism) { wcsprintf("\n "); for (i = 3; i < 6; i++) { wcsprintf(" %- 11.4g", spc->w[i]); } wcsprintf("\n"); } else { wcsprintf(" (remainder unused)\n"); } wcsprintf(" isGrism: %d\n", spc->isGrism); WCSPRINTF_PTR(" err: ", spc->err, "\n"); if (spc->err) { wcserr_prt(spc->err, " "); } wcsprintf(" spxX2P: %s\n", wcsutil_fptr2str((int (*)())spc->spxX2P, hext)); wcsprintf(" spxP2S: %s\n", wcsutil_fptr2str((int (*)())spc->spxP2S, hext)); wcsprintf(" spxS2P: %s\n", wcsutil_fptr2str((int (*)())spc->spxS2P, hext)); wcsprintf(" spxP2X: %s\n", wcsutil_fptr2str((int (*)())spc->spxP2X, hext)); return SPCERR_SUCCESS; } /*--------------------------------------------------------------------------*/ int spcset(struct spcprm *spc) { static const char *function = "spcset"; char ctype[9], ptype, xtype; int restreq, status; double alpha, beta_r, crvalX, dn_r, dXdS, epsilon, G, m, lambda_r, n_r, t, restfrq, restwav, theta; struct wcserr **err; if (spc == 0x0) return SPCERR_NULL_POINTER; err = &(spc->err); if (undefined(spc->crval)) { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Spectral crval is undefined"); } spc->type[4] = '\0'; spc->code[3] = '\0'; spc->w[0] = 0.0; /* Analyse the spectral axis type. */ sprintf(ctype, "%s-%s", spc->type, spc->code); restfrq = spc->restfrq; restwav = spc->restwav; if ((status = spcspxe(ctype, spc->crval, restfrq, restwav, &ptype, &xtype, &restreq, &crvalX, &dXdS, &(spc->err)))) { return status; } /* Satisfy rest frequency/wavelength requirements. */ if (restreq) { if (restreq == 3 && restfrq == 0.0 && restwav == 0.0) { /* VRAD-V2F, VOPT-V2W, and ZOPT-V2W require the rest frequency or */ /* wavelength for the S-P and P-X transformations but not for S-X */ /* so supply a phoney value. */ restwav = 1.0; } if (restfrq == 0.0) { restfrq = C/restwav; } else { restwav = C/restfrq; } if (ptype == 'F') { spc->w[0] = restfrq; } else if (ptype != 'V') { spc->w[0] = restwav; } else { if (xtype == 'F') { spc->w[0] = restfrq; } else { spc->w[0] = restwav; } } } spc->w[1] = crvalX; spc->w[2] = dXdS; /* Set pointers-to-functions for the linear part of the transformation. */ if (ptype == 'F') { if (strcmp(spc->type, "FREQ") == 0) { /* Frequency. */ spc->flag = FREQ; spc->spxP2S = 0x0; spc->spxS2P = 0x0; } else if (strcmp(spc->type, "AFRQ") == 0) { /* Angular frequency. */ spc->flag = AFRQ; spc->spxP2S = freqafrq; spc->spxS2P = afrqfreq; } else if (strcmp(spc->type, "ENER") == 0) { /* Photon energy. */ spc->flag = ENER; spc->spxP2S = freqener; spc->spxS2P = enerfreq; } else if (strcmp(spc->type, "WAVN") == 0) { /* Wave number. */ spc->flag = WAVN; spc->spxP2S = freqwavn; spc->spxS2P = wavnfreq; } else if (strcmp(spc->type, "VRAD") == 0) { /* Radio velocity. */ spc->flag = VRAD; spc->spxP2S = freqvrad; spc->spxS2P = vradfreq; } } else if (ptype == 'W') { if (strcmp(spc->type, "WAVE") == 0) { /* Vacuum wavelengths. */ spc->flag = WAVE; spc->spxP2S = 0x0; spc->spxS2P = 0x0; } else if (strcmp(spc->type, "VOPT") == 0) { /* Optical velocity. */ spc->flag = VOPT; spc->spxP2S = wavevopt; spc->spxS2P = voptwave; } else if (strcmp(spc->type, "ZOPT") == 0) { /* Redshift. */ spc->flag = ZOPT; spc->spxP2S = wavezopt; spc->spxS2P = zoptwave; } } else if (ptype == 'A') { if (strcmp(spc->type, "AWAV") == 0) { /* Air wavelengths. */ spc->flag = AWAV; spc->spxP2S = 0x0; spc->spxS2P = 0x0; } } else if (ptype == 'V') { if (strcmp(spc->type, "VELO") == 0) { /* Relativistic velocity. */ spc->flag = VELO; spc->spxP2S = 0x0; spc->spxS2P = 0x0; } else if (strcmp(spc->type, "BETA") == 0) { /* Velocity ratio (v/c). */ spc->flag = BETA; spc->spxP2S = velobeta; spc->spxS2P = betavelo; } } /* Set pointers-to-functions for the non-linear part of the spectral */ /* transformation. */ spc->isGrism = 0; if (xtype == 'F') { /* Axis is linear in frequency. */ if (ptype == 'F') { spc->spxX2P = 0x0; spc->spxP2X = 0x0; } else if (ptype == 'W') { spc->spxX2P = freqwave; spc->spxP2X = wavefreq; } else if (ptype == 'A') { spc->spxX2P = freqawav; spc->spxP2X = awavfreq; } else if (ptype == 'V') { spc->spxX2P = freqvelo; spc->spxP2X = velofreq; } spc->flag += F2S; } else if (xtype == 'W' || xtype == 'w') { /* Axis is linear in vacuum wavelengths. */ if (ptype == 'F') { spc->spxX2P = wavefreq; spc->spxP2X = freqwave; } else if (ptype == 'W') { spc->spxX2P = 0x0; spc->spxP2X = 0x0; } else if (ptype == 'A') { spc->spxX2P = waveawav; spc->spxP2X = awavwave; } else if (ptype == 'V') { spc->spxX2P = wavevelo; spc->spxP2X = velowave; } if (xtype == 'W') { spc->flag += W2S; } else { /* Grism in vacuum. */ spc->isGrism = 1; spc->flag += GRI; } } else if (xtype == 'A' || xtype == 'a') { /* Axis is linear in air wavelengths. */ if (ptype == 'F') { spc->spxX2P = awavfreq; spc->spxP2X = freqawav; } else if (ptype == 'W') { spc->spxX2P = awavwave; spc->spxP2X = waveawav; } else if (ptype == 'A') { spc->spxX2P = 0x0; spc->spxP2X = 0x0; } else if (ptype == 'V') { spc->spxX2P = awavvelo; spc->spxP2X = veloawav; } if (xtype == 'A') { spc->flag += A2S; } else { /* Grism in air. */ spc->isGrism = 2; spc->flag += GRA; } } else if (xtype == 'V') { /* Axis is linear in relativistic velocity. */ if (ptype == 'F') { spc->spxX2P = velofreq; spc->spxP2X = freqvelo; } else if (ptype == 'W') { spc->spxX2P = velowave; spc->spxP2X = wavevelo; } else if (ptype == 'A') { spc->spxX2P = veloawav; spc->spxP2X = awavvelo; } else if (ptype == 'V') { spc->spxX2P = 0x0; spc->spxP2X = 0x0; } spc->flag += V2S; } /* Check for grism axes. */ if (spc->isGrism) { /* Axis is linear in "grism parameter"; work in wavelength. */ lambda_r = crvalX; /* Set defaults. */ if (undefined(spc->pv[0])) spc->pv[0] = 0.0; if (undefined(spc->pv[1])) spc->pv[1] = 0.0; if (undefined(spc->pv[2])) spc->pv[2] = 0.0; if (undefined(spc->pv[3])) spc->pv[3] = 1.0; if (undefined(spc->pv[4])) spc->pv[4] = 0.0; if (undefined(spc->pv[5])) spc->pv[5] = 0.0; if (undefined(spc->pv[6])) spc->pv[6] = 0.0; /* Compute intermediaries. */ G = spc->pv[0]; m = spc->pv[1]; alpha = spc->pv[2]; n_r = spc->pv[3]; dn_r = spc->pv[4]; epsilon = spc->pv[5]; theta = spc->pv[6]; t = G*m/cosd(epsilon); beta_r = asind(t*lambda_r - n_r*sind(alpha)); t -= dn_r*sind(alpha); spc->w[1] = -tand(theta); spc->w[2] *= t / (cosd(beta_r)*cosd(theta)*cosd(theta)); spc->w[3] = beta_r + theta; spc->w[4] = (n_r - dn_r*lambda_r)*sind(alpha); spc->w[5] = 1.0 / t; } return SPCERR_SUCCESS; } /*--------------------------------------------------------------------------*/ int spcx2s( struct spcprm *spc, int nx, int sx, int sspec, const double x[], double spec[], int stat[]) { static const char *function = "spcx2s"; int statP2S, status = SPCERR_SUCCESS, statX2P; double beta; register int ix; register int *statp; register const double *xp; register double *specp; struct wcserr **err; /* Initialize. */ if (spc == 0x0) return SPCERR_NULL_POINTER; err = &(spc->err); if (spc->flag == 0) { if ((status = spcset(spc))) return status; } /* Convert intermediate world coordinate x to X. */ xp = x; specp = spec; statp = stat; for (ix = 0; ix < nx; ix++, xp += sx, specp += sspec) { *specp = spc->w[1] + (*xp)*spc->w[2]; *(statp++) = 0; } /* If X is the grism parameter then convert it to wavelength. */ if (spc->isGrism) { specp = spec; for (ix = 0; ix < nx; ix++, specp += sspec) { beta = atand(*specp) + spc->w[3]; *specp = (sind(beta) + spc->w[4]) * spc->w[5]; } } /* Apply the non-linear step of the algorithm chain to convert the */ /* X-type spectral variable to P-type intermediate spectral variable. */ if (spc->spxX2P) { if ((statX2P = spc->spxX2P(spc->w[0], nx, sspec, sspec, spec, spec, stat))) { if (statX2P == SPXERR_BAD_INSPEC_COORD) { status = SPCERR_BAD_X; } else if (statX2P == SPXERR_BAD_SPEC_PARAMS) { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Invalid spectral parameters: Frequency or wavelength is 0"); } else { return wcserr_set(SPC_ERRMSG(statX2P)); } } } /* Apply the linear step of the algorithm chain to convert P-type */ /* intermediate spectral variable to the required S-type variable. */ if (spc->spxP2S) { if ((statP2S = spc->spxP2S(spc->w[0], nx, sspec, sspec, spec, spec, stat))) { if (statP2S == SPXERR_BAD_INSPEC_COORD) { status = SPCERR_BAD_X; } else if (statP2S == SPXERR_BAD_SPEC_PARAMS) { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Invalid spectral parameters: Frequency or wavelength is 0"); } else { return wcserr_set(SPC_ERRMSG(statP2S)); } } } if (status) { wcserr_set(SPC_ERRMSG(status)); } return status; } /*--------------------------------------------------------------------------*/ int spcs2x( struct spcprm *spc, int nspec, int sspec, int sx, const double spec[], double x[], int stat[]) { static const char *function = "spcs2x"; int statP2X, status = SPCERR_SUCCESS, statS2P; double beta, s; register int ispec; register int *statp; register const double *specp; register double *xp; struct wcserr **err; /* Initialize. */ if (spc == 0x0) return SPCERR_NULL_POINTER; err = &(spc->err); if (spc->flag == 0) { if ((status = spcset(spc))) return status; } /* Apply the linear step of the algorithm chain to convert the S-type */ /* spectral variable to P-type intermediate spectral variable. */ if (spc->spxS2P) { if ((statS2P = spc->spxS2P(spc->w[0], nspec, sspec, sx, spec, x, stat))) { if (statS2P == SPXERR_BAD_INSPEC_COORD) { status = SPCERR_BAD_SPEC; } else if (statS2P == SPXERR_BAD_SPEC_PARAMS) { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Invalid spectral parameters: Frequency or wavelength is 0"); } else { return wcserr_set(SPC_ERRMSG(statS2P)); } } } else { /* Just a copy. */ xp = x; specp = spec; statp = stat; for (ispec = 0; ispec < nspec; ispec++, specp += sspec, xp += sx) { *xp = *specp; *(statp++) = 0; } } /* Apply the non-linear step of the algorithm chain to convert P-type */ /* intermediate spectral variable to X-type spectral variable. */ if (spc->spxP2X) { if ((statP2X = spc->spxP2X(spc->w[0], nspec, sx, sx, x, x, stat))) { if (statP2X == SPCERR_BAD_SPEC) { status = SPCERR_BAD_SPEC; } else if (statP2X == SPXERR_BAD_SPEC_PARAMS) { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Invalid spectral parameters: Frequency or wavelength is 0"); } else { return wcserr_set(SPC_ERRMSG(statP2X)); } } } if (spc->isGrism) { /* Convert X-type spectral variable (wavelength) to grism parameter. */ xp = x; statp = stat; for (ispec = 0; ispec < nspec; ispec++, xp += sx, statp++) { if (*statp) continue; s = *xp/spc->w[5] - spc->w[4]; if (fabs(s) <= 1.0) { beta = asind(s); *xp = tand(beta - spc->w[3]); } else { *statp = 1; } } } /* Convert X-type spectral variable to intermediate world coordinate x. */ xp = x; statp = stat; for (ispec = 0; ispec < nspec; ispec++, xp += sx) { if (*(statp++)) continue; *xp -= spc->w[1]; *xp /= spc->w[2]; } if (status) { wcserr_set(SPC_ERRMSG(status)); } return status; } /*--------------------------------------------------------------------------*/ int spctyp( const char ctypei[9], char stype[], char scode[], char sname[], char units[], char *ptype, char *xtype, int *restreq) { return spctype( ctypei, stype, scode, sname, units, ptype, xtype, restreq, NULL); } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int spctype( const char ctypei[9], char stype[], char scode[], char sname[], char units[], char *ptype, char *xtype, int *restreq, struct wcserr **err) { static const char *function = "spctype"; char ctype[9], ptype_t, sname_t[32], units_t[8], xtype_t; int restreq_t = 0; /* Copy with blank padding. */ sprintf(ctype, "%-8.8s", ctypei); ctype[8] = '\0'; /* Validate the S-type spectral variable. */ if (strncmp(ctype, "FREQ", 4) == 0) { strcpy(sname_t, "Frequency"); strcpy(units_t, "Hz"); ptype_t = 'F'; } else if (strncmp(ctype, "AFRQ", 4) == 0) { strcpy(sname_t, "Angular frequency"); strcpy(units_t, "rad/s"); ptype_t = 'F'; } else if (strncmp(ctype, "ENER", 4) == 0) { strcpy(sname_t, "Photon energy"); strcpy(units_t, "J"); ptype_t = 'F'; } else if (strncmp(ctype, "WAVN", 4) == 0) { strcpy(sname_t, "Wavenumber"); strcpy(units_t, "/m"); ptype_t = 'F'; } else if (strncmp(ctype, "VRAD", 4) == 0) { strcpy(sname_t, "Radio velocity"); strcpy(units_t, "m/s"); ptype_t = 'F'; restreq_t = 1; } else if (strncmp(ctype, "WAVE", 4) == 0) { strcpy(sname_t, "Vacuum wavelength"); strcpy(units_t, "m"); ptype_t = 'W'; } else if (strncmp(ctype, "VOPT", 4) == 0) { strcpy(sname_t, "Optical velocity"); strcpy(units_t, "m/s"); ptype_t = 'W'; restreq_t = 1; } else if (strncmp(ctype, "ZOPT", 4) == 0) { strcpy(sname_t, "Redshift"); strcpy(units_t, ""); ptype_t = 'W'; restreq_t = 1; } else if (strncmp(ctype, "AWAV", 4) == 0) { strcpy(sname_t, "Air wavelength"); strcpy(units_t, "m"); ptype_t = 'A'; } else if (strncmp(ctype, "VELO", 4) == 0) { strcpy(sname_t, "Relativistic velocity"); strcpy(units_t, "m/s"); ptype_t = 'V'; } else if (strncmp(ctype, "BETA", 4) == 0) { strcpy(sname_t, "Velocity ratio (v/c)"); strcpy(units_t, ""); ptype_t = 'V'; } else { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Unknown spectral type '%s'", ctype); } /* Determine X-type and validate the spectral algorithm code. */ if ((xtype_t = ctype[5]) == ' ') { /* The algorithm code must be completely blank. */ if (strcmp(ctype+4, " ") != 0) { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Invalid spectral algorithm '%s'", ctype+4); } xtype_t = ptype_t; } else if (ctype[4] != '-') { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Invalid spectral type '%s'", ctype); } else if (strcmp(ctype+5, "LOG") == 0 || strcmp(ctype+5, "TAB") == 0) { /* Logarithmic or tabular axis, not linear in any spectral type. */ } else if (xtype_t == 'G') { /* Validate the algorithm code. */ if (ctype[6] != 'R') { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Invalid spectral algorithm '%s'", xtype_t); } /* Grism coordinates... */ if (ctype[7] == 'I') { /* ...in vacuum. */ xtype_t = 'w'; } else if (ctype[7] == 'A') { /* ...in air. */ xtype_t = 'a'; } else { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Invalid spectral algorithm '%s'", xtype_t); } } else if (ctype[6] != '2') { /* Algorithm code has invalid syntax. */ return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Invalid spectral algorithm syntax '%s'", xtype_t); } else if (ctype[7] != ptype_t && ctype[7] != '?') { /* The P-, and S-type variables are inconsistent. */ return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "In spectral type '%s', P- and S-type variables are inconsistent", ctype); } else if (ctype[7] == ctype[5]) { /* Degenerate algorithm code. */ sprintf(ctype+4, " "); } /* Rest freq/wavelength required for transformation between P and X? */ if (strchr("FWAwa", (int)xtype_t)) { if (ptype_t == 'V') { restreq_t += 2; } } else if (xtype_t == 'V') { if (strchr("FWAwa", (int)ptype_t)) { restreq_t += 2; } } else if (strchr("LT", (int)xtype_t) == 0) { /* Invalid X-type variable code. */ return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "In spectral type '%s', invalid X-type variable code", ctype); } /* Copy results. */ if (stype) { strncpy(stype, ctype, 4); stype[4] = '\0'; } if (scode) strcpy(scode, ctype+5); if (sname) strcpy(sname, sname_t); if (units) strcpy(units, units_t); if (ptype) *ptype = ptype_t; if (xtype) *xtype = xtype_t; if (restreq) *restreq = restreq_t; return SPCERR_SUCCESS; } /*--------------------------------------------------------------------------*/ int spcspx( const char ctypeS[9], double crvalS, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalX, double *dXdS) { return spcspxe(ctypeS, crvalS, restfrq, restwav, ptype, xtype, restreq, crvalX, dXdS, 0x0); } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int spcspxe( const char ctypeS[9], double crvalS, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalX, double *dXdS, struct wcserr **err) { static const char *function = "spcspxe"; char scode[4], stype[5], type[8]; int status; double dPdS, dXdP; struct spxprm spx; /* Analyse the spectral axis code. */ if ((status = spctype(ctypeS, stype, scode, 0x0, 0x0, ptype, xtype, restreq, err))) { return status; } if (strstr("LT", xtype)) { /* Can't handle logarithmic or tabular coordinates. */ return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Can't handle logarithmic or tabular coordinates"); } /* Do we have rest frequency and/or wavelength as required? */ if ((*restreq)%3 && restfrq == 0.0 && restwav == 0.0) { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Missing required rest frequency or wavelength"); } /* Compute all spectral parameters and their derivatives. */ strcpy(type, stype); spx.err = (err ? *err : 0x0); if ((status = specx(type, crvalS, restfrq, restwav, &spx))) { status = SPCERR_BAD_SPEC_PARAMS; if (err) { (*err)->status = status; } else { free(spx.err); } return status; } /* Transform S-P (linear) and P-X (non-linear). */ dPdS = 0.0; dXdP = 0.0; if (*ptype == 'F') { if (strcmp(stype, "FREQ") == 0) { dPdS = 1.0; } else if (strcmp(stype, "AFRQ") == 0) { dPdS = spx.dfreqafrq; } else if (strcmp(stype, "ENER") == 0) { dPdS = spx.dfreqener; } else if (strcmp(stype, "WAVN") == 0) { dPdS = spx.dfreqwavn; } else if (strcmp(stype, "VRAD") == 0) { dPdS = spx.dfreqvrad; } if (*xtype == 'F') { *crvalX = spx.freq; dXdP = 1.0; } else if (*xtype == 'W' || *xtype == 'w') { *crvalX = spx.wave; dXdP = spx.dwavefreq; } else if (*xtype == 'A' || *xtype == 'a') { *crvalX = spx.awav; dXdP = spx.dawavfreq; } else if (*xtype == 'V') { *crvalX = spx.velo; dXdP = spx.dvelofreq; } } else if (*ptype == 'W' || *ptype == 'w') { if (strcmp(stype, "WAVE") == 0) { dPdS = 1.0; } else if (strcmp(stype, "VOPT") == 0) { dPdS = spx.dwavevopt; } else if (strcmp(stype, "ZOPT") == 0) { dPdS = spx.dwavezopt; } if (*xtype == 'F') { *crvalX = spx.freq; dXdP = spx.dfreqwave; } else if (*xtype == 'W' || *xtype == 'w') { *crvalX = spx.wave; dXdP = 1.0; } else if (*xtype == 'A' || *xtype == 'a') { *crvalX = spx.awav; dXdP = spx.dawavwave; } else if (*xtype == 'V') { *crvalX = spx.velo; dXdP = spx.dvelowave; } } else if (*ptype == 'A' || *ptype == 'a') { if (strcmp(stype, "AWAV") == 0) { dPdS = 1.0; } if (*xtype == 'F') { *crvalX = spx.freq; dXdP = spx.dfreqawav; } else if (*xtype == 'W' || *xtype == 'w') { *crvalX = spx.wave; dXdP = spx.dwaveawav; } else if (*xtype == 'A' || *xtype == 'a') { *crvalX = spx.awav; dXdP = 1.0; } else if (*xtype == 'V') { *crvalX = spx.velo; dXdP = spx.dveloawav; } } else if (*ptype == 'V') { if (strcmp(stype, "VELO") == 0) { dPdS = 1.0; } else if (strcmp(stype, "BETA") == 0) { dPdS = spx.dvelobeta; } if (*xtype == 'F') { *crvalX = spx.freq; dXdP = spx.dfreqvelo; } else if (*xtype == 'W' || *xtype == 'w') { *crvalX = spx.wave; dXdP = spx.dwavevelo; } else if (*xtype == 'A' || *xtype == 'a') { *crvalX = spx.awav; dXdP = spx.dawavvelo; } else if (*xtype == 'V') { *crvalX = spx.velo; dXdP = 1.0; } } *dXdS = dXdP * dPdS; return SPCERR_SUCCESS; } /*--------------------------------------------------------------------------*/ int spcxps( const char ctypeS[9], double crvalX, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalS, double *dSdX) { return spcxpse(ctypeS, crvalX, restfrq, restwav, ptype, xtype, restreq, crvalS, dSdX, NULL); } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int spcxpse( const char ctypeS[9], double crvalX, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalS, double *dSdX, struct wcserr **err) { static const char *function = "spcxpse"; char scode[4], stype[5], type[8]; int status; double dPdX, dSdP; struct spxprm spx; /* Analyse the spectral axis type. */ if ((status = spctype(ctypeS, stype, scode, 0x0, 0x0, ptype, xtype, restreq, err))) { return status; } if (strstr("LT", xtype)) { /* Can't handle logarithmic or tabular coordinates. */ return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Can't handle logarithmic or tabular coordinates"); } /* Do we have rest frequency and/or wavelength as required? */ if ((*restreq)%3 && restfrq == 0.0 && restwav == 0.0) { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Missing required rest frequency or wavelength"); } /* Compute all spectral parameters and their derivatives. */ if (*xtype == 'F') { strcpy(type, "FREQ"); } else if (*xtype == 'W' || *xtype == 'w') { strcpy(type, "WAVE"); } else if (*xtype == 'A' || *xtype == 'a') { strcpy(type, "AWAV"); } else if (*xtype == 'V') { strcpy(type, "VELO"); } spx.err = (err ? *err : 0x0); if (specx(type, crvalX, restfrq, restwav, &spx)) { status = SPCERR_BAD_SPEC_PARAMS; if (err) { (*err)->status = status; } else { free(spx.err); } return status; } /* Transform X-P (non-linear) and P-S (linear). */ dPdX = 0.0; dSdP = 0.0; if (*ptype == 'F') { if (*xtype == 'F') { dPdX = 1.0; } else if (*xtype == 'W' || *xtype == 'w') { dPdX = spx.dfreqwave; } else if (*xtype == 'A' || *xtype == 'a') { dPdX = spx.dfreqawav; } else if (*xtype == 'V') { dPdX = spx.dfreqvelo; } if (strcmp(stype, "FREQ") == 0) { *crvalS = spx.freq; dSdP = 1.0; } else if (strcmp(stype, "AFRQ") == 0) { *crvalS = spx.afrq; dSdP = spx.dafrqfreq; } else if (strcmp(stype, "ENER") == 0) { *crvalS = spx.ener; dSdP = spx.denerfreq; } else if (strcmp(stype, "WAVN") == 0) { *crvalS = spx.wavn; dSdP = spx.dwavnfreq; } else if (strcmp(stype, "VRAD") == 0) { *crvalS = spx.vrad; dSdP = spx.dvradfreq; } } else if (*ptype == 'W') { if (*xtype == 'F') { dPdX = spx.dwavefreq; } else if (*xtype == 'W' || *xtype == 'w') { dPdX = 1.0; } else if (*xtype == 'A' || *xtype == 'a') { dPdX = spx.dwaveawav; } else if (*xtype == 'V') { dPdX = spx.dwavevelo; } if (strcmp(stype, "WAVE") == 0) { *crvalS = spx.wave; dSdP = 1.0; } else if (strcmp(stype, "VOPT") == 0) { *crvalS = spx.vopt; dSdP = spx.dvoptwave; } else if (strcmp(stype, "ZOPT") == 0) { *crvalS = spx.zopt; dSdP = spx.dzoptwave; } } else if (*ptype == 'A') { if (*xtype == 'F') { dPdX = spx.dawavfreq; } else if (*xtype == 'W' || *xtype == 'w') { dPdX = spx.dawavwave; } else if (*xtype == 'A' || *xtype == 'a') { dPdX = 1.0; } else if (*xtype == 'V') { dPdX = spx.dawavvelo; } if (strcmp(stype, "AWAV") == 0) { *crvalS = spx.awav; dSdP = 1.0; } } else if (*ptype == 'V') { if (*xtype == 'F') { dPdX = spx.dvelofreq; } else if (*xtype == 'W' || *xtype == 'w') { dPdX = spx.dvelowave; } else if (*xtype == 'A' || *xtype == 'a') { dPdX = spx.dveloawav; } else if (*xtype == 'V') { dPdX = 1.0; } if (strcmp(stype, "VELO") == 0) { *crvalS = spx.velo; dSdP = 1.0; } else if (strcmp(stype, "BETA") == 0) { *crvalS = spx.beta; dSdP = spx.dbetavelo; } } *dSdX = dSdP * dPdX; return SPCERR_SUCCESS; } /*--------------------------------------------------------------------------*/ int spctrn( const char ctypeS1[9], double crvalS1, double cdeltS1, double restfrq, double restwav, char ctypeS2[9], double *crvalS2, double *cdeltS2) { return spctrne(ctypeS1, crvalS1, cdeltS1, restfrq, restwav, ctypeS2, crvalS2, cdeltS2, NULL); } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int spctrne( const char ctypeS1[9], double crvalS1, double cdeltS1, double restfrq, double restwav, char ctypeS2[9], double *crvalS2, double *cdeltS2, struct wcserr **err) { static const char *function = "spctrne"; char *cp, ptype1, ptype2, xtype1, xtype2; int restreq, status; double crvalX, dS2dX, dXdS1; if ((status = spcspxe(ctypeS1, crvalS1, restfrq, restwav, &ptype1, &xtype1, &restreq, &crvalX, &dXdS1, err))) { return status; } /* Blank fill. */ ctypeS2[8] = '\0'; for (cp = ctypeS2; *cp; cp++); while (cp < ctypeS2+8) *(cp++) = ' '; if (strncmp(ctypeS2+5, "???", 3) == 0) { /* Set the algorithm code if required. */ if (xtype1 == 'w') { strcpy(ctypeS2+5, "GRI"); } else if (xtype1 == 'a') { strcpy(ctypeS2+5, "GRA"); } else { ctypeS2[5] = xtype1; ctypeS2[6] = '2'; } } if ((status = spcxpse(ctypeS2, crvalX, restfrq, restwav, &ptype2, &xtype2, &restreq, crvalS2, &dS2dX, err))) { return status; } /* Are the X-types compatible? */ if (xtype2 != xtype1) { return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), "Incompatible X-types '%c' and '%c'", xtype1, xtype2); } if (ctypeS2[7] == '?') { if (ptype2 == xtype2) { strcpy(ctypeS2+4, " "); } else { ctypeS2[7] = ptype2; } } *cdeltS2 = dS2dX * dXdS1 * cdeltS1; return SPCERR_SUCCESS; } /*--------------------------------------------------------------------------*/ int spcaips( const char ctypeA[9], int velref, char ctype[9], char specsys[9]) { const char *frames[] = {"LSRK", "BARYCENT", "TOPOCENT", "LSRD", "GEOCENTR", "SOURCE", "GALACTOC"}; char *fcode; int ivf, status; /* Make a null-filled copy of ctypeA. */ if (ctype != ctypeA) strncpy(ctype, ctypeA, 8); ctype[8] = '\0'; wcsutil_null_fill(9, ctype); *specsys = '\0'; /* Is it a recognized AIPS-convention type? */ status = SPCERR_NO_CHANGE; if (strncmp(ctype, "FREQ", 4) == 0 || strncmp(ctype, "VELO", 4) == 0 || strncmp(ctype, "FELO", 4) == 0) { /* Look for the Doppler frame. */ if (*(fcode = ctype+4)) { if (strcmp(fcode, "-LSR") == 0) { strcpy(specsys, "LSRK"); } else if (strcmp(fcode, "-HEL") == 0) { strcpy(specsys, "BARYCENT"); } else if (strcmp(fcode, "-OBS") == 0) { strcpy(specsys, "TOPOCENT"); } else { /* Not a recognized AIPS spectral type. */ return SPCERR_NO_CHANGE; } *fcode = '\0'; status = SPCERR_SUCCESS; } /* VELREF takes precedence if present. */ ivf = velref%256; if (0 < ivf && ivf <= 7) { strcpy(specsys, frames[ivf-1]); status = SPCERR_SUCCESS; } else if (ivf) { status = SPCERR_BAD_SPEC_PARAMS; } if (strcmp(ctype, "VELO") == 0) { /* Check that we found an AIPS-convention Doppler frame. */ if (*specsys) { /* 'VELO' in AIPS means radio or optical depending on VELREF. */ ivf = velref/256; if (ivf == 0) { strcpy(ctype, "VOPT"); } else if (ivf == 1) { strcpy(ctype, "VRAD"); } else { status = SPCERR_BAD_SPEC_PARAMS; } } } else if (strcmp(ctype, "FELO") == 0) { /* Uniform in frequency but expressed as an optical velocity (strictly we should also have found an AIPS-convention Doppler frame). */ strcpy(ctype, "VOPT-F2W"); if (status < 0) status = SPCERR_SUCCESS; } } return status; } pywcs-1.12/wcslib/C/spc.h0000644001153600020070000011301412310355626017251 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: spc.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the spectral coordinate systems * recognized by the FITS World Coordinate System (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * "Representations of spectral coordinates in FITS", * Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. * 2006, A&A, 446, 747 (Paper III) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the spc routines * --------------------------- * These routines implement the part of the FITS WCS standard that deals with * spectral coordinates. They define methods to be used for computing spectral * world coordinates from intermediate world coordinates (a linear * transformation of image pixel coordinates), and vice versa. They are based * on the spcprm struct which contains all information needed for the * computations. The struct contains some members that must be set by the * user, and others that are maintained by these routines, somewhat like a * C++ class but with no encapsulation. * * Routine spcini() is provided to initialize the spcprm struct with default * values, spcfree() reclaims any memory that may have been allocated to store * an error message, and spcprt() prints its contents. * * A setup routine, spcset(), computes intermediate values in the spcprm struct * from parameters in it that were supplied by the user. The struct always * needs to be set up by spcset() but it need not be called explicitly - refer * to the explanation of spcprm::flag. * * spcx2s() and spcs2x() implement the WCS spectral coordinate transformations. * In fact, they are high level driver routines for the lower level spectral * coordinate transformation routines described in spx.h. * * A number of routines are provided to aid in analysing or synthesising sets * of FITS spectral axis keywords: * * - spctype() checks a spectral CTYPEia keyword for validity and returns * information derived from it. * * - Spectral keyword analysis routine spcspxe() computes the values of the * X-type spectral variables for the S-type variables supplied. * * - Spectral keyword synthesis routine, spcxpse(), computes the S-type * variables for the X-types supplied. * * - Given a set of spectral keywords, a translation routine, spctrne(), * produces the corresponding set for the specified spectral CTYPEia. * * - spcaips() translates AIPS-convention spectral CTYPEia and VELREF * keyvalues. * * Spectral variable types - S, P, and X: * -------------------------------------- * A few words of explanation are necessary regarding spectral variable types * in FITS. * * Every FITS spectral axis has three associated spectral variables: * * S-type: the spectral variable in which coordinates are to be * expressed. Each S-type is encoded as four characters and is * linearly related to one of four basic types as follows: * * F: frequency * 'FREQ': frequency * 'AFRQ': angular frequency * 'ENER': photon energy * 'WAVN': wave number * 'VRAD': radio velocity * * W: wavelength in vacuo * 'WAVE': wavelength * 'VOPT': optical velocity * 'ZOPT': redshift * * A: wavelength in air * 'AWAV': wavelength in air * * V: velocity * 'VELO': relativistic velocity * 'BETA': relativistic beta factor * * The S-type forms the first four characters of the CTYPEia keyvalue, * and CRVALia and CDELTia are expressed as S-type quantities so that * they provide a first-order approximation to the S-type variable at * the reference point. * * Note that 'AFRQ', angular frequency, is additional to the variables * defined in WCS Paper III. * * P-type: the basic spectral variable (F, W, A, or V) with which the * S-type variable is associated (see list above). * * For non-grism axes, the P-type is encoded as the eighth character of * CTYPEia. * * X-type: the basic spectral variable (F, W, A, or V) for which the * spectral axis is linear, grisms excluded (see below). * * For non-grism axes, the X-type is encoded as the sixth character of * CTYPEia. * * Grisms: Grism axes have normal S-, and P-types but the axis is linear, * not in any spectral variable, but in a special "grism parameter". * The X-type spectral variable is either W or A for grisms in vacuo or * air respectively, but is encoded as 'w' or 'a' to indicate that an * additional transformation is required to convert to or from the * grism parameter. The spectral algorithm code for grisms also has a * special encoding in CTYPEia, either 'GRI' (in vacuo) or 'GRA' (in air). * * In the algorithm chain, the non-linear transformation occurs between the * X-type and the P-type variables; the transformation between P-type and * S-type variables is always linear. * * When the P-type and X-type variables are the same, the spectral axis is * linear in the S-type variable and the second four characters of CTYPEia * are blank. This can never happen for grism axes. * * As an example, correlating radio spectrometers always produce spectra that * are regularly gridded in frequency; a redshift scale on such a spectrum is * non-linear. The required value of CTYPEia would be 'ZOPT-F2W', where the * desired S-type is 'ZOPT' (redshift), the P-type is necessarily 'W' * (wavelength), and the X-type is 'F' (frequency) by the nature of the * instrument. * * Argument checking: * ------------------ * The input spectral values are only checked for values that would result in * floating point exceptions. In particular, negative frequencies and * wavelengths are allowed, as are velocities greater than the speed of * light. The same is true for the spectral parameters - rest frequency and * wavelength. * * Accuracy: * --------- * No warranty is given for the accuracy of these routines (refer to the * copyright notice); intending users must satisfy for themselves their * adequacy for the intended purpose. However, closure effectively to within * double precision rounding error was demonstrated by test routine tspc.c * which accompanies this software. * * * spcini() - Default constructor for the spcprm struct * ---------------------------------------------------- * spcini() sets all members of a spcprm struct to default values. It should * be used to initialize every spcprm struct. * * Given and returned: * spc struct spcprm* * Spectral transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null spcprm pointer passed. * * * spcfree() - Destructor for the spcprm struct * -------------------------------------------- * spcfree() frees any memory that may have been allocated to store an error * message in the spcprm struct. * * Given: * spc struct spcprm* * Spectral transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null spcprm pointer passed. * * * spcprt() - Print routine for the spcprm struct * ---------------------------------------------- * spcprt() prints the contents of a spcprm struct using wcsprintf(). Mainly * intended for diagnostic purposes. * * Given: * spc const struct spcprm* * Spectral transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null spcprm pointer passed. * * * spcset() - Setup routine for the spcprm struct * ---------------------------------------------- * spcset() sets up a spcprm struct according to information supplied within * it. * * Note that this routine need not be called directly; it will be invoked by * spcx2s() and spcs2x() if spcprm::flag is anything other than a predefined * magic value. * * Given and returned: * spc struct spcprm* * Spectral transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null spcprm pointer passed. * 2: Invalid spectral parameters. * * For returns > 1, a detailed error message is set in * spcprm::err if enabled, see wcserr_enable(). * * * spcx2s() - Transform to spectral coordinates * -------------------------------------------- * spcx2s() transforms intermediate world coordinates to spectral coordinates. * * Given and returned: * spc struct spcprm* * Spectral transformation parameters. * * Given: * nx int Vector length. * * sx int Vector stride. * * sspec int Vector stride. * * x const double[] * Intermediate world coordinates, in SI units. * * Returned: * spec double[] Spectral coordinates, in SI units. * * stat int[] Status return value status for each vector element: * 0: Success. * 1: Invalid value of x. * * Function return value: * int Status return value: * 0: Success. * 1: Null spcprm pointer passed. * 2: Invalid spectral parameters. * 3: One or more of the x coordinates were invalid, * as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * spcprm::err if enabled, see wcserr_enable(). * * * spcs2x() - Transform spectral coordinates * ----------------------------------------- * spcs2x() transforms spectral world coordinates to intermediate world * coordinates. * * Given and returned: * spc struct spcprm* * Spectral transformation parameters. * * Given: * nspec int Vector length. * * sspec int Vector stride. * * sx int Vector stride. * * spec const double[] * Spectral coordinates, in SI units. * * Returned: * x double[] Intermediate world coordinates, in SI units. * * stat int[] Status return value status for each vector element: * 0: Success. * 1: Invalid value of spec. * * Function return value: * int Status return value: * 0: Success. * 1: Null spcprm pointer passed. * 2: Invalid spectral parameters. * 4: One or more of the spec coordinates were * invalid, as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * spcprm::err if enabled, see wcserr_enable(). * * * spctype() - Spectral CTYPEia keyword analysis * --------------------------------------------- * spctype() checks whether a CTYPEia keyvalue is a valid spectral axis type * and if so returns information derived from it relating to the associated S-, * P-, and X-type spectral variables (see explanation above). * * The return arguments are guaranteed not be modified if CTYPEia is not a * valid spectral type; zero-pointers may be specified for any that are not of * interest. * * A deprecated form of this function, spctyp(), lacks the wcserr** parameter. * * Given: * ctype const char[9] * The CTYPEia keyvalue, (eight characters with null * termination). * * Returned: * stype char[] The four-letter name of the S-type spectral variable * copied or translated from ctype. If a non-zero * pointer is given, the array must accomodate a null- * terminated string of length 5. * * scode char[] The three-letter spectral algorithm code copied or * translated from ctype. Logarithmic ('LOG') and * tabular ('TAB') codes are also recognized. If a * non-zero pointer is given, the array must accomodate a * null-terminated string of length 4. * * sname char[] Descriptive name of the S-type spectral variable. * If a non-zero pointer is given, the array must * accomodate a null-terminated string of length 22. * * units char[] SI units of the S-type spectral variable. If a * non-zero pointer is given, the array must accomodate a * null-terminated string of length 8. * * ptype char* Character code for the P-type spectral variable * derived from ctype, one of 'F', 'W', 'A', or 'V'. * * xtype char* Character code for the X-type spectral variable * derived from ctype, one of 'F', 'W', 'A', or 'V'. * Also, 'w' and 'a' are synonymous to 'W' and 'A' for * grisms in vacuo and air respectively. Set to 'L' or * 'T' for logarithmic ('LOG') and tabular ('TAB') axes. * * restreq int* Multivalued flag that indicates whether rest * frequency or wavelength is required to compute * spectral variables for this CTYPEia: * 0: Not required. * 1: Required for the conversion between S- and * P-types (e.g. 'ZOPT-F2W'). * 2: Required for the conversion between P- and * X-types (e.g. 'BETA-W2V'). * 3: Required for the conversion between S- and * P-types, and between P- and X-types, but not * between S- and X-types (this applies only for * 'VRAD-V2F', 'VOPT-V2W', and 'ZOPT-V2W'). * Thus the rest frequency or wavelength is required for * spectral coordinate computations (i.e. between S- and * X-types) only if restreq%3 != 0. * * err struct wcserr ** * For function return values > 1, this struct will * contain a detailed error message. May be NULL if an * error message is not desired. * * Function return value: * int Status return value: * 0: Success. * 2: Invalid spectral parameters (not a spectral * CTYPEia). * * * spcspxe() - Spectral keyword analysis * ------------------------------------ * spcspxe() analyses the CTYPEia and CRVALia FITS spectral axis keyword values * and returns information about the associated X-type spectral variable. * * A deprecated form of this function, spcspx(), lacks the wcserr** parameter. * * Given: * ctypeS const char[9] * Spectral axis type, i.e. the CTYPEia keyvalue, (eight * characters with null termination). For non-grism * axes, the character code for the P-type spectral * variable in the algorithm code (i.e. the eighth * character of CTYPEia) may be set to '?' (it will not * be reset). * * crvalS double Value of the S-type spectral variable at the reference * point, i.e. the CRVALia keyvalue, SI units. * * restfrq, * restwav double Rest frequency [Hz] and rest wavelength in vacuo [m], * only one of which need be given, the other should be * set to zero. Neither are required if the translation * is between wave-characteristic types, or between * velocity-characteristic types. E.g., required for * 'FREQ' -> 'ZOPT-F2W', but not required for * 'VELO-F2V' -> 'ZOPT-F2W'. * * Returned: * ptype char* Character code for the P-type spectral variable * derived from ctypeS, one of 'F', 'W', 'A', or 'V'. * * xtype char* Character code for the X-type spectral variable * derived from ctypeS, one of 'F', 'W', 'A', or 'V'. * Also, 'w' and 'a' are synonymous to 'W' and 'A' for * grisms in vacuo and air respectively; crvalX and dXdS * (see below) will conform to these. * * restreq int* Multivalued flag that indicates whether rest frequency * or wavelength is required to compute spectral * variables for this CTYPEia, as for spctype(). * * crvalX double* Value of the X-type spectral variable at the reference * point, SI units. * * dXdS double* The derivative, dX/dS, evaluated at the reference * point, SI units. Multiply the CDELTia keyvalue by * this to get the pixel spacing in the X-type spectral * coordinate. * * err struct wcserr ** * For function return values > 1, this struct will * contain a detailed error message. May be NULL if an * error message is not desired. * * Function return value: * int Status return value: * 0: Success. * 2: Invalid spectral parameters. * * * spcxpse() - Spectral keyword synthesis * ------------------------------------- * spcxpse(), for the spectral axis type specified and the value provided for * the X-type spectral variable at the reference point, deduces the value of * the FITS spectral axis keyword CRVALia and also the derivative dS/dX which * may be used to compute CDELTia. See above for an explanation of the S-, * P-, and X-type spectral variables. * * A deprecated form of this function, spcxps(), lacks the wcserr** parameter. * * Given: * ctypeS const char[9] * The required spectral axis type, i.e. the CTYPEia * keyvalue, (eight characters with null termination). * For non-grism axes, the character code for the P-type * spectral variable in the algorithm code (i.e. the * eighth character of CTYPEia) may be set to '?' (it * will not be reset). * * crvalX double Value of the X-type spectral variable at the reference * point (N.B. NOT the CRVALia keyvalue), SI units. * * restfrq, * restwav double Rest frequency [Hz] and rest wavelength in vacuo [m], * only one of which need be given, the other should be * set to zero. Neither are required if the translation * is between wave-characteristic types, or between * velocity-characteristic types. E.g., required for * 'FREQ' -> 'ZOPT-F2W', but not required for * 'VELO-F2V' -> 'ZOPT-F2W'. * * Returned: * ptype char* Character code for the P-type spectral variable * derived from ctypeS, one of 'F', 'W', 'A', or 'V'. * * xtype char* Character code for the X-type spectral variable * derived from ctypeS, one of 'F', 'W', 'A', or 'V'. * Also, 'w' and 'a' are synonymous to 'W' and 'A' for * grisms; crvalX and cdeltX must conform to these. * * restreq int* Multivalued flag that indicates whether rest frequency * or wavelength is required to compute spectral * variables for this CTYPEia, as for spctype(). * * crvalS double* Value of the S-type spectral variable at the reference * point (i.e. the appropriate CRVALia keyvalue), SI * units. * * dSdX double* The derivative, dS/dX, evaluated at the reference * point, SI units. Multiply this by the pixel spacing * in the X-type spectral coordinate to get the CDELTia * keyvalue. * * err struct wcserr ** * For function return values > 1, this struct will * contain a detailed error message. May be NULL if an * error message is not desired. * * Function return value: * int Status return value: * 0: Success. * 2: Invalid spectral parameters. * * * spctrne() - Spectral keyword translation * --------------------------------------- * spctrne() translates a set of FITS spectral axis keywords into the * corresponding set for the specified spectral axis type. For example, a * 'FREQ' axis may be translated into 'ZOPT-F2W' and vice versa. * * A deprecated form of this function, spctrn(), lacks the wcserr** parameter. * * Given: * ctypeS1 const char[9] * Spectral axis type, i.e. the CTYPEia keyvalue, (eight * characters with null termination). For non-grism * axes, the character code for the P-type spectral * variable in the algorithm code (i.e. the eighth * character of CTYPEia) may be set to '?' (it will not * be reset). * * crvalS1 double Value of the S-type spectral variable at the reference * point, i.e. the CRVALia keyvalue, SI units. * * cdeltS1 double Increment of the S-type spectral variable at the * reference point, SI units. * * restfrq, * restwav double Rest frequency [Hz] and rest wavelength in vacuo [m], * only one of which need be given, the other should be * set to zero. Neither are required if the translation * is between wave-characteristic types, or between * velocity-characteristic types. E.g., required for * 'FREQ' -> 'ZOPT-F2W', but not required for * 'VELO-F2V' -> 'ZOPT-F2W'. * * Given and returned: * ctypeS2 char[9] Required spectral axis type (eight characters with * null termination). The first four characters are * required to be given and are never modified. The * remaining four, the algorithm code, are completely * determined by, and must be consistent with, ctypeS1 * and the first four characters of ctypeS2. A non-zero * status value will be returned if they are inconsistent * (see below). However, if the final three characters * are specified as "???", or if just the eighth * character is specified as '?', the correct algorithm * code will be substituted (applies for grism axes as * well as non-grism). * * Returned: * crvalS2 double* Value of the new S-type spectral variable at the * reference point, i.e. the new CRVALia keyvalue, SI * units. * * cdeltS2 double* Increment of the new S-type spectral variable at the * reference point, i.e. the new CDELTia keyvalue, SI * units. * * err struct wcserr ** * For function return values > 1, this struct will * contain a detailed error message. May be NULL if an * error message is not desired. * * Function return value: * int Status return value: * 0: Success. * 2: Invalid spectral parameters. * * A status value of 2 will be returned if restfrq or * restwav are not specified when required, or if ctypeS1 * or ctypeS2 are self-inconsistent, or have different * spectral X-type variables. * * * spcaips() - Translate AIPS-convention spectral keywords * ------------------------------------------------------- * spcaips() translates AIPS-convention spectral CTYPEia and VELREF keyvalues. * * Given: * ctypeA const char[9] * CTYPEia keyvalue possibly containing an * AIPS-convention spectral code (eight characters, need * not be null-terminated). * * velref int AIPS-convention VELREF code. It has the following * integer values: * 1: LSR kinematic, originally described simply as * "LSR" without distinction between the kinematic * and dynamic definitions. * 2: Barycentric, originally described as "HEL" * meaning heliocentric. * 3: Topocentric, originally described as "OBS" * meaning geocentric but widely interpreted as * topocentric. * AIPS++ extensions to VELREF are also recognized: * 4: LSR dynamic. * 5: Geocentric. * 6: Source rest frame. * 7: Galactocentric. * * For an AIPS 'VELO' axis, a radio convention velocity * (VRAD) is denoted by adding 256 to VELREF, otherwise * an optical velocity (VOPT) is indicated (this is not * applicable to 'FREQ' or 'FELO' axes). Setting velref * to 0 or 256 chooses between optical and radio velocity * without specifying a Doppler frame, provided that a * frame is encoded in ctypeA. If not, i.e. for * ctypeA = 'VELO', ctype will be returned as 'VELO'. * * VELREF takes precedence over CTYPEia in defining the * Doppler frame, e.g. * = ctypeA = 'VELO-HEL' = velref = 1 * * returns ctype = 'VOPT' with specsys set to 'LSRK'. * * Returned: * ctype char[9] Translated CTYPEia keyvalue, or a copy of ctypeA if no * translation was performed (in which case any trailing * blanks in ctypeA will be replaced with nulls). * * specsys char[9] Doppler reference frame indicated by VELREF or else * by CTYPEia with value corresponding to the SPECSYS * keyvalue in the FITS WCS standard. May be returned * blank if neither specifies a Doppler frame, e.g. * ctypeA = 'FELO' and velref%256 == 0. * * Function return value: * int Status return value: * -1: No translation required (not an error). * 0: Success. * 2: Invalid value of VELREF. * * * spcprm struct - Spectral transformation parameters * -------------------------------------------------- * The spcprm struct contains information required to transform spectral * coordinates. It consists of certain members that must be set by the user * ("given") and others that are set by the WCSLIB routines ("returned"). Some * of the latter are supplied for informational purposes while others are for * internal use only. * * int flag * (Given and returned) This flag must be set to zero whenever any of the * following spcprm structure members are set or changed: * * - spcprm::type, * - spcprm::code, * - spcprm::crval, * - spcprm::restfrq, * - spcprm::restwav, * - spcprm::pv[]. * * This signals the initialization routine, spcset(), to recompute the * returned members of the spcprm struct. spcset() will reset flag to * indicate that this has been done. * * char type[8] * (Given) Four-letter spectral variable type, e.g "ZOPT" for * CTYPEia = 'ZOPT-F2W'. (Declared as char[8] for alignment reasons.) * * char code[4] * (Given) Three-letter spectral algorithm code, e.g "F2W" for * CTYPEia = 'ZOPT-F2W'. * * double crval * (Given) Reference value (CRVALia), SI units. * * double restfrq * (Given) The rest frequency [Hz], and ... * * double restwav * (Given) ... the rest wavelength in vacuo [m], only one of which need be * given, the other should be set to zero. Neither are required if the * X and S spectral variables are both wave-characteristic, or both * velocity-characteristic, types. * * double pv[7] * (Given) Grism parameters for 'GRI' and 'GRA' algorithm codes: * - 0: G, grating ruling density. * - 1: m, interference order. * - 2: alpha, angle of incidence [deg]. * - 3: n_r, refractive index at the reference wavelength, lambda_r. * - 4: n'_r, dn/dlambda at the reference wavelength, lambda_r (/m). * - 5: epsilon, grating tilt angle [deg]. * - 6: theta, detector tilt angle [deg]. * * The remaining members of the spcprm struct are maintained by spcset() and * must not be modified elsewhere: * * double w[6] * (Returned) Intermediate values: * - 0: Rest frequency or wavelength (SI). * - 1: The value of the X-type spectral variable at the reference point * (SI units). * - 2: dX/dS at the reference point (SI units). * The remainder are grism intermediates. * * int isGrism * (Returned) Grism coordinates? * - 0: no, * - 1: in vacuum, * - 2: in air. * * int padding1 * (An unused variable inserted for alignment purposes only.) * * struct wcserr *err * (Returned) If enabled, when an error status is returned this structure * contains detailed information about the error, see wcserr_enable(). * * void *padding2 * (An unused variable inserted for alignment purposes only.) * int (*spxX2P)(SPX_ARGS) * (Returned) The first and ... * int (*spxP2S)(SPX_ARGS) * (Returned) ... the second of the pointers to the transformation * functions in the two-step algorithm chain X -> P -> S in the * pixel-to-spectral direction where the non-linear transformation is from * X to P. The argument list, SPX_ARGS, is defined in spx.h. * * int (*spxS2P)(SPX_ARGS) * (Returned) The first and ... * int (*spxP2X)(SPX_ARGS) * (Returned) ... the second of the pointers to the transformation * functions in the two-step algorithm chain S -> P -> X in the * spectral-to-pixel direction where the non-linear transformation is from * P to X. The argument list, SPX_ARGS, is defined in spx.h. * * * Global variable: const char *spc_errmsg[] - Status return messages * ------------------------------------------------------------------ * Error messages to match the status value returned from each function. * *===========================================================================*/ #ifndef WCSLIB_SPC #define WCSLIB_SPC #include "spx.h" #include "wcserr.h" #ifdef __cplusplus extern "C" { #endif extern const char *spc_errmsg[]; enum spc_errmsg_enum { SPCERR_NO_CHANGE = -1, /* No change. */ SPCERR_SUCCESS = 0, /* Success. */ SPCERR_NULL_POINTER = 1, /* Null spcprm pointer passed. */ SPCERR_BAD_SPEC_PARAMS = 2, /* Invalid spectral parameters. */ SPCERR_BAD_X = 3, /* One or more of x coordinates were invalid. */ SPCERR_BAD_SPEC = 4 /* One or more of the spec coordinates were invalid. */ }; struct spcprm { /* Initialization flag (see the prologue above). */ /*------------------------------------------------------------------------*/ int flag; /* Set to zero to force initialization. */ /* Parameters to be provided (see the prologue above). */ /*------------------------------------------------------------------------*/ char type[8]; /* Four-letter spectral variable type. */ char code[4]; /* Three-letter spectral algorithm code. */ double crval; /* Reference value (CRVALia), SI units. */ double restfrq; /* Rest frequency, Hz. */ double restwav; /* Rest wavelength, m. */ double pv[7]; /* Grism parameters: */ /* 0: G, grating ruling density. */ /* 1: m, interference order. */ /* 2: alpha, angle of incidence. */ /* 3: n_r, refractive index at lambda_r. */ /* 4: n'_r, dn/dlambda at lambda_r. */ /* 5: epsilon, grating tilt angle. */ /* 6: theta, detector tilt angle. */ /* Information derived from the parameters supplied. */ /*------------------------------------------------------------------------*/ double w[6]; /* Intermediate values. */ /* 0: Rest frequency or wavelength (SI). */ /* 1: CRVALX (SI units). */ /* 2: CDELTX/CDELTia = dX/dS (SI units). */ /* The remainder are grism intermediates. */ int isGrism; /* Grism coordinates? 1: vacuum, 2: air. */ int padding1; /* (Dummy inserted for alignment purposes.) */ /* Error handling */ /*------------------------------------------------------------------------*/ struct wcserr *err; /* Private */ /*------------------------------------------------------------------------*/ void *padding2; /* (Dummy inserted for alignment purposes.) */ int (*spxX2P)(SPX_ARGS); /* Pointers to the transformation functions */ int (*spxP2S)(SPX_ARGS); /* in the two-step algorithm chain in the */ /* pixel-to-spectral direction. */ int (*spxS2P)(SPX_ARGS); /* Pointers to the transformation functions */ int (*spxP2X)(SPX_ARGS); /* in the two-step algorithm chain in the */ /* spectral-to-pixel direction. */ }; /* Size of the spcprm struct in int units, used by the Fortran wrappers. */ #define SPCLEN (sizeof(struct spcprm)/sizeof(int)) int spcini(struct spcprm *spc); int spcfree(struct spcprm *spc); int spcprt(const struct spcprm *spc); int spcset(struct spcprm *spc); int spcx2s(struct spcprm *spc, int nx, int sx, int sspec, const double x[], double spec[], int stat[]); int spcs2x(struct spcprm *spc, int nspec, int sspec, int sx, const double spec[], double x[], int stat[]); int spctype(const char ctype[], char stype[], char scode[], char sname[], char units[], char *ptype, char *xtype, int *restreq, struct wcserr **err); int spcspxe(const char ctypeS[], double crvalS, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalX, double *dXdS, struct wcserr **err); int spcxpse(const char ctypeS[], double crvalX, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalS, double *dSdX, struct wcserr **err); int spctrne(const char ctypeS1[], double crvalS1, double cdeltS1, double restfrq, double restwav, char ctypeS2[], double *crvalS2, double *cdeltS2, struct wcserr **err); int spcaips(const char ctypeA[], int velref, char ctype[], char specsys[]); /* Deprecated. */ #define spcini_errmsg spc_errmsg #define spcprt_errmsg spc_errmsg #define spcset_errmsg spc_errmsg #define spcx2s_errmsg spc_errmsg #define spcs2x_errmsg spc_errmsg int spctyp(const char ctype[], char stype[], char scode[], char sname[], char units[], char *ptype, char *xtype, int *restreq); int spcspx(const char ctypeS[], double crvalS, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalX, double *dXdS); int spcxps(const char ctypeS[], double crvalX, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalS, double *dSdX); int spctrn(const char ctypeS1[], double crvalS1, double cdeltS1, double restfrq, double restwav, char ctypeS2[], double *crvalS2, double *cdeltS2); #ifdef __cplusplus } #endif #endif /* WCSLIB_SPC */ pywcs-1.12/wcslib/C/sph.c0000644001153600020070000002607012310355626017256 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: sph.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include "wcstrig.h" #include "sph.h" #define copysign(X, Y) ((Y) < 0.0 ? -fabs(X) : fabs(X)) #define tol 1.0e-5 /*--------------------------------------------------------------------------*/ int sphx2s( const double eul[5], int nphi, int ntheta, int spt, int sll, const double phi[], const double theta[], double lng[], double lat[]) { int mphi, mtheta, rowlen, rowoff; double cosphi, costhe, costhe3, costhe4, dlng, dphi, sinphi, sinthe, sinthe3, sinthe4, x, y, z; register int iphi, itheta; register const double *phip, *thetap; register double *latp, *lngp; if (ntheta > 0) { mphi = nphi; mtheta = ntheta; } else { mphi = 1; mtheta = 1; ntheta = nphi; } /* Check for a simple change in origin of longitude. */ if (eul[4] == 0.0) { if (eul[1] == 0.0) { dlng = fmod(eul[0] + 180.0 - eul[2], 360.0); lngp = lng; latp = lat; phip = phi; thetap = theta; for (itheta = 0; itheta < ntheta; itheta++) { for (iphi = 0; iphi < mphi; iphi++) { *lngp = *phip + dlng; *latp = *thetap; /* Normalize the celestial longitude. */ if (eul[0] >= 0.0) { if (*lngp < 0.0) *lngp += 360.0; } else { if (*lngp > 0.0) *lngp -= 360.0; } if (*lngp > 360.0) { *lngp -= 360.0; } else if (*lngp < -360.0) { *lngp += 360.0; } lngp += sll; latp += sll; phip += spt; thetap += spt; } } } else { dlng = fmod(eul[0] + eul[2], 360.0); lngp = lng; latp = lat; phip = phi; thetap = theta; for (itheta = 0; itheta < ntheta; itheta++) { for (iphi = 0; iphi < mphi; iphi++) { *lngp = dlng - *phip; *latp = -(*thetap); /* Normalize the celestial longitude. */ if (eul[0] >= 0.0) { if (*lngp < 0.0) *lngp += 360.0; } else { if (*lngp > 0.0) *lngp -= 360.0; } if (*lngp > 360.0) { *lngp -= 360.0; } else if (*lngp < -360.0) { *lngp += 360.0; } lngp += sll; latp += sll; phip += spt; thetap += spt; } } } return 0; } /* Do phi dependency. */ phip = phi; rowoff = 0; rowlen = nphi*sll; for (iphi = 0; iphi < nphi; iphi++, rowoff += sll, phip += spt) { dphi = *phip - eul[2]; lngp = lng + rowoff; for (itheta = 0; itheta < mtheta; itheta++) { *lngp = dphi; lngp += rowlen; } } /* Do theta dependency. */ thetap = theta; lngp = lng; latp = lat; for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) { sincosd(*thetap, &sinthe, &costhe); costhe3 = costhe*eul[3]; costhe4 = costhe*eul[4]; sinthe3 = sinthe*eul[3]; sinthe4 = sinthe*eul[4]; for (iphi = 0; iphi < mphi; iphi++, lngp += sll, latp += sll) { dphi = *lngp; sincosd(dphi, &sinphi, &cosphi); /* Compute the celestial longitude. */ x = sinthe4 - costhe3*cosphi; if (fabs(x) < tol) { /* Rearrange formula to reduce roundoff errors. */ x = -cosd(*thetap + eul[1]) + costhe3*(1.0 - cosphi); } y = -costhe*sinphi; if (x != 0.0 || y != 0.0) { dlng = atan2d(y, x); } else { /* Change of origin of longitude. */ if (eul[1] < 90.0) { dlng = dphi + 180.0; } else { dlng = -dphi; } } *lngp = eul[0] + dlng; /* Normalize the celestial longitude. */ if (eul[0] >= 0.0) { if (*lngp < 0.0) *lngp += 360.0; } else { if (*lngp > 0.0) *lngp -= 360.0; } if (*lngp > 360.0) { *lngp -= 360.0; } else if (*lngp < -360.0) { *lngp += 360.0; } /* Compute the celestial latitude. */ if (fmod(dphi,180.0) == 0.0) { *latp = *thetap + cosphi*eul[1]; if (*latp > 90.0) *latp = 180.0 - *latp; if (*latp < -90.0) *latp = -180.0 - *latp; } else { z = sinthe3 + costhe4*cosphi; if (fabs(z) > 0.99) { /* Use an alternative formula for greater accuracy. */ *latp = copysign(acosd(sqrt(x*x+y*y)), z); } else { *latp = asind(z); } } } } return 0; } /*--------------------------------------------------------------------------*/ int sphs2x( const double eul[5], int nlng, int nlat, int sll, int spt, const double lng[], const double lat[], double phi[], double theta[]) { int mlat, mlng, rowlen, rowoff; double coslat, coslat3, coslat4, coslng, dlng, dphi, sinlat, sinlat3, sinlat4, sinlng, x, y, z; register int ilat, ilng; register const double *latp, *lngp; register double *phip, *thetap; if (nlat > 0) { mlng = nlng; mlat = nlat; } else { mlng = 1; mlat = 1; nlat = nlng; } /* Check for a simple change in origin of longitude. */ if (eul[4] == 0.0) { if (eul[1] == 0.0) { dphi = fmod(eul[2] - 180.0 - eul[0], 360.0); lngp = lng; latp = lat; phip = phi; thetap = theta; for (ilat = 0; ilat < nlat; ilat++) { for (ilng = 0; ilng < mlng; ilng++) { *phip = fmod(*lngp + dphi, 360.0); *thetap = *latp; /* Normalize the native longitude. */ if (*phip > 180.0) { *phip -= 360.0; } else if (*phip < -180.0) { *phip += 360.0; } phip += spt; thetap += spt; lngp += sll; latp += sll; } } } else { dphi = fmod(eul[2] + eul[0], 360.0); lngp = lng; latp = lat; phip = phi; thetap = theta; for (ilat = 0; ilat < nlat; ilat++) { for (ilng = 0; ilng < mlng; ilng++) { *phip = fmod(dphi - *lngp, 360.0); *thetap = -(*latp); /* Normalize the native longitude. */ if (*phip > 180.0) { *phip -= 360.0; } else if (*phip < -180.0) { *phip += 360.0; } phip += spt; thetap += spt; lngp += sll; latp += sll; } } } return 0; } /* Do lng dependency. */ lngp = lng; rowoff = 0; rowlen = nlng*spt; for (ilng = 0; ilng < nlng; ilng++, rowoff += spt, lngp += sll) { dlng = *lngp - eul[0]; phip = phi + rowoff; thetap = theta; for (ilat = 0; ilat < mlat; ilat++) { *phip = dlng; phip += rowlen; } } /* Do lat dependency. */ latp = lat; phip = phi; thetap = theta; for (ilat = 0; ilat < nlat; ilat++, latp += sll) { sincosd(*latp, &sinlat, &coslat); coslat3 = coslat*eul[3]; coslat4 = coslat*eul[4]; sinlat3 = sinlat*eul[3]; sinlat4 = sinlat*eul[4]; for (ilng = 0; ilng < mlng; ilng++, phip += spt, thetap += spt) { dlng = *phip; sincosd(dlng, &sinlng, &coslng); /* Compute the native longitude. */ x = sinlat4 - coslat3*coslng; if (fabs(x) < tol) { /* Rearrange formula to reduce roundoff errors. */ x = -cosd(*latp+eul[1]) + coslat3*(1.0 - coslng); } y = -coslat*sinlng; if (x != 0.0 || y != 0.0) { dphi = atan2d(y, x); } else { /* Change of origin of longitude. */ if (eul[1] < 90.0) { dphi = dlng - 180.0; } else { dphi = -dlng; } } *phip = fmod(eul[2] + dphi, 360.0); /* Normalize the native longitude. */ if (*phip > 180.0) { *phip -= 360.0; } else if (*phip < -180.0) { *phip += 360.0; } /* Compute the native latitude. */ if (fmod(dlng,180.0) == 0.0) { *thetap = *latp + coslng*eul[1]; if (*thetap > 90.0) *thetap = 180.0 - *thetap; if (*thetap < -90.0) *thetap = -180.0 - *thetap; } else { z = sinlat3 + coslat4*coslng; if (fabs(z) > 0.99) { /* Use an alternative formula for greater accuracy. */ *thetap = copysign(acosd(sqrt(x*x+y*y)), z); } else { *thetap = asind(z); } } } } return 0; } /*--------------------------------------------------------------------------*/ int sphdpa( int nfield, double lng0, double lat0, const double lng[], const double lat[], double dist[], double pa[]) { int i; double eul[5]; /* Set the Euler angles for the coordinate transformation. */ eul[0] = lng0; eul[1] = 90.0 - lat0; eul[2] = 0.0; eul[3] = cosd(eul[1]); eul[4] = sind(eul[1]); /* Transform field points to the new system. */ sphs2x(eul, nfield, 0, 1, 1, lng, lat, pa, dist); for (i = 0; i < nfield; i++) { /* Angular distance is obtained from latitude in the new frame. */ dist[i] = 90.0 - dist[i]; /* Position angle is obtained from longitude in the new frame. */ pa[i] = -pa[i]; if (pa[i] < -180.0) pa[i] += 360.0; } return 0; } /*--------------------------------------------------------------------------*/ int sphpad( int nfield, double lng0, double lat0, const double dist[], const double pa[], double lng[], double lat[]) { int i; double eul[5]; /* Set the Euler angles for the coordinate transformation. */ eul[0] = lng0; eul[1] = 90.0 - lat0; eul[2] = 0.0; eul[3] = cosd(eul[1]); eul[4] = sind(eul[1]); for (i = 0; i < nfield; i++) { /* Latitude in the new frame is obtained from angular distance. */ lat[i] = 90.0 - dist[i]; /* Longitude in the new frame is obtained from position angle. */ lng[i] = -pa[i]; } /* Transform field points to the old system. */ sphx2s(eul, nfield, 0, 1, 1, lng, lat, lng, lat); return 0; } pywcs-1.12/wcslib/C/sph.h0000644001153600020070000002333012310355626017257 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: sph.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the spherical coordinate * transformations used by the FITS World Coordinate System (WCS) standard. * Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * "Representations of celestial coordinates in FITS", * Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (Paper II) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the sph routines * --------------------------- * The WCS spherical coordinate transformations are implemented via separate * functions, sphx2s() and sphs2x(), for the transformation in each direction. * * A utility function, sphdpa(), computes the angular distances and position * angles from a given point on the sky to a number of other points. sphpad() * does the complementary operation - computes the coordinates of points offset * by the given angular distances and position angles from a given point on the * sky. * * * sphx2s() - Rotation in the pixel-to-world direction * --------------------------------------------------- * sphx2s() transforms native coordinates of a projection to celestial * coordinates. * * Given: * eul const double[5] * Euler angles for the transformation: * 0: Celestial longitude of the native pole [deg]. * 1: Celestial colatitude of the native pole, or * native colatitude of the celestial pole [deg]. * 2: Native longitude of the celestial pole [deg]. * 3: cos(eul[1]) * 4: sin(eul[1]) * * nphi, * ntheta int Vector lengths. * * spt,sxy int Vector strides. * * phi,theta const double[] * Longitude and latitude in the native coordinate * system of the projection [deg]. * * Returned: * lng,lat double[] Celestial longitude and latitude [deg]. These may * refer to the same storage as phi and theta * respectively. * * Function return value: * int Status return value: * 0: Success. * * * sphs2x() - Rotation in the world-to-pixel direction * --------------------------------------------------- * sphs2x() transforms celestial coordinates to the native coordinates of a * projection. * * Given: * eul const double[5] * Euler angles for the transformation: * 0: Celestial longitude of the native pole [deg]. * 1: Celestial colatitude of the native pole, or * native colatitude of the celestial pole [deg]. * 2: Native longitude of the celestial pole [deg]. * 3: cos(eul[1]) * 4: sin(eul[1]) * * nlng,nlat int Vector lengths. * * sll,spt int Vector strides. * * lng,lat const double[] * Celestial longitude and latitude [deg]. * * Returned: * phi,theta double[] Longitude and latitude in the native coordinate system * of the projection [deg]. These may refer to the same * storage as lng and lat respectively. * * Function return value: * int Status return value: * 0: Success. * * * sphdpa() - Compute angular distance and position angle * ------------------------------------------------------ * sphdpa() computes the angular distance and generalized position angle (see * notes) from a "reference" point to a number of "field" points on the sphere. * The points must be specified consistently in any spherical coordinate * system. * * sphdpa() is complementary to sphpad(). * * Given: * nfield int The number of field points. * * lng0,lat0 double Spherical coordinates of the reference point [deg]. * * lng,lat const double[] * Spherical coordinates of the field points [deg]. * * Returned: * dist,pa double[] Angular distances and position angles [deg]. These * may refer to the same storage as lng and lat * respectively. * * Function return value: * int Status return value: * 0: Success. * * Notes: * sphdpa() uses sphs2x() to rotate coordinates so that the reference point * is at the north pole of the new system with the north pole of the old * system at zero longitude in the new. The Euler angles required by * sphs2x() for this rotation are * = eul[0] = lng0; = eul[1] = 90.0 - lat0; = eul[2] = 0.0; * * The angular distance and generalized position angle are readily obtained * from the longitude and latitude of the field point in the new system. * This applies even if the reference point is at one of the poles, in which * case the "position angle" returned is as would be computed for a reference * point at (lng0,+90-epsilon) or (lng0,-90+epsilon), in the limit as epsilon * goes to zero. * * It is evident that the coordinate system in which the two points are * expressed is irrelevant to the determination of the angular separation * between the points. However, this is not true of the generalized position * angle. * * The generalized position angle is here defined as the angle of * intersection of the great circle containing the reference and field points * with that containing the reference point and the pole. It has its normal * meaning when the the reference and field points are specified in * equatorial coordinates (right ascension and declination). * * Interchanging the reference and field points changes the position angle in * a non-intuitive way (because the sum of the angles of a spherical triangle * normally exceeds 180 degrees). * * The position angle is undefined if the reference and field points are * coincident or antipodal. This may be detected by checking for a distance * of 0 or 180 degrees (within rounding tolerance). sphdpa() will return an * arbitrary position angle in such circumstances. * * * sphpad() - Compute field points offset from a given point * --------------------------------------------------------- * sphpad() computes the coordinates of a set of points that are offset by the * specified angular distances and position angles from a given "reference" * point on the sky. The distances and position angles must be specified * consistently in any spherical coordinate system. * * sphpad() is complementary to sphdpa(). * * Given: * nfield int The number of field points. * * lng0,lat0 double Spherical coordinates of the reference point [deg]. * * dist,pa const double[] * Angular distances and position angles [deg]. * * Returned: * lng,lat double[] Spherical coordinates of the field points [deg]. * These may refer to the same storage as dist and pa * respectively. * * Function return value: * int Status return value: * 0: Success. * * Notes: * sphpad() is implemented analogously to sphdpa() although using sphx2s() * for the inverse transformation. In particular, when the reference point * is at one of the poles, "position angle" is interpreted as though the * reference point was at (lng0,+90-epsilon) or (lng0,-90+epsilon), in the * limit as epsilon goes to zero. * * Applying sphpad() with the distances and position angles computed by * sphdpa() should return the original field points. * *===========================================================================*/ #ifndef WCSLIB_SPH #define WCSLIB_SPH #ifdef __cplusplus extern "C" { #endif int sphx2s(const double eul[5], int nphi, int ntheta, int spt, int sxy, const double phi[], const double theta[], double lng[], double lat[]); int sphs2x(const double eul[5], int nlng, int nlat, int sll , int spt, const double lng[], const double lat[], double phi[], double theta[]); int sphdpa(int nfield, double lng0, double lat0, const double lng[], const double lat[], double dist[], double pa[]); int sphpad(int nfield, double lng0, double lat0, const double dist[], const double pa[], double lng[], double lat[]); #ifdef __cplusplus } #endif #endif /* WCSLIB_SPH */ pywcs-1.12/wcslib/C/spx.c0000644001153600020070000006123612310355626017301 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: spx.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include "wcserr.h" #include "wcsmath.h" #include "spx.h" /* Map status return value to message. */ const char *spx_errmsg[] = { "Success", "Null spxprm pointer passed", "Invalid spectral parameters", "Invalid spectral variable", "One or more of the inspec coordinates were invalid"}; /* Convenience macro for invoking wcserr_set(). */ #define SPX_ERRMSG(status) WCSERR_SET(status), spx_errmsg[status] #define C 2.99792458e8 #define h 6.6260755e-34 /*============================================================================ * Spectral cross conversions; given one spectral coordinate it computes all * the others, plus the required derivatives of each with respect to the * others. *===========================================================================*/ int specx(type, spec, restfrq, restwav, spx) const char *type; double spec, restfrq, restwav; struct spxprm *spx; { static const char *function = "specx"; register int k; int haverest; double beta, dwaveawav, gamma, n, s, t, u; struct wcserr **err; if (spx == 0x0) return SPXERR_NULL_POINTER; err = &(spx->err); haverest = 1; if (restfrq == 0.0) { if (restwav == 0.0) { /* No line rest frequency supplied. */ haverest = 0; /* Temporarily set a dummy value for conversions. */ spx->restwav = 1.0; } else { spx->restwav = restwav; } spx->restfrq = C/spx->restwav; } else { spx->restfrq = restfrq; spx->restwav = C/restfrq; } spx->err = 0x0; /* Convert to frequency. */ spx->wavetype = 0; spx->velotype = 0; if (strcmp(type, "FREQ") == 0) { if (spec == 0.0) { return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), "Invalid spectral variable: frequency == 0"); } spx->freq = spec; spx->wavetype = 1; } else if (strcmp(type, "AFRQ") == 0) { if (spec == 0.0) { return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), "Invalid spectral variable: frequency == 0"); } spx->freq = spec/(2.0*PI); spx->wavetype = 1; } else if (strcmp(type, "ENER") == 0) { if (spec == 0.0) { return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), "Invalid spectral variable: frequency == 0"); } spx->freq = spec/h; spx->wavetype = 1; } else if (strcmp(type, "WAVN") == 0) { if (spec == 0.0) { return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), "Invalid spectral variable: frequency == 0"); } spx->freq = spec*C; spx->wavetype = 1; } else if (strcmp(type, "VRAD") == 0) { spx->freq = spx->restfrq*(1.0 - spec/C); spx->velotype = 1; } else if (strcmp(type, "WAVE") == 0) { if (spec == 0.0) { return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), "Invalid spectral variable: frequency == 0"); } spx->freq = C/spec; spx->wavetype = 1; } else if (strcmp(type, "VOPT") == 0) { s = 1.0 + spec/C; if (s == 0.0) { return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), "Invalid spectral variable"); } spx->freq = spx->restfrq/s; spx->velotype = 1; } else if (strcmp(type, "ZOPT") == 0) { s = 1.0 + spec; if (s == 0.0) { return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), "Invalid spectral variable"); } spx->freq = spx->restfrq/s; spx->velotype = 1; } else if (strcmp(type, "AWAV") == 0) { if (spec == 0.0) { return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), "Invalid spectral variable"); } s = 1.0/spec; s *= s; n = 2.554e8 / (0.41e14 - s); n += 294.981e8 / (1.46e14 - s); n += 1.000064328; spx->freq = C/(spec*n); spx->wavetype = 1; } else if (strcmp(type, "VELO") == 0) { beta = spec/C; if (fabs(beta) == 1.0) { return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), "Invalid spectral variable"); } spx->freq = spx->restfrq*(1.0 - beta)/sqrt(1.0 - beta*beta); spx->velotype = 1; } else if (strcmp(type, "BETA") == 0) { if (fabs(spec) == 1.0) { return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), "Invalid spectral variable"); } spx->freq = spx->restfrq*(1.0 - spec)/sqrt(1.0 - spec*spec); spx->velotype = 1; } else { /* Unrecognized type. */ return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_PARAMS), "Unrecognized spectral type '%s'", type); } /* Convert frequency to the other spectral types. */ n = 1.0; for (k = 0; k < 4; k++) { s = n*spx->freq/C; s *= s; t = 0.41e14 - s; u = 1.46e14 - s; n = 1.000064328 + (2.554e8/t + 294.981e8/u); } dwaveawav = n - 2.0*s*(2.554e8/(t*t) + 294.981e8/(u*u)); s = spx->freq/spx->restfrq; spx->ener = spx->freq*h; spx->afrq = spx->freq*(2.0*PI); spx->wavn = spx->freq/C; spx->vrad = C*(1.0 - s); spx->wave = C/spx->freq; spx->awav = spx->wave/n; spx->vopt = C*(1.0/s - 1.0); spx->zopt = spx->vopt/C; spx->velo = C*(1.0 - s*s)/(1.0 + s*s); spx->beta = spx->velo/C; /* Compute the required derivatives. */ gamma = 1.0/sqrt(1.0 - spx->beta*spx->beta); spx->dfreqafrq = 1.0/(2.0*PI); spx->dafrqfreq = 1.0/spx->dfreqafrq; spx->dfreqener = 1.0/h; spx->denerfreq = 1.0/spx->dfreqener; spx->dfreqwavn = C; spx->dwavnfreq = 1.0/spx->dfreqwavn; spx->dfreqvrad = -spx->restfrq/C; spx->dvradfreq = 1.0/spx->dfreqvrad; spx->dfreqwave = -spx->freq/spx->wave; spx->dwavefreq = 1.0/spx->dfreqwave; spx->dfreqawav = spx->dfreqwave * dwaveawav; spx->dawavfreq = 1.0/spx->dfreqawav; spx->dfreqvelo = -gamma*spx->restfrq/(C + spx->velo); spx->dvelofreq = 1.0/spx->dfreqvelo; spx->dwavevopt = spx->restwav/C; spx->dvoptwave = 1.0/spx->dwavevopt; spx->dwavezopt = spx->restwav; spx->dzoptwave = 1.0/spx->dwavezopt; spx->dwaveawav = dwaveawav; spx->dawavwave = 1.0/spx->dwaveawav; spx->dwavevelo = gamma*spx->restwav/(C - spx->velo); spx->dvelowave = 1.0/spx->dwavevelo; spx->dawavvelo = spx->dwavevelo/dwaveawav; spx->dveloawav = 1.0/spx->dawavvelo; spx->dvelobeta = C; spx->dbetavelo = 1.0/spx->dvelobeta; /* Reset values if no line rest frequency was supplied. */ if (haverest) { spx->wavetype = 1; spx->velotype = 1; } else { spx->restfrq = 0.0; spx->restwav = 0.0; if (!spx->wavetype) { /* Don't have wave characteristic types. */ spx->freq = 0.0; spx->afrq = 0.0; spx->ener = 0.0; spx->wavn = 0.0; spx->wave = 0.0; spx->awav = 0.0; spx->dfreqwave = 0.0; spx->dwavefreq = 0.0; spx->dfreqawav = 0.0; spx->dawavfreq = 0.0; spx->dwaveawav = 0.0; spx->dawavwave = 0.0; } else { /* Don't have velocity types. */ spx->vrad = 0.0; spx->vopt = 0.0; spx->zopt = 0.0; spx->velo = 0.0; spx->beta = 0.0; } spx->dfreqvrad = 0.0; spx->dvradfreq = 0.0; spx->dfreqvelo = 0.0; spx->dvelofreq = 0.0; spx->dwavevopt = 0.0; spx->dvoptwave = 0.0; spx->dwavezopt = 0.0; spx->dzoptwave = 0.0; spx->dwavevelo = 0.0; spx->dvelowave = 0.0; spx->dawavvelo = 0.0; spx->dveloawav = 0.0; } return 0; } /*============================================================================ * Conversions between frequency and vacuum wavelength. *===========================================================================*/ int freqwave(dummy, nfreq, sfreq, swave, freq, wave, stat) double dummy; int nfreq, sfreq, swave; const double freq[]; double wave[]; int stat[]; { int status = 0; register int ifreq, *statp; register const double *freqp; register double *wavep; freqp = freq; wavep = wave; statp = stat; for (ifreq = 0; ifreq < nfreq; ifreq++) { if (*freqp != 0.0) { *wavep = C/(*freqp); *(statp++) = 0; } else { *(statp++) = 1; status = SPXERR_BAD_INSPEC_COORD; } freqp += sfreq; wavep += swave; } return status; } /*--------------------------------------------------------------------------*/ int wavefreq(dummy, nwave, swave, sfreq, wave, freq, stat) double dummy; int nwave, swave, sfreq; const double wave[]; double freq[]; int stat[]; { int status = 0; register int iwave, *statp; register const double *wavep; register double *freqp; wavep = wave; freqp = freq; statp = stat; for (iwave = 0; iwave < nwave; iwave++) { if (*wavep != 0.0) { *freqp = C/(*wavep); *(statp++) = 0; } else { *(statp++) = 1; status = SPXERR_BAD_INSPEC_COORD; } wavep += swave; freqp += sfreq; } return status; } /*============================================================================ * Conversions between frequency and air wavelength. *===========================================================================*/ int freqawav(dummy, nfreq, sfreq, sawav, freq, awav, stat) double dummy; int nfreq, sfreq, sawav; const double freq[]; double awav[]; int stat[]; { int status; if ((status = freqwave(dummy, nfreq, sfreq, sawav, freq, awav, stat))) { return status; } return waveawav(dummy, nfreq, sawav, sawav, awav, awav, stat); } /*--------------------------------------------------------------------------*/ int awavfreq(dummy, nawav, sawav, sfreq, awav, freq, stat) double dummy; int nawav, sawav, sfreq; const double awav[]; double freq[]; int stat[]; { int status; if ((status = awavwave(dummy, nawav, sawav, sfreq, awav, freq, stat))) { return status; } return wavefreq(dummy, nawav, sfreq, sfreq, freq, freq, stat); } /*============================================================================ * Conversions between frequency and relativistic velocity. *===========================================================================*/ int freqvelo(restfrq, nfreq, sfreq, svelo, freq, velo, stat) double restfrq; int nfreq, sfreq, svelo; const double freq[]; double velo[]; int stat[]; { double r, s; register int ifreq, *statp; register const double *freqp; register double *velop; r = restfrq*restfrq; freqp = freq; velop = velo; statp = stat; for (ifreq = 0; ifreq < nfreq; ifreq++) { s = *freqp * *freqp; *velop = C*(r - s)/(r + s); *(statp++) = 0; freqp += sfreq; velop += svelo; } return 0; } /*--------------------------------------------------------------------------*/ int velofreq(restfrq, nvelo, svelo, sfreq, velo, freq, stat) double restfrq; int nvelo, svelo, sfreq; const double velo[]; double freq[]; int stat[]; { int status = 0; double s; register int ivelo, *statp; register const double *velop; register double *freqp; velop = velo; freqp = freq; statp = stat; for (ivelo = 0; ivelo < nvelo; ivelo++) { s = C + *velop; if (s != 0.0) { *freqp = restfrq*sqrt((C - *velop)/s); *(statp++) = 0; } else { *(statp++) = 1; status = SPXERR_BAD_INSPEC_COORD; } velop += svelo; freqp += sfreq; } return status; } /*============================================================================ * Conversions between vacuum wavelength and air wavelength. *===========================================================================*/ int waveawav(dummy, nwave, swave, sawav, wave, awav, stat) double dummy; int nwave, swave, sawav; const double wave[]; double awav[]; int stat[]; { int status = 0; double n, s; register int iwave, k, *statp; register const double *wavep; register double *awavp; wavep = wave; awavp = awav; statp = stat; for (iwave = 0; iwave < nwave; iwave++) { if (*wavep != 0.0) { n = 1.0; for (k = 0; k < 4; k++) { s = n/(*wavep); s *= s; n = 2.554e8 / (0.41e14 - s); n += 294.981e8 / (1.46e14 - s); n += 1.000064328; } *awavp = (*wavep)/n; *(statp++) = 0; } else { *(statp++) = 1; status = SPXERR_BAD_INSPEC_COORD; } wavep += swave; awavp += sawav; } return status; } /*--------------------------------------------------------------------------*/ int awavwave(dummy, nawav, sawav, swave, awav, wave, stat) double dummy; int nawav, sawav, swave; const double awav[]; double wave[]; int stat[]; { int status = 0; double n, s; register int iawav, *statp; register const double *awavp; register double *wavep; awavp = awav; wavep = wave; statp = stat; for (iawav = 0; iawav < nawav; iawav++) { if (*awavp != 0.0) { s = 1.0/(*awavp); s *= s; n = 2.554e8 / (0.41e14 - s); n += 294.981e8 / (1.46e14 - s); n += 1.000064328; *wavep = (*awavp)*n; *(statp++) = 0; } else { *(statp++) = 1; status = SPXERR_BAD_INSPEC_COORD; } awavp += sawav; wavep += swave; } return status; } /*============================================================================ * Conversions between vacuum wavelength and relativistic velocity. *===========================================================================*/ int wavevelo(restwav, nwave, swave, svelo, wave, velo, stat) double restwav; int nwave, swave, svelo; const double wave[]; double velo[]; int stat[]; { double r, s; register int iwave, *statp; register const double *wavep; register double *velop; r = restwav*restwav; wavep = wave; velop = velo; statp = stat; for (iwave = 0; iwave < nwave; iwave++) { s = *wavep * *wavep; *velop = C*(s - r)/(s + r); *(statp++) = 0; wavep += swave; velop += svelo; } return 0; } /*--------------------------------------------------------------------------*/ int velowave(restwav, nvelo, svelo, swave, velo, wave, stat) double restwav; int nvelo, svelo, swave; const double velo[]; double wave[]; int stat[]; { int status = 0; double s; register int ivelo, *statp; register const double *velop; register double *wavep; velop = velo; wavep = wave; statp = stat; for (ivelo = 0; ivelo < nvelo; ivelo++) { s = C - *velop; if (s != 0.0) { *wavep = restwav*sqrt((C + *velop)/s); *(statp++) = 0; } else { *(statp++) = 1; status = SPXERR_BAD_INSPEC_COORD; } velop += svelo; wavep += swave; } return status; } /*============================================================================ * Conversions between air wavelength and relativistic velocity. *===========================================================================*/ int awavvelo(dummy, nawav, sawav, svelo, awav, velo, stat) double dummy; int nawav, sawav, svelo; const double awav[]; double velo[]; int stat[]; { int status; if ((status = awavwave(dummy, nawav, sawav, svelo, awav, velo, stat))) { return status; } return wavevelo(dummy, nawav, svelo, svelo, velo, velo, stat); } /*--------------------------------------------------------------------------*/ int veloawav(dummy, nvelo, svelo, sawav, velo, awav, stat) double dummy; int nvelo, svelo, sawav; const double velo[]; double awav[]; int stat[]; { int status; if ((status = velowave(dummy, nvelo, svelo, sawav, velo, awav, stat))) { return status; } return waveawav(dummy, nvelo, sawav, sawav, awav, awav, stat); } /*============================================================================ * Conversions between frequency and angular frequency. *===========================================================================*/ int freqafrq(dummy, nfreq, sfreq, safrq, freq, afrq, stat) double dummy; int nfreq, sfreq, safrq; const double freq[]; double afrq[]; int stat[]; { register int ifreq, *statp; register const double *freqp; register double *afrqp; freqp = freq; afrqp = afrq; statp = stat; for (ifreq = 0; ifreq < nfreq; ifreq++) { *afrqp = (*freqp)*(2.0*PI); *(statp++) = 0; freqp += sfreq; afrqp += safrq; } return 0; } /*--------------------------------------------------------------------------*/ int afrqfreq(dummy, nafrq, safrq, sfreq, afrq, freq, stat) double dummy; int nafrq, safrq, sfreq; const double afrq[]; double freq[]; int stat[]; { register int iafrq, *statp; register const double *afrqp; register double *freqp; afrqp = afrq; freqp = freq; statp = stat; for (iafrq = 0; iafrq < nafrq; iafrq++) { *freqp = (*afrqp)/(2.0*PI); *(statp++) = 0; afrqp += safrq; freqp += sfreq; } return 0; } /*============================================================================ * Conversions between frequency and energy. *===========================================================================*/ int freqener(dummy, nfreq, sfreq, sener, freq, ener, stat) double dummy; int nfreq, sfreq, sener; const double freq[]; double ener[]; int stat[]; { register int ifreq, *statp; register const double *freqp; register double *enerp; freqp = freq; enerp = ener; statp = stat; for (ifreq = 0; ifreq < nfreq; ifreq++) { *enerp = (*freqp)*h; *(statp++) = 0; freqp += sfreq; enerp += sener; } return 0; } /*--------------------------------------------------------------------------*/ int enerfreq(dummy, nener, sener, sfreq, ener, freq, stat) double dummy; int nener, sener, sfreq; const double ener[]; double freq[]; int stat[]; { register int iener, *statp; register const double *enerp; register double *freqp; enerp = ener; freqp = freq; statp = stat; for (iener = 0; iener < nener; iener++) { *freqp = (*enerp)/h; *(statp++) = 0; enerp += sener; freqp += sfreq; } return 0; } /*============================================================================ * Conversions between frequency and wave number. *===========================================================================*/ int freqwavn(dummy, nfreq, sfreq, swavn, freq, wavn, stat) double dummy; int nfreq, sfreq, swavn; const double freq[]; double wavn[]; int stat[]; { register int ifreq, *statp; register const double *freqp; register double *wavnp; freqp = freq; wavnp = wavn; statp = stat; for (ifreq = 0; ifreq < nfreq; ifreq++) { *wavnp = (*freqp)/C; *(statp++) = 0; freqp += sfreq; wavnp += swavn; } return 0; } /*--------------------------------------------------------------------------*/ int wavnfreq(dummy, nwavn, swavn, sfreq, wavn, freq, stat) double dummy; int nwavn, swavn, sfreq; const double wavn[]; double freq[]; int stat[]; { register int iwavn, *statp; register const double *wavnp; register double *freqp; wavnp = wavn; freqp = freq; statp = stat; for (iwavn = 0; iwavn < nwavn; iwavn++) { *freqp = (*wavnp)*C; *(statp++) = 0; wavnp += swavn; freqp += sfreq; } return 0; } /*============================================================================ * Conversions between frequency and radio velocity. *===========================================================================*/ int freqvrad(restfrq, nfreq, sfreq, svrad, freq, vrad, stat) double restfrq; int nfreq, sfreq, svrad; const double freq[]; double vrad[]; int stat[]; { double r; register int ifreq, *statp; register const double *freqp; register double *vradp; if (restfrq == 0.0) { return SPXERR_BAD_SPEC_PARAMS; } r = C/restfrq; freqp = freq; vradp = vrad; statp = stat; for (ifreq = 0; ifreq < nfreq; ifreq++) { *vradp = r*(restfrq - *freqp); *(statp++) = 0; freqp += sfreq; vradp += svrad; } return 0; } /*--------------------------------------------------------------------------*/ int vradfreq(restfrq, nvrad, svrad, sfreq, vrad, freq, stat) double restfrq; int nvrad, svrad, sfreq; const double vrad[]; double freq[]; int stat[]; { double r; register int ivrad, *statp; register const double *vradp; register double *freqp; r = restfrq/C; vradp = vrad; freqp = freq; statp = stat; for (ivrad = 0; ivrad < nvrad; ivrad++) { *freqp = r*(C - *vradp); *(statp++) = 0; vradp += svrad; freqp += sfreq; } return 0; } /*============================================================================ * Conversions between vacuum wavelength and optical velocity. *===========================================================================*/ int wavevopt(restwav, nwave, swave, svopt, wave, vopt, stat) double restwav; int nwave, swave, svopt; const double wave[]; double vopt[]; int stat[]; { double r; register int iwave, *statp; register const double *wavep; register double *voptp; if (restwav == 0.0) { return SPXERR_BAD_SPEC_PARAMS; } r = C/restwav; wavep = wave; voptp = vopt; statp = stat; for (iwave = 0; iwave < nwave; iwave++) { *voptp = r*(*wavep) - C; *(statp++) = 0; wavep += swave; voptp += svopt; } return 0; } /*--------------------------------------------------------------------------*/ int voptwave(restwav, nvopt, svopt, swave, vopt, wave, stat) double restwav; int nvopt, svopt, swave; const double vopt[]; double wave[]; int stat[]; { double r; register int ivopt, *statp; register const double *voptp; register double *wavep; r = restwav/C; voptp = vopt; wavep = wave; statp = stat; for (ivopt = 0; ivopt < nvopt; ivopt++) { *wavep = r*(C + *voptp); *(statp++) = 0; voptp += svopt; wavep += swave; } return 0; } /*============================================================================ * Conversions between vacuum wavelength and redshift. *===========================================================================*/ int wavezopt(restwav, nwave, swave, szopt, wave, zopt, stat) double restwav; int nwave, swave, szopt; const double wave[]; double zopt[]; int stat[]; { double r; register int iwave, *statp; register const double *wavep; register double *zoptp; if (restwav == 0.0) { return SPXERR_BAD_SPEC_PARAMS; } r = 1.0/restwav; wavep = wave; zoptp = zopt; statp = stat; for (iwave = 0; iwave < nwave; iwave++) { *zoptp = r*(*wavep) - 1.0; *(statp++) = 0; wavep += swave; zoptp += szopt; } return 0; } /*--------------------------------------------------------------------------*/ int zoptwave(restwav, nzopt, szopt, swave, zopt, wave, stat) double restwav; int nzopt, szopt, swave; const double zopt[]; double wave[]; int stat[]; { register int izopt, *statp; register const double *zoptp; register double *wavep; zoptp = zopt; wavep = wave; statp = stat; for (izopt = 0; izopt < nzopt; izopt++) { *wavep = restwav*(1.0 + *zoptp); *(statp++) = 0; zoptp += szopt; wavep += swave; } return 0; } /*============================================================================ * Conversions between relativistic velocity and beta (= v/c). *===========================================================================*/ int velobeta(dummy, nvelo, svelo, sbeta, velo, beta, stat) double dummy; int nvelo, svelo, sbeta; const double velo[]; double beta[]; int stat[]; { register int ivelo, *statp; register const double *velop; register double *betap; velop = velo; betap = beta; statp = stat; for (ivelo = 0; ivelo < nvelo; ivelo++) { *betap = (*velop)/C; *(statp++) = 0; velop += svelo; betap += sbeta; } return 0; } /*--------------------------------------------------------------------------*/ int betavelo(dummy, nbeta, sbeta, svelo, beta, velo, stat) double dummy; int nbeta, sbeta, svelo; const double beta[]; double velo[]; int stat[]; { register int ibeta, *statp; register const double *betap; register double *velop; betap = beta; velop = velo; statp = stat; for (ibeta = 0; ibeta < nbeta; ibeta++) { *velop = (*betap)*C; *(statp++) = 0; betap += sbeta; velop += svelo; } return 0; } pywcs-1.12/wcslib/C/spx.h0000644001153600020070000004712212310355626017304 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: spx.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the spectral coordinate systems * recognized by the FITS World Coordinate System (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * "Representations of spectral coordinates in FITS", * Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. * 2006, A&A, 446, 747 (Paper III) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the spx routines * --------------------------- * specx() is a scalar routine that, given one spectral variable (e.g. * frequency), computes all the others (e.g. wavelength, velocity, etc.) plus * the required derivatives of each with respect to the others. The results * are returned in the spxprm struct. * * The remaining routines are all vector conversions from one spectral * variable to another. The API of these functions only differ in whether the * rest frequency or wavelength need be supplied. * * Non-linear: * - freqwave() frequency -> vacuum wavelength * - wavefreq() vacuum wavelength -> frequency * * - freqawav() frequency -> air wavelength * - awavfreq() air wavelength -> frequency * * - freqvelo() frequency -> relativistic velocity * - velofreq() relativistic velocity -> frequency * * - waveawav() vacuum wavelength -> air wavelength * - awavwave() air wavelength -> vacuum wavelength * * - wavevelo() vacuum wavelength -> relativistic velocity * - velowave() relativistic velocity -> vacuum wavelength * * - awavvelo() air wavelength -> relativistic velocity * - veloawav() relativistic velocity -> air wavelength * * Linear: * - freqafrq() frequency -> angular frequency * - afrqfreq() angular frequency -> frequency * * - freqener() frequency -> energy * - enerfreq() energy -> frequency * * - freqwavn() frequency -> wave number * - wavnfreq() wave number -> frequency * * - freqvrad() frequency -> radio velocity * - vradfreq() radio velocity -> frequency * * - wavevopt() vacuum wavelength -> optical velocity * - voptwave() optical velocity -> vacuum wavelength * * - wavezopt() vacuum wavelength -> redshift * - zoptwave() redshift -> vacuum wavelength * * - velobeta() relativistic velocity -> beta (= v/c) * - betavelo() beta (= v/c) -> relativistic velocity * * These are the workhorse routines, to be used for fast transformations. * Conversions may be done "in place" by calling the routine with the output * vector set to the input. * * Argument checking: * ------------------ * The input spectral values are only checked for values that would result * in floating point exceptions. In particular, negative frequencies and * wavelengths are allowed, as are velocities greater than the speed of * light. The same is true for the spectral parameters - rest frequency and * wavelength. * * Accuracy: * --------- * No warranty is given for the accuracy of these routines (refer to the * copyright notice); intending users must satisfy for themselves their * adequacy for the intended purpose. However, closure effectively to within * double precision rounding error was demonstrated by test routine tspec.c * which accompanies this software. * * * specx() - Spectral cross conversions (scalar) * --------------------------------------------- * Given one spectral variable specx() computes all the others, plus the * required derivatives of each with respect to the others. * * Given: * type const char* * The type of spectral variable given by spec, FREQ, * AFRQ, ENER, WAVN, VRAD, WAVE, VOPT, ZOPT, AWAV, VELO, * or BETA (case sensitive). * * spec double The spectral variable given, in SI units. * * restfrq, * restwav double Rest frequency [Hz] or rest wavelength in vacuo [m], * only one of which need be given. The other should be * set to zero. If both are zero, only a subset of the * spectral variables can be computed, the remainder are * set to zero. Specifically, given one of FREQ, AFRQ, * ENER, WAVN, WAVE, or AWAV the others can be computed * without knowledge of the rest frequency. Likewise, * VRAD, VOPT, ZOPT, VELO, and BETA. * * Given and returned: * specs struct spxprm* * Data structure containing all spectral variables and * their derivatives, in SI units. * * Function return value: * int Status return value: * 0: Success. * 1: Null spxprm pointer passed. * 2: Invalid spectral parameters. * 3: Invalid spectral variable. * * For returns > 1, a detailed error message is set in * spxprm::err if enabled, see wcserr_enable(). * * freqafrq(), afrqfreq(), freqener(), enerfreq(), freqwavn(), wavnfreq(), * freqwave(), wavefreq(), freqawav(), awavfreq(), waveawav(), awavwave(), * velobeta(), and betavelo() implement vector conversions between wave-like * or velocity-like spectral types (i.e. conversions that do not need the rest * frequency or wavelength). They all have the same API. * * * freqafrq() - Convert frequency to angular frequency (vector) * ------------------------------------------------------------ * freqafrq() converts frequency to angular frequency. * * Given: * param double Ignored. * * nspec int Vector length. * * instep, * outstep int Vector strides. * * inspec const double[] * Input spectral variables, in SI units. * * Returned: * outspec double[] Output spectral variables, in SI units. * * stat int[] Status return value for each vector element: * 0: Success. * 1: Invalid value of inspec. * * Function return value: * int Status return value: * 0: Success. * 2: Invalid spectral parameters. * 4: One or more of the inspec coordinates were * invalid, as indicated by the stat vector. * * * freqvelo(), velofreq(), freqvrad(), and vradfreq() implement vector * conversions between frequency and velocity spectral types. They all have * the same API. * * * freqvelo() - Convert frequency to relativistic velocity (vector) * ---------------------------------------------------------------- * freqvelo() converts frequency to relativistic velocity. * * Given: * param double Rest frequency [Hz]. * * nspec int Vector length. * * instep, * outstep int Vector strides. * * inspec const double[] * Input spectral variables, in SI units. * * Returned: * outspec double[] Output spectral variables, in SI units. * * stat int[] Status return value for each vector element: * 0: Success. * 1: Invalid value of inspec. * * Function return value: * int Status return value: * 0: Success. * 2: Invalid spectral parameters. * 4: One or more of the inspec coordinates were * invalid, as indicated by the stat vector. * * * wavevelo(), velowave(), awavvelo(), veloawav(), wavevopt(), voptwave(), * wavezopt(), and zoptwave() implement vector conversions between wavelength * and velocity spectral types. They all have the same API. * * * wavevelo() - Conversions between wavelength and velocity types (vector) * ----------------------------------------------------------------------- * wavevelo() converts vacuum wavelength to relativistic velocity. * * Given: * param double Rest wavelength in vacuo [m]. * * nspec int Vector length. * * instep, * outstep int Vector strides. * * inspec const double[] * Input spectral variables, in SI units. * * Returned: * outspec double[] Output spectral variables, in SI units. * * stat int[] Status return value for each vector element: * 0: Success. * 1: Invalid value of inspec. * * Function return value: * int Status return value: * 0: Success. * 2: Invalid spectral parameters. * 4: One or more of the inspec coordinates were * invalid, as indicated by the stat vector. * * * spxprm struct - Spectral variables and their derivatives * -------------------------------------------------------- * The spxprm struct contains the value of all spectral variables and their * derivatives. It is used solely by specx() which constructs it from * information provided via its function arguments. * * This struct should be considered read-only, no members need ever be set nor * should ever be modified by the user. * * double restfrq * (Returned) Rest frequency [Hz]. * * double restwav * (Returned) Rest wavelength [m]. * * int wavetype * (Returned) True if wave types have been computed, and ... * * int velotype * (Returned) ... true if velocity types have been computed; types are * defined below. * * If one or other of spxprm::restfrq and spxprm::restwav is given * (non-zero) then all spectral variables may be computed. If both are * given, restfrq is used. If restfrq and restwav are both zero, only wave * characteristic xor velocity type spectral variables may be computed * depending on the variable given. These flags indicate what is * available. * * double freq * (Returned) Frequency [Hz] (wavetype). * * double afrq * (Returned) Angular frequency [rad/s] (wavetype). * * double ener * (Returned) Photon energy [J] (wavetype). * * double wavn * (Returned) Wave number [/m] (wavetype). * * double vrad * (Returned) Radio velocity [m/s] (velotype). * * double wave * (Returned) Vacuum wavelength [m] (wavetype). * * double vopt * (Returned) Optical velocity [m/s] (velotype). * * double zopt * (Returned) Redshift [dimensionless] (velotype). * * double awav * (Returned) Air wavelength [m] (wavetype). * * double velo * (Returned) Relativistic velocity [m/s] (velotype). * * double beta * (Returned) Relativistic beta [dimensionless] (velotype). * * double dfreqafrq * (Returned) Derivative of frequency with respect to angular frequency * [/rad] (constant, = 1 / 2*pi), and ... * double dafrqfreq * (Returned) ... vice versa [rad] (constant, = 2*pi, always available). * * double dfreqener * (Returned) Derivative of frequency with respect to photon energy * [/J/s] (constant, = 1/h), and ... * double denerfreq * (Returned) ... vice versa [Js] (constant, = h, Planck's constant, * always available). * * double dfreqwavn * (Returned) Derivative of frequency with respect to wave number [m/s] * (constant, = c, the speed of light in vacuuo), and ... * double dwavnfreq * (Returned) ... vice versa [s/m] (constant, = 1/c, always available). * * double dfreqvrad * (Returned) Derivative of frequency with respect to radio velocity [/m], * and ... * double dvradfreq * (Returned) ... vice versa [m] (wavetype && velotype). * * double dfreqwave * (Returned) Derivative of frequency with respect to vacuum wavelength * [/m/s], and ... * double dwavefreq * (Returned) ... vice versa [m s] (wavetype). * * double dfreqawav * (Returned) Derivative of frequency with respect to air wavelength, * [/m/s], and ... * double dawavfreq * (Returned) ... vice versa [m s] (wavetype). * * double dfreqvelo * (Returned) Derivative of frequency with respect to relativistic * velocity [/m], and ... * double dvelofreq * (Returned) ... vice versa [m] (wavetype && velotype). * * double dwavevopt * (Returned) Derivative of vacuum wavelength with respect to optical * velocity [s], and ... * double dvoptwave * (Returned) ... vice versa [/s] (wavetype && velotype). * * double dwavezopt * (Returned) Derivative of vacuum wavelength with respect to redshift [m], * and ... * double dzoptwave * (Returned) ... vice versa [/m] (wavetype && velotype). * * double dwaveawav * (Returned) Derivative of vacuum wavelength with respect to air * wavelength [dimensionless], and ... * double dawavwave * (Returned) ... vice versa [dimensionless] (wavetype). * * double dwavevelo * (Returned) Derivative of vacuum wavelength with respect to relativistic * velocity [s], and ... * double dvelowave * (Returned) ... vice versa [/s] (wavetype && velotype). * * double dawavvelo * (Returned) Derivative of air wavelength with respect to relativistic * velocity [s], and ... * double dveloawav * (Returned) ... vice versa [/s] (wavetype && velotype). * * double dvelobeta * (Returned) Derivative of relativistic velocity with respect to * relativistic beta [m/s] (constant, = c, the speed of light in vacuu0), * and ... * double dbetavelo * (Returned) ... vice versa [s/m] (constant, = 1/c, always available). * * struct wcserr *err * (Returned) If enabled, when an error status is returned this struct * contains detailed information about the error, see wcserr_enable(). * * void *padding * (An unused variable inserted for alignment purposes only.) * * Global variable: const char *spx_errmsg[] - Status return messages * ------------------------------------------------------------------ * Error messages to match the status value returned from each function. * *===========================================================================*/ #ifndef WCSLIB_SPEC #define WCSLIB_SPEC #ifdef __cplusplus extern "C" { #endif #include "wcserr.h" extern const char *spx_errmsg[]; enum spx_errmsg { SPXERR_SUCCESS = 0, /* Success. */ SPXERR_NULL_POINTER = 1, /* Null spxprm pointer passed. */ SPXERR_BAD_SPEC_PARAMS = 2, /* Invalid spectral parameters. */ SPXERR_BAD_SPEC_VAR = 3, /* Invalid spectral variable. */ SPXERR_BAD_INSPEC_COORD = 4 /* One or more of the inspec coordinates were invalid. */ }; struct spxprm { double restfrq, restwav; /* Rest frequency [Hz] and wavelength [m]. */ int wavetype, velotype; /* True if wave/velocity types have been */ /* computed; types are defined below. */ /* Spectral variables computed by specx(). */ /*------------------------------------------------------------------------*/ double freq, /* wavetype: Frequency [Hz]. */ afrq, /* wavetype: Angular frequency [rad/s]. */ ener, /* wavetype: Photon energy [J]. */ wavn, /* wavetype: Wave number [/m]. */ vrad, /* velotype: Radio velocity [m/s]. */ wave, /* wavetype: Vacuum wavelength [m]. */ vopt, /* velotype: Optical velocity [m/s]. */ zopt, /* velotype: Redshift. */ awav, /* wavetype: Air wavelength [m]. */ velo, /* velotype: Relativistic velocity [m/s]. */ beta; /* velotype: Relativistic beta. */ /* Derivatives of spectral variables computed by specx(). */ /*------------------------------------------------------------------------*/ double dfreqafrq, dafrqfreq, /* Constant, always available. */ dfreqener, denerfreq, /* Constant, always available. */ dfreqwavn, dwavnfreq, /* Constant, always available. */ dfreqvrad, dvradfreq, /* wavetype && velotype. */ dfreqwave, dwavefreq, /* wavetype. */ dfreqawav, dawavfreq, /* wavetype. */ dfreqvelo, dvelofreq, /* wavetype && velotype. */ dwavevopt, dvoptwave, /* wavetype && velotype. */ dwavezopt, dzoptwave, /* wavetype && velotype. */ dwaveawav, dawavwave, /* wavetype. */ dwavevelo, dvelowave, /* wavetype && velotype. */ dawavvelo, dveloawav, /* wavetype && velotype. */ dvelobeta, dbetavelo; /* Constant, always available. */ /* Error handling */ /*------------------------------------------------------------------------*/ struct wcserr *err; /* Private */ /*------------------------------------------------------------------------*/ void *padding; /* (Dummy inserted for alignment purposes.) */ }; /* Size of the spxprm struct in int units, used by the Fortran wrappers. */ #define SPXLEN (sizeof(struct spxprm)/sizeof(int)) int specx(const char *type, double spec, double restfrq, double restwav, struct spxprm *specs); /* For use in declaring function prototypes, e.g. in spcprm. */ #define SPX_ARGS double param, int nspec, int instep, int outstep, \ const double inspec[], double outspec[], int stat[] int freqafrq(SPX_ARGS); int afrqfreq(SPX_ARGS); int freqener(SPX_ARGS); int enerfreq(SPX_ARGS); int freqwavn(SPX_ARGS); int wavnfreq(SPX_ARGS); int freqwave(SPX_ARGS); int wavefreq(SPX_ARGS); int freqawav(SPX_ARGS); int awavfreq(SPX_ARGS); int waveawav(SPX_ARGS); int awavwave(SPX_ARGS); int velobeta(SPX_ARGS); int betavelo(SPX_ARGS); int freqvelo(SPX_ARGS); int velofreq(SPX_ARGS); int freqvrad(SPX_ARGS); int vradfreq(SPX_ARGS); int wavevelo(SPX_ARGS); int velowave(SPX_ARGS); int awavvelo(SPX_ARGS); int veloawav(SPX_ARGS); int wavevopt(SPX_ARGS); int voptwave(SPX_ARGS); int wavezopt(SPX_ARGS); int zoptwave(SPX_ARGS); #ifdef __cplusplus } #endif #endif /* WCSLIB_SPEC */ pywcs-1.12/wcslib/C/tab.c0000644001153600020070000012074112310355626017232 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tab.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include #include "wcserr.h" #include "wcsmath.h" #include "wcsprintf.h" #include "tab.h" const int TABSET = 137; /* Map status return value to message. */ const char *tab_errmsg[] = { "Success", "Null tabprm pointer passed", "Memory allocation failed", "Invalid tabular parameters", "One or more of the x coordinates were invalid", "One or more of the world coordinates were invalid"}; /* Convenience macro for invoking wcserr_set(). */ #define TAB_ERRMSG(status) WCSERR_SET(status), tab_errmsg[status] /*--------------------------------------------------------------------------*/ int tabini(int alloc, int M, const int K[], struct tabprm *tab) { static const char *function = "tabini"; int k, m, N; double *dp; struct wcserr **err; if (tab == 0x0) return TABERR_NULL_POINTER; /* Initialize error message handling. */ err = &(tab->err); if (tab->err && tab->flag != -1) { free(tab->err); } tab->err = 0x0; if (M <= 0) { return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), "M must be positive, got %d", M); } /* Determine the total number of elements in the coordinate array. */ if (K) { N = M; for (m = 0; m < M; m++) { if (K[m] < 0) { return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), "Invalid tabular parameters: Each element of K must be " "non-negative, got %d", K[m]); } N *= K[m]; } } else { /* Axis lengths as yet unknown. */ N = 0; } /* Initialize memory management. */ if (tab->flag == -1 || tab->m_flag != TABSET) { tab->m_flag = 0; tab->m_M = 0; tab->m_N = 0; tab->m_K = 0x0; tab->m_map = 0x0; tab->m_crval = 0x0; tab->m_index = 0x0; tab->m_indxs = 0x0; tab->m_coord = 0x0; } else { /* Clear any outstanding signals set by wcstab(). */ for (m = 0; m < tab->m_M; m++) { if (tab->m_indxs[m] == (double *)0x1) tab->m_indxs[m] = 0x0; } if (tab->m_coord == (double *)0x1) tab->m_coord = 0x0; } if (tab->flag == -1) { tab->sense = 0x0; tab->p0 = 0x0; tab->delta = 0x0; tab->extrema = 0x0; tab->set_M = 0; } /* Allocate memory for arrays if required. */ if (alloc || tab->K == 0x0 || tab->map == 0x0 || tab->crval == 0x0 || tab->index == 0x0 || tab->coord == 0x0) { /* Was sufficient allocated previously? */ if (tab->m_flag == TABSET && (tab->m_M < M || tab->m_N < N)) { /* No, free it. */ tabfree(tab); } if (alloc || tab->K == 0x0) { if (tab->m_K) { /* In case the caller fiddled with it. */ tab->K = tab->m_K; } else { if (!(tab->K = calloc(M, sizeof(int)))) { return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } tab->m_flag = TABSET; tab->m_M = M; tab->m_K = tab->K; } } if (alloc || tab->map == 0x0) { if (tab->m_map) { /* In case the caller fiddled with it. */ tab->map = tab->m_map; } else { if (!(tab->map = calloc(M, sizeof(int)))) { return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } tab->m_flag = TABSET; tab->m_M = M; tab->m_map = tab->map; } } if (alloc || tab->crval == 0x0) { if (tab->m_crval) { /* In case the caller fiddled with it. */ tab->crval = tab->m_crval; } else { if (!(tab->crval = calloc(M, sizeof(double)))) { return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } tab->m_flag = TABSET; tab->m_M = M; tab->m_crval = tab->crval; } } if (alloc || tab->index == 0x0) { if (tab->m_index) { /* In case the caller fiddled with it. */ tab->index = tab->m_index; } else { if (!(tab->index = calloc(M, sizeof(double *)))) { return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } tab->m_flag = TABSET; tab->m_M = M; tab->m_N = N; tab->m_index = tab->index; if (!(tab->m_indxs = calloc(M, sizeof(double *)))) { return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } /* Recall that calloc() initializes these pointers to zero. */ if (K) { for (m = 0; m < M; m++) { if (K[m]) { if (!(tab->index[m] = calloc(K[m], sizeof(double)))) { return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } tab->m_indxs[m] = tab->index[m]; } } } } } if (alloc || tab->coord == 0x0) { if (tab->m_coord) { /* In case the caller fiddled with it. */ tab->coord = tab->m_coord; } else if (N) { if (!(tab->coord = calloc(N, sizeof(double)))) { return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } tab->m_flag = TABSET; tab->m_M = M; tab->m_N = N; tab->m_coord = tab->coord; } } } tab->flag = 0; tab->M = M; /* Set defaults. */ for (m = 0; m < M; m++) { tab->map[m] = -1; tab->crval[m] = 0.0; if (K) { tab->K[m] = K[m]; if ((dp = tab->index[m])) { for (k = 0; k < K[m]; k++) { *(dp++) = k; } } } else { tab->K[m] = 0; } } /* Initialize the coordinate array. */ for (dp = tab->coord; dp < tab->coord + N; dp++) { *dp = UNDEFINED; } return 0; } /*--------------------------------------------------------------------------*/ int tabmem(struct tabprm *tab) { static const char *function = "tabmem"; int m, M, N; struct wcserr **err; if (tab == 0x0) return TABERR_NULL_POINTER; err = &(tab->err); if (tab->M == 0 || tab->K == 0x0) { /* Should have been set by this time. */ return wcserr_set(WCSERR_SET(TABERR_MEMORY), "Null pointers in tabprm struct"); } N = M = tab->M; for (m = 0; m < M; m++) { if (tab->K[m] < 0) { return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), "Invalid tabular parameters: Each element of K must be " "non-negative, got %d", M); } N *= tab->K[m]; } if (tab->m_M == 0) { tab->m_M = M; } else if (tab->m_M < M) { /* Only possible if the user changed M. */ return wcserr_set(WCSERR_SET(TABERR_MEMORY), "tabprm struct inconsistent"); } if (tab->m_N == 0) { tab->m_N = N; } else if (tab->m_N < N) { /* Only possible if the user changed K[]. */ return wcserr_set(WCSERR_SET(TABERR_MEMORY), "tabprm struct inconsistent"); } if (tab->m_K == 0x0) { if ((tab->m_K = tab->K)) { tab->m_flag = TABSET; } } if (tab->m_map == 0x0) { if ((tab->m_map = tab->map)) { tab->m_flag = TABSET; } } if (tab->m_crval == 0x0) { if ((tab->m_crval = tab->crval)) { tab->m_flag = TABSET; } } if (tab->m_index == 0x0) { if ((tab->m_index = tab->index)) { tab->m_flag = TABSET; } } for (m = 0; m < tab->m_M; m++) { if (tab->m_indxs[m] == 0x0 || tab->m_indxs[m] == (double *)0x1) { if ((tab->m_indxs[m] = tab->index[m])) { tab->m_flag = TABSET; } } } if (tab->m_coord == 0x0 || tab->m_coord == (double *)0x1) { if ((tab->m_coord = tab->coord)) { tab->m_flag = TABSET; } } tab->flag = 0; return 0; } /*--------------------------------------------------------------------------*/ int tabcpy(int alloc, const struct tabprm *tabsrc, struct tabprm *tabdst) { static const char *function = "tabcpy"; int k, m, M, n, N, status; double *dstp, *srcp; struct wcserr **err; if (tabsrc == 0x0) return TABERR_NULL_POINTER; if (tabdst == 0x0) return TABERR_NULL_POINTER; err = &(tabdst->err); M = tabsrc->M; if (M <= 0) { return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), "M must be positive, got %d", M); } if ((status = tabini(alloc, M, tabsrc->K, tabdst))) { return status; } N = M; for (m = 0; m < M; m++) { tabdst->map[m] = tabsrc->map[m]; tabdst->crval[m] = tabsrc->crval[m]; N *= tabsrc->K[m]; } for (m = 0; m < M; m++) { if ((srcp = tabsrc->index[m])) { dstp = tabdst->index[m]; for (k = 0; k < tabsrc->K[m]; k++) { *(dstp++) = *(srcp++); } } } srcp = tabsrc->coord; dstp = tabdst->coord; for (n = 0; n < N; n++) { *(dstp++) = *(srcp++); } return 0; } /*--------------------------------------------------------------------------*/ int tabfree(struct tabprm *tab) { int m; if (tab == 0x0) return TABERR_NULL_POINTER; if (tab->flag != -1) { /* Clear any outstanding signals set by wcstab(). */ for (m = 0; m < tab->m_M; m++) { if (tab->m_indxs[m] == (double *)0x1) tab->m_indxs[m] = 0x0; } if (tab->m_coord == (double *)0x1) tab->m_coord = 0x0; /* Free memory allocated by tabini(). */ if (tab->m_flag == TABSET) { if (tab->K == tab->m_K) tab->K = 0x0; if (tab->map == tab->m_map) tab->map = 0x0; if (tab->crval == tab->m_crval) tab->crval = 0x0; if (tab->index == tab->m_index) tab->index = 0x0; if (tab->coord == tab->m_coord) tab->coord = 0x0; if (tab->m_K) free(tab->m_K); if (tab->m_map) free(tab->m_map); if (tab->m_crval) free(tab->m_crval); if (tab->m_index) { for (m = 0; m < tab->m_M; m++) { if (tab->m_indxs[m]) free(tab->m_indxs[m]); } free(tab->m_index); free(tab->m_indxs); } if (tab->m_coord) free(tab->m_coord); } /* Free memory allocated by tabset(). */ if (tab->sense) free(tab->sense); if (tab->p0) free(tab->p0); if (tab->delta) free(tab->delta); if (tab->extrema) free(tab->extrema); } tab->m_flag = 0; tab->m_M = 0; tab->m_N = 0; tab->m_K = 0x0; tab->m_map = 0x0; tab->m_crval = 0x0; tab->m_index = 0x0; tab->m_indxs = 0x0; tab->m_coord = 0x0; tab->sense = 0x0; tab->p0 = 0x0; tab->delta = 0x0; tab->extrema = 0x0; tab->set_M = 0; if (tab->err) free(tab->err); tab->err = 0x0; tab->flag = 0; return 0; } /*--------------------------------------------------------------------------*/ int tabprt(const struct tabprm *tab) { char *cp, text[128]; int j, k, m, n, nd; double *dp; if (tab == 0x0) return TABERR_NULL_POINTER; if (tab->flag != TABSET) { wcsprintf("The tabprm struct is UNINITIALIZED.\n"); return 0; } wcsprintf(" flag: %d\n", tab->flag); wcsprintf(" M: %d\n", tab->M); /* Array dimensions. */ WCSPRINTF_PTR(" K: ", tab->K, "\n"); wcsprintf(" "); for (m = 0; m < tab->M; m++) { wcsprintf("%6d", tab->K[m]); } wcsprintf("\n"); /* Map vector. */ WCSPRINTF_PTR(" map: ", tab->map, "\n"); wcsprintf(" "); for (m = 0; m < tab->M; m++) { wcsprintf("%6d", tab->map[m]); } wcsprintf("\n"); /* Reference index value. */ WCSPRINTF_PTR(" crval: ", tab->crval, "\n"); wcsprintf(" "); for (m = 0; m < tab->M; m++) { wcsprintf(" %- 11.5g", tab->crval[m]); } wcsprintf("\n"); /* Index vectors. */ WCSPRINTF_PTR(" index: ", tab->index, "\n"); for (m = 0; m < tab->M; m++) { wcsprintf(" index[%d]: ", m); WCSPRINTF_PTR("", tab->index[m], ""); if (tab->index[m]) { for (k = 0; k < tab->K[m]; k++) { if (k%5 == 0) { wcsprintf("\n "); } wcsprintf(" %- 11.5g", tab->index[m][k]); } wcsprintf("\n"); } } /* Coordinate array. */ WCSPRINTF_PTR(" coord: ", tab->coord, "\n"); dp = tab->coord; for (n = 0; n < tab->nc; n++) { /* Array index. */ j = n; cp = text; for (m = 0; m < tab->M; m++) { nd = (tab->K[m] < 10) ? 1 : 2; sprintf(cp, ",%*d", nd, j % tab->K[m] + 1); j /= tab->K[m]; cp += strlen(cp); } wcsprintf(" (*%s)", text); for (m = 0; m < tab->M; m++) { wcsprintf(" %- 11.5g", *(dp++)); } wcsprintf("\n"); } wcsprintf(" nc: %d\n", tab->nc); WCSPRINTF_PTR(" sense: ", tab->sense, "\n"); if (tab->sense) { wcsprintf(" "); for (m = 0; m < tab->M; m++) { wcsprintf("%6d", tab->sense[m]); } wcsprintf("\n"); } WCSPRINTF_PTR(" p0: ", tab->p0, "\n"); if (tab->p0) { wcsprintf(" "); for (m = 0; m < tab->M; m++) { wcsprintf("%6d", tab->p0[m]); } wcsprintf("\n"); } WCSPRINTF_PTR(" delta: ", tab->delta, "\n"); if (tab->delta) { wcsprintf(" "); for (m = 0; m < tab->M; m++) { wcsprintf(" %- 11.5g", tab->delta[m]); } wcsprintf("\n"); } WCSPRINTF_PTR(" extrema: ", tab->extrema, "\n"); dp = tab->extrema; for (n = 0; n < tab->nc/tab->K[0]; n++) { /* Array index. */ j = n; cp = text; *cp = '\0'; for (m = 1; m < tab->M; m++) { nd = (tab->K[m] < 10) ? 1 : 2; sprintf(cp, ",%*d", nd, j % tab->K[m] + 1); j /= tab->K[m]; cp += strlen(cp); } wcsprintf(" (*,*%s)", text); for (m = 0; m < 2*tab->M; m++) { if (m == tab->M) wcsprintf("-> "); wcsprintf(" %- 11.5g", *(dp++)); } wcsprintf("\n"); } WCSPRINTF_PTR(" err: ", tab->err, "\n"); if (tab->err) { wcserr_prt(tab->err, " "); } /* Memory management. */ wcsprintf(" m_flag: %d\n", tab->m_flag); wcsprintf(" m_M: %d\n", tab->m_M); wcsprintf(" m_N: %d\n", tab->m_N); WCSPRINTF_PTR(" m_K: ", tab->m_K, ""); if (tab->m_K == tab->K) wcsprintf(" (= K)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_map: ", tab->m_map, ""); if (tab->m_map == tab->map) wcsprintf(" (= map)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_crval: ", tab->m_crval, ""); if (tab->m_crval == tab->crval) wcsprintf(" (= crval)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_index: ", tab->m_index, ""); if (tab->m_index == tab->index) wcsprintf(" (= index)"); wcsprintf("\n"); for (m = 0; m < tab->M; m++) { wcsprintf(" m_indxs[%d]: ", m); WCSPRINTF_PTR("", tab->m_indxs[m], ""); if (tab->m_indxs[m] == tab->index[m]) wcsprintf(" (= index[%d])", m); wcsprintf("\n"); } WCSPRINTF_PTR(" m_coord: ", tab->m_coord, ""); if (tab->m_coord == tab->coord) wcsprintf(" (= coord)"); wcsprintf("\n"); return 0; } /*--------------------------------------------------------------------------*/ int tabset(struct tabprm *tab) { static const char *function = "tabset"; int i, ic, k, *Km, m, M, ne; double *dcrd, *dmax, *dmin, dPsi, dval, *Psi; struct wcserr **err; if (tab == 0x0) return TABERR_NULL_POINTER; err = &(tab->err); /* Check the number of tabular coordinate axes. */ if ((M = tab->M) < 1) { return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), "Invalid tabular parameters: M must be positive, got %d", M); } /* Check the axis lengths. */ if (!tab->K) { return wcserr_set(WCSERR_SET(TABERR_MEMORY), "Null pointers in tabprm struct"); } tab->nc = 1; for (m = 0; m < M; m++) { if (tab->K[m] < 1) { return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), "Invalid tabular parameters: Each element of K must be positive, " "got %d", tab->K[m]); } /* Number of coordinate vectors in the coordinate array. */ tab->nc *= tab->K[m]; } /* Check that the map vector is sensible. */ if (!tab->map) { return wcserr_set(WCSERR_SET(TABERR_MEMORY), "Null pointers in tabprm struct"); } for (m = 0; m < M; m++) { i = tab->map[m]; if (i < 0) { return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), "Invalid tabular parameters: Each element of map must be " "non-negative, got %d", i); } } /* Check memory allocation for the remaining vectors. */ if (!tab->crval || !tab->index || !tab->coord) { return wcserr_set(WCSERR_SET(TABERR_MEMORY), "Null pointers in tabprm struct"); } /* Take memory if signalled to by wcstab(). */ for (m = 0; m < tab->m_M; m++) { if (tab->m_indxs[m] == (double *)0x1 && (tab->m_indxs[m] = tab->index[m])) { tab->m_flag = TABSET; } } if (tab->m_coord == (double *)0x1 && (tab->m_coord = tab->coord)) { tab->m_flag = TABSET; } /* Allocate memory for work vectors. */ if (tab->flag != TABSET || tab->set_M < M) { /* Free memory that may have been allocated previously. */ if (tab->sense) free(tab->sense); if (tab->p0) free(tab->p0); if (tab->delta) free(tab->delta); if (tab->extrema) free(tab->extrema); /* Allocate memory for internal arrays. */ if (!(tab->sense = calloc(M, sizeof(int)))) { return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } if (!(tab->p0 = calloc(M, sizeof(int)))) { free(tab->sense); return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } if (!(tab->delta = calloc(M, sizeof(double)))) { free(tab->sense); free(tab->p0); return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } ne = M * tab->nc * 2 / tab->K[0]; if (!(tab->extrema = calloc(ne, sizeof(double)))) { free(tab->sense); free(tab->p0); free(tab->delta); return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); } tab->set_M = M; } /* Check that the index vectors are monotonic. */ Km = tab->K; for (m = 0; m < M; m++, Km++) { tab->sense[m] = 0; if (*Km > 1) { if ((Psi = tab->index[m]) == 0x0) { /* Default indexing. */ tab->sense[m] = 1; } else { for (k = 0; k < *Km-1; k++) { switch (tab->sense[m]) { case 0: if (Psi[k] < Psi[k+1]) { /* Monotonic increasing. */ tab->sense[m] = 1; } else if (Psi[k] > Psi[k+1]) { /* Monotonic decreasing. */ tab->sense[m] = -1; } break; case 1: if (Psi[k] > Psi[k+1]) { /* Should be monotonic increasing. */ free(tab->sense); free(tab->p0); free(tab->delta); free(tab->extrema); return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), "Invalid tabular parameters: Index vectors are not " "monotonically increasing"); } break; case -1: if (Psi[k] < Psi[k+1]) { /* Should be monotonic decreasing. */ free(tab->sense); free(tab->p0); free(tab->delta); free(tab->extrema); return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), "Invalid tabular parameters: Index vectors are not " "monotonically decreasing"); } break; } } } if (tab->sense[m] == 0) { free(tab->sense); free(tab->p0); free(tab->delta); free(tab->extrema); return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), "Invalid tabular parameters: Index vectors are not monotonic"); } } } /* Find the extremal values of the coordinate elements in each row. */ dcrd = tab->coord; dmin = tab->extrema; dmax = tab->extrema + M; for (ic = 0; ic < tab->nc; ic += tab->K[0]) { for (m = 0; m < M; m++, dcrd++) { if (tab->K[0] > 1) { /* Extrapolate a little before the start of the row. */ Psi = tab->index[0]; if (Psi == 0x0) { dPsi = 1.0; } else { dPsi = Psi[1] - Psi[0]; } dval = *dcrd; if (dPsi != 0.0) { dval -= 0.5 * (*(dcrd+M) - *dcrd)/dPsi; } *(dmax+m) = *(dmin+m) = dval; } else { *(dmax+m) = *(dmin+m) = *dcrd; } } dcrd -= M; for (i = 0; i < tab->K[0]; i++) { for (m = 0; m < M; m++, dcrd++) { if (*(dmax+m) < *dcrd) *(dmax+m) = *dcrd; if (*(dmin+m) > *dcrd) *(dmin+m) = *dcrd; if (tab->K[0] > 1 && i == tab->K[0]-1) { /* Extrapolate a little beyond the end of the row. */ Psi = tab->index[0]; if (Psi == 0x0) { dPsi = 1.0; } else { dPsi = Psi[i] - Psi[i-1]; } dval = *dcrd; if (dPsi != 0.0) { dval += 0.5 * (*dcrd - *(dcrd-M))/dPsi; } if (*(dmax+m) < dval) *(dmax+m) = dval; if (*(dmin+m) > dval) *(dmin+m) = dval; } } } dmin += 2*M; dmax += 2*M; } tab->flag = TABSET; return 0; } /*--------------------------------------------------------------------------*/ int tabx2s( struct tabprm *tab, int ncoord, int nelem, const double x[], double world[], int stat[]) { static const char *function = "tabx2s"; int i, iv, k, *Km, m, M, n, nv, offset, p1, status; double *coord, *Psi, psi_m, upsilon, wgt; register int *statp; register const double *xp; register double *wp; struct wcserr **err; if (tab == 0x0) return TABERR_NULL_POINTER; err = &(tab->err); /* Initialize if required. */ if (tab->flag != TABSET) { if ((status = tabset(tab))) return status; } /* This is used a lot. */ M = tab->M; status = 0; xp = x; wp = world; statp = stat; for (n = 0; n < ncoord; n++) { /* Determine the indexes. */ Km = tab->K; for (m = 0; m < M; m++, Km++) { /* N.B. psi_m and Upsilon_m are 1-relative FITS indexes. */ i = tab->map[m]; psi_m = *(xp+i) + tab->crval[m]; Psi = tab->index[m]; if (Psi == 0x0) { /* Default indexing is simple. */ upsilon = psi_m; } else { /* To ease confusion, decrement Psi so that we can use 1-relative C array indexing to match the 1-relative FITS indexing. */ Psi--; if (*Km == 1) { /* Index vector is degenerate. */ if (Psi[1]-0.5 <= psi_m && psi_m <= Psi[1]+0.5) { upsilon = psi_m; } else { *statp = 1; status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); goto next; } } else { /* Interpolate in the indexing vector. */ if (tab->sense[m] == 1) { /* Monotonic increasing index values. */ if (psi_m < Psi[1]) { if (Psi[1] - 0.5*(Psi[2]-Psi[1]) <= psi_m) { /* Allow minor extrapolation. */ k = 1; } else { /* Index is out of range. */ *statp = 1; status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); goto next; } } else if (Psi[*Km] < psi_m) { if (psi_m <= Psi[*Km] + 0.5*(Psi[*Km]-Psi[*Km-1])) { /* Allow minor extrapolation. */ k = *Km - 1; } else { /* Index is out of range. */ *statp = 1; status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); goto next; } } else { for (k = 1; k < *Km; k++) { if (psi_m < Psi[k]) { continue; } if (Psi[k] == psi_m && psi_m < Psi[k+1]) { break; } if (Psi[k] < psi_m && psi_m <= Psi[k+1]) { break; } } } } else { /* Monotonic decreasing index values. */ if (psi_m > Psi[1]) { if (Psi[1] + 0.5*(Psi[1]-Psi[2]) >= psi_m) { /* Allow minor extrapolation. */ k = 1; } else { /* Index is out of range. */ *statp = 1; status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); goto next; } } else if (psi_m < Psi[*Km]) { if (Psi[*Km] - 0.5*(Psi[*Km-1]-Psi[*Km]) <= psi_m) { /* Allow minor extrapolation. */ k = *Km - 1; } else { /* Index is out of range. */ *statp = 1; status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); goto next; } } else { for (k = 1; k < *Km; k++) { if (psi_m > Psi[k]) { continue; } if (Psi[k] == psi_m && psi_m > Psi[k+1]) { break; } if (Psi[k] > psi_m && psi_m >= Psi[k+1]) { break; } } } } upsilon = k + (psi_m - Psi[k]) / (Psi[k+1] - Psi[k]); } } if (upsilon < 0.5 || upsilon > *Km + 0.5) { /* Index out of range. */ *statp = 1; status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); goto next; } /* Fiducial array indices and fractional offset. p1 is 1-relative while tab::p0 is 0-relative. */ p1 = (int)floor(upsilon); tab->p0[m] = p1 - 1; tab->delta[m] = upsilon - p1; if (p1 == 0) { tab->p0[m] += 1; tab->delta[m] -= 1.0; } else if (p1 == *Km && *Km > 1) { tab->p0[m] -= 1; tab->delta[m] += 1.0; } } /* Now interpolate in the coordinate array; the M-dimensional linear */ /* interpolation algorithm is described in Sect. 3.4 of WCS Paper IV. */ for (m = 0; m < M; m++) { i = tab->map[m]; *(wp+i) = 0.0; } /* Loop over the 2^M vertices surrounding P. */ nv = 1 << M; for (iv = 0; iv < nv; iv++) { /* Locate vertex in the coordinate array and compute its weight. */ offset = 0; wgt = 1.0; for (m = M-1; m >= 0; m--) { offset *= tab->K[m]; offset += tab->p0[m]; if (iv & (1 << m)) { if (tab->K[m] > 1) offset++; wgt *= tab->delta[m]; } else { wgt *= 1.0 - tab->delta[m]; } } if (wgt == 0.0) continue; /* Add the contribution from this vertex to each element. */ coord = tab->coord + offset*M; for (m = 0; m < M; m++) { i = tab->map[m]; *(wp+i) += *(coord++) * wgt; } if (wgt == 1.0) break; } *statp = 0; next: xp += nelem; wp += nelem; statp++; } return status; } /*--------------------------------------------------------------------------*/ int tabs2x( struct tabprm* tab, int ncoord, int nelem, const double world[], double x[], int stat[]) { static const char *function = "tabs2x"; int tabedge(struct tabprm *); int tabrow(struct tabprm *, const double *); int tabvox(struct tabprm *, const double *, int, double **, unsigned int *); int edge, i, ic, iv, k, *Km, M, m, n, nv, offset, status; double *dcrd, delta, *Psi, psi_m, **tabcoord, upsilon; register int *statp; register const double *wp; register double *xp; struct wcserr **err; if (tab == 0x0) return TABERR_NULL_POINTER; err = &(tab->err); /* Initialize if required. */ if (tab->flag != TABSET) { if ((status = tabset(tab))) return status; } /* This is used a lot. */ M = tab->M; if (M > 1) { nv = 1 << M; tabcoord = calloc(nv, sizeof(double *)); } status = 0; wp = world; xp = x; statp = stat; for (n = 0; n < ncoord; n++) { /* Locate this coordinate in the coordinate array. */ edge = 0; for (m = 0; m < M; m++) { tab->p0[m] = 0; } for (ic = 0; ic < tab->nc; ic++) { if (tab->p0[0] == 0) { /* New row, could it contain a solution? */ if (edge || tabrow(tab, wp)) { /* No, skip it. */ ic += tab->K[0]; tab->p0[1]++; edge = tabedge(tab); /* Because ic will be incremented when the loop is reentered. */ ic--; continue; } } if (M == 1) { /* Deal with the one-dimensional case separately for efficiency. */ if (*wp == tab->coord[0]) { tab->p0[0] = 0; tab->delta[0] = 0.0; break; } else if (ic < tab->nc - 1) { if (((tab->coord[ic] <= *wp && *wp <= tab->coord[ic+1]) || (tab->coord[ic] >= *wp && *wp >= tab->coord[ic+1])) && (tab->index[0] == 0x0 || tab->index[0][ic] != tab->index[0][ic+1])) { tab->p0[0] = ic; tab->delta[0] = (*wp - tab->coord[ic]) / (tab->coord[ic+1] - tab->coord[ic]); break; } } } else { /* Multi-dimensional tables are harder. */ if (!edge) { /* Addresses of the coordinates for each corner of the "voxel". */ for (iv = 0; iv < nv; iv++) { offset = 0; for (m = M-1; m >= 0; m--) { offset *= tab->K[m]; offset += tab->p0[m]; if ((iv & (1 << m)) && (tab->K[m] > 1)) offset++; } tabcoord[iv] = tab->coord + offset*M; } if (tabvox(tab, wp, 0, tabcoord, 0x0) == 0) { /* Found a solution. */ break; } } /* Next voxel. */ tab->p0[0]++; edge = tabedge(tab); } } if (ic == tab->nc) { /* Coordinate not found; allow minor extrapolation. */ if (M == 1) { /* Should there be a solution? */ if (tab->extrema[0] <= *wp && *wp <= tab->extrema[1]) { dcrd = tab->coord; for (i = 0; i < 2; i++) { if (i) dcrd += tab->K[0] - 2; delta = (*wp - *dcrd) / (*(dcrd+1) - *dcrd); if (i == 0) { if (-0.5 <= delta && delta <= 0.0) { tab->p0[0] = 0; tab->delta[0] = delta; ic = 0; break; } } else { if (1.0 <= delta && delta <= 1.5) { tab->p0[0] = tab->K[0] - 1; tab->delta[0] = delta - 1.0; ic = 0; } } } } } else { /* Multi-dimensional tables. */ /* >>> TBD <<< */ } } if (ic == tab->nc) { /* Coordinate not found. */ *statp = 1; status = wcserr_set(TAB_ERRMSG(TABERR_BAD_WORLD)); } else { /* Determine the intermediate world coordinates. */ Km = tab->K; for (m = 0; m < M; m++, Km++) { /* N.B. Upsilon_m and psi_m are 1-relative FITS indexes. */ upsilon = (tab->p0[m] + 1) + tab->delta[m]; if (upsilon < 0.5 || upsilon > *Km + 0.5) { /* Index out of range. */ *statp = 1; status = wcserr_set(TAB_ERRMSG(TABERR_BAD_WORLD)); } else { /* Do inverse lookup of the index vector. */ Psi = tab->index[m]; if (Psi == 0x0) { /* Default indexing. */ psi_m = upsilon; } else { /* Decrement Psi and use 1-relative C array indexing to match the 1-relative FITS indexing. */ Psi--; if (*Km == 1) { /* Degenerate index vector. */ psi_m = Psi[1]; } else { k = (int)(upsilon); psi_m = Psi[k]; if (k < *Km) { psi_m += (upsilon - k) * (Psi[k+1] - Psi[k]); } } } i = tab->map[m]; xp[i] = psi_m - tab->crval[m]; } } *statp = 0; } wp += nelem; xp += nelem; statp++; } if (M > 1) free(tabcoord); return status; } /*---------------------------------------------------------------------------- * Convenience routine to deal with of edge effects in tabprm::p0. *---------------------------------------------------------------------------*/ int tabedge(struct tabprm* tab) { int edge, *Km, m; edge = 0; Km = tab->K; for (m = 0; m < tab->M; m++, Km++) { if (tab->p0[m] == *Km) { /* p0 has been incremented beyond the end of the row, point it to the next one. */ tab->p0[m] = 0; tab->p0[m+1]++; } else if (tab->p0[m] == *Km - 1 && *Km > 1) { /* p0 is sitting at the end of a non-degenerate row. */ edge = 1; } } return edge; } /*---------------------------------------------------------------------------- * Quick test to see whether the world coordinate indicated by wp could lie * somewhere along (or near) the row of the image indexed by tabprm::p0. * Return 0 if so, 1 otherwise. * * tabprm::p0 selects a particular row of the image, p0[0] being ignored (i.e. * treated as zero). Adjacent rows that delimit a row of "voxels" are formed * by incrementing elements other than p0[0] in all binary combinations. N.B. * these are not the same as the voxels (pixels) that are indexed by, and * centred on, integral pixel coordinates in FITS. * * To see why it is necessary to examine the adjacent rows, consider the 2-D * case where the first world coordinate element is constant along each row. * If the first element of wp has value 0.5, and its value in the row indexed * by p0 has value 0, and in the next row it has value 1, then it is clear that * the solution lies in neither row but somewhere between them. Thus both rows * will be involved in finding the solution. * * tabprm::extrema is the address of the first element of a 1-D array that * records the minimum and maximum value of each element of the coordinate * vector in each row of the coordinate array, treated as though it were * defined as * * double extrema[K_M]...[K_2][2][M] * * The minimum is recorded in the first element of the compressed K_1 * dimension, then the maximum. *---------------------------------------------------------------------------*/ int tabrow(struct tabprm* tab, const double *wp) { int iv, M, m, nv, offset; unsigned int eq, gt, lt; const double tol = 1e-10; double *cp, w; M = tab->M; /* The number of corners in a "voxel". We need examine only half this number of rows. The extra factor of two will be used to select between the minimal and maximal values in each row. */ nv = 1 << M; eq = 0; lt = 0; gt = 0; for (iv = 0; iv < nv; iv++) { /* Find the index into tabprm::extrema for this row. */ offset = 0; for (m = M-1; m > 0; m--) { offset *= tab->K[m]; offset += tab->p0[m]; /* Select the row. */ if (iv & (1 << m)) { if (tab->K[m] > 1) offset++; } } /* The K_1 dimension has length 2 (see prologue). */ offset *= 2; /* Select the minimum on even numbered iterations, else the maximum. */ if (iv & 1) offset++; /* The last dimension has length M (see prologue). */ offset *= M; /* Address of the extremal elements (min or max) for this row. */ cp = tab->extrema + offset; /* For each coordinate element, we only need to find one row where its minimum value is less than that of wp, and one row where the maximum value is greater. That doesn't mean that there is a solution, only that there might be. */ for (m = 0; m < M; m++, cp++) { /* Apply the axis mapping. */ w = wp[tab->map[m]]; /* Finally the test itself; set bits in the bitmask. */ if (fabs(*cp - w) < tol) { eq |= (1 << m); } else if (*cp < w) { lt |= (1 << m); } else if (*cp > w) { gt |= (1 << m); } } /* Have all bits been switched on? */ if ((lt | eq) == nv-1 && (gt | eq) == nv-1) { /* A solution could lie within this row of voxels. */ return 0; } } /* No solution in this row. */ return 1; } /*---------------------------------------------------------------------------- * Does the world coordinate indicated by wp lie within the voxel indexed by * tabprm::p0? If so, do a binary chop of the interior of the voxel to find * it and return 0, with tabprm::delta set to the solution. Else return 1. * * As in tabrow(), a "voxel" is formed by incrementing the elements of * tabprm::p0 in all binary combinations. Note that these are not the same as * the voxels (pixels) that are indexed by, and centred on, integral pixel * coordinates in FITS. * * tabvox() calls itself recursively. When called from outside, level, being * the level of recursion, should be given as zero. tabcoord is an array * holding the addresses of the coordinates for each corner of the voxel. * vox is the address of a work array (vox2) used during recursive calls to * dissect the voxel. It is ignored when tabvox() is called from outside * (level == 0). * * It is assumed that the image dimensions are no greater than 16. ----------------------------------------------------------------------------*/ int tabvox( struct tabprm* tab, const double *wp, int level, double **tabcoord, unsigned int *vox) { int i, iv, jv, M, m, nv; unsigned int eq, et, gt, lt, vox2[16]; const double tol = 1e-10; double coord[16], *cp, dv, w, wgt; M = tab->M; /* The number of corners in a voxel. */ nv = 1 << M; dv = 1.0; for (i = 0; i < level; i++) { dv /= 2.0; } /* Could the coordinate lie within this voxel (level == 0) or sub-voxel (level > 0)? We use the fact that with linear interpolation the coordinate elements are extremal in a corner and test each one. */ lt = 0; gt = 0; eq = 0; for (iv = 0; iv < nv; iv++) { /* Select a corner of the sub-voxel. */ for (m = 0; m < M; m++) { coord[m] = 0.0; tab->delta[m] = level ? dv*vox[m] : 0.0; if (iv & (1 << m)) { tab->delta[m] += dv; } } /* Compute the coordinates of this corner of the sub-voxel by linear interpolation using the weighting algorithm described in Sect. 3.4 of WCS Paper IV. */ for (jv = 0; jv < nv; jv++) { /* Find the weight for this corner of the parent voxel. */ wgt = 1.0; for (m = 0; m < M; m++) { if (jv & (1 << m)) { wgt *= tab->delta[m]; } else { wgt *= 1.0 - tab->delta[m]; } } if (wgt == 0.0) continue; /* Add its contribution to each coordinate element. */ cp = tabcoord[jv]; for (m = 0; m < M; m++) { coord[m] += *(cp++) * wgt; } if (wgt == 1.0) break; } /* Coordinate elements are minimal or maximal in a corner. */ et = 0; for (m = 0; m < M; m++) { /* Apply the axis mapping. */ w = wp[tab->map[m]]; /* Finally the test itself; set bits in the bitmask. */ if (fabs(coord[m] - w) < tol) { et |= (1 << m); } else if (coord[m] < w) { lt |= (1 << m); } else if (coord[m] > w) { gt |= (1 << m); } } if (et == nv-1) { /* We've stumbled across a solution in this corner of the sub-voxel. */ return 0; } eq |= et; } /* Could the coordinate lie within this sub-voxel? */ if ((lt | eq) == nv-1 && (gt | eq) == nv-1) { /* Yes it could, but does it? */ /* Is it time to stop the recursion? */ if (level == 31) { /* We have a solution, squeeze out the last bit of juice. */ dv /= 2.0; for (m = 0; m < M; m++) { tab->delta[m] = dv * (2.0*vox[m] + 1.0); } return 0; } /* Subdivide the sub-voxel and try again for each subdivision. */ for (iv = 0; iv < nv; iv++) { /* Select the subdivision. */ for (m = 0; m < M; m++) { vox2[m] = level ? 2*vox[m] : 0; if (iv & (1 << m)) { vox2[m]++; } } /* Recurse. */ if (tabvox(tab, wp, level+1, tabcoord, vox2) == 0) { return 0; } } } /* No solution in this sub-voxel. */ return 1; } pywcs-1.12/wcslib/C/tab.h0000644001153600020070000005621112310355626017237 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tab.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement tabular coordinate systems as * defined by the FITS World Coordinate System (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (paper I) * * "Representations of spectral coordinates in FITS", * Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. * 2006, A&A, 446, 747 (Paper III) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the tab routines * --------------------------- * These routines implement the part of the FITS WCS standard that deals with * tabular coordinates, i.e. coordinates that are defined via a lookup table. * They define methods to be used for computing tabular world coordinates from * intermediate world coordinates (a linear transformation of image pixel * coordinates), and vice versa. They are based on the tabprm struct which * contains all information needed for the computations. The struct contains * some members that must be set by the user, and others that are maintained * by these routines, somewhat like a C++ class but with no encapsulation. * * tabini(), tabmem(), tabcpy(), and tabfree() are provided to manage the * tabprm struct, and another, tabprt(), to print its contents. * * A setup routine, tabset(), computes intermediate values in the tabprm struct * from parameters in it that were supplied by the user. The struct always * needs to be set up by tabset() but it need not be called explicitly - refer * to the explanation of tabprm::flag. * * tabx2s() and tabs2x() implement the WCS tabular coordinate transformations. * * Accuracy: * --------- * No warranty is given for the accuracy of these routines (refer to the * copyright notice); intending users must satisfy for themselves their * adequacy for the intended purpose. However, closure effectively to within * double precision rounding error was demonstrated by test routine ttab.c * which accompanies this software. * * * tabini() - Default constructor for the tabprm struct * ---------------------------------------------------- * tabini() allocates memory for arrays in a tabprm struct and sets all members * of the struct to default values. * * PLEASE NOTE: every tabprm struct should be initialized by tabini(), possibly * repeatedly. On the first invokation, and only the first invokation, the * flag member of the tabprm struct must be set to -1 to initialize memory * management, regardless of whether tabini() will actually be used to allocate * memory. * * Given: * alloc int If true, allocate memory unconditionally for arrays in * the tabprm struct. * * If false, it is assumed that pointers to these arrays * have been set by the user except if they are null * pointers in which case memory will be allocated for * them regardless. (In other words, setting alloc true * saves having to initalize these pointers to zero.) * * M int The number of tabular coordinate axes. * * K const int[] * Vector of length M whose elements (K_1, K_2,... K_M) * record the lengths of the axes of the coordinate array * and of each indexing vector. M and K[] are used to * determine the length of the various tabprm arrays and * therefore the amount of memory to allocate for them. * Their values are copied into the tabprm struct. * * It is permissible to set K (i.e. the address of the * array) to zero which has the same effect as setting * each element of K[] to zero. In this case no memory * will be allocated for the index vectors or coordinate * array in the tabprm struct. These together with the * K vector must be set separately before calling * tabset(). * * Given and returned: * tab struct tabprm* * Tabular transformation parameters. Note that, in * order to initialize memory management tabprm::flag * should be set to -1 when tab is initialized for the * first time (memory leaks may result if it had already * been initialized). * * Function return value: * int Status return value: * 0: Success. * 1: Null tabprm pointer passed. * 2: Memory allocation failed. * 3: Invalid tabular parameters. * * For returns > 1, a detailed error message is set in * tabprm::err if enabled, see wcserr_enable(). * * * tabmem() - Acquire tabular memory * --------------------------------- * tabmem() takes control of memory allocated by the user for arrays in the * tabprm struct. * * Given and returned: * tab struct tabprm* * Tabular transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null tabprm pointer passed. * 2: Memory allocation failed. * * For returns > 1, a detailed error message is set in * tabprm::err if enabled, see wcserr_enable(). * * * tabcpy() - Copy routine for the tabprm struct * --------------------------------------------- * tabcpy() does a deep copy of one tabprm struct to another, using tabini() to * allocate memory for its arrays if required. Only the "information to be * provided" part of the struct is copied; a call to tabset() is required to * set up the remainder. * * Given: * alloc int If true, allocate memory unconditionally for arrays in * the tabprm struct. * * If false, it is assumed that pointers to these arrays * have been set by the user except if they are null * pointers in which case memory will be allocated for * them regardless. (In other words, setting alloc true * saves having to initalize these pointers to zero.) * * tabsrc const struct tabprm* * Struct to copy from. * * Given and returned: * tabdst struct tabprm* * Struct to copy to. tabprm::flag should be set to -1 * if tabdst was not previously initialized (memory leaks * may result if it was previously initialized). * * Function return value: * int Status return value: * 0: Success. * 1: Null tabprm pointer passed. * 2: Memory allocation failed. * * For returns > 1, a detailed error message is set in * tabprm::err (associated with tabdst) if enabled, see * wcserr_enable(). * * * tabfree() - Destructor for the tabprm struct * -------------------------------------------- * tabfree() frees memory allocated for the tabprm arrays by tabini(). * tabini() records the memory it allocates and tabfree() will only attempt to * free this. * * PLEASE NOTE: tabfree() must not be invoked on a tabprm struct that was not * initialized by tabini(). * * Returned: * tab struct tabprm* * Coordinate transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null tabprm pointer passed. * * * tabprt() - Print routine for the tabprm struct * ---------------------------------------------- * tabprt() prints the contents of a tabprm struct using wcsprintf(). Mainly * intended for diagnostic purposes. * * Given: * tab const struct tabprm* * Tabular transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null tabprm pointer passed. * * * tabset() - Setup routine for the tabprm struct * ----------------------------------------------- * tabset() allocates memory for work arrays in the tabprm struct and sets up * the struct according to information supplied within it. * * Note that this routine need not be called directly; it will be invoked by * tabx2s() and tabs2x() if tabprm::flag is anything other than a predefined * magic value. * * Given and returned: * tab struct tabprm* * Tabular transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null tabprm pointer passed. * 3: Invalid tabular parameters. * * For returns > 1, a detailed error message is set in * tabprm::err if enabled, see wcserr_enable(). * * * tabx2s() - Pixel-to-world transformation * ---------------------------------------- * tabx2s() transforms intermediate world coordinates to world coordinates * using coordinate lookup. * * Given and returned: * tab struct tabprm* * Tabular transformation parameters. * * Given: * ncoord, * nelem int The number of coordinates, each of vector length * nelem. * * x const double[ncoord][nelem] * Array of intermediate world coordinates, SI units. * * Returned: * world double[ncoord][nelem] * Array of world coordinates, in SI units. * * stat int[ncoord] * Status return value status for each coordinate: * 0: Success. * 1: Invalid intermediate world coordinate. * * Function return value: * int Status return value: * 0: Success. * 1: Null tabprm pointer passed. * 3: Invalid tabular parameters. * 4: One or more of the x coordinates were invalid, * as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * tabprm::err if enabled, see wcserr_enable(). * * * tabs2x() - World-to-pixel transformation * ---------------------------------------- * tabs2x() transforms world coordinates to intermediate world coordinates. * * Given and returned: * tab struct tabprm* * Tabular transformation parameters. * * Given: * ncoord, * nelem int The number of coordinates, each of vector length * nelem. * world const double[ncoord][nelem] * Array of world coordinates, in SI units. * * Returned: * x double[ncoord][nelem] * Array of intermediate world coordinates, SI units. * stat int[ncoord] * Status return value status for each vector element: * 0: Success. * 1: Invalid world coordinate. * * Function return value: * int Status return value: * 0: Success. * 1: Null tabprm pointer passed. * 3: Invalid tabular parameters. * 5: One or more of the world coordinates were * invalid, as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * tabprm::err if enabled, see wcserr_enable(). * * * tabprm struct - Tabular transformation parameters * ------------------------------------------------- * The tabprm struct contains information required to transform tabular * coordinates. It consists of certain members that must be set by the user * ("given") and others that are set by the WCSLIB routines ("returned"). Some * of the latter are supplied for informational purposes while others are for * internal use only. * * int flag * (Given and returned) This flag must be set to zero whenever any of the * following tabprm structure members are set or changed: * * - tabprm::M (q.v., not normally set by the user), * - tabprm::K (q.v., not normally set by the user), * - tabprm::map, * - tabprm::crval, * - tabprm::index, * - tabprm::coord. * * This signals the initialization routine, tabset(), to recompute the * returned members of the tabprm struct. tabset() will reset flag to * indicate that this has been done. * * PLEASE NOTE: flag should be set to -1 when tabini() is called for the * first time for a particular tabprm struct in order to initialize memory * management. It must ONLY be used on the first initialization otherwise * memory leaks may result. * * int M * (Given or returned) Number of tabular coordinate axes. * * If tabini() is used to initialize the linprm struct (as would normally * be the case) then it will set M from the value passed to it as a * function argument. The user should not subsequently modify it. * * int *K * (Given or returned) Pointer to the first element of a vector of length * tabprm::M whose elements (K_1, K_2,... K_M) record the lengths of the * axes of the coordinate array and of each indexing vector. * * If tabini() is used to initialize the linprm struct (as would normally * be the case) then it will set K from the array passed to it as a * function argument. The user should not subsequently modify it. * * int *map * (Given) Pointer to the first element of a vector of length tabprm::M * that defines the association between axis m in the M-dimensional * coordinate array (1 <= m <= M) and the indices of the intermediate world * coordinate and world coordinate arrays, x[] and world[], in the argument * lists for tabx2s() and tabs2x(). * * When x[] and world[] contain the full complement of coordinate elements * in image-order, as will usually be the case, then map[m-1] == i-1 for * axis i in the N-dimensional image (1 <= i <= N). In terms of the FITS * keywords * * map[PVi_3a - 1] == i - 1. * * However, a different association may result if x[], for example, only * contains a (relevant) subset of intermediate world coordinate elements. * For example, if M == 1 for an image with N > 1, it is possible to fill * x[] with the relevant coordinate element with nelem set to 1. In this * case map[0] = 0 regardless of the value of i. * * double *crval * (Given) Pointer to the first element of a vector of length tabprm::M * whose elements contain the index value for the reference pixel for each * of the tabular coordinate axes. * * double **index * (Given) Pointer to the first element of a vector of length tabprm::M of * pointers to vectors of lengths (K_1, K_2,... K_M) of 0-relative indexes * (see tabprm::K). * * The address of any or all of these index vectors may be set to zero, * i.e. * = index[m] == 0; * * this is interpreted as default indexing, i.e. * = index[m][k] = k; * * double *coord * (Given) Pointer to the first element of the tabular coordinate array, * treated as though it were defined as * = double coord[K_M]...[K_2][K_1][M]; * * (see tabprm::K) i.e. with the M dimension varying fastest so that the * M elements of a coordinate vector are stored contiguously in memory. * * int nc * (Returned) Total number of coordinate vectors in the coordinate array * being the product K_1 * K_2 * ... * K_M (see tabprm::K). * * int padding * (An unused variable inserted for alignment purposes only.) * * int *sense * (Returned) Pointer to the first element of a vector of length tabprm::M * whose elements indicate whether the corresponding indexing vector is * monotonic increasing (+1), or decreasing (-1). * * int *p0 * (Returned) Pointer to the first element of a vector of length tabprm::M * of interpolated indices into the coordinate array such that Upsilon_m, * as defined in Paper III, is equal to (p0[m] + 1) + tabprm::delta[m]. * * double *delta * (Returned) Pointer to the first element of a vector of length tabprm::M * of interpolated indices into the coordinate array such that Upsilon_m, * as defined in Paper III, is equal to (tabprm::p0[m] + 1) + delta[m]. * * double *extrema * (Returned) Pointer to the first element of an array that records the * minimum and maximum value of each element of the coordinate vector in * each row of the coordinate array, treated as though it were defined as * = double extrema[K_M]...[K_2][2][M] * * (see tabprm::K). The minimum is recorded in the first element of the * compressed K_1 dimension, then the maximum. This array is used by the * inverse table lookup function, tabs2x(), to speed up table searches. * * struct wcserr *err * (Returned) If enabled, when an error status is returned this struct * contains detailed information about the error, see wcserr_enable(). * * int m_flag * (For internal use only.) * int m_M * (For internal use only.) * int m_N * (For internal use only.) * int set_M * (For internal use only.) * int m_K * (For internal use only.) * int m_map * (For internal use only.) * int m_crval * (For internal use only.) * int m_index * (For internal use only.) * int m_indxs * (For internal use only.) * int m_coord * (For internal use only.) * * * Global variable: const char *tab_errmsg[] - Status return messages * ------------------------------------------------------------------ * Error messages to match the status value returned from each function. * *===========================================================================*/ #ifndef WCSLIB_TAB #define WCSLIB_TAB #include "wcserr.h" #ifdef __cplusplus extern "C" { #endif extern const char *tab_errmsg[]; enum tab_errmsg_enum { TABERR_SUCCESS = 0, /* Success. */ TABERR_NULL_POINTER = 1, /* Null tabprm pointer passed. */ TABERR_MEMORY = 2, /* Memory allocation failed. */ TABERR_BAD_PARAMS = 3, /* Invalid tabular parameters. */ TABERR_BAD_X = 4, /* One or more of the x coordinates were invalid. */ TABERR_BAD_WORLD = 5 /* One or more of the world coordinates were invalid. */ }; struct tabprm { /* Initialization flag (see the prologue above). */ /*------------------------------------------------------------------------*/ int flag; /* Set to zero to force initialization. */ /* Parameters to be provided (see the prologue above). */ /*------------------------------------------------------------------------*/ int M; /* Number of tabular coordinate axes. */ int *K; /* Vector of length M whose elements */ /* (K_1, K_2,... K_M) record the lengths of */ /* the axes of the coordinate array and of */ /* each indexing vector. */ int *map; /* Vector of length M usually such that */ /* map[m-1] == i-1 for coordinate array */ /* axis m and image axis i (see above). */ double *crval; /* Vector of length M containing the index */ /* value for the reference pixel for each */ /* of the tabular coordinate axes. */ double **index; /* Vector of pointers to M indexing vectors */ /* of lengths (K_1, K_2,... K_M). */ double *coord; /* (1+M)-dimensional tabular coordinate */ /* array (see above). */ /* Information derived from the parameters supplied. */ /*------------------------------------------------------------------------*/ int nc; /* Number of coordinate vectors (of length */ /* M) in the coordinate array. */ int padding; /* (Dummy inserted for alignment purposes.) */ int *sense; /* Vector of M flags that indicate whether */ /* the Mth indexing vector is monotonic */ /* increasing, or else decreasing. */ int *p0; /* Vector of M indices. */ double *delta; /* Vector of M increments. */ double *extrema; /* (1+M)-dimensional array of coordinate */ /* extrema. */ /* Error handling */ /*------------------------------------------------------------------------*/ struct wcserr *err; /* Private - the remainder are for memory management. */ /*------------------------------------------------------------------------*/ int m_flag, m_M, m_N; int set_M; int *m_K, *m_map; double *m_crval, **m_index, **m_indxs, *m_coord; }; /* Size of the tabprm struct in int units, used by the Fortran wrappers. */ #define TABLEN (sizeof(struct tabprm)/sizeof(int)) int tabini(int alloc, int M, const int K[], struct tabprm *tab); int tabmem(struct tabprm *tab); int tabcpy(int alloc, const struct tabprm *tabsrc, struct tabprm *tabdst); int tabfree(struct tabprm *tab); int tabprt(const struct tabprm *tab); int tabset(struct tabprm *tab); int tabx2s(struct tabprm *tab, int ncoord, int nelem, const double x[], double world[], int stat[]); int tabs2x(struct tabprm *tab, int ncoord, int nelem, const double world[], double x[], int stat[]); /* Deprecated. */ #define tabini_errmsg tab_errmsg #define tabcpy_errmsg tab_errmsg #define tabfree_errmsg tab_errmsg #define tabprt_errmsg tab_errmsg #define tabset_errmsg tab_errmsg #define tabx2s_errmsg tab_errmsg #define tabs2x_errmsg tab_errmsg #ifdef __cplusplus } #endif #endif /* WCSLIB_TAB */ pywcs-1.12/wcslib/C/test/0000755001153600020070000000000012310355732017270 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/C/test/bth.keyrec0000644001153600020070000005362512310355626021266 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # WCSLIB 4.10 - an implementation of the FITS WCS standard. # Copyright (C) 1995-2012, Mark Calabretta # # This file is part of WCSLIB. # # WCSLIB is free software: you can redistribute it and/or modify it under the # terms of the GNU Lesser General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for # more details. # # You should have received a copy of the GNU Lesser General Public License # along with WCSLIB. If not, see . # # Correspondence concerning WCSLIB may be directed to: # Internet email: mcalabre@atnf.csiro.au # Postal address: Dr. Mark Calabretta # Australia Telescope National Facility, CSIRO # PO Box 76 # Epping NSW 1710 # AUSTRALIA # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: bth.keyrec,v 4.10 2012/02/05 23:41:44 cal103 Exp $ #----------------------------------------------------------------------------- # FITS header keyrecords used for testing by tbth1. # # Use 'tofits' (supplied) to convert this file to proper FITS format via # # tofits < bth.keyrec > bth.fits # # Lines in this file beginning with '#' are ignored by tofits. #----------------------------------------------------------------------------- XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / 8-bit bytes NAXIS = 2 / 2-dimensional binary table NAXIS1 = 3330 / width of table in bytes NAXIS2 = 68 / number of rows in table PCOUNT = 0 / size of special data area GCOUNT = 1 / one data group (required keyword) TFIELDS = 33 / number of fields in each row COMMENT wcsbth() ignores all of the above keywords except for TFIELDS which it COMMENT only considers to be advisory. In fact, TFIELDS here is incorrect COMMENT (deliberately) since WCS keywords are present below for column numbers COMMENT greater than 33. COMMENT WARNING WARNING WARNING COMMENT ------------------------- COMMENT This header has been developed for test purposes. It contains a mix COMMENT of WCS keywords whose presence within a single FITS header extends or COMMENT violates the FITS WCS standard. COMMENT COMMENT The main extension to the standard is the presence of image header COMMENT keywords in what is meant to be a binary table extension header. The COMMENT usage notes for wcsbth() in wcshdr.h explains how it interprets these COMMENT keywords. COMMENT COMMENT ----------------------------------------------------------------------- COMMENT ======================================================================= COMMENT COMMENT The primary image header keywords define a coordinate representation COMMENT using AIPS-convention WCS keywords. As it happens, no binary table COMMENT image array inherits these keywords and consequently they define an COMMENT "unattached" representation, one that is not associated with any COMMENT particular table column(s). Human intervention is required to form COMMENT such an association based on a priori knowledge. COMMENT COMMENT An old FITS WCS interpreter that only understood the AIPS convention COMMENT would most likely be confused by this header because NAXIS = 2 (above) COMMENT is fixed for a binary table. wcsbth() ignores NAXIS and deduces that COMMENT there are four coordinate axes by looking at the highest axis number COMMENT encoded in the WCS keywords themselves. COMMENT COMMENT An old FITS WCS interpreter also would not recognize the new WCSNAMEa COMMENT keyword, though its presence should not cause it any harm. It is set COMMENT here solely for identification purposes. COMMENT COMMENT This representation contains only standard image header keywords, but COMMENT their use in a binary table header is non-standard. COMMENT COMMENT ----------------------------------------------------------------------- COMMENT The following keyrecord is not part of the AIPS convention. WCSNAME = 'AIPS convention: TAN projection' / Name of this coordinate system CRPIX1 = 513.0 / Pixel coordinate of reference point CRPIX2 = 513.0 / Pixel coordinate of reference point CRPIX3 = 1025.0 / Pixel coordinate of reference point CRPIX4 = 1.0 / Pixel coordinate of reference point CDELT1 = -0.10 / x-scale CDELT2 = 0.10 / y-scale CROTA2 = 15.0 / Bulk image rotation CTYPE1 = 'RA---TAN' / Right ascension in a gnomonic projection CRVAL1 = 150.0 / Right ascension at the reference point CTYPE2 = 'DEC--TAN' / Declination in a gnomonic projection CRVAL2 = -30.0 / Declination at the reference point EPOCH = 2000.0 / Equinox of equatorial coordinates CDELT3 = 62.5e3 / Frequency scale CTYPE3 = 'FREQ ' / Frequency axis CRVAL3 = 1.3945e9 / Reference frequency VELREF = 258 / Barycentric radio velocity ALTRPIX = 0.0 / Alternate reference pixel (not handled) ALTRVAL = 0.0 / Alternate reference value (not handled) RESTFREQ= 1.42040575e9 / HI rest frequency CDELT4 = 1.0 / Stokes increment CTYPE4 = 'STOKES ' / Stokes convention axis (I, Q, U, V) CRVAL4 = 1.0 / Stokes I COMMENT ======================================================================= COMMENT COMMENT This coordinate representation utilizing a PCi_ja matrix expresses the COMMENT above AIPS convention header using standard WCS keywords. This set of COMMENT image header keywords with alternate representation 'I' is defined for COMMENT the purpose of inheritance (below) and so does not result in an COMMENT unattached representation as did the primary image header COMMENT representation above. COMMENT COMMENT This representation contains only standard image header keywords but COMMENT their use in a binary table header is non-standard. COMMENT COMMENT ----------------------------------------------------------------------- WCSAXESI= 4 / Number of coordinate axes CRPIX1I = 513 / Pixel coordinate of reference point CRPIX2I = 513 / Pixel coordinate of reference point CRPIX3I = 1025 / Pixel coordinate of reference point CRPIX4I = 1 / Pixel coordinate of reference point PC1_1I = 0.965925826289 / Coordinate transformation matrix element PC1_2I = 0.258819045103 / Coordinate transformation matrix element PC2_1I = -0.258819045103 / Coordinate transformation matrix element PC2_2I = 0.965925826289 / Coordinate transformation matrix element CDELT1I = -0.1 / [deg] Coordinate increment at reference point CDELT2I = 0.1 / [deg] Coordinate increment at reference point CDELT3I = 62500 / [Hz] Coordinate increment at reference point CDELT4I = 1 / Coordinate increment at reference point CUNIT1I = 'deg' / Units of coordinate increment and value CUNIT2I = 'deg' / Units of coordinate increment and value CUNIT3I = 'Hz' / Units of coordinate increment and value CTYPE1I = 'RA---TAN' / Right ascension, gnomonic projection CTYPE2I = 'DEC--TAN' / Declination, gnomonic projection CTYPE3I = 'FREQ' / Frequency (linear) CTYPE4I = 'STOKES' / Coordinate type code CRVAL1I = 150 / [deg] Coordinate value at reference point CRVAL2I = -30 / [deg] Coordinate value at reference point CRVAL3I = 1394500000 / [Hz] Coordinate value at reference point CRVAL4I = 1 / Coordinate value at reference point LONPOLEI= 180 / [deg] Native longitude of celestial pole LATPOLEI= -30 / [deg] Native latitude of celestial pole RESTFRQI= 1420405750 / [Hz] Line rest frequency RESTWAVI= 0 / [Hz] Line rest wavelength WCSNAMEI= 'AIPS convention: TAN projection' / Coordinate system title EQUINOXI= 2000 / [yr] Equinox of equatorial coordinates SPECSYSI= 'BARYCENT' / Reference frame of spectral coordinates COMMENT ======================================================================= COMMENT Binary table column 33 contains an image array, most of whose WCS COMMENT keywords would be inherited from the preceding image header keywords COMMENT with a = "I" provided that wcsbth() is invoked with an option that COMMENT allows it (i.e. by setting the WCSHDR_ALLIMG flag in its 'relax' COMMENT argument). COMMENT COMMENT Without full inheritance enabled, the presence of a single binary COMMENT table image array keyword, WCSN33I, would not be sufficient to cause COMMENT wcsbth() to create a wcsprm struct for this representation. However, COMMENT with inheritance enabled, WCSN33I is sufficient to trigger this COMMENT mechanism, in which case it overrides WCSNAMEI. COMMENT COMMENT Setting WCSHDR_AUXIMG alone only allows inheritance of the auxiliary COMMENT image header keywords. In this case it would not be sufficient to COMMENT cause wcsbth() to create a wcsprm struct for this representation COMMENT because there are no WCS keywords, either direct or inherited, that COMMENT allow the dimensionality of the coordinate system to be determined. COMMENT COMMENT The keyword is standard but such inheritance is non-standard. COMMENT ----------------------------------------------------------------------- WCSN33I = 'All WCS keywords inherited except for this one' / WCS title COMMENT ======================================================================= COMMENT Binary table column 44 is analogous to column 33 except with extra COMMENT binary table image array keywords that may override the image-header COMMENT equivalent if inheritance is enabled. COMMENT COMMENT wcsbth() would always create at least a 2D coordinate representation COMMENT for column 44, regardless of what other keywords were inherited. If COMMENT WCSHDR_ALLIMG was set, then a 4D representation would be constructed COMMENT from inherited keywords. WCSHDR_AUXIMG would not be sufficient for COMMENT this; however it would cause LONPOLEI and LATPOLEI to be inherited COMMENT (and four others) and these would affect the interpretation of the COMMENT coordinate system. COMMENT COMMENT The keywords are standard but such inheritance is non-standard. COMMENT ----------------------------------------------------------------------- WCSN44I = 'Most WCS keywords inherited' / WCS title 1CTY44I = 'RA---SIN' / Right ascension, orthographic projection 2CTY44I = 'DEC--SIN' / Declination, orthographic projection COMMENT ======================================================================= COMMENT Binary table keywords for the image array in column 77 with alternate COMMENT representation 'B'. COMMENT COMMENT This coordinate representation utilizing a PC (ijPCna) matrix COMMENT expresses the above gnomonic (TAN) projection as a slant zenithal COMMENT perspective projection (SZP) in order to test the reading of a number COMMENT of PVi_ma keywords. It also includes a linear time axis. COMMENT COMMENT This representation contains only standard keywords and usage. In COMMENT particular, it is is self-contained, i.e. no inheritance. COMMENT ----------------------------------------------------------------------- WCAX77B = 4 / Number of coordinate axes 1CRP77B = 513 / Pixel coordinate of reference point 2CRP77B = 513 / Pixel coordinate of reference point 3CRP77B = 1025 / Pixel coordinate of reference point 4CRP77B = 1 / Pixel coordinate of reference point 11PC77B = 0.866025404 / Coordinate transformation matrix element 12PC77B = 0.5 / Coordinate transformation matrix element 21PC77B = -0.5 / Coordinate transformation matrix element 22PC77B = 0.866025404 / Coordinate transformation matrix element 1CDE77B = -0.1 / [deg] Coordinate increment at reference point 2CDE77B = 0.1 / [deg] Coordinate increment at reference point 3CDE77B = -9.635265432e-06 / [m] Coordinate increment at reference point 4CDE77B = 1 / [s] Coordinate increment at reference point 1CUN77B = 'deg' / Units of coordinate increment and value 2CUN77B = 'deg' / Units of coordinate increment and value 3CUN77B = 'm' / Units of coordinate increment and value 4CUN77B = 's' / Units of coordinate increment and value 1CTY77B = 'RA---SZP' / Right ascension, slant zenithal perspective pro 2CTY77B = 'DEC--SZP' / Declination, slant zenithal perspective project 3CTY77B = 'WAVE-F2W' / Vacuum wavelength (linear in frequency) 4CTY77B = 'TIME' / Coordinate type code 1CRV77B = 150 / [deg] Coordinate value at reference point 2CRV77B = -30 / [deg] Coordinate value at reference point 3CRV77B = 0.214982042 / [m] Coordinate value at reference point 4CRV77B = -2000 / [s] Coordinate value at reference point 1V77_1B = 0 / [deg] Native longitude of the reference point 1V77_2B = 90 / [deg] Native latitude of the reference point 1V77_3B = 195 / [deg] alias for LONP77A (has precedence) 1V77_4B = -30 / [deg] alias for LATP77A (has precedence) 2V77_1B = 0 / SZP projection parameter 2V77_2B = 180 / SZP projection parameter 2V77_3B = 45 / SZP projection parameter 4S77_0B = 'UTC' / Coordinate transformation parameter LONP77B = 195 / [deg] Native longitude of celestial pole LATP77B = -30 / [deg] Native latitude of celestial pole RFRQ77B = 1420405750 / [Hz] Line rest frequency RWAV77B = 0.211061141 / [Hz] Line rest wavelength WCSN77B = 'St''d representation: SZP projection' / Coordinate system title 1CNA77B = 'Right ascension (J2000)' / Axis name for labelling purposes 2CNA77B = 'Declination (J2000)' / Axis name for labelling purposes 3CNA77B = 'Wavelength' / Axis name for labelling purposes 4CNA77B = 'Time offset' / Axis name for labelling purposes 3CRD77B = 1e-11 / [m] Random error in coordinate 3CSY77B = 1e-12 / [m] Systematic error in coordinate RADE77B = 'FK5' / Equatorial coordinate system EQUI77B = 2000 / [yr] Equinox of equatorial coordinates SPEC77B = 'BARYCENT' / Reference frame of spectral coordinates SOBS77B = 'TOPOCENT' / Reference frame of spectral observation VSYS77B = 1500 / [m/s] Velocity towards source SSRC77B = 'LSRK' / Reference frame of source redshift ZSOU77B = 0.0025 / Redshift of the source OBSGX77 = -4554231.9 / [m] ITRF observatory X-coordinate COMMENT OBSGEO-Y (below) should be inherited for OBSGY77. OBSGZ77 = -3454035.9 / [m] ITRF observatory Z-coordinate MJDOB77 = 35883.625 / [d] MJD of observation matching DOBS77 MJDA77 = 35883.7 / [d] MJD mid-observation matching DAVG77 DOBS77 = '1957-02-14T15:00:00' / ISO-8601 observation date matching MJDOB77 DAVG77 = '1957-02-14T16:48:00' / ISO-8601 mid-observation date matching MJDA77 COMMENT ======================================================================= COMMENT Pixel list keywords with axes in columns 8, 9 and 10 and alternate COMMENT representation 'P'. COMMENT COMMENT In the IRAF representation, if one CDi_ja (TCDn_ka) keyword is given COMMENT then the default is zero for any that are omitted. CDELTia (TCDLTna) COMMENT and CROTAn (TCROTna) keywords are included for informational purposes COMMENT only and otherwise are to be ignored. COMMENT COMMENT This representation uses the non-standard long form for some pixel COMMENT list keywords with non-blank alternate version specifier (these forms COMMENT are standard for a = ' ' only): COMMENT TCRPXna instead of TCRPna COMMENT TCDn_ka TCn_ka COMMENT TCDLTna TCDEna COMMENT TCUNIna TCUNna COMMENT TCTYPna TCTYna COMMENT TCRVLna TCRVna COMMENT TPVn_ma TVn_ma COMMENT TCNAMna TCNAna COMMENT TCRDEna TCRDna COMMENT TCSYEna TCSYna COMMENT Also, strictly speaking, alternate version codes are not defined for COMMENT TCROTn (e.g. TCROT9P below), and WCSNna should be TWCSna. However, COMMENT these are considered to be natural extensions that all FITS WCS COMMENT interpreters should support. Apart from that, this representation COMMENT contains standard keywords and usage. In particular, it is self- COMMENT contained, i.e. no inheritance. COMMENT ----------------------------------------------------------------------- TCRPX8P = 513 / Pixel coordinate of reference point TCRPX9P = 513 / Pixel coordinate of reference point TCRPX10P= 1025 / Pixel coordinate of reference point TCD8_8P = -0.08660254 / Coordinate transformation matrix element TCD8_9P = -0.05 / Coordinate transformation matrix element TCD9_8P = -0.05 / Coordinate transformation matrix element TCD9_9P = 0.08660254 / Coordinate transformation matrix element TC10_10P= -4.565153674e-5 / Coordinate transformation matrix element TCDLT8P = -0.10 / [deg] Coordinate increment at reference point TCDLT9P = 0.10 / [deg] Coordinate increment at reference point TCDLT10P= -4.565153674e-5 / Coordinate increment at reference point TCROT9P = 30.0 / [deg] Bulk image rotation TCUNI8P = 'deg' / Units of coordinate increment and value TCUNI9P = 'deg' / Units of coordinate increment and value TCTYP8P = 'RA---ZPN' / Right ascension, zenithal/azimuthal polynomial TCTYP9P = 'DEC--ZPN' / Declination, zenithal/azimuthal polynomial proj TCTYP10P= 'ZOPT-F2W' / Redshift (linear in frequency) TCRVL8P = 150 / [deg] Coordinate value at reference point TCRVL9P = -30 / [deg] Coordinate value at reference point TCRVL10P= 0.018577089 / Coordinate value at reference point TPV9_1P = 1 / ZPN projection parameter TPV9_3P = 0.333333333 / ZPN projection parameter TPV9_5P = 0.133333333 / ZPN projection parameter TPV9_7P = 0.053968254 / ZPN projection parameter TPV9_9P = 0.021869489 / ZPN projection parameter TPV9_11P= 0.008863236 / ZPN projection parameter TPV9_13P= 0.003592128 / ZPN projection parameter TPV9_15P= 0.001455834 / ZPN projection parameter TPV9_17P= 0.000590027 / ZPN projection parameter TPV9_19P= 0.000239129 / ZPN projection parameter LONP8P = 195 / [deg] Native longitude of celestial pole LATP8P = -30 / [deg] Native latitude of celestial pole RFRQ8P = 1420405750 / [Hz] Line rest frequency RWAV8P = 0.211061141 / [Hz] Line rest wavelength WCSN8P = 'IRAF representation: ZPN projection' / Coordinate system title TCNAM8P = 'Right ascension (J2000)' / Axis name for labelling purposes TCNAM9P = 'Declination (J2000)' / Axis name for labelling purposes TCNAM10P= 'Redshift' / Axis name for labelling purposes TCRDE10P= 5e-11 / Random error in coordinate TCSYE10P= 5e-12 / Systematic error in coordinate RADE8P = 'FK5' / Equatorial coordinate system EQUI8P = 2000 / [yr] Equinox of equatorial coordinates SPEC8P = 'BARYCENT' / Reference frame of spectral coordinates SOBS8P = 'TOPOCENT' / Reference frame of spectral observation VSYS8P = 1500 / [m/s] Velocity towards source SSRC8P = 'LSRK' / Reference frame of source redshift ZSOU8P = 0.00250000001174 / Redshift of the source COMMENT OBSGEO-X (below) should be inherited for OBSGX8. OBSGY8 = 2816758.3 / [m] ITRF observatory Y-coordinate OBSGZ8 = -3454035.9 / [m] ITRF observatory Z-coordinate MJDOB8 = 35883.625 / [d] MJD of observation matching DOBS8 MJDA8 = 35883.7 / [d] MJD mid-observation matching DAVG8 DOBS8 = '1957-02-14T15:00:00' / ISO-8601 observation date matching MJDOB8 DAVG8 = '1957-02-14T16:48:00' / ISO-8601 mid-observation date matching MJDA8 COMMENT ======================================================================= COMMENT COMMENT The following keywords have no alternates; they apply to each COMMENT coordinate representation, even that of the AIPS convention for COMMENT which, strictly, only the DATE-OBS keyword should be recognized. COMMENT COMMENT The keycomments for OBSGEO-Y and OBSGEO-Z have been omitted COMMENT deliberately for test purposes. COMMENT COMMENT ----------------------------------------------------------------------- OBSGEO-X= -4554231.9 / [m] ITRF observatory coordinates OBSGEO-Y= 2816758.3 / OBSGEO-Z= -3454035.9 MJD-OBS = 35883.625 / [d] MJD at start of observation (UTC) MJD-AVG = 35883.700 / [d] MJD mid-observation time (UTC) DATE-OBS= '1957-02-14T15:00:00'/ UTC date corresponding to MJD-OBS DATE-AVG= '1957-02-14T16:48:00'/ UTC date corresponding to MJD-AVG OBSGX99 = -4000000.0 / [m] ITRF observatory X-coordinate END pywcs-1.12/wcslib/C/test/pih.keyrec0000644001153600020070000005156712310355626021274 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # WCSLIB 4.10 - an implementation of the FITS WCS standard. # Copyright (C) 1995-2012, Mark Calabretta # # This file is part of WCSLIB. # # WCSLIB is free software: you can redistribute it and/or modify it under the # terms of the GNU Lesser General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for # more details. # # You should have received a copy of the GNU Lesser General Public License # along with WCSLIB. If not, see . # # Correspondence concerning WCSLIB may be directed to: # Internet email: mcalabre@atnf.csiro.au # Postal address: Dr. Mark Calabretta # Australia Telescope National Facility, CSIRO # PO Box 76 # Epping NSW 1710 # AUSTRALIA # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: pih.keyrec,v 4.10 2012/02/05 23:41:44 cal103 Exp $ #----------------------------------------------------------------------------- # FITS header keyrecords used for testing by tpih1, tpih2 and tfitshdr. # # Use 'tofits' (supplied) to convert this file to proper FITS format via # # tofits < bth.keyrec > bth.fits # # Lines in this file beginning with '#' are ignored by tofits. #----------------------------------------------------------------------------- SIMPLE = F / Standards-conformant FITS format? NO! BITPIX = -32 / IEEE single precision floating point NAXIS = 0 / No image data COMMENT WARNING WARNING WARNING COMMENT ------------------------- COMMENT This header has been developed for test purposes and as such contains COMMENT all standard WCS keywords. Combining certain of them (e.g. PCi_ja, COMMENT CDi_ja, and CROTAn) within a single FITS header violates certain WCS COMMENT standards. However, taken individually, each representation is legal, COMMENT except as indicated. COMMENT COMMENT The three alternate representations define essentially the same COMMENT coordinate system in three different ways. The older AIPS convention COMMENT is necessarily used for the primary representation because the COMMENT alternate version code (e.g. the "a" in CTYPEia) is not applicable in COMMENT that convention. COMMENT COMMENT For compatibility testing, the header also contains a number of non- COMMENT standard keywords and constructs: the AIPS keywords CROTAn, EPOCH, and COMMENT VELREF retrofitted with alternate version codes, and PROJPn, a COMMENT forerunner of PVi_ma. However, non-standard CD00i00j and PC00i00j COMMENT keywords, while recognized, are not included since they can only apply COMMENT to the primary representation which is used here to test the AIPS COMMENT convention. COMMENT COMMENT A simple TAN projection used in the primary representation is COMMENT expressed as an equivalent SZP projection in the "A" representation, COMMENT and approximated by a ZPN in the "I" representation. A bulk image COMMENT rotation of 15 deg applied by the defunct CROTAn keyword in the AIPS COMMENT convention is replaced in the alternates by an equivalent bulk image COMMENT rotation of 30 deg applied by the linear transformation matrix, COMMENT together with an effective bulk rotation of -15 deg applied by COMMENT LONPOLE (this is only possible for zenithal projections). COMMENT COMMENT Similarly, the spectral axis in the primary representation, a simple COMMENT linear frequency axis, is recast as non-linear wavelength and redshift COMMENT axes in the alternates. COMMENT COMMENT Although the parser handles free-format character string, integer, and COMMENT floating-point keyvalues (NOST 100-2.0, Sect. 5.2) most numeric values COMMENT in this header are given in the conventional fixed-format, with only COMMENT CROTA2I, EPOCHI, and VELREFI as exceptions for testing. Most string COMMENT values are free-format, only those in the "A" representation are fixed. COMMENT COMMENT ----------------------------------------------------------------------- COMMENT ----------------------------------------------------------------------- COMMENT Primary representation COMMENT ---------------------- COMMENT COMMENT In the AIPS convention CROTAn associated with the latitude axis COMMENT defines a bulk image rotation. Strictly speaking, the representation COMMENT here is illegal since it mixes new WCS keywords (WCSAXESa and COMMENT WCSNAMEa) with CROTAn, an older AIPS convention keyword. WCSAXES is COMMENT used here because setting NAXIS non-zero would require that this FITS COMMENT file contain a data section. COMMENT COMMENT Several PROJPn keyrecords (non-standard) are also included here for COMMENT test purposes; they were never part of the AIPS convention and only COMMENT appeared in early drafts of the WCS papers. Their values are not COMMENT actually used in the TAN projection. COMMENT COMMENT ----------------------------------------------------------------------- COMMENT The following two keyrecords are not part of the AIPS convention. WCSAXES = 4 / Four coordinate axes WCSNAME = 'AIPS convention: TAN projection' / Name of this coordinate system CRPIX1 = 513.0 / Pixel coordinate of reference point CRPIX2 = 513.0 / Pixel coordinate of reference point CRPIX3 = 1025.0 / Pixel coordinate of reference point CRPIX4 = 1.0 / Pixel coordinate of reference point CDELT1 = -0.10 / x-scale CDELT2 = 0.10 / y-scale CROTA2 = 15.0 / Bulk image rotation CTYPE1 = 'RA---TAN' / Right ascension in a gnomonic projection CRVAL1 = 150.0 / Right ascension at the reference point CTYPE2 = 'DEC--TAN' / Declination in a gnomonic projection CRVAL2 = -30.0 / Declination at the reference point EPOCH = 2000.0 / Equinox of equatorial coordinates CDELT3 = 62.5e3 / Frequency scale CTYPE3 = 'FREQ ' / Frequency axis CRVAL3 = 1.3945e9 / Reference frequency VELREF = 258 / Barycentric radio velocity ALTRPIX = 0.0 / Alternate reference pixel (not handled) ALTRVAL = 0.0 / Alternate reference value (not handled) RESTFREQ= 1.42040575e9 / HI rest frequency CDELT4 = 1.0 / Stokes increment CTYPE4 = 'STOKES ' / Stokes convention axis (I, Q, U, V) CRVAL4 = 1.0 / Stokes I COMMENT As explained above, the following keyrecords are non-standard. PROJP0 = 0.0 / Projection parameter (not used) PROJP1 = 0.0 / Projection parameter (not used) PROJP2 = 0.0 / Projection parameter (not used) COMMENT ----------------------------------------------------------------------- COMMENT Alternate representation 'A' COMMENT ---------------------------- COMMENT COMMENT This coordinate representation utilizing a PCi_ja matrix expresses the COMMENT above gnomonic (TAN) projection as a slant zenithal perspective COMMENT projection (SZP) in order to test the reading of a number of PVi_ma COMMENT keywords. It also includes a linear time axis. COMMENT COMMENT This representation contains only standard keywords and usage. COMMENT COMMENT ----------------------------------------------------------------------- WCSAXESA= 4 / Four coordinate axes WCSNAMEA= 'Standard representation: SZP projection' / Name of this system CRPIX1A = 513.0 / Pixel coordinate of reference point CRPIX2A = 513.0 / Pixel coordinate of reference point CRPIX3A = 1025.0 / Pixel coordinate of reference point CRPIX4A = 1.0 / Pixel coordinate of reference point PC1_1A = 0.866025404 / Linear transformation matrix element PC1_2A = 0.500000000 / Linear transformation matrix element PC2_1A = -0.500000000 / Linear transformation matrix element PC2_2A = 0.866025404 / Linear transformation matrix element CDELT1A = -0.10 / [deg] x-scale CUNIT1A = 'deg' / Degree units are required CTYPE1A = 'RA---SZP' / Right ascension in slant zenithal projection CRVAL1A = 150.0 / [deg] Right ascension at the reference point CNAME1A = 'Right ascension (J2000)' / Axis name for labelling purposes CDELT2A = 0.10 / [deg] y-scale CUNIT2A = 'deg' / Degree units are required CTYPE2A = 'DEC--SZP' / Declination in a slant zenithal projection CRVAL2A = -30.0 / [deg] Declination at the reference point CNAME2A = 'Declination (J2000)' / Axis name for labelling purposes PV1_1A = 0.0 / [deg] Native longitude of the reference point PV1_2A = 90.0 / [deg] Native latitude of the reference point PV1_3A = 195.0 / [deg] LONPOLEa by another name (precedence) PV1_4A = 999.0 / [deg] LATPOLEa by another name (precedence) PV2_1A = 0.0 / SZP distance, in spherical radii PV2_2A = 180.0 / [deg] SZP P-longitude PV2_3A = 45.0 / [deg] SZP P-latitude LONPOLEA= 195.0 / [deg] Native longitude of the NCP LATPOLEA= 999.0 / [deg] Native latitude of the NCP RADESYSA= 'FK5' / Mean equatorial coordinates, IAU 1984 system EQUINOXA= 2000.0 / [yr] Equinox of equatorial coordinates CDELT3A = -9.635265432e-6 / [m] Wavelength scale CUNIT3A = 'm' / Wavelength units CTYPE3A = 'WAVE-F2W' / Frequency axis expressed as wavelength CRVAL3A = 0.214982042 / [m] Reference wavelength CNAME3A = 'Wavelength' / Axis name for labelling purposes CRDER3A = 1.0e-11 / [m] Wavelength calibration, random error CSYER3A = 1.0e-12 / [m] Wavelength calibration, systematic error RESTFRQA= 1.42040575e9 / [Hz] HI rest frequency RESTWAVA= 0.211061141 / [m] HI rest wavelength SPECSYSA= 'BARYCENT' / Reference frame of spectral coordinates SSYSOBSA= 'TOPOCENT' / Reference frame of observation VELOSYSA= 1500.0 / [m/s] Bary-topo velocity towards the source SSYSSRCA= 'LSRK' / Reference frame of source redshift ZSOURCEA= 0.0025 / Redshift of the source CDELT4A = 1.0 / [s] Time scale CUNIT4A = 's' / Time units CTYPE4A = 'TIME''x''' / String value and comment containing quotes (') CRVAL4A = -2e3 / [s] Time at the reference point CNAME4A = 'Time offset' / Axis name for labelling purposes PS4_0A = 'UTC' / Time measurement system COMMENT ----------------------------------------------------------------------- COMMENT Alternate representation 'I' COMMENT ---------------------------- COMMENT COMMENT In the IRAF representation, if one CDi_ja keyword is given then the COMMENT default is zero for any that are omitted. CDELTia and CROTAn COMMENT keywords are included for informational purposes only and otherwise COMMENT are to be ignored. COMMENT COMMENT Strictly speaking, alternate version codes are not defined for CROTAn COMMENT (e.g. CROTA2I below), EPOCHa or VELREFa. The latter two should be COMMENT overridden by EQUINOXa and SPECSYSa even though they occur later in COMMENT the header. COMMENT COMMENT While encoding a TAN projection as SZP may be good for testing COMMENT purposes, approximating it by a zenithal polynomial projection (ZPN) COMMENT is even better! The polynomial coefficients are accurate to the COMMENT number of decimal places given (but don't ever do this in a real COMMENT header). COMMENT COMMENT ----------------------------------------------------------------------- WCSAXESI= 3 / Three coordinate axes WCSNAMEI= 'IRAF representation: ZPN projection' / Name of this coordinate system CRPIX1I = 513.0 / Pixel coordinate of reference point CRPIX2I = 513.0 / Pixel coordinate of reference point CRPIX3I = 1025.0 / Pixel coordinate of reference point CD1_1I = -0.086602540 / Linear transformation matrix element CD1_2I = -0.050000000 / Linear transformation matrix element CD2_1I = -0.050000000 / Linear transformation matrix element CD2_2I = 0.086602540 / Linear transformation matrix element CD3_3I = -4.565153674e-5 / Redshift scale CDELT1I = -0.10 / [deg] x-scale (informational) CUNIT1I = 'deg' / Degree units are required CTYPE1I = 'RA---ZPN' / Right ascension in slant zenithal projection CRVAL1I = 150.0 / [deg] Right ascension at the reference point CNAME1I = 'Right ascension (J2000)' / Axis name for labelling purposes CDELT2I = 0.10 / [deg] y-scale (informational) CUNIT2I = 'deg' / Degree units are required CTYPE2I = 'DEC--ZPN' / Declination in a slant zenithal projection CRVAL2I = -30.0 / [deg] Declination at the reference point CNAME2I = 'Declination (J2000)' / Axis name for labelling purposes PV2_1I = 1.000000000 / ZPN P1 coefficient for approximating TAN PV2_3I = 0.333333333 / ZPN P3 coefficient for approximating TAN PV2_5I = 0.133333333 / ZPN P5 coefficient for approximating TAN PV2_7I = 0.053968254 / ZPN P7 coefficient for approximating TAN PV2_9I = 0.021869489 / ZPN P9 coefficient for approximating TAN PV2_11I = 0.008863236 / ZPN P11 coefficient for approximating TAN PV2_13I = 0.003592128 / ZPN P13 coefficient for approximating TAN PV2_15I = 0.001455834 / ZPN P15 coefficient for approximating TAN PV2_17I = 0.000590027 / ZPN P17 coefficient for approximating TAN PV2_19I = 0.000239129 / ZPN P19 coefficient for approximating TAN LONPOLEI= 195.0 / [deg] Native longitude of the NCP LATPOLEI= 999.0 / [deg] Native latitude of the NCP RADESYSI= 'FK5' / Mean equatorial coordinates, IAU 1984 system EQUINOXI= 2000.0 / [yr] Equinox of equatorial coordinates CDELT3I = -4.565153674e-5 / Redshift scale (informational) CTYPE3I = 'ZOPT-F2W' / Frequency axis expressed as redshift CRVAL3I = 0.018577089 / Reference redshift CNAME3I = 'Redshift' / Axis name for labelling purposes CRDER3I = 5.0e-11 / Redshift calibration, random error CSYER3I = 5.0e-12 / Redshift calibration, systematic error RESTFRQI= 1.42040575e9 / [Hz] HI rest frequency RESTWAVI= 0.211061141 / [m] HI rest wavelength SSYSOBSI= 'TOPOCENT' / Reference frame of observation VELOSYSI= 1500.0 / [m/s] Bary-topo velocity towards the source SSYSSRCI= 'LSRK' / Reference frame of source redshift VSOURCEI= 748544.3 / [m/s] Apparent radial velocity of the source COMMENT As explained above, the following keyrecords are non-standard. CROTA2I = 30.0 / [deg] Bulk image rotation EPOCHI = 2000 / [yr] Equinox of equatorial coordinates VELREFI = 258 / Barycentric radio velocity COMMENT ----------------------------------------------------------------------- COMMENT COMMENT The following keywords have no alternates; they apply to each COMMENT coordinate representation, even that of the AIPS convention for COMMENT which, strictly, only the DATE-OBS keyword should be recognized. COMMENT COMMENT The keycomments for OBSGEO-Y and OBSGEO-Z have been omitted COMMENT deliberately for test purposes. COMMENT COMMENT ----------------------------------------------------------------------- OBSGEO-X= -4554231.9 / [m] ITRF observatory coordinates OBSGEO-Y= 2816758.3 / OBSGEO-Z= -3454035.9 MJD-OBS = 35883.625 / [d] MJD at start of observation (UTC) MJD-AVG = 35883.700 / [d] MJD mid-observation time (UTC) DATE-OBS= '1957-02-14T15:00:00'/ UTC date corresponding to MJD-OBS DATE-AVG= '1957-02-14T16:48:00'/ UTC date corresponding to MJD-AVG COMMENT ----------------------------------------------------------------------- COMMENT COMMENT The following look a little like WCS keywords but should be discarded: COMMENT COMMENT ----------------------------------------------------------------------- COMMENT CRPIXELS= 0.0 / Furphy, not CRPIXja PCATALOG= 0.0 / Furphy, not PCi_ja CDELTA = 0.0 / Furphy, not CDELTia CDI_JA = 0.0 / Furphy, not CDi_ja CUNITARY= 0.0 / Furphy, not CUNITia CTYPEXY = 0.0 / Furphy, not CTYPEia CRVALUE = 0.0 / Furphy, not CRVALia CNAME = 0.0 / Furphy, not CNAMEia PV1_1AL = 0.0 / Furphy, not PVi_ma PV02_1 = 0.0 / Furphy, not PVi_ma (leading zero on i) PV2_01 = 0.0 / Furphy, not PVi_ma (leading zero on m) PSEUDO = 0.0 / Furphy, not PSi_ma EPOCHAL = 0.0 / Furphy, not EPOCH VELREF1 = 0.0 / Furphy, not VELREF COMMENT ----------------------------------------------------------------------- COMMENT COMMENT The following illegal WCS keyrecords should be rejected by wcspih(): COMMENT COMMENT ----------------------------------------------------------------------- COMMENT CTYPE1 = 0.0 / Illegal, CTYPEia must be string type PV2_1 = '0.0' / Illegal, PVi_ma must be numeric PV2_1 = 0.0 / Illegal, "= " not in columns 9-10 EPOCH = '2000.0' / Illegal, EPOCH must be numeric COMMENT ----------------------------------------------------------------------- COMMENT COMMENT The following keyrecords are for testing fitshdr(): COMMENT COMMENT ----------------------------------------------------------------------- COMMENT NOVLSPEC=1 / Not a valid value specifier (no " " in col. 10) INT32 = 00000012345 / Not a 64-bit integer INT32 = -000000123456789 / Not a 64-bit integer INT32 = -2147483648 / Not a 64-bit integer (INT_MIN) INT32 = 2147483647 / Not a 64-bit integer (INT_MAX) INT32 = 0000000000000000000000000000000000012345 / Not a very long integer INT32 = -000000000000000000000000000123456789 / Not a very long integer INT64 = -2147483649 / 64-bit integer (INT_MIN - 1) INT64 = +2147483648 / 64-bit integer (INT_MAX + 1) INT64 = +100000000000000000 / 64-bit integer INT64 = -876543210987654321 / 64-bit integer INT64 = -9223372036854775808 / Not a very long integer (LONG_MIN) INT64 = +9223372036854775807 / Not a very long integer (LONG_MAX) INT64 = -000000000000000000000000000000876543210987654321 / 64-bit integer INTVL = -9223372036854775809 / Very long integer (LONG_MIN - 1) INTVL = +9223372036854775808 / Very long integer (LONG_MAX + 1) INTVL = -100000000000000000000000000000876543210987654321 / Very-long integer INTVL = +123456789012345678901234567890123456789012345678901234567890123456789 INTVL = 1234567890123456789012345678901234567890123456789012345678901234567890 COMPLEX = (137, -1) / An integer complex keyvalue COMPLEX = (10e5, -0.1) / A floating point complex keyvalue GOODSTR = '"G''DAY" ' / A valid string keyvalue BLANKS = ' ' / An all-blank string equals a single blank LONGSTR = 'The loooooongest possible non-continued string value, 68 characters.' CONTSTR = 'The quick brown & ' / Continued string, with & (will be stripped off) CONTINUE 'fox jumps over the' Relaxed handling of invalid keycomment CONTINUE ' lazy dog' PI = 3.14159265358929323 / [!?] is not a valid units specification CONTINUE 'Not a valid string continuation' COMMENT The following are all deliberate syntax errors: BadKey = 111 / Example of a syntax error, invalid keyword BADKEY! = 222 / Example of a syntax error, invalid keyword BAD KEY = 333 / Example of a syntax error, invalid keyword BADSTR = BAD / Example of a syntax error, invalid keyvalue BADSTR = "BAD" / Example of a syntax error, invalid keyvalue BADSTR = 'BAD' 'STR' / Example syntax error, invalid string keyvalue BADFLT = 49 + 94 / Example of a syntax error, invalid keyvalue BADFLT = 1D99 / Example of a syntax error, invalid keyvalue BADCOMM = 999 Example of a syntax error, invalid keycomment END = 'ILLEGAL' / Illegal END keyrecord END DANGLE1 Keyrecords following the END keyrecord should be ignored. DANGLE2 DANGLE3 pywcs-1.12/wcslib/C/test/tbth1.c0000644001153600020070000002024412310355626020462 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tbth1.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tbth1 tests wcsbth(), the WCS FITS parser for binary table headers, and * wcsfix(), which translates non-standard constructs. It reads a test header * and uses wcsprt() to print the resulting wcsprm structs. * * Input comes from file "bth.fits" using either fits_hdr2str() from CFITSIO * if the DO_CFITSIO preprocessor is defined, or read directly using fgets() * otherwise. * *---------------------------------------------------------------------------*/ #include #include #include #if defined HAVE_CFITSIO && defined DO_CFITSIO #include #endif #include #include #include int main() { char infile[] = "bth.fits"; char a, *hptr; short alts[1000][28]; int colsel[8], ctrl, ialt, iblock, icol, ifix, ikeyrec, iwcs, keysel, nkeyrec, nreject, nwcs, relax, stat[NWCSFIX], status; struct wcsprm *wcs; #if defined HAVE_CFITSIO && defined DO_CFITSIO char *header; fitsfile *fptr; #else char keyrec[81], header[288001]; int gotend, k; FILE *fptr; #endif /* Set line buffering in case stdout is redirected to a file, otherwise * stdout and stderr messages will be jumbled (stderr is unbuffered). */ setvbuf(stdout, NULL, _IOLBF, 0); printf("Testing WCSLIB parser for FITS binary table headers (tbth1.c)\n" "-------------------------------------------------------------\n\n"); /* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. */ #if defined HAVE_CFITSIO && defined DO_CFITSIO status = 0; if (fits_open_file(&fptr, infile, READONLY, &status)) { fits_report_error(stderr, status); return 1; } if (fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status)) { fits_report_error(stderr, status); return 1; } fits_close_file(fptr, &status); #else if ((fptr = fopen(infile, "r")) == 0) { fprintf(stderr, "ERROR opening %s\n", infile); return 1; } k = 0; nkeyrec = 0; gotend = 0; for (iblock = 0; iblock < 100; iblock++) { for (ikeyrec = 0; ikeyrec < 36; ikeyrec++) { if (fgets(keyrec, 81, fptr) == 0) { break; } if (strncmp(keyrec, " ", 8) == 0) continue; if (strncmp(keyrec, "COMMENT ", 8) == 0) continue; if (strncmp(keyrec, "HISTORY ", 8) == 0) continue; strncpy(header+k, keyrec, 80); k += 80; nkeyrec++; if (strncmp(keyrec, "END ", 8) == 0) { /* An END keyrecord was read, but read the rest of the block. */ gotend = 1; } } if (gotend) break; } fclose(fptr); #endif fprintf(stderr, "Found %d non-comment header keyrecords.\n\n", nkeyrec); /* Parse the header, allowing all recognized non-standard WCS keywords and * usage. WCS keyrecords that are used are culled from the header, illegal * ones are reported. */ relax = WCSHDR_all; ctrl = -2; keysel = 0; colsel[0] = 0; fprintf(stderr, "\nIllegal-WCS header keyrecords rejected by wcsbth():\n"); if ((status = wcsbth(header, nkeyrec, relax, ctrl, keysel, colsel, &nreject, &nwcs, &wcs))) { fprintf(stderr, "wcsbth ERROR %d: %s.\n", status, wcs_errmsg[status]); } if (!nreject) fprintf(stderr, "(none)\n"); /* List the remaining keyrecords. */ printf("\n\nHeader keyrecords ignored by wcsbth():\n"); hptr = header; while (*hptr) { printf("%.80s\n", hptr); hptr += 80; } #if defined HAVE_CFITSIO && defined DO_CFITSIO free(header); #endif /* Summarize what was found. */ printf("\n\nExtracted %d coordinate description%s:\n", nwcs, (nwcs == 1) ? "" : "s"); printf("\n Unattached image header(s)"); status = wcsbdx(nwcs, &wcs, 0, alts); if (alts[0][27]) { printf(" with indices:\n -"); for (a = 'A'; a <= 'Z'; a++) { printf("%2c", a); } printf("\n "); for (ialt = 0; ialt < 27; ialt++) { if (alts[0][ialt] < 0) { printf(" -"); } else { printf("%2d", alts[0][ialt]); } } printf("\n"); } else { printf(": (none)\n"); } printf("\n Binary table image array(s)"); for (icol = 1; icol <= 999; icol++) { if (alts[icol][27]) { printf(" with indices:\n Col. -"); for (a = 'A'; a <= 'Z'; a++) { printf("%2c", a); } printf("\n"); for (icol = 1; icol <= 999; icol++) { for (ialt = 0; ialt < 27; ialt++) { if (alts[icol][ialt] >= 0) { printf("%5d: ", icol); for (ialt = 0; ialt < 27; ialt++) { if (alts[icol][ialt] < 0) { printf(" -"); } else { printf("%2d", alts[icol][ialt]); } } printf("\n"); break; } } } icol = 9999; } } if (icol < 9999) { printf(": (none)\n"); } printf("\n Pixel list(s)"); status = wcsbdx(nwcs, &wcs, 1, alts); for (icol = 1; icol <= 999; icol++) { if (alts[icol][27]) { printf(" with indices:\n Col. -"); for (a = 'A'; a <= 'Z'; a++) { printf("%2c", a); } printf("\n"); for (icol = 1; icol <= 999; icol++) { for (ialt = 0; ialt < 27; ialt++) { if (alts[icol][ialt] >= 0) { printf("%5d: ", icol); for (ialt = 0; ialt < 27; ialt++) { if (alts[icol][ialt] < 0) { printf(" -"); } else { printf("%2d", alts[icol][ialt]); } } printf("\n"); break; } } } icol = 9999; } } if (icol < 9999) { printf(": (none)\n"); } /* Fix non-standard usage and print each of the wcsprm structs. */ for (iwcs = 0; iwcs < nwcs; iwcs++) { printf("\n------------------------------------" "------------------------------------\n"); /* Fix non-standard WCS keyvalues. */ if ((status = wcsfix(7, 0, wcs+iwcs, stat))) { printf("wcsfix ERROR, status returns: ("); for (ifix = 0; ifix < NWCSFIX; ifix++) { printf(ifix ? ", %d" : "%d", stat[ifix]); } printf(")\n\n"); } if ((status = wcsset(wcs+iwcs))) { fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); continue; } if ((status = wcsprt(wcs+iwcs))) { fprintf(stderr, "wcsprt ERROR %d: %s.\n", status, wcs_errmsg[status]); } } status = wcsvfree(&nwcs, &wcs); /* Do it again to check that wcsbth() can handle multiple invokations. */ printf("\nInvoking wcsbth() a second time on the same header...\n"); ctrl = 0; if ((status = wcsbth(header, nkeyrec, relax, 0, keysel, colsel, &nreject, &nwcs, &wcs))) { fprintf(stderr, "wcsbth ERROR %d: %s.\n", status, wcs_errmsg[status]); } else { printf("OK, extracted %d coordinate description%s.\n", nwcs, (nwcs == 1) ? "" : "s"); } return 0; } pywcs-1.12/wcslib/C/test/tcel1.c0000644001153600020070000002254212310355625020452 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tcel1.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tcel1 tests the spherical projection driver routines supplied with WCSLIB by * drawing native and celestial coordinate graticules for Bonne's projection. * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include int main() { char text[80]; int ci, crval1, crval2, ilat, ilng, j, k, latpole, lonpole, stat[361], status; float xr[512], yr[512]; double lat[181], lng[361], phi[361], theta[361], x[361], y[361]; struct celprm native, celestial; printf( "Testing WCSLIB celestial coordinate transformation routines (tcel1.c)\n" "---------------------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of cel status return values:\n"); for (status = 1; status <= 6; status++) { printf("%4d: %s.\n", status, cel_errmsg[status]); } printf("\n"); /* Initialize. */ celini(&native); /* Reference angles for the native graticule (in fact, the defaults). */ native.ref[0] = 0.0; native.ref[1] = 0.0; /* Set up Bonne's projection with conformal latitude at +35. */ strcpy(native.prj.code, "BON"); native.prj.pv[1] = 35.0; /* Celestial graticule. */ celini(&celestial); celestial.prj = native.prj; /* PGPLOT initialization. */ strcpy(text, "/xwindow"); cpgbeg(0, text, 1, 1); /* Define pen colours. */ cpgscr(0, 0.0f, 0.0f, 0.0f); cpgscr(1, 1.0f, 1.0f, 0.0f); cpgscr(2, 1.0f, 1.0f, 1.0f); cpgscr(3, 0.5f, 0.5f, 0.8f); cpgscr(4, 0.8f, 0.5f, 0.5f); cpgscr(5, 0.8f, 0.8f, 0.8f); cpgscr(6, 0.5f, 0.5f, 0.8f); cpgscr(7, 0.8f, 0.5f, 0.5f); cpgscr(8, 0.3f, 0.5f, 0.3f); /* Define PGPLOT viewport. */ cpgenv(-180.0f, 180.0f, -90.0f, 140.0f, 1, -2); /* Loop over CRVAL2, LONPOLE, and LATPOLE with CRVAL1 incrementing by */ /* 15 degrees each time (it has an uninteresting effect). */ crval1 = -180; for (crval2 = -90; crval2 <= 90; crval2 += 30) { for (lonpole = -180; lonpole <= 180; lonpole += 30) { for (latpole = -1; latpole <= 1; latpole += 2) { /* For the celestial graticule, set the celestial coordinates of * the reference point of the projection (which for Bonne's * projection is at the intersection of the native equator and * prime meridian), the native longitude of the celestial pole, * and extra information needed to determine the celestial * latitude of the native pole. These correspond to FITS keywords * CRVAL1, CRVAL2, LONPOLE, and LATPOLE. */ celestial.ref[0] = (double)crval1; celestial.ref[1] = (double)crval2; celestial.ref[2] = (double)lonpole; celestial.ref[3] = (double)latpole; /* Skip invalid values of LONPOLE. */ if (celset(&celestial)) { continue; } /* Skip redundant values of LATPOLE. */ if (latpole == 1 && fabs(celestial.ref[3]) < 0.1) { continue; } /* Buffer PGPLOT output. */ cpgbbuf(); cpgeras(); /* Write a descriptive title. */ sprintf(text, "Bonne's projection (BON) - 15 degree graticule"); printf("\n%s\n", text); cpgtext(-180.0f, -100.0f, text); sprintf(text, "centred on celestial coordinates (%7.2f,%6.2f)", celestial.ref[0], celestial.ref[1]); printf("%s\n", text); cpgtext (-180.0f, -110.0f, text); sprintf(text, "with north celestial pole at native coordinates " "(%7.2f,%7.2f)", celestial.ref[2], celestial.ref[3]); printf("%s\n", text); cpgtext(-180.0f, -120.0f, text); /* Draw the native graticule faintly in the background. */ cpgsci(8); /* Draw native meridians of longitude. */ for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { lat[j] = (double)ilat; } for (ilng = -180; ilng <= 180; ilng += 15) { lng[0] = (double)ilng; if (ilng == -180) lng[0] = -179.99; if (ilng == 180) lng[0] = 179.99; /* Dash the longitude of the celestial pole. */ if ((ilng-lonpole)%360 == 0) { cpgsls(2); cpgslw(5); } cels2x(&native, 1, 181, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 181; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); cpgsls(1); cpgslw(1); } /* Draw native parallels of latitude. */ lng[0] = -179.99; lng[360] = 179.99; for (j = 1, ilng = -179; ilng < 180; ilng++, j++) { lng[j] = (double)ilng; } for (ilat = -90; ilat <= 90; ilat += 15) { lat[0] = (double)ilat; cels2x(&native, 361, 1, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 361; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); } /* Draw a colour-coded celestial coordinate graticule. */ ci = 1; /* Draw celestial meridians of longitude. */ for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { lat[j] = (double)ilat; } for (ilng = -180; ilng <= 180; ilng += 15) { lng[0] = (double)ilng; if (++ci > 7) ci = 2; cpgsci(ilng?ci:1); /* Dash the reference longitude. */ if ((ilng-crval1)%360 == 0) { cpgsls(2); cpgslw(5); } cels2x(&celestial, 1, 181, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 181; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } /* Test for discontinuities. */ if (j > 0) { if (fabs(x[j]-x[j-1]) > 4.0 || fabs(y[j]-y[j-1]) > 4.0) { if (k > 1) cpgline(k, xr, yr); k = 0; } } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); cpgsls(1); cpgslw(1); } /* Draw celestial parallels of latitude. */ for (j = 0, ilng = -180; ilng <= 180; ilng++, j++) { lng[j] = (double)ilng; } ci = 1; for (ilat = -90; ilat <= 90; ilat += 15) { lat[0] = (double)ilat; if (++ci > 7) ci = 2; cpgsci(ilat?ci:1); /* Dash the reference latitude. */ if (ilat == crval2) { cpgsls(2); cpgslw(5); } cels2x(&celestial, 361, 1, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 361; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } /* Test for discontinuities. */ if (j > 0) { if (fabs(x[j]-x[j-1]) > 4.0 || fabs(y[j]-y[j-1]) > 4.0) { if (k > 1) cpgline(k, xr, yr); k = 0; } } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); cpgsls(1); cpgslw(1); } /* Flush PGPLOT buffer. */ cpgebuf(); printf(" Type for next page: "); getc(stdin); /* Cycle through celestial longitudes. */ if ((crval1 += 15) > 180) crval1 = -180; /* Skip boring celestial latitudes. */ if (crval2 == 0) break; } if (crval2 == 0) break; } } cpgask(0); cpgend(); return 0; } pywcs-1.12/wcslib/C/test/tcel2.c0000644001153600020070000004355012310355625020455 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tcel2.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tcel2 thoroughly tests the WCSLIB celestial coordinate transformation * routines, particularly celset(), by plotting oblique test grids for a wide * variety of transformation parameters. A simple user interface provides * limited control of the path taken through this parameter space. * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include #define nint(x) ((int)(x + (((x) > 0.0) ? 0.5 : -0.5))) int main() { char answer[16], ctrl, text[128]; int ci, crval1, crval1_j, crval2, crval2_i, first, ilat, ilng, iprj, j, k, latpole, lonpole, lonpole_i, lonpole_j, phi_p, stat[361], status; float xr[512], yr[512]; double alpha_p, lat[181], lng[361], phi[361], theta[361], x[361], y[361]; struct celprm native, celestial; printf( "Testing WCSLIB celestial coordinate transformation routines (tcel2.c)\n" "---------------------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of cel status return values:\n"); for (status = 1; status <= 6; status++) { printf("%4d: %s.\n", status, cel_errmsg[status]); } printf("\n\nLegend (in the order drawn)\n---------------------------\n"); printf("Native graticule in dark green with the meridian containing the " "celestial\n pole (LONPOLE) thicker and in green. Also tagged " "beyond the perimeter.\n"); printf("Celestial graticule colour-coded, the direction of increasing " "celestial\n longitude and latitude is white -> blue -> red, " "with the equator and\n prime meridian in yellow.\n"); printf("Celestial meridian (CRVAL1) and parallel (CRVAL2) through the " "reference point\n is thicker and dashed.\n"); printf("Reference point of the projection (phi0,theta0) is marked with " "a green circle\n with red centre. It should coincide with the " "dashed celestial meridian and\n parallel.\n"); printf("Celestial pole (LONPOLE,LATPOLE) marked with a green circle with " "black centre.\n"); printf("Celestial prime meridian expected for \"change of origin\" case " "marked with\n an open yellow circle (where applicable). Should " "coincide with the prime\n meridian.\n"); printf("\n\n"); printf("Loop control; LONPOLE changes fastest, then CRVAL1, then CRVAL2\n" "---------------------------------------------------------------\n" " next: do next plot\n" " skip: skip past invalid values of LONPOLE\n" " break: break out of inner loop on LONPOLE\n" " continue: cycle through inner loop on LONPOLE\n"); printf(" proj: skip to next projection\n" " inc: LONPOLE++, preserving CRVAL1 & CRVAL2\n" " jump: CRVAL2++, preserving CRVAL1 & LONPOLE\n" " exit: terminate execution\n" " quit: terminate execution\n" "Capital letter kills query.\n"); printf("\n\n"); /* PGPLOT initialization. */ strcpy(text, "/xwindow"); cpgbeg(0, text, 1, 1); /* Define pen colours. */ cpgscr( 0, 0.0f, 0.0f, 0.0f); /* Black */ cpgscr( 1, 1.0f, 1.0f, 0.0f); /* Yellow */ cpgscr( 2, 1.0f, 1.0f, 1.0f); /* White */ cpgscr( 3, 0.5f, 0.5f, 0.8f); /* Mauve */ cpgscr( 4, 0.8f, 0.5f, 0.5f); /* Pink */ cpgscr( 5, 0.8f, 0.8f, 0.8f); /* Grey */ cpgscr( 6, 0.5f, 0.5f, 0.8f); /* Mauve */ cpgscr( 7, 0.8f, 0.5f, 0.5f); /* Pink */ cpgscr( 8, 0.3f, 0.5f, 0.3f); /* Dark green */ cpgscr( 9, 0.0f, 1.0f, 0.0f); /* Green */ cpgscr(10, 1.0f, 0.0f, 0.0f); /* Red */ /* Define PGPLOT viewport. */ cpgenv(-195.0f, 195.0f, -195.0f, 195.0f, 1, -2); cpgsch(0.8f); ctrl = 'n'; for (iprj = 0; iprj < 4; iprj++) { /* Initialize. */ celini(&native); celini(&celestial); /* Reference coordinates for the native graticule. */ if (iprj == 0) { /* Set up a zenithal equidistant projection. */ strcpy(native.prj.code, "ARC"); native.ref[0] = 0.0; native.ref[1] = 90.0; native.ref[2] = 180.0; celestial.phi0 = 0.0; celestial.theta0 = 90.0; } else if (iprj == 1) { /* Set up a conic equidistant projection. */ strcpy(native.prj.code, "COD"); native.prj.pv[1] = 45.0; native.prj.pv[2] = 25.0; native.ref[0] = 0.0; native.ref[1] = 45.0; native.ref[2] = 180.0; celestial.phi0 = 60.0; celestial.theta0 = 45.0; } else if (iprj == 2) { /* Set up a Sanson-Flamsteed projection as Bonne's equatorial. */ strcpy(native.prj.code, "BON"); native.prj.pv[1] = 0.0; native.ref[0] = 0.0; native.ref[1] = 0.0; native.ref[2] = 0.0; celestial.phi0 = -30.0; celestial.theta0 = 0.0; } else if (iprj == 3) { /* Set up a polyconic projection. */ strcpy(native.prj.code, "PCO"); native.ref[0] = 0.0; native.ref[1] = 0.0; native.ref[2] = 0.0; celestial.phi0 = -60.0; celestial.theta0 = -90.0; } celestial.prj = native.prj; /* Loop over CRVAL2, CRVAL1 and LONPOLE. */ crval1_j = -180; crval2_i = 45; lonpole_i = 15; lonpole_j = -180; for (crval2 = -90; crval2 <= 90; crval2 += crval2_i) { for (crval1 = -180; crval1 <= 180; crval1 += 90) { first = 1; for (lonpole = -180; lonpole <= 180; lonpole += lonpole_i) { /* lonpole = 999; */ latpole = 999; /* if (crval2 < 0) latpole = -999; */ /* if (crval2 > 0) latpole = 999; */ if (ctrl == 'j' || ctrl == 'J') { /* Restore CRVAL1 and LONPOLE from last time. */ crval1 = crval1_j; lonpole = lonpole_j; } celestial.ref[0] = (double)crval1; celestial.ref[1] = (double)crval2; celestial.ref[2] = (double)lonpole; celestial.ref[3] = (double)latpole; /* Buffer PGPLOT output. */ cpgbbuf(); cpgeras(); cpgsci(2); /* Write parameter summary. */ sprintf(text, "(CRVAL1, CRVAL2, LONPOLE): (%+3.3d, %+2.2d, %+3.3d)", crval1, crval2, lonpole); cpgtext(-180.0f, 200.0f, text); /* Skip invalid values of LONPOLE. */ if (celset(&celestial)) { sprintf(text, "INVALID VALUE OF LONPOLE (= %+3.3d)", lonpole); cpgtext(-90.0f, 0.0f, text); sprintf(text, "%s projection, (\\gf\\d0\\u,\\gh\\d0\\u) = " "(%+3.3d, %+2.2d)", native.prj.code, nint(celestial.phi0), nint(celestial.theta0)); cpgtext(-180.0f, -200.0f, text); if (ctrl == 's' || ctrl == 'S') { cpgebuf(); continue; } goto skip; } /* Write parameters. */ sprintf(text, "%s projection, (\\gf\\d0\\u,\\gh\\d0\\u) = " "(%+3.3d, %+2.2d) - green circle with red centre", native.prj.code, nint(celestial.phi0), nint(celestial.theta0)); cpgtext(-180.0f, -200.0f, text); sprintf(text, "(CRVAL1, CRVAL2): (%+3.3d, %+2.2d) - dashed grid" " lines", nint(celestial.ref[0]), nint(celestial.ref[1])); cpgtext(-180.0f, -213.0f, text); sprintf(text, "(LONPOLE, LATPOLE): (%+3.3d, %+3.3d) -> " "(%+3.3d, %+2.2d) - open green circle", lonpole, latpole, nint(celestial.ref[2]), nint(celestial.ref[3])); cpgtext(-180.0f, -226.0f, text); sprintf(text, "(\\ga\\dp\\u, \\gd\\dp\\u): (%+3.3d, %+2.2d)", nint(celestial.euler[0]), nint(90.0-celestial.euler[1])); cpgtext(-180.0f, -239.0f, text); if (celestial.latpreq == 0) { sprintf(text, "(LATPOLE not required.)"); } else if (celestial.latpreq == 1) { sprintf(text, "(LATPOLE disambiguates.)"); } else if (celestial.latpreq == 2) { sprintf(text, "(LATPOLE IS DEFINITIVE.)"); } cpgtext(-40.0f, -239.0f, text); /* Draw the native graticule in the background (dark green). */ cpgsci(8); /* Draw native meridians of longitude. */ for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { lat[j] = (double)ilat; } phi_p = nint(celestial.ref[2]); for (ilng = -180; ilng <= 180; ilng += 15) { lng[0] = (double)ilng; if (ilng == -180) lng[0] = -179.99; if (ilng == 180) lng[0] = 179.99; /* Meridian containing the celestial pole (thick green). */ if (ilng == phi_p) { cpgslw(5); cpgsci(9); } cels2x(&native, 1, 181, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 181; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); cpgslw(1); cpgsci(8); } /* Draw native parallels of latitude. */ lng[0] = -179.99; lng[360] = 179.99; for (j = 1, ilng = -179; ilng < 180; ilng++, j++) { lng[j] = (double)ilng; } for (ilat = -90; ilat <= 90; ilat += 15) { lat[0] = (double)ilat; cels2x(&native, 361, 1, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 361; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); } /* Tag the longitude of the celestial pole. */ cpgslw(5); cpgsci(9); phi[0] = celestial.ref[2]; theta[0] = -90.0; theta[1] = -80.0; prjs2x(&(native.prj), 1, 2, 1, 1, phi, theta, x, y, stat); xr[0] = -x[0]; yr[0] = y[0]; xr[1] = -x[0] + (x[1] - x[0]); yr[1] = y[0] - (y[1] - y[0]); cpgline(2, xr, yr); /* Draw a colour-coded celestial coordinate graticule. */ ci = 1; /* Draw celestial meridians of longitude. */ for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { lat[j] = (double)ilat; } for (ilng = -180; ilng <= 180; ilng += 15) { lng[0] = (double)ilng; /* Cycle through colours with the prime meridian in yellow. */ if (++ci > 7) ci = 2; cpgsci(ilng?ci:1); /* Dash the reference longitude and make it thicker. */ if ((ilng-crval1)%360 == 0) { cpgsls(2); cpgslw(5); } cels2x(&celestial, 1, 181, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 181; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } /* Test for discontinuities. */ if (j > 0) { if (fabs(phi[j]-phi[j-1]) > 15.0) { if (k > 1) cpgline(k, xr, yr); k = 0; } } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); cpgsls(1); cpgslw(1); } /* Draw celestial parallels of latitude. */ for (j = 0, ilng = -180; ilng <= 180; ilng++, j++) { lng[j] = (double)ilng; } ci = 1; for (ilat = -90; ilat <= 90; ilat += 15) { lat[0] = (double)ilat; /* Cycle through colours with the prime meridian in yellow. */ if (++ci > 7) ci = 2; cpgsci(ilat?ci:1); /* Dash the reference latitude and make it thicker. */ if (ilat == crval2) { cpgsls(2); cpgslw(5); } cels2x(&celestial, 361, 1, 1, 1, lng, lat, phi, theta, x, y, stat); k = 0; for (j = 0; j < 361; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } /* Test for discontinuities. */ if (j > 0) { if (fabs(phi[j]-phi[j-1]) > 15.0) { if (k > 1) cpgline(k, xr, yr); k = 0; } } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); cpgsls(1); cpgslw(1); } /* Mark the fiducial point (green with red centre). */ phi[0] = celestial.phi0; theta[0] = celestial.theta0; prjs2x(&(native.prj), 1, 1, 1, 1, phi, theta, x, y, stat); xr[0] = -x[0]; yr[0] = y[0]; cpgslw(5); cpgsci(9); cpgpt1(xr[0], yr[0], 24); cpgpt1(xr[0], yr[0], 23); cpgsci(10); cpgpt1(xr[0], yr[0], 17); /* Mark the celestial pole. */ phi[0] = celestial.ref[2]; theta[0] = celestial.ref[3]; prjs2x(&(native.prj), 1, 1, 1, 1, phi, theta, x, y, stat); xr[0] = -x[0]; yr[0] = y[0]; cpgslw(5); cpgsci(9); cpgpt1(xr[0], yr[0], 24); cpgpt1(xr[0], yr[0], 23); cpgsci(0); cpgpt1(xr[0], yr[0], 17); /* Mark zero celestial longitude expected for "change of origin" * case with a thick yellow circle. */ if (celestial.euler[1] == 0.0 || celestial.euler[1] == 180.0) { if (celestial.theta0 == 90.0) { alpha_p = celestial.ref[0]; } else if (fabs(celestial.ref[1]) == 90.0) { alpha_p = celestial.ref[0]; } else if (celestial.euler[1] == 0.0) { alpha_p = celestial.ref[0] + celestial.ref[2] - celestial.phi0 - 180.0; } else { alpha_p = celestial.ref[0] - celestial.ref[2] + celestial.phi0; } if (celestial.euler[1] == 0.0) { phi[0] = celestial.euler[2] - alpha_p + 180.0; } else { phi[0] = celestial.euler[2] + alpha_p; } phi[0] = fmod(phi[0], 360.0); if (phi[0] < -180.0) { phi[0] += 360.0; } else if (phi[0] > 180.0) { phi[0] -= 360.0; } theta[0] = -45.0; prjs2x(&(native.prj), 1, 1, 1, 1, phi, theta, x, y, stat); xr[0] = -x[0]; yr[0] = y[0]; cpgslw(5); cpgsci(1); cpgpt1(xr[0], yr[0], 24); } cpgslw(1); /* Flush PGPLOT buffer. */ skip: cpgebuf(); if ((ctrl >= 'A' && ctrl <= 'Z') || ((ctrl == 'c' || ctrl == 'b' || ctrl == 'j') && !first)) { /* Keep going. */ } else { printf("Next, skip, break, continue, exit [%c]: ", ctrl); fgets(answer, 16, stdin); if (strchr("bBcCeEiIjJnNpPqQsS", (int)answer[0]) != 0) { ctrl = answer[0]; } } if (ctrl == 'i' || ctrl == 'I') { lonpole_i = 1; } else { lonpole_i = 15; } if (ctrl == 'P') { /* There's no point in skipping all projections. */ ctrl = 'p'; break; } if (ctrl == 'p') break; if (ctrl == 'b' || ctrl == 'B') break; if (ctrl == 'j' || ctrl == 'J') break; if (ctrl == 'e' || ctrl == 'E') goto end; if (ctrl == 'q' || ctrl == 'Q') goto end; first = 0; } if (ctrl == 'p') break; if (ctrl == 'j' || ctrl == 'J') break; } if (ctrl == 'p') break; if (ctrl == 'j' || ctrl == 'J') { /* Save CRVAL1 and LONPOLE for next time. */ crval1_j = crval1; lonpole_j = lonpole; /* Slow down CRVAL2. */ crval2_i = 1; } else { crval2_i = 45; } } } end: cpgask(0); cpgend(); return 0; } pywcs-1.12/wcslib/C/test/tfitshdr.c0000644001153600020070000002007712310355626021273 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tfitshdr.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tfitshdr tests fitshdr(), the FITS parser for image headers, by reading a * test header and printing the resulting fitskey structs. * * Input comes from file 'pih.fits' using either fits_hdr2str() from CFITSIO * if the DO_CFITSIO preprocessor is defined, or read directly using fgets() * otherwise. * * If the DO_WCSHDR preprocessor macro is defined, wcshdr() will be called * first to extract all WCS-related keyrecords from the input header before * passing it on to fitshdr(). * *---------------------------------------------------------------------------*/ #include #include #include #include #if defined HAVE_CFITSIO && defined DO_CFITSIO #include #endif #ifdef DO_WCSHDR #include #endif #include int main() { char infile[] = "pih.fits"; char text[80]; int i, j, k, nkeyrec, nkeyids, nreject, status; struct fitskey *keys, *kptr; struct fitskeyid keyids[8]; #if defined HAVE_CFITSIO && defined DO_CFITSIO char *header; fitsfile *fptr; #else char keyrec[81], header[288001]; int end; FILE *fptr; #endif #ifdef DO_WCSHDR struct wcsprm *wcs; int ctrl, nwcs, relax; #endif /* Set line buffering in case stdout is redirected to a file, otherwise * stdout and stderr messages will be jumbled (stderr is unbuffered). */ setvbuf(stdout, NULL, _IOLBF, 0); printf("Testing FITS image header parser (tfitshdr.c)\n" "---------------------------------------------\n\n"); /* Read in the FITS header. */ #if defined HAVE_CFITSIO && defined DO_CFITSIO status = 0; if (fits_open_file(&fptr, infile, READONLY, &status)) { fits_report_error(stderr, status); return 1; } if (fits_hdr2str(fptr, 0, NULL, 0, &header, &nkeyrec, &status)) { fits_report_error(stderr, status); return 1; } fits_close_file(fptr, &status); #else if ((fptr = fopen(infile, "r")) == 0) { printf("ERROR opening %s\n", infile); return 1; } k = 0; end = 0; nkeyrec = 0; for (j = 0; j < 100; j++) { for (i = 0; i < 36; i++) { if (fgets(keyrec, 81, fptr) == 0) { break; } strncpy(header+k, keyrec, 80); k += 80; nkeyrec++; if (strncmp(keyrec, "END ", 8) == 0) { /* An END keyrecord was read, but read the rest of the block. */ end = 1; } } if (end) break; } fclose(fptr); #endif printf("Found %d header keyrecords.\n", nkeyrec); #ifdef DO_WCSHDR /* Cull recognized, syntactically valid WCS keyrecords from the header. */ relax = WCSHDR_all; ctrl = -1; if ((status = wcspih(header, nkeyrec, relax, ctrl, &nreject, &nwcs, &wcs))) { fprintf(stderr, "wcspih ERROR %d: %s.\n", status, wcs_errmsg[status]); return 1; } /* Number remaining. */ nkeyrec = strlen(header) / 80; #endif /* Specific keywords to be located or culled. */ strcpy(keyids[0].name, "SIMPLE "); strcpy(keyids[1].name, "BITPIX "); strcpy(keyids[2].name, "NAXIS "); strcpy(keyids[3].name, "COMMENT "); strcpy(keyids[4].name, "HISTORY "); strcpy(keyids[5].name, " "); strcpy(keyids[6].name, "END "); nkeyids = 7; if (nkeyids) { printf("\nThe following keyrecords will not be listed:\n"); for (i = 0; i < nkeyids; i++) { printf(" \"%8s\"\n", keyids[i].name); } } /* Parse the header. */ if ((status = fitshdr(header, nkeyrec, nkeyids, keyids, &nreject, &keys))) { printf("fitskey ERROR %d: %s.\n", status, fitshdr_errmsg[status]); } #if defined HAVE_CFITSIO && defined DO_CFITSIO free(header); #endif /* Report the results. */ printf("\n%d header keyrecords parsed by fitshdr(), %d rejected:\n\n", nkeyrec, nreject); kptr = keys; for (i = 0; i < nkeyrec; i++, kptr++) { /* Skip syntactically valid keyrecords that were indexed. */ if (kptr->keyno < 0 && !kptr->status) continue; /* Basic keyrecord info. */ printf("%4d%5d %-8s%3d", kptr->keyno, kptr->status, kptr->keyword, kptr->type); /* Format the keyvalue for output. */ switch (abs(kptr->type)%10) { case 1: /* Logical. */ sprintf(text, "%c", kptr->keyvalue.i?'T':'F'); break; case 2: /* 32-bit signed integer. */ sprintf(text, "%d", kptr->keyvalue.i); break; case 3: /* 64-bit signed integer. */ #ifdef WCSLIB_INT64 sprintf(text, "%+lld", kptr->keyvalue.k); #else if (kptr->keyvalue.k[2]) { sprintf(text, "%+d%09d%09d", kptr->keyvalue.k[2], abs(kptr->keyvalue.k[1]), abs(kptr->keyvalue.k[0])); } else { sprintf(text, "%+d%09d", kptr->keyvalue.k[1], abs(kptr->keyvalue.k[0])); } #endif break; case 4: /* Very long integer. */ k = 0; for (j = 7; j > 0; j--) { if (kptr->keyvalue.l[j]) { k = j; break; } } sprintf(text, "%+d", kptr->keyvalue.l[k]); for (j = k-1; j >= 0; j--) { sprintf(text+strlen(text), "%09d", abs(kptr->keyvalue.l[j])); } break; case 5: /* Float. */ sprintf(text, "%+13.6e", kptr->keyvalue.f); break; case 6: /* Int complex. */ sprintf(text, "%.0f %.0f", kptr->keyvalue.c[0], kptr->keyvalue.c[1]); break; case 7: /* Float complex. */ sprintf(text, "%+13.6e %+13.6e", kptr->keyvalue.c[0], kptr->keyvalue.c[1]); break; case 8: /* String. */ sprintf(text, "\"%s\"", kptr->keyvalue.s); break; default: /* No value. */ *text = '\0'; break; } if (kptr->type > 0) { /* Keyvalue successfully extracted. */ printf(" %s", text); } else if (kptr->type < 0) { /* Syntax error of some type while extracting the keyvalue. */ printf(" (%s)", text); } /* Units? */ if (kptr->ulen) { printf(" %.*s", kptr->ulen-2, kptr->comment+1); } /* Comment text or reject keyrecord. */ printf("\n%s\n", kptr->comment); } /* Print indexes. */ printf("\n\nIndexes of selected keywords:\n"); for (i = 0; i < nkeyids; i++) { printf("%-8s%5d%5d%5d", keyids[i].name, keyids[i].count, keyids[i].idx[0], keyids[i].idx[1]); /* Print logical (SIMPLE) and integer (BITPIX, NAXIS) values. */ if (keyids[i].count) { kptr = keys + keyids[i].idx[0]; printf("%4d", kptr->type); if (kptr->type == 1) { printf("%5c", kptr->keyvalue.i?'T':'F'); } else if (kptr->type == 2) { printf("%5d", kptr->keyvalue.i); } } printf("\n"); } free(keys); return 0; } pywcs-1.12/wcslib/C/test/tlin.c0000644001153600020070000001023012310355625020377 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tlin.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tlin tests the linear transformation routines supplied with WCSLIB. * *---------------------------------------------------------------------------*/ #include #include #include #include int NAXIS = 5; int NCOORD = 2; int NELEM = 9; double CRPIX[5] = {256.0, 256.0, 64.0, 128.0, 1.0}; double PC[5][5] = {{ 1.0, 0.5, 0.0, 0.0, 0.0}, { 0.5, 1.0, 0.0, 0.0, 0.0}, { 0.0, 0.0, 1.0, 0.0, 0.0}, { 0.0, 0.0, 0.0, 1.0, 0.0}, { 0.0, 0.0, 0.0, 0.0, 1.0}}; double CDELT[5] = { 1.2, 2.3, 3.4, 4.5, 5.6}; double pix0[2][9] = {{303.0, 265.0, 112.4, 144.5, 28.2, 0.0, 0.0, 0.0, 0.0}, { 19.0, 57.0, 2.0, 15.0, 42.0, 0.0, 0.0, 0.0, 0.0}}; const double tol = 1.0e-13; int main() { int i, j, k, nFail, status; double img[2][9], *pcij, pix[2][9], resid, residmax; struct linprm lin; printf("Testing WCSLIB linear transformation routines (tlin.c)\n" "------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of lin status return values:\n"); for (status = 1; status <= 3; status++) { printf("%4d: %s.\n", status, lin_errmsg[status]); } lin.flag = -1; linini(1, NAXIS, &lin); pcij = lin.pc; for (i = 0; i < lin.naxis; i++) { lin.crpix[i] = CRPIX[i]; for (j = 0; j < lin.naxis; j++) { *(pcij++) = PC[i][j]; } lin.cdelt[i] = CDELT[i]; } for (k = 0; k < NCOORD; k++) { printf("\nPIX %d:", k+1); for (j = 0; j < NAXIS; j++) { printf("%14.8f", pix0[k][j]); } } printf("\n"); if ((status = linp2x(&lin, NCOORD, NELEM, pix0[0], img[0]))) { printf("linp2x ERROR %d\n", status); return 1; } for (k = 0; k < NCOORD; k++) { printf("\nIMG %d:", k+1); for (j = 0; j < NAXIS; j++) { printf("%14.8f", img[k][j]); } } printf("\n"); if ((status = linx2p(&lin, NCOORD, NELEM, img[0], pix[0]))) { printf("linx2p ERROR %d\n", status); return 1; } for (k = 0; k < NCOORD; k++) { printf("\nPIX %d:", k+1); for (j = 0; j < NAXIS; j++) { printf("%14.8f", pix[k][j]); } } printf("\n"); /* Check closure. */ nFail = 0; residmax = 0.0; for (k = 0; k < NCOORD; k++) { for (j = 0; j < NAXIS; j++) { resid = fabs(pix[k][j] - pix0[k][j]); if (residmax < resid) residmax = resid; if (resid > tol) nFail++; } } printf("\nlinp2x/linx2p: Maximum closure residual = %.1e pixel.\n", residmax); linfree(&lin); if (nFail) { printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", nFail); } else { printf("\nPASS: All closure residuals are within reporting tolerance.\n"); } return nFail; } pywcs-1.12/wcslib/C/test/tlog.c0000644001153600020070000000737112310355625020412 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tlog.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tlog tests the logarithmic coordinate transformation routines for closure. * *---------------------------------------------------------------------------*/ #include #include #include #define NCRD 10000 const double tol = 1.0e-13; int main() { register int j, k; int nFail = 0, stat1[NCRD], stat2[NCRD], status; double logc[NCRD], resid, residmax, step, x0[NCRD], x1[NCRD]; double crval = 3.3; printf( "Testing closure of WCSLIB logarithmic coordinate routines (tlog.c)\n" "------------------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of log status return values:\n"); for (status = 2; status <= 3; status++) { printf("%4d: %s.\n", status, log_errmsg[status]); } /* Construct a logarithmic axis and test closure. */ step = (40.0/NCRD) / 2.0; for (j = 0, k = -NCRD; j < NCRD; j++, k += 2) { x0[j] = k*step; } printf("\nLogarithmic range: %.1f to %.1f, step: %.4f\n", x0[0], x0[NCRD-1], x0[1] - x0[0]); /* Convert the first to the second. */ if ((status = logx2s(crval, NCRD, 1, 1, x0, logc, stat1))) { printf("logx2s ERROR %d: %s.\n", status, log_errmsg[status]); } /* Convert the second back to the first. */ if ((status = logs2x(crval, NCRD, 1, 1, logc, x1, stat2))) { printf("logs2x ERROR %d: %s.\n", status, log_errmsg[status]); } residmax = 0.0; /* Test closure. */ for (j = 0; j < NCRD; j++) { if (stat1[j]) { printf("logx2s: x =%20.12e -> log = ???, stat = %d\n", x0[j], stat1[j]); continue; } if (stat2[j]) { printf("logs2x: x =%20.12e -> log =%20.12e -> x = ???, stat = %d\n", x0[j], logc[j], stat2[j]); continue; } if (x0[j] == 0.0) { resid = fabs(x1[j] - x0[j]); } else { resid = fabs((x1[j] - x0[j]) / x0[j]); if (resid > residmax) residmax = resid; } if (resid > tol) { nFail++; printf("logx2s: x =%20.12e -> log =%20.12e ->\n x =%20.12e, " "resid =%20.12e\n", x0[j], logc[j], x1[j], resid); } } if (nFail) printf("\n"); printf("logx2s/logs2x: Maximum closure residual = %.1e\n", residmax); if (nFail) { printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", nFail); } else { printf("\nPASS: All closure residuals are within reporting tolerance.\n"); } return nFail; } pywcs-1.12/wcslib/C/test/tofits.c0000644001153600020070000000470512310355625020753 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tofits.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tofits turns a list of FITS header keyrecords, one per line, into a proper * FITS header by padding them with blanks to 80 characters and stripping out * newline characters. It also pads the header to an integral number of 2880- * byte blocks if necessary. * * It operates as a filter, e.g.: * * tofits < infile > outfile * * Input lines beginning with '#' are treated as comments. * *===========================================================================*/ #include int main() { int c, i = 0, nkeyrec = 0; while ((c = getchar()) != EOF) { if (c == '\n') { /* Blank-fill the keyrecord. */ while (i++ < 80) { putchar(' '); } i = 0; nkeyrec++; } else if (c == '#' && i == 0) { /* Discard comments. */ while ((c = getchar()) != EOF) { if (c == '\n') break; } } else { putchar(c); i++; } } /* Pad to a multiple of 2880-bytes. */ if (nkeyrec %= 36) { while (nkeyrec++ < 36) { i = 0; while (i++ < 80) { putchar(' '); } } } return 0; } pywcs-1.12/wcslib/C/test/tpih1.c0000644001153600020070000001406312310355626020467 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tpih1.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tpih1 tests wcspih(), the WCS FITS parser for image headers, and wcsfix(), * which translates non-standard constructs. It reads a test header and uses * wcsprt() to print the resulting wcsprm structs. * * Input comes from file "pih.fits" using either fits_hdr2str() from CFITSIO * if the DO_CFITSIO preprocessor is defined, or read directly using fgets() * otherwise. * *---------------------------------------------------------------------------*/ #include #include #include #if defined HAVE_CFITSIO && defined DO_CFITSIO #include #endif #include #include #include #include int main() { char infile[] = "pih.fits"; char a, *hptr; int alts[27], ctrl, ialt, iblock, ifix, ikeyrec, iwcs, nkeyrec, nreject, nwcs, relax, stat[NWCSFIX], status; struct wcsprm *wcs; #if defined HAVE_CFITSIO && defined DO_CFITSIO char *header; fitsfile *fptr; #else char keyrec[81], header[288001]; int gotend, k; FILE *fptr; #endif /* Set line buffering in case stdout is redirected to a file, otherwise * stdout and stderr messages will be jumbled (stderr is unbuffered). */ setvbuf(stdout, NULL, _IOLBF, 0); printf("Testing WCSLIB parser for FITS image headers (tpih1.c)\n" "------------------------------------------------------\n\n"); /* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. */ #if defined HAVE_CFITSIO && defined DO_CFITSIO status = 0; if (fits_open_file(&fptr, infile, READONLY, &status)) { fits_report_error(stderr, status); return 1; } if (fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status)) { fits_report_error(stderr, status); return 1; } fits_close_file(fptr, &status); #else if ((fptr = fopen(infile, "r")) == 0) { fprintf(stderr, "ERROR opening %s\n", infile); return 1; } k = 0; nkeyrec = 0; gotend = 0; for (iblock = 0; iblock < 100; iblock++) { for (ikeyrec = 0; ikeyrec < 36; ikeyrec++) { if (fgets(keyrec, 81, fptr) == 0) { break; } if (strncmp(keyrec, " ", 8) == 0) continue; if (strncmp(keyrec, "COMMENT ", 8) == 0) continue; if (strncmp(keyrec, "HISTORY ", 8) == 0) continue; strncpy(header+k, keyrec, 80); k += 80; nkeyrec++; if (strncmp(keyrec, "END ", 8) == 0) { /* An END keyrecord was read, but read the rest of the block. */ gotend = 1; } } if (gotend) break; } fclose(fptr); #endif fprintf(stderr, "Found %d non-comment header keyrecords.\n\n", nkeyrec); /* Parse the header, allowing all recognized non-standard WCS keywords and * usage. All WCS keyrecords are culled from the header, illegal ones are * reported. */ relax = WCSHDR_all; ctrl = -2; fprintf(stderr, "\nIllegal-WCS header keyrecords rejected by wcspih():\n"); if ((status = wcspih(header, nkeyrec, relax, ctrl, &nreject, &nwcs, &wcs))) { fprintf(stderr, "wcspih ERROR %d: %s.\n", status, wcs_errmsg[status]); } if (!nreject) fprintf(stderr, "(none)\n"); /* List the remaining keyrecords. */ printf("\n\nNon-WCS header keyrecords not used by wcspih():\n"); hptr = header; while (*hptr) { printf("%.80s\n", hptr); hptr += 80; } #if defined HAVE_CFITSIO && defined DO_CFITSIO free(header); #endif /* Summarize what was found. */ status = wcsidx(nwcs, &wcs, alts); printf("\n\nFound %d alternate coordinate descriptions with indices:\n ", nwcs); for (a = 'A'; a <= 'Z'; a++) { printf("%2c", a); } printf("\n"); for (ialt = 0; ialt < 27; ialt++) { if (alts[ialt] < 0) { printf(" -"); } else { printf("%2d", alts[ialt]); } } printf("\n"); /* Fix non-standard usage and print each of the wcsprm structs. The output * from wcsprt() will be written to an internal buffer and then printed just * to show that it can be done. */ wcsprintf_set(0x0); for (iwcs = 0; iwcs < nwcs; iwcs++) { wcsprintf("\n------------------------------------" "------------------------------------\n"); /* Fix non-standard WCS keyvalues. */ if ((status = wcsfix(7, 0, wcs+iwcs, stat))) { printf("wcsfix ERROR, status returns: ("); for (ifix = 0; ifix < NWCSFIX; ifix++) { printf(ifix ? ", %d" : "%d", stat[ifix]); } printf(")\n\n"); } if ((status = wcsset(wcs+iwcs))) { fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); continue; } if ((status = wcsprt(wcs+iwcs))) { fprintf(stderr, "wcsprt ERROR %d: %s.\n", status, wcs_errmsg[status]); } } printf("%s", wcsprintf_buf()); status = wcsvfree(&nwcs, &wcs); return 0; } pywcs-1.12/wcslib/C/test/tpih2.c0000644001153600020070000001305112310355626020464 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tpih2.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tpih2 tests wcspih(), the WCS FITS parser for image headers, by reading a * test header and using pgsbox() to plot coordinate graticules for the * resulting wcsprm structs. * * Input comes from file "pih.fits" using either fits_hdr2str() from CFITSIO * if the DO_CFITSIO preprocessor is defined, or read directly using fgets() * otherwise. * *---------------------------------------------------------------------------*/ #include #include #include #include #if defined HAVE_CFITSIO && defined DO_CFITSIO #include #endif #include #include #include #include int main() { char infile[] = "pih.fits"; char devtyp[16], idents[3][80], nlcprm[1], opt[2]; int c0[] = {-1, -1, -1, -1, -1, -1, -1}; int i, ic, gcode[2], naxis[2], nkeyrec, nreject, nwcs, relax, status; float blc[2], trc[2]; double cache[257][4], grid1[1], grid2[1], nldprm[1]; struct wcsprm *wcs; nlfunc_t pgwcsl_; #if defined HAVE_CFITSIO && defined DO_CFITSIO char *header; fitsfile *fptr; #else char keyrec[81], header[28801]; int gotend, j, k; FILE *fptr; #endif /* Set line buffering in case stdout is redirected to a file, otherwise * stdout and stderr messages will be jumbled (stderr is unbuffered). */ setvbuf(stdout, NULL, _IOLBF, 0); printf("Testing WCSLIB parser for FITS image headers (tpih2.c)\n" "------------------------------------------------------\n\n"); /* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. */ #if defined HAVE_CFITSIO && defined DO_CFITSIO status = 0; if (fits_open_file(&fptr, infile, READONLY, &status)) { fits_report_error(stderr, status); return 1; } if (fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status)) { fits_report_error(stderr, status); return 1; } fits_close_file(fptr, &status); #else if ((fptr = fopen(infile, "r")) == 0x0) { printf("ERROR opening %s\n", infile); return 1; } k = 0; nkeyrec = 0; gotend = 0; for (j = 0; j < 10; j++) { for (i = 0; i < 36; i++) { if (fgets(keyrec, 81, fptr) == 0) { break; } if (strncmp(keyrec, " ", 8) == 0) continue; if (strncmp(keyrec, "COMMENT ", 8) == 0) continue; if (strncmp(keyrec, "HISTORY ", 8) == 0) continue; strncpy(header+k, keyrec, 80); k += 80; nkeyrec++; if (strncmp(keyrec, "END ", 8) == 0) { /* An END keyrecord was read, but read the rest of the block. */ gotend = 1; } } if (gotend) break; } fclose(fptr); #endif fprintf(stderr, "Found %d non-comment header keyrecords.\n", nkeyrec); relax = WCSHDR_all; if ((status = wcspih(header, nkeyrec, relax, 2, &nreject, &nwcs, &wcs))) { fprintf(stderr, "wcspih ERROR %d: %s.\n", status, wcs_errmsg[status]); } #if defined HAVE_CFITSIO && defined DO_CFITSIO free(header); #endif /* Plot setup. */ naxis[0] = 1024; naxis[1] = 1024; blc[0] = 0.5f; blc[1] = 0.5f; trc[0] = naxis[0] + 0.5f; trc[1] = naxis[1] + 0.5f; strcpy(devtyp, "/XWINDOW"); cpgbeg(0, devtyp, 1, 1); cpgvstd(); cpgwnad(0.0f, 1.0f, 0.0f, 1.0f); cpgask(1); cpgpage(); /* Annotation. */ strcpy(idents[0], "Right ascension"); strcpy(idents[1], "Declination"); opt[0] = 'G'; opt[1] = 'E'; /* Compact lettering. */ cpgsch(0.8f); /* Draw full grid lines. */ cpgsci(1); gcode[0] = 2; gcode[1] = 2; grid1[0] = 0.0; grid2[0] = 0.0; for (i = 0; i < nwcs; i++) { if ((status = wcsset(wcs+i))) { fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); continue; } /* Get WCSNAME out of the wcsprm struct. */ strcpy(idents[2], (wcs+i)->wcsname); printf("\n%s\n", idents[2]); /* Draw the celestial grid. The grid density is set for each world */ /* coordinate by specifying LABDEN = 1224. */ ic = -1; cpgsbox(blc, trc, idents, opt, 0, 1224, c0, gcode, 0.0, 0, grid1, 0, grid2, 0, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(wcs+i), nldprm, 256, &ic, cache, &status); /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); } status = wcsvfree(&nwcs, &wcs); return 0; } pywcs-1.12/wcslib/C/test/tprj1.c0000644001153600020070000002306212310355625020500 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tprj1.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tproj1 tests spherical projections for closure. * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include int projex(char pcode[4], struct prjprm *prj, int north, int south, double tol); int main() { int nFail = 0, status; const double tol = 1.0e-9; struct prjprm prj; printf( "Testing closure of WCSLIB spherical projection routines (tprj1.c)\n" "-----------------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of prj status return values:\n"); for (status = 1; status <= 4; status++) { printf("%4d: %s.\n", status, prj_errmsg[status]); } printf("\n"); prjini(&prj); /* AZP: zenithal/azimuthal perspective. */ prj.pv[1] = 0.5; prj.pv[2] = 30.0; nFail += projex("AZP", &prj, 90, 5, tol); /* SZP: slant zenithal perspective. */ prj.pv[1] = 0.5; prj.pv[2] = 210.0; prj.pv[3] = 60.0; nFail += projex("SZP", &prj, 90, -90, tol); /* TAN: gnomonic. */ nFail += projex("TAN", &prj, 90, 5, tol); /* STG: stereographic. */ nFail += projex("STG", &prj, 90, -85, tol); /* SIN: orthographic/synthesis. */ prj.pv[1] = -0.3; prj.pv[2] = 0.5; nFail += projex("SIN", &prj, 90, 45, tol); /* ARC: zenithal/azimuthal equidistant. */ nFail += projex("ARC", &prj, 90, -90, tol); /* ZPN: zenithal/azimuthal polynomial. */ prj.pv[0] = 0.00000; prj.pv[1] = 0.95000; prj.pv[2] = -0.02500; prj.pv[3] = -0.15833; prj.pv[4] = 0.00208; prj.pv[5] = 0.00792; prj.pv[6] = -0.00007; prj.pv[7] = -0.00019; prj.pv[8] = 0.00000; prj.pv[9] = 0.00000; nFail += projex("ZPN", &prj, 90, 10, tol); /* ZEA: zenithal/azimuthal equal area. */ nFail += projex("ZEA", &prj, 90, -85, tol); /* AIR: Airy's zenithal projection. */ prj.pv[1] = 45.0; nFail += projex("AIR", &prj, 90, -85, tol); /* CYP: cylindrical perspective. */ prj.pv[1] = 3.0; prj.pv[2] = 0.8; nFail += projex("CYP", &prj, 90, -90, tol); /* CEA: cylindrical equal area. */ prj.pv[1] = 0.75; nFail += projex("CEA", &prj, 90, -90, tol); /* CAR: plate carree. */ nFail += projex("CAR", &prj, 90, -90, tol); /* MER: Mercator's. */ nFail += projex("MER", &prj, 85, -85, tol); /* SFL: Sanson-Flamsteed. */ nFail += projex("SFL", &prj, 90, -90, tol); /* PAR: parabolic. */ nFail += projex("PAR", &prj, 90, -90, tol); /* MOL: Mollweide's projection. */ nFail += projex("MOL", &prj, 90, -90, tol); /* AIT: Hammer-Aitoff. */ nFail += projex("AIT", &prj, 90, -90, tol); /* COP: conic perspective. */ prj.pv[1] = 60.0; prj.pv[2] = 15.0; nFail += projex("COP", &prj, 90, -25, tol); /* COE: conic equal area. */ prj.pv[1] = 60.0; prj.pv[2] = -15.0; nFail += projex("COE", &prj, 90, -90, tol); /* COD: conic equidistant. */ prj.pv[1] = -60.0; prj.pv[2] = 15.0; nFail += projex("COD", &prj, 90, -90, tol); /* COO: conic orthomorphic. */ prj.pv[1] = -60.0; prj.pv[2] = -15.0; nFail += projex("COO", &prj, 85, -90, tol); /* BON: Bonne's projection. */ prj.pv[1] = 30.0; nFail += projex("BON", &prj, 90, -90, tol); /* PCO: polyconic. */ nFail += projex("PCO", &prj, 90, -90, tol); /* TSC: tangential spherical cube. */ nFail += projex("TSC", &prj, 90, -90, tol); /* CSC: COBE quadrilateralized spherical cube. */ nFail += projex("CSC", &prj, 90, -90, 4.0e-2); /* QSC: quadrilateralized spherical cube. */ nFail += projex("QSC", &prj, 90, -90, tol); /* HPX: HEALPix projection. */ prj.pv[1] = 4.0; prj.pv[2] = 3.0; nFail += projex("HPX", &prj, 90, -90, tol); if (nFail) { printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", nFail); } else { printf("\nPASS: All closure residuals are within reporting tolerance.\n"); } return nFail; } /*---------------------------------------------------------------------------- * projex() exercises the spherical projection routines. * * Given: * pcode[4] char Projection code. * north int Northern cutoff latitude, degrees. * south int Southern cutoff latitude, degrees. * tol double Reporting tolerance, degrees. * * Given and returned: * prj prjprm* Projection parameters. * * Function return value: * int Number of results exceeding reporting tolerance. *---------------------------------------------------------------------------*/ int projex( char pcode[4], struct prjprm *prj, int north, int south, double tol) { int lat, lng, nFail = 0, stat1[361], stat2[361], status; register int j; double dlat, dlatmx, dlng, dlngmx, dr, drmax; double lat1, lat2[361], lng1[361], lng2[361]; double r, theta; double x[361], x1[361], x2[361], y[361], y1[361], y2[361]; strcpy(prj->code, pcode); /* Uncomment the next line to test alternative initializations of */ /* projection parameters. */ /* prj->r0 = R2D; */ printf("Testing %s; latitudes%3d to%4d, reporting tolerance%8.1e deg.\n", prj->code, north, south, tol); dlngmx = 0.0; dlatmx = 0.0; prjset(prj); for (lat = north; lat >= south; lat--) { lat1 = (double)lat; for (j = 0, lng = -180; lng <= 180; lng++, j++) { lng1[j] = (double)lng; } if (prj->prjs2x(prj, 361, 1, 1, 1, lng1, &lat1, x, y, stat1) == 1) { printf(" %3s(S2X) ERROR 1: %s\n", pcode, prj_errmsg[1]); continue; } if (prj->prjx2s(prj, 361, 0, 1, 1, x, y, lng2, lat2, stat2) == 1) { printf(" %3s(X2S) ERROR 1: %s\n", pcode, prj_errmsg[1]); continue; } for (j = 0; j < 361; j++) { if (stat1[j]) continue; if (stat2[j]) { printf(" %3s(X2S): lng1 =%20.15f lat1 =%20.15f\n", pcode, lng1[j], lat1); printf(" x =%20.15f y =%20.15f ERROR%3d\n", x[j], y[j], stat2[j]); continue; } dlng = fabs(lng2[j] - lng1[j]); if (dlng > 180.0) dlng = fabs(dlng-360.0); if (abs(lat) != 90 && dlng > dlngmx) dlngmx = dlng; dlat = fabs(lat2[j] - lat1); if (dlat > dlatmx) dlatmx = dlat; if (dlat > tol) { nFail++; printf(" %3s: lng1 =%20.15f lat1 =%20.15f\n", pcode, lng1[j], lat1); printf(" x =%20.15f y =%20.15f\n", x[j], y[j]); printf(" lng2 =%20.15f lat2 =%20.15f\n", lng2[j], lat2[j]); } else if (abs(lat) != 90) { if (dlng > tol) { nFail++; printf(" %3s: lng1 =%20.15f lat1 =%20.15f\n", pcode, lng1[j], lat1); printf(" x =%20.15f y =%20.15f\n", x[j], y[j]); printf(" lng2 =%20.15f lat2 =%20.15f\n", lng2[j], lat2[j]); } } } } printf(" Maximum residual (sky): lng%8.1e lat%8.1e\n", dlngmx, dlatmx); /* Test closure at a point close to the reference point. */ r = 1.0; theta = -180.0; drmax = 0.0; for (j = 1; j <= 12; j++) { x1[0] = r*cosd(theta); y1[0] = r*sind(theta); if ((status = prj->prjx2s(prj, 1, 1, 1, 1, x1, y1, lng1, &lat1, stat2))) { printf(" %3s(X2S): x1 =%20.15f y1 =%20.15f ERROR%3d\n", pcode, x1[0], y1[0], status); } else if ((status = prj->prjs2x(prj, 1, 1, 1, 1, lng1, &lat1, x2, y2, stat1))) { printf(" %3s(S2X): x1 =%20.15f y1 =%20.15f\n", pcode, x1[0], y1[0]); printf(" lng =%20.15f lat =%20.15f ERROR%3d\n", lng1[0], lat1, status); } else { dr = sqrt((x2[0]-x1[0])*(x2[0]-x1[0]) + (y2[0]-y1[0])*(y2[0]-y1[0])); if (dr > drmax) drmax = dr; if (dr > tol) { nFail++; printf(" %3s: x1 =%20.15f y1 =%20.15f\n", pcode, x1[0], y1[0]); printf(" lng =%20.15f lat =%20.15f\n", lng1[0], lat1); printf(" x2 =%20.15f y2 =%20.15f\n", x2[0], y2[0]); } } r /= 10.0; theta += 15.0; } printf(" Maximum residual (ref): dR%8.1e\n", drmax); prjini(prj); return nFail; } pywcs-1.12/wcslib/C/test/tprj2.c0000644001153600020070000002654312310355625020510 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tprj2.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tproj2 tests projection routines by plotting test graticules using PGPLOT. * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include int main() { void prjplt(); int status; char text[80], text1[80], text2[80]; struct prjprm prj; printf("Testing WCSLIB spherical projection routines (tprj2.c)\n" "------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of prj status return values:\n"); for (status = 1; status <= 4; status++) { printf("%4d: %s.\n", status, prj_errmsg[status]); } printf("\n"); /* PGPLOT initialization. */ strcpy(text, "/xwindow"); cpgbeg(0, text, 1, 1); /* Define pen colours. */ cpgscr(0, 0.00f, 0.00f, 0.00f); cpgscr(1, 1.00f, 1.00f, 0.00f); cpgscr(2, 1.00f, 1.00f, 1.00f); cpgscr(3, 0.50f, 0.50f, 0.80f); cpgscr(4, 0.80f, 0.50f, 0.50f); cpgscr(5, 0.80f, 0.80f, 0.80f); cpgscr(6, 0.50f, 0.50f, 0.80f); cpgscr(7, 0.80f, 0.50f, 0.50f); cpgscr(8, 0.30f, 0.50f, 0.30f); strcpy(text1, "\n%s projection\n"); strcpy(text2, "\n%s projection\nParameters:"); prjini(&prj); /* AZP: zenithal/azimuthal perspective. */ prj.pv[1] = 2.0; prj.pv[2] = 30.0; printf(text2, "Zenithal/azimuthal perspective"); printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); prjplt("AZP", 90, -90, &prj); /* SZP: slant zenithal perspective. */ prj.pv[1] = 2.0; prj.pv[2] = 210.0; prj.pv[3] = 60.0; printf(text2, "Slant zenithal perspective"); printf("%12.5f%12.5f%12.5f\n", prj.pv[1], prj.pv[2], prj.pv[3]); prjplt("SZP", 90, -90, &prj); /* TAN: gnomonic. */ printf(text1, "Gnomonic"); prjplt("TAN", 90, 5, &prj); /* STG: stereographic. */ printf(text1, "Stereographic"); prjplt("STG", 90, -85, &prj); /* SIN: orthographic. */ prj.pv[1] = -0.3; prj.pv[2] = 0.5; printf(text2, "Orthographic/synthesis"); printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); prjplt("SIN", 90, -90, &prj); /* ARC: zenithal/azimuthal equidistant. */ printf(text1, "Zenithal/azimuthal equidistant"); prjplt("ARC", 90, -90, &prj); /* ZPN: zenithal/azimuthal polynomial. */ prj.pv[0] = 0.05000; prj.pv[1] = 0.95000; prj.pv[2] = -0.02500; prj.pv[3] = -0.15833; prj.pv[4] = 0.00208; prj.pv[5] = 0.00792; prj.pv[6] = -0.00007; prj.pv[7] = -0.00019; prj.pv[8] = 0.00000; prj.pv[9] = 0.00000; printf(text2, "Zenithal/azimuthal polynomial"); printf("%12.5f%12.5f%12.5f%12.5f%12.5f\n", prj.pv[0], prj.pv[1], prj.pv[2], prj.pv[3], prj.pv[4]); printf(" %12.5f%12.5f%12.5f%12.5f%12.5f\n", prj.pv[5], prj.pv[6], prj.pv[7], prj.pv[8], prj.pv[9]); prjplt("ZPN", 90, 10, &prj); /* ZEA: zenithal/azimuthal equal area. */ printf(text1, "Zenithal/azimuthal equal area"); prjplt("ZEA", 90, -90, &prj); /* AIR: Airy's zenithal projection. */ prj.pv[1] = 45.0; printf(text2, "Airy's zenithal"); printf("%12.5f\n", prj.pv[1]); prjplt("AIR", 90, -85, &prj); /* CYP: cylindrical perspective. */ prj.pv[1] = 3.0; prj.pv[2] = 0.8; printf(text2, "Cylindrical perspective"); printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); prjplt("CYP", 90, -90, &prj); /* CEA: cylindrical equal area. */ prj.pv[1] = 0.75; printf(text2, "Cylindrical equal area"); printf("%12.5f\n", prj.pv[1]); prjplt("CEA", 90, -90, &prj); /* CAR: plate carree. */ printf(text1, "Plate carree"); prjplt("CAR", 90, -90, &prj); /* MER: Mercator's. */ printf(text1, "Mercator's"); prjplt("MER", 85, -85, &prj); /* SFL: Sanson-Flamsteed. */ printf(text1, "Sanson-Flamsteed (global sinusoid)"); prjplt("SFL", 90, -90, &prj); /* PAR: parabolic. */ printf(text1, "Parabolic"); prjplt("PAR", 90, -90, &prj); /* MOL: Mollweide's projection. */ printf(text1, "Mollweide's"); prjplt("MOL", 90, -90, &prj); /* AIT: Hammer-Aitoff. */ printf(text1, "Hammer-Aitoff"); prjplt("AIT", 90, -90, &prj); /* COP: conic perspective. */ prj.pv[1] = 60.0; prj.pv[2] = 15.0; printf(text2, "Conic perspective"); printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); prjplt("COP", 90, -25, &prj); /* COE: conic equal area. */ prj.pv[1] = 60.0; prj.pv[2] = -15.0; printf(text2, "Conic equal area"); printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); prjplt("COE", 90, -90, &prj); /* COD: conic equidistant. */ prj.pv[1] = -60.0; prj.pv[2] = 15.0; printf(text2, "Conic equidistant"); printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); prjplt("COD", 90, -90, &prj); /* COO: conic orthomorphic. */ prj.pv[1] = -60.0; prj.pv[2] = -15.0; printf(text2, "Conic orthomorphic"); printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); prjplt("COO", 85, -90, &prj); /* BON: Bonne's projection. */ prj.pv[1] = 30.0; printf(text2, "Bonne's"); printf("%12.5f\n", prj.pv[1]); prjplt("BON", 90, -90, &prj); /* PCO: polyconic. */ printf(text1, "Polyconic"); prjplt("PCO", 90, -90, &prj); /* TSC: tangential spherical cube. */ printf(text1, "Tangential spherical cube"); prjplt("TSC", 90, -90, &prj); /* CSC: COBE quadrilateralized spherical cube. */ printf(text1, "COBE quadrilateralized spherical cube"); prjplt("CSC", 90, -90, &prj); /* QSC: quadrilateralized spherical cube. */ printf(text1, "Quadrilateralized spherical cube"); prjplt("QSC", 90, -90, &prj); /* HPX: HEALPix projection. */ prj.pv[1] = 4.0; prj.pv[2] = 3.0; printf(text1, "HEALPix"); prjplt("HPX", 90, -90, &prj); cpgask(0); cpgend(); return 0; } /*---------------------------------------------------------------------------- * PRJPLT draws a 15 degree coordinate graticule. * * Given: * pcode[4] char Projection mnemonic. * north int Northern cutoff latitude, degrees. * south int Southern cutoff latitude, degrees. * * Given and returned: * prj prjprm* Projection parameters. *---------------------------------------------------------------------------*/ void prjplt(pcode, north, south, prj) char pcode[4]; int north, south; struct prjprm *prj; { char text[80]; int ci, h, ilat, ilng, interrupted, len, stat[361]; register int j, k; float hx, hy, sx, sy, xr[512], yr[512]; double lat[361], lng[361], x[361], y[361]; strcpy(prj->code, pcode); printf("Plotting %s; latitudes%3d to%4d.\n", prj->code, north, south); cpgask(0); prjset(prj); if (prj->category == QUADCUBE) { /* Draw the perimeter of the quadcube projection. */ cpgenv(-335.0f, 65.0f, -200.0f, 200.0f, 1, -2); cpgsci(2); sprintf(text,"%s - 15 degree graticule", pcode); cpgtext(-340.0f, -220.0f, text); cpgsci(8); xr[0] = 45.0 + prj->x0; yr[0] = 45.0 - prj->y0; xr[1] = 45.0 + prj->x0; yr[1] = 3.0*45.0 - prj->y0; xr[2] = -45.0 + prj->x0; yr[2] = 3.0*45.0 - prj->y0; xr[3] = -45.0 + prj->x0; yr[3] = -3.0*45.0 - prj->y0; xr[4] = 45.0 + prj->x0; yr[4] = -3.0*45.0 - prj->y0; xr[5] = 45.0 + prj->x0; yr[5] = 45.0 - prj->y0; xr[6] = -7.0*45.0 + prj->x0; yr[6] = 45.0 - prj->y0; xr[7] = -7.0*45.0 + prj->x0; yr[7] = -45.0 - prj->y0; xr[8] = 45.0 + prj->x0; yr[8] = -45.0 - prj->y0; cpgline(9, xr, yr); } else { cpgenv(-200.0f, 200.0f, -200.0f, 200.0f, 1, -2); cpgsci(2); sprintf(text,"%s - 15 degree graticule", pcode); cpgtext(-240.0f, -220.0f, text); if (prj->category == HEALPIX) { /* Draw the perimeter of the HEALPix projection. */ cpgsci(8); h = (int)(prj->pv[1] + 0.5); sx = 180.0f / h; sy = sx * (int)(prj->pv[2] + 1.5) / 2.0f; hx = 180.0f + prj->x0; hy = sy - sx - prj->y0; cpgmove(hx, hy); for (j = 0; j < h; j++) { hx -= sx; hy += sx; cpgdraw(hx, hy); hx -= sx; hy -= sx; cpgdraw(hx, hy); } hx = 180.0f + prj->x0; hy = -sy + sx - prj->y0; k = ((int)prj->pv[2])%2 ? 1 : -1; if (k == -1) hy -= sx; cpgmove(hx, hy); for (j = 0; j < h; j++) { hx -= sx; hy -= k*sx; cpgdraw(hx, hy); hx -= sx; hy += k*sx; cpgdraw(hx, hy); } } } ci = 1; for (ilng = -180; ilng <= 180; ilng+=15) { if (++ci > 7) ci = 2; lng[0] = (double)ilng; cpgsci(ilng?ci:1); len = north - south + 1; for (j = 0, ilat = north; ilat >= south; ilat--, j++) { lat[j] = (double)ilat; } prj->prjs2x(prj, 1, len, 1, 1, lng, lat, x, y, stat); k = 0; for (j = 0; j < len; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } if (prj->category == QUADCUBE && j > 0) { if (fabs(x[j] - x[j-1]) > 2.0 || fabs(y[j] - y[j-1]) > 5.0) { if (k > 1) cpgline(k, xr, yr); k = 0; } } else if (prj->category == HEALPIX && ilng == 180) { if (x[j] > 180.0) { continue; } } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); } ci = 1; interrupted = (prj->category == QUADCUBE || prj->category == HEALPIX); for (ilat = -90; ilat <= 90; ilat += 15) { if (++ci > 7) ci = 2; if (ilat > north) continue; if (ilat < south) continue; lat[0] = (double)ilat; cpgsci(ilat?ci:1); for (j = 0, ilng = -180; ilng <= 180; ilng++, j++) { lng[j] = (double)ilng; } prj->prjs2x(prj, 361, 1, 1, 1, lng, lat, x, y, stat); k = 0; for (j = 0; j <= 360; j++) { if (stat[j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } if (interrupted && j > 0) { if (fabs(x[j] - x[j-1]) > 2.0 || fabs(y[j] - y[j-1]) > 5.0) { if (k > 1) cpgline(k, xr, yr); k = 0; } } xr[k] = -x[j]; yr[k] = y[j]; k++; } cpgline(k, xr, yr); } cpgsci(1); xr[0] = 0.0f; yr[0] = 0.0f; cpgpt(1, xr, yr, 21); cpgask(1); cpgpage(); prjini(prj); return; } pywcs-1.12/wcslib/C/test/tspc.c0000644001153600020070000003044512310355625020414 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tspc.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tspc tests the spectral transformation driver routines for closure. * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include #define NSPEC 10001 const double tol = 1.0e-11; const double C = 2.99792458e8; int closure(const char[9], double, double, int, double, double, double); /* KPNO MARS spectrograph grism parameters. */ double mars[7] = {4.5e5, 1.0, 27.0, 1.765, -1.077e6, 3.0, 5.0}; int main() { char text[80]; int naxisj, nFail = 0, status; double cdeltX, crpixj, crvalX, restfrq, restwav, x1, x2; printf( "Testing closure of WCSLIB spectral transformation routines (tspc.c)\n" "-------------------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of spc status return values:\n"); for (status = 1; status <= 4; status++) { printf("%4d: %s.\n", status, spc_errmsg[status]); } /* PGPLOT initialization. */ strcpy(text, "/xwindow"); cpgbeg(0, text, 1, 1); naxisj = NSPEC; crpixj = naxisj/2 + 1; restfrq = 1420.40595e6; restwav = C/restfrq; x1 = 1.0e9; x2 = 2.0e9; cdeltX = (x2 - x1)/(naxisj - 1); crvalX = x1 + (crpixj - 1.0)*cdeltX; printf("\nLinear frequency axis, span: %.1f to %.1f (GHz), step: %.3f " "(kHz)\n---------------------------------------------------------" "-----------------\n", x1*1e-9, x2*1e-9, cdeltX*1e-3); nFail += closure("WAVE-F2W", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VOPT-F2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("ZOPT-F2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("AWAV-F2A", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VELO-F2V", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("BETA-F2V", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); restwav = 700.0e-9; restfrq = C/restwav; x1 = 300.0e-9; x2 = 900.0e-9; cdeltX = (x2 - x1)/(naxisj - 1); crvalX = x1 + (crpixj - 1.0)*cdeltX; printf("\nLinear vacuum wavelength axis, span: %.0f to %.0f (nm), " "step: %f (nm)\n---------------------------------------------" "-----------------------------\n", x1*1e9, x2*1e9, cdeltX*1e9); nFail += closure("FREQ-W2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("AFRQ-W2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("ENER-W2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("WAVN-W2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VRAD-W2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("AWAV-W2A", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VELO-W2V", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("BETA-W2V", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); printf("\nLinear air wavelength axis, span: %.0f to %.0f (nm), " "step: %f (nm)\n------------------------------------------" "--------------------------------\n", x1*1e9, x2*1e9, cdeltX*1e9); nFail += closure("FREQ-A2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("AFRQ-A2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("ENER-A2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("WAVN-A2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VRAD-A2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("WAVE-A2W", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VOPT-A2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("ZOPT-A2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VELO-A2V", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("BETA-A2V", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); restfrq = 1420.40595e6; restwav = C/restfrq; x1 = -0.96*C; x2 = 0.96*C; cdeltX = (x2 - x1)/(naxisj - 1); crvalX = x1 + (crpixj - 1.0)*cdeltX; printf("\nLinear velocity axis, span: %.0f to %.0f m/s, step: %.0f " "(m/s)\n------------------------------------------------------" "--------------------\n", x1, x2, cdeltX); nFail += closure("FREQ-V2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("AFRQ-V2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("ENER-V2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("WAVN-V2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VRAD-V2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("WAVE-V2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VOPT-V2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("ZOPT-V2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("AWAV-V2A", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); restwav = 650.0e-9; restfrq = C/restwav; x1 = 300e-9; x2 = 1000e-9; cdeltX = (x2 - x1)/(naxisj - 1); crvalX = x1 + (crpixj - 1.0)*cdeltX; printf("\nVacuum wavelength grism axis, span: %.0f to %.0f (nm), " "step: %f (nm)\n--------------------------------------------" "------------------------------\n", x1*1e9, x2*1e9, cdeltX*1e9); nFail += closure("FREQ-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("AFRQ-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("ENER-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("WAVN-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VRAD-GRI", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("WAVE-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VOPT-GRI", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("ZOPT-GRI", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("AWAV-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VELO-GRI", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); nFail += closure("BETA-GRI", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); /* Reproduce Fig. 5 of Paper III. */ naxisj = 1700; crpixj = 719.8; crvalX = 7245.2e-10; cdeltX = 2.956e-10; restwav = 8500.0e-10; restfrq = C/restwav; x1 = crvalX + (1 - crpixj)*cdeltX; x2 = crvalX + (naxisj - crpixj)*cdeltX; mars[5] = 0.0; mars[6] = 0.0; printf("\nAir wavelength grism axis, span: %.0f to %.0f (nm), " "step: %f (nm)\n--------------------------------------------" "------------------------------\n", x1*1e9, x2*1e9, cdeltX*1e9); nFail += closure("AWAV-GRA", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); nFail += closure("VELO-GRA", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); cpgask(0); cpgend(); if (nFail) { printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", nFail); } else { printf("\nPASS: All closure residuals are within reporting tolerance.\n"); } return nFail; } /*--------------------------------------------------------------------------*/ int closure ( const char ctypeS[9], double restfrq, double restwav, int naxisj, double crpixj, double cdeltX, double crvalX) { char ptype, sname[32], title[80], units[8], xtype, ylab[80]; int nFail = 0, restreq, stat1[NSPEC], stat2[NSPEC], status; register int j; float tmp, x[NSPEC], xmin, xmax, y[NSPEC], ymax, ymin; double cdeltS, clos[NSPEC], crvalS, dSdX, resid, residmax, spec1[NSPEC], spec2[NSPEC]; struct spcprm spc; /* Get keyvalues for the required spectral axis type. */ if ((status = spcxps(ctypeS, crvalX, restfrq, restwav, &ptype, &xtype, &restreq, &crvalS, &dSdX))) { printf("ERROR %d from spcxps() for %s.\n", status, ctypeS); return 1; } cdeltS = cdeltX * dSdX; spcini(&spc); if (ctypeS[5] == 'G') { /* KPNO MARS spectrograph grism parameters. */ spc.pv[0] = mars[0]; spc.pv[1] = mars[1]; spc.pv[2] = mars[2]; spc.pv[3] = mars[3]; spc.pv[4] = mars[4]; spc.pv[5] = mars[5]; spc.pv[6] = mars[6]; } /* Construct the axis. */ for (j = 0; j < naxisj; j++) { spec1[j] = (j+1 - crpixj)*cdeltS; } printf("%4s (CRVALk+w) range: %13.6e to %13.6e, step: %13.6e\n", ctypeS, crvalS+spec1[0], crvalS+spec1[naxisj-1], cdeltS); /* Initialize. */ spc.flag = 0; spc.crval = crvalS; spc.restfrq = restfrq; spc.restwav = restwav; strncpy(spc.type, ctypeS, 4); spc.type[4] = '\0'; strcpy(spc.code, ctypeS+5); /* Convert the first to the second. */ if ((status = spcx2s(&spc, naxisj, 1, 1, spec1, spec2, stat1))) { printf("spcx2s ERROR %d: %s.\n", status, spc_errmsg[status]); } /* Convert the second back to the first. */ if ((status = spcs2x(&spc, naxisj, 1, 1, spec2, clos, stat2))) { printf("spcs2x ERROR %d: %s.\n", status, spc_errmsg[status]); } residmax = 0.0; /* Test closure. */ for (j = 0; j < naxisj; j++) { if (stat1[j]) { printf("%s: w =%20.12e -> %s = ???, stat = %d\n", ctypeS, spec1[j], spc.type, stat1[j]); continue; } if (stat2[j]) { printf("%s: w =%20.12e -> %s =%20.12e -> w = ???, stat = %d\n", ctypeS, spec1[j], spc.type, spec2[j], stat2[j]); continue; } resid = fabs((clos[j] - spec1[j])/cdeltS); if (resid > residmax) residmax = resid; if (resid > tol) { nFail++; printf("%s: w =%20.12e -> %s =%20.12e ->\n w =%20.12e, " "resid =%20.12e\n", ctypeS, spec1[j], spc.type, spec2[j], clos[j], resid); } } printf("%s: Maximum closure residual = %.1e pixel.\n", ctypeS, residmax); /* Draw graph. */ cpgbbuf(); cpgeras(); xmin = (float)(crvalS + spec1[0]); xmax = (float)(crvalS + spec1[naxisj-1]); ymin = (float)(spec2[0]) - xmin; ymax = ymin; for (j = 0; j < naxisj; j++) { x[j] = (float)(j+1); y[j] = (float)(spec2[j] - (crvalS + spec1[j])); if (y[j] > ymax) ymax = y[j]; if (y[j] < ymin) ymin = y[j]; } j = (int)crpixj + 1; if (y[j] < 0.0) { tmp = ymin; ymin = ymax; ymax = tmp; } cpgask(0); cpgenv(1.0f, (float)naxisj, ymin, ymax, 0, -1); cpgsci(1); cpgbox("ABNTS", 0.0f, 0, "BNTS", 0.0f, 0); spctyp(ctypeS, 0x0, 0x0, sname, units, 0x0, 0x0, 0x0); sprintf(ylab, "%s - correction [%s]", sname, units); sprintf(title, "%s: CRVALk + w [%s]", ctypeS, units); cpglab("Pixel coordinate", ylab, title); cpgaxis("N", 0.0f, ymax, (float)naxisj, ymax, xmin, xmax, 0.0f, 0, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f); cpgaxis("N", (float)naxisj, ymin, (float)naxisj, ymax, (float)(ymin/cdeltS), (float)(ymax/cdeltS), 0.0f, 0, 0.5f, 0.0f, 0.5f, 0.1f, 0.0f); cpgmtxt("R", 2.2f, 0.5f, 0.5f, "Pixel offset"); cpgline(naxisj, x, y); cpgsci(7); cpgpt1((float)crpixj, 0.0f, 24); cpgebuf(); printf("Type for next page: "); (void)getchar(); printf("\n"); return nFail; } pywcs-1.12/wcslib/C/test/tsph.c0000644001153600020070000001063712310355626020423 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tsph.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tsph tests the spherical coordinate transformation routines for closure. * *---------------------------------------------------------------------------*/ #include #include #include #include #include int main() { int j, lat, lng, nFail = 0; double coslat, dlat, dlatmx, dlng, dlngmx, lng1[361], lng2[361], eul[5], lat1, lat2[361], phi[361], theta[361], zeta; const double tol = 1.0e-12; printf( "Testing closure of WCSLIB coordinate transformation routines (tsph.c)\n" "---------------------------------------------------------------------\n"); /* Set reference angles. */ eul[0] = 90.0; eul[1] = 30.0; eul[2] = -90.0; printf("\n%s\n%s%10.4f%10.4f%10.4f\n", "Celestial longitude and latitude of the native pole, and native", "longitude of the celestial pole (degrees):", eul[0], eul[1], eul[2]); eul[3] = cosd(eul[1]); eul[4] = sind(eul[1]); printf ("Reporting tolerance:%8.1e degrees of arc.\n", tol); dlngmx = 0.0; dlatmx = 0.0; for (lat = 90; lat >= -90; lat--) { lat1 = (double)lat; coslat = cosd(lat1); for (j = 0, lng = -180; lng <= 180; lng++, j++) { lng1[j] = (double)lng; } sphs2x(eul, 361, 1, 1, 1, lng1, &lat1, phi, theta); sphx2s(eul, 361, 0, 1, 1, phi, theta, lng2, lat2); for (j = 0; j <= 360; j++) { dlng = fabs(lng2[j] - lng1[j]); if (dlng > 180.0) dlng = fabs(dlng-360.0); dlng *= coslat; dlat = fabs(lat2[j]-lat1); if (dlng > dlngmx) dlngmx = dlng; if (dlat > dlatmx) dlatmx = dlat; if (dlng > tol || dlat > tol) { nFail++; printf("Unclosed: lng1 =%20.15f lat1 =%20.15f\n", lng1[j], lat1); printf(" phi =%20.15f theta =%20.15f\n", phi[j], theta[j]); printf(" lng2 =%20.15f lat2 =%20.15f\n", lng2[j], lat2[j]); } } } /* Test closure at points close to the pole. */ for (j = -1; j <= 1; j += 2) { zeta = 1.0; lng1[0] = -180.0; for (lat = 0; lat < 12; lat++) { lat1 = (double)j*(90.0 - zeta); sphs2x(eul, 1, 1, 1, 1, lng1, &lat1, phi, theta); sphx2s(eul, 1, 1, 1, 1, phi, theta, lng2, lat2); dlng = fabs(lng2[0] - lng1[0]); if (dlng > 180.0) dlng = fabs(dlng-360.0); dlng *= coslat; dlat = fabs(lat2[0]-lat1); if (dlng > dlngmx) dlngmx = dlng; if (dlat > dlatmx) dlatmx = dlat; if (dlng > tol || dlat > tol) { nFail++; printf("Unclosed: lng1 =%20.15f lat1 =%20.15f\n", lng1[0], lat1); printf(" phi =%20.15f theta =%20.15f\n", phi[0], theta[0]); printf(" lng2 =%20.15f lat2 =%20.15f\n", lng2[0], lat2[0]); } zeta /= 10.0; lng1[0] += 30.0; } } printf("\nsphs2x/sphx2s: Maximum closure residual = %.1e (lng), %.1e (lat) " "deg.\n", dlngmx, dlatmx); if (nFail) { printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", nFail); } else { printf("\nPASS: All closure residuals are within reporting tolerance.\n"); } return nFail; } pywcs-1.12/wcslib/C/test/tsphdpa.c0000644001153600020070000000411412310355625021100 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tsphdpa.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tsphdpa tests sphdpa(). * *---------------------------------------------------------------------------*/ #include #include "sph.h" int main() { double dist, lat, lat0, lng, lng0, pa; printf("\nEnter reference (lng,lat): "); scanf("%lf%*[ , ]%lf", &lng0, &lat0); while (1) { printf("\nEnter field (lng,lat): "); scanf("%lf%*[ , ]%lf", &lng, &lat); sphdpa(1, lng0, lat0, &lng, &lat, &dist, &pa); printf("(%.4f,%.4f) - (%.4f,%.4f) -> (%.4f,%.4f) (dist,pa)\n", lng0, lat0, lng, lat, dist, pa); sphpad(1, lng0, lat0, &dist, &pa, &lng, &lat); printf("(%.4f,%.4f) + (%.4f,%.4f) -> (%.4f,%.4f) (lng,lat)\n", lng0, lat0, dist, pa, lng, lat); } return 0; } pywcs-1.12/wcslib/C/test/tspx.c0000644001153600020070000002207712310355625020443 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tspx.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tspx tests the spectral transformation routines for closure. * *---------------------------------------------------------------------------*/ #include #include #include #define NSPEC 9991 const double C = 2.99792458e8; const double tol = 1.0e-9; int closure(const char *from, const char *to, double parm, int (*fwd)(SPX_ARGS), int (*rev)(SPX_ARGS), const double spec1[], double spec2[]); int main() { int nFail = 0, stat[NSPEC], status; double restfrq, restwav, step; double awav[NSPEC], freq[NSPEC], spc1[NSPEC], spc2[NSPEC], velo[NSPEC], wave[NSPEC]; struct spxprm spx; register int j, k; printf( "Testing closure of WCSLIB spectral transformation routines (tspx.c)\n" "-------------------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of spx status return values:\n"); for (status = 1; status <= 4; status++) { printf("%4d: %s.\n", status, spx_errmsg[status]); } restfrq = 1420.40595e6; restwav = C/restfrq; /* Exercise specx(). */ printf("\nTesting spectral cross-conversions (specx).\n\n"); if ((status = specx("VELO", 4.3e5, restfrq, restwav, &spx))) { printf("specx ERROR %d: %s.\n", status, spx_errmsg[status]); return 1; } printf(" restfrq:%20.12e\n", spx.restfrq); printf(" restwav:%20.12e\n", spx.restwav); printf(" wavetype:%3d\n", spx.wavetype); printf(" velotype:%3d\n", spx.velotype); printf("\n"); printf(" freq:%20.12e\n", spx.freq); printf(" afrq:%20.12e\n", spx.afrq); printf(" ener:%20.12e\n", spx.ener); printf(" wavn:%20.12e\n", spx.wavn); printf(" vrad:%20.12e\n", spx.vrad); printf(" wave:%20.12e\n", spx.wave); printf(" vopt:%20.12e\n", spx.vopt); printf(" zopt:%20.12e\n", spx.zopt); printf(" awav:%20.12e\n", spx.awav); printf(" velo:%20.12e\n", spx.velo); printf(" beta:%20.12e\n", spx.beta); printf("\n"); printf("dfreq/dafrq:%20.12e\n", spx.dfreqafrq); printf("dafrq/dfreq:%20.12e\n", spx.dafrqfreq); printf("dfreq/dener:%20.12e\n", spx.dfreqener); printf("dener/dfreq:%20.12e\n", spx.denerfreq); printf("dfreq/dwavn:%20.12e\n", spx.dfreqwavn); printf("dwavn/dfreq:%20.12e\n", spx.dwavnfreq); printf("dfreq/dvrad:%20.12e\n", spx.dfreqvrad); printf("dvrad/dfreq:%20.12e\n", spx.dvradfreq); printf("dfreq/dwave:%20.12e\n", spx.dfreqwave); printf("dwave/dfreq:%20.12e\n", spx.dwavefreq); printf("dfreq/dawav:%20.12e\n", spx.dfreqawav); printf("dawav/dfreq:%20.12e\n", spx.dawavfreq); printf("dfreq/dvelo:%20.12e\n", spx.dfreqvelo); printf("dvelo/dfreq:%20.12e\n", spx.dvelofreq); printf("dwave/dvopt:%20.12e\n", spx.dwavevopt); printf("dvopt/dwave:%20.12e\n", spx.dvoptwave); printf("dwave/dzopt:%20.12e\n", spx.dwavezopt); printf("dzopt/dwave:%20.12e\n", spx.dzoptwave); printf("dwave/dawav:%20.12e\n", spx.dwaveawav); printf("dawav/dwave:%20.12e\n", spx.dawavwave); printf("dwave/dvelo:%20.12e\n", spx.dwavevelo); printf("dvelo/dwave:%20.12e\n", spx.dvelowave); printf("dawav/dvelo:%20.12e\n", spx.dawavvelo); printf("dvelo/dawav:%20.12e\n", spx.dveloawav); printf("dvelo/dbeta:%20.12e\n", spx.dvelobeta); printf("dbeta/dvelo:%20.12e\n", spx.dbetavelo); printf("\n"); /* Construct a linear velocity spectrum. */ step = (2.0*C/NSPEC) / 2.0; for (j = 0, k = -NSPEC; j < NSPEC; j++, k += 2) { velo[j] = (k+1)*step; } printf("\nVelocity range: %.3f to %.3f km/s, step: %.3f km/s\n", velo[0]*1e-3, velo[NSPEC-1]*1e-3, (velo[1] - velo[0])*1e-3); /* Convert it to frequency. */ velofreq(restfrq, NSPEC, 1, 1, velo, freq, stat); /* Test closure of all two-way combinations. */ nFail += closure("freq", "afrq", 0.0, freqafrq, afrqfreq, freq, spc1); nFail += closure("afrq", "freq", 0.0, afrqfreq, freqafrq, spc1, spc2); nFail += closure("freq", "ener", 0.0, freqener, enerfreq, freq, spc1); nFail += closure("ener", "freq", 0.0, enerfreq, freqener, spc1, spc2); nFail += closure("freq", "wavn", 0.0, freqwavn, wavnfreq, freq, spc1); nFail += closure("wavn", "freq", 0.0, wavnfreq, freqwavn, spc1, spc2); nFail += closure("freq", "vrad", restfrq, freqvrad, vradfreq, freq, spc1); nFail += closure("vrad", "freq", restfrq, vradfreq, freqvrad, spc1, spc2); nFail += closure("freq", "wave", 0.0, freqwave, wavefreq, freq, wave); nFail += closure("wave", "freq", 0.0, wavefreq, freqwave, wave, spc2); nFail += closure("freq", "awav", 0.0, freqawav, awavfreq, freq, awav); nFail += closure("awav", "freq", 0.0, awavfreq, freqawav, awav, spc2); nFail += closure("freq", "velo", restfrq, freqvelo, velofreq, freq, velo); nFail += closure("velo", "freq", restfrq, velofreq, freqvelo, velo, spc2); nFail += closure("wave", "vopt", restwav, wavevopt, voptwave, wave, spc1); nFail += closure("vopt", "wave", restwav, voptwave, wavevopt, spc1, spc2); nFail += closure("wave", "zopt", restwav, wavezopt, zoptwave, wave, spc1); nFail += closure("zopt", "wave", restwav, zoptwave, wavezopt, spc1, spc2); nFail += closure("wave", "awav", 0.0, waveawav, awavwave, wave, spc1); nFail += closure("awav", "wave", 0.0, awavwave, waveawav, spc1, spc2); nFail += closure("wave", "velo", restwav, wavevelo, velowave, wave, spc1); nFail += closure("velo", "wave", restwav, velowave, wavevelo, spc1, spc2); nFail += closure("awav", "velo", restwav, awavvelo, veloawav, awav, spc1); nFail += closure("velo", "awav", restwav, veloawav, awavvelo, spc1, spc2); nFail += closure("velo", "beta", 0.0, velobeta, betavelo, velo, spc1); nFail += closure("beta", "velo", 0.0, betavelo, velobeta, spc1, spc2); if (nFail) { printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", nFail); } else { printf("\nPASS: All closure residuals are within reporting tolerance.\n"); } return nFail; } /*--------------------------------------------------------------------------*/ int closure ( const char *from, const char *to, double parm, int (*fwd)(SPX_ARGS), int (*rev)(SPX_ARGS), const double spec1[], double spec2[]) { static char skip = '\0'; int nFail = 0, stat1[NSPEC], stat2[NSPEC], status; register int j; double clos[NSPEC], resid, residmax; /* Convert the first to the second. */ if ((status = fwd(parm, NSPEC, 1, 1, spec1, spec2, stat1))) { printf("%s%s ERROR %d: %s.\n", from, to, status, spx_errmsg[status]); } /* Convert the second back to the first. */ if ((status = rev(parm, NSPEC, 1, 1, spec2, clos, stat2))) { printf("%s%s ERROR %d: %s.\n", to, from, status, spx_errmsg[status]); } residmax = 0.0; /* Test closure. */ for (j = 0; j < NSPEC; j++) { if (stat1[j]) { printf("%c%s%s: %s = %.12e -> %s = ???, stat = %d\n", skip, from, to, from, spec1[j], to, stat1[j]); skip = '\0'; continue; } if (stat2[j]) { printf("%c%s%s: %s = %.12e -> %s = %.12e -> %s = ???, stat = %d\n", skip, to, from, from, spec1[j], to, spec2[j], from, stat2[j]); skip = '\0'; continue; } if (spec1[j] == 0.0) { resid = fabs(clos[j] - spec1[j]); } else { resid = fabs((clos[j] - spec1[j])/spec1[j]); if (resid > residmax) residmax = resid; } if (resid > tol) { nFail++; printf("%c%s%s: %s = %.12e -> %s = %.12e ->\n %s = %.12e, " "resid = %.1e\n", skip, from, to, from, spec1[j], to, spec2[j], from, clos[j], resid); skip = '\0'; } } printf("%s%s: Maximum closure residual = %.1e\n", from, to, residmax); if (residmax > tol) { printf("\n"); skip = '\0'; } else { skip = '\n'; } return nFail; } pywcs-1.12/wcslib/C/test/ttab1.c0000644001153600020070000002501012310355625020446 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: ttab1.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * ttab1 tests the -TAB routines for closure. * *---------------------------------------------------------------------------*/ #include #include #include /* Reporting tolerance. */ const double tol = 1.0e-8; int main() { char nl; int i, j, K[2], K1, K2, k, k1, k2, M, m, map[2], n, nFail = 0, stat0[128], stat1[128], status, status0, status1; double crpix, crval[2], epsilon, *index[1], psi_0, psi_1, resid, residmax, s[16], world[11][11][2], xt0[16], xt1[16], x0[11][11][2], x1[11][11][2], z; struct tabprm tab; printf( "Testing closure of WCSLIB tabular coordinate routines (ttab1.c)\n" "---------------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of tab status return values:\n"); for (status = 1; status <= 5; status++) { printf("%4d: %s.\n", status, tab_errmsg[status]); } printf("\nReporting tolerance %5.1G.\n", tol); /* First a 1-dimensional table without index. */ printf("\nOne-dimensional test without index:\n"); M = 1; K[0] = 10; tab.flag = -1; tab.index = index; if ((status = tabini(1, M, K, &tab))) { printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); return 1; } tab.M = M; tab.K[0] = K[0]; tab.map[0] = 0; tab.crval[0] = 0.0; tab.index[0] = 0x0; tab.coord[0] = 101.0; tab.coord[1] = 102.0; tab.coord[2] = 104.0; tab.coord[3] = 107.0; tab.coord[4] = 111.0; tab.coord[5] = 116.0; tab.coord[6] = 122.0; tab.coord[7] = 129.0; tab.coord[8] = 137.0; tab.coord[9] = 146.0; xt0[0] = 1.0; xt0[1] = 2.0; xt0[2] = 3.0; xt0[3] = 4.0; xt0[4] = 5.0; xt0[5] = 6.0; xt0[6] = 7.0; xt0[7] = 8.0; xt0[8] = 9.0; xt0[9] = 10.0; xt0[10] = 0.5; xt0[11] = 1.1; xt0[12] = 2.5; xt0[13] = 4.7; xt0[14] = 8.125; xt0[15] = 10.5; status0 = tabx2s(&tab, 16, 1, (double *)xt0, (double *)s, stat0); status1 = tabs2x(&tab, 16, 1, (double *)s, (double *)xt1, stat1); printf(" x -> s -> x\n"); for (i = 0; i < 16; i++) { printf("%8.5f%12.5f%9.5f", xt0[i], s[i], xt1[i]); if (stat0[i] || stat1[i]) { printf(" ERROR\n"); } else { printf("\n"); } if (i == 9) printf("\n"); } nl = 1; if (status0) { if (nl) printf("\n"); printf("tabx2s ERROR %d: %s.\n", status0, tab_errmsg[status0]); nl = 0; } if (status1) { if (nl) printf("\n"); printf("tabs2x ERROR %d: %s.\n", status1, tab_errmsg[status1]); } /* Test closure. */ nl = 1; residmax = 0.0; for (i = 0; i < 16; i++) { if (stat0[i]) { printf("\n tabx2s: x = %6.1f, stat = %d\n", xt0[i], stat0[i]); nl = 1; continue; } if (stat1[i]) { printf("\n tabs2x: s = %6.1f, stat = %d\n", s[i], stat1[i]); nl = 1; continue; } resid = fabs(xt1[i] - xt0[i]); if (resid > residmax) residmax = resid; if (resid > tol) { nFail++; if (nl) printf("\n"); printf(" Closure error:\n"); printf(" x = %20.15f\n", xt0[i]); printf(" -> s = %20.15f\n", s[i]); printf(" -> x = %20.15f\n", xt1[i]); nl = 0; } } tabfree(&tab); tab.index = 0x0; /* Now the 1-dimensional table from Sect. 6.2.3 of Paper III. */ printf("\n\nOne-dimensional test with index:\n"); M = 1; K[0] = 8; tab.flag = -1; if ((status = tabini(1, M, K, &tab))) { printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); return 1; } tab.M = M; tab.K[0] = K[0]; tab.map[0] = 0; tab.crval[0] = 0.0; tab.index[0][0] = 0.0; tab.index[0][1] = 1.0; tab.index[0][2] = 1.0; tab.index[0][3] = 2.0; tab.index[0][4] = 2.0; tab.index[0][5] = 3.0; tab.index[0][6] = 3.0; tab.index[0][7] = 4.0; tab.coord[0] = 1997.84512; tab.coord[1] = 1997.84631; tab.coord[2] = 1993.28451; tab.coord[3] = 1993.28456; tab.coord[4] = 2001.59234; tab.coord[5] = 2001.59239; tab.coord[6] = 2002.18265; tab.coord[7] = 2002.18301; epsilon = 1e-3; crpix = 0.5; xt0[0] = 0.5 + epsilon - crpix; xt0[1] = 1.0 - crpix; xt0[2] = 1.5 - epsilon - crpix; xt0[3] = 1.5 + epsilon - crpix; xt0[4] = 2.0 - crpix; xt0[5] = 2.5 - epsilon - crpix; xt0[6] = 2.5 + epsilon - crpix; xt0[7] = 3.0 - crpix; xt0[8] = 3.5 - epsilon - crpix; xt0[9] = 3.5 + epsilon - crpix; xt0[10] = 4.0 - crpix; xt0[11] = 4.5 - epsilon - crpix; status0 = tabx2s(&tab, 12, 1, (double *)xt0, (double *)s, stat0); status1 = tabs2x(&tab, 12, 1, (double *)s, (double *)xt1, stat1); printf(" x -> time -> x\n"); for (i = 0; i < 12; i++) { printf("%8.5f%12.5f%9.5f", xt0[i], s[i], xt1[i]); if (stat0[i] || stat1[i]) { printf(" ERROR\n"); } else { printf("\n"); } } nl = 1; if (status0) { if (nl) printf("\n"); printf("tabx2s ERROR %d: %s.\n", status0, tab_errmsg[status0]); nl = 0; } if (status1) { if (nl) printf("\n"); printf("tabs2x ERROR %d: %s.\n", status1, tab_errmsg[status1]); } /* Test closure. */ nl = 1; residmax = 0.0; for (i = 0; i < 12; i++) { if (stat0[i]) { printf("\n tabx2s: x = %6.1f, stat = %d\n", xt0[i], stat0[i]); nl = 1; continue; } if (stat1[i]) { printf("\n tabs2x: s = %6.1f, stat = %d\n", s[i], stat1[i]); nl = 1; continue; } resid = fabs(xt1[i] - xt0[i]); if (resid > residmax) residmax = resid; if (resid > tol) { nFail++; if (nl) printf("\n"); printf(" Closure error:\n"); printf(" x = %20.15f\n", xt0[i]); printf(" -> s = %20.15f\n", s[i]); printf(" -> x = %20.15f\n", xt1[i]); nl = 0; } } tabfree(&tab); /* Now a 2-dimensional table. */ printf("\n\nTwo-dimensional test with index:\n"); M = 2; K[0] = K1 = 32; K[1] = K2 = 16; map[0] = 0; map[1] = 1; crval[0] = 4.0; crval[1] = -1.0; tab.flag = -1; if ((status = tabini(1, M, K, &tab))) { printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); return 1; } /* Set up the tabprm struct. */ tab.M = M; for (m = 0; m < tab.M; m++) { tab.K[m] = K[m]; tab.map[m] = map[m]; tab.crval[m] = crval[m]; /* Construct a trivial 0-relative index. */ for (k = 0; k < tab.K[m]; k++) { tab.index[m][k] = (double)k; } } /* Construct a coordinate table. */ n = 0; z = 1.0 / (double)((K1-1) * (K2-1)); for (k2 = 0; k2 < K2; k2++) { for (k1 = 0; k1 < K1; k1++) { tab.coord[n++] = 3.0*k1*k2*z; tab.coord[n++] = -1.0*(K1-k1-1)*k2*z + 0.01*k1; } } /* Construct an array of intermediate world coordinates to transform. */ for (i = 0; i < 11; i++) { for (j = 0; j < 11; j++) { /* Compute psi_m within bounds... */ psi_0 = i*(K1-1)/10.0; psi_1 = j*(K2-1)/10.0; /* ...then compute x from it. */ x0[i][j][0] = psi_0 - crval[0]; x0[i][j][1] = psi_1 - crval[1]; } } /* Transform them to and fro. */ status0 = tabx2s(&tab, 121, 2, (double *)x0, (double *)world, stat0); status1 = tabs2x(&tab, 121, 2, (double *)world, (double *)x1, stat1); /* Print the results. */ printf(" x -> s -> x \n"); n = 0; for (i = 0; i < 11; i++) { for (j = 0; j < 11; j++, n++) { /* Print every sixth one only. */ if (n%6) continue; printf("(%4.1f,%4.1f) (%4.2f,%6.3f) (%4.1f,%4.1f)", x0[i][j][0], x0[i][j][1], world[i][j][0], world[i][j][1], x1[i][j][0], x1[i][j][1]); if (stat0[n] || stat1[n]) { printf(" ERROR\n"); } else { printf("\n"); } } } nl = 1; if (status0) { if (nl) printf("\n"); printf("tabx2s ERROR %d: %s.\n", status0, tab_errmsg[status0]); nl = 0; } if (status1) { if (nl) printf("\n"); printf("tabs2x ERROR %d: %s.\n", status1, tab_errmsg[status1]); } /* Check for closure. */ n = 0; nl = 1; residmax = 0.0; for (i = 0; i < 11; i++) { for (j = 0; j < 11; j++, n++) { if (stat0[n]) { printf(" tabx2s: x = (%6.1f,%6.1f), stat = %d\n", x0[i][j][0], x0[i][j][1], stat0[n]); nl = 1; continue; } if (stat1[n]) { printf(" tabs2x: s = (%6.1f,%6.1f), stat = %d\n", world[i][j][0], world[i][j][1], stat1[n]); nl = 1; continue; } for (m = 0; m < M; m++) { resid = fabs(x1[i][j][m] - x0[i][j][m]); if (resid > residmax) residmax = resid; if (resid > tol) { nFail++; if (nl) printf("\n"); printf(" Closure error:\n"); printf(" x = (%20.15f,%20.15f)\n", x0[i][j][0], x0[i][j][1]); printf(" -> w = (%20.15f,%20.15f)\n", world[i][j][0], world[i][j][1]); printf(" -> x = (%20.15f,%20.15f)\n", x1[i][j][0], x1[i][j][1]); nl = 0; break; } } } } printf("\ntabx2s/tabs2x: Maximum closure residual = %.1e\n", residmax); tabfree(&tab); if (nFail) { printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", nFail); } else { printf("\nPASS: All closure residuals are within reporting tolerance.\n"); } return nFail; } pywcs-1.12/wcslib/C/test/ttab2.c0000644001153600020070000001760112310355626020457 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: ttab2.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * ttab2 tests the -TAB routines using PGPLOT for graphical display. It * demonstrates the nature of linear interpolation in 2 dimensions by * contouring the interior a single 2 x 2 interpolation element as the values * in each corner change. * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include #define K1 2 #define K2 2 /* Number of subdivisions on each side of the interpolation element. */ #define NP 128 int main() { /* Set up a 2 x 2 lookup table. */ const int M = 2; const int K[] = {K1, K2}; const int map[] = {0, 1}; const double crval[] = {0.0, 0.0}; char text[80]; int i, j, k, l, l1, l2, l3, lstep, m, stat[NP*NP], status; float array[NP][NP], clev[31], v0, v1, w; const float scl = 2.0f/(NP-1); float ltm[6]; double x[NP][NP][2], world[NP][NP][2]; struct tabprm tab; printf("Testing WCSLIB coordinate lookup table routines (ttab2.c)\n" "---------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of tab status return values:\n"); for (status = 1; status <= 5; status++) { printf("%4d: %s.\n", status, tab_errmsg[status]); } printf("\n"); /* PGPLOT initialization. */ strcpy(text, "/xwindow"); cpgbeg(0, text, 1, 1); cpgvstd(); cpgsch(0.7f); /* The viewport is slightly oversized. */ cpgwnad(-0.65f, 1.65f, -0.65f, 1.65f); for (l = 0; l <= 30; l++) { clev[l] = 0.2f*(l-10); } ltm[0] = -scl*(1.0f + (NP-1)/4.0f); ltm[1] = scl; ltm[2] = 0.0f; ltm[3] = -scl*(1.0f + (NP-1)/4.0f); ltm[4] = 0.0f; ltm[5] = scl; /* Set up the lookup table. */ tab.flag = -1; if ((status = tabini(1, M, K, &tab))) { printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); return 1; } tab.M = M; for (m = 0; m < tab.M; m++) { tab.K[m] = K[m]; tab.map[m] = map[m]; tab.crval[m] = crval[m]; for (k = 0; k < tab.K[m]; k++) { tab.index[m][k] = (double)k; } } /* Subdivide the interpolation element. */ for (i = 0; i < NP; i++) { for (j = 0; j < NP; j++) { x[i][j][0] = j*(K1-1.0)*scl - 0.5 - crval[0]; x[i][j][1] = i*(K2-1.0)*scl - 0.5 - crval[1]; } } /* The first coordinate element is static. */ tab.coord[0] = 0.0; tab.coord[2] = 0.0; tab.coord[4] = 0.0; tab.coord[6] = 0.0; /* (k1,k2) = (0,0). */ tab.coord[1] = 0.0; /* The second coordinate element varies in three of the corners. */ for (l3 = 0; l3 <= 100; l3 += 20) { /* (k1,k2) = (1,1). */ tab.coord[7] = 0.01 * l3; for (l2 = 0; l2 <= 100; l2 += 20) { /* (k1,k2) = (0,1). */ tab.coord[5] = 0.01 * l2; cpgpage(); for (l1 = 0; l1 <= 100; l1 += 2) { /* (k1,k2) = (1,0). */ tab.coord[3] = 0.01 * l1; /* Compute coordinates within the interpolation element. */ tab.flag = 0; if ((status = tabx2s(&tab, NP*NP, 2, (double *)x, (double *)world, stat))) { printf("tabx2s ERROR %d: %s.\n", status, tab_errmsg[status]); } /* Start a new plot. */ cpgbbuf(); cpgeras(); cpgsci(1); cpgslw(3); cpgbox("BCNST", 0.0f, 0, "BCNSTV", 0.0f, 0); cpgmtxt("T", 0.7f, 0.5f, 0.5f, "-TAB coordinates: " "linear interpolation / extrapolation in 2-D"); /* Draw the boundary of the interpolation element in red. */ cpgsci(2); cpgmove(-0.5f, 0.0f); cpgdraw( 1.5f, 0.0f); cpgmove( 1.0f, -0.5f); cpgdraw( 1.0f, 1.5f); cpgmove( 1.5f, 1.0f); cpgdraw(-0.5f, 1.0f); cpgmove( 0.0f, 1.5f); cpgdraw( 0.0f, -0.5f); /* Label the value of the coordinate element in each corner. */ sprintf(text, "%.1f", tab.coord[1]); cpgtext(-0.09f, -0.05f, text); sprintf(text, "%.2f", tab.coord[3]); cpgtext( 1.02f, -0.05f, text); sprintf(text, "%.1f", tab.coord[5]); cpgtext(-0.13f, 1.02f, text); sprintf(text, "%.1f", tab.coord[7]); cpgtext( 1.02f, 1.02f, text); cpgsci(1); /* Contour labelling: bottom. */ v0 = world[0][0][1]; v1 = world[0][NP-1][1]; if (v0 != v1) { lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; for (l = -200; l <= 300; l += lstep) { w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); if (w < -0.5 || w > 1.5) continue; sprintf(text, "%4.1f", l*0.01f); cpgptxt(w+0.04f, -0.56f, 0.0f, 1.0f, text); } } /* Contour labelling: left. */ v0 = world[0][0][1]; v1 = world[NP-1][0][1]; if (v0 != v1) { lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; for (l = -200; l <= 300; l += lstep) { w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); if (w < -0.5 || w > 1.5) continue; sprintf(text, "%4.1f", l*0.01f); cpgptxt(-0.52f, w-0.02f, 0.0f, 1.0f, text); } } /* Contour labelling: right. */ v0 = world[0][NP-1][1]; v1 = world[NP-1][NP-1][1]; if (v0 != v1) { lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; for (l = -200; l <= 300; l += lstep) { w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); if (w < -0.5 || w > 1.5) continue; sprintf(text, "%.1f", l*0.01f); cpgptxt(1.52f, w-0.02f, 0.0f, 0.0f, text); } } /* Contour labelling: top. */ v0 = world[NP-1][0][1]; v1 = world[NP-1][NP-1][1]; if (v0 != v1) { lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; for (l = -200; l <= 300; l += lstep) { w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); if (w < -0.5 || w > 1.5) continue; sprintf(text, "%4.1f", l*0.01f); cpgptxt(w+0.04f, 1.52f, 0.0f, 1.0f, text); } } /* Draw contours for the second coordinate element. */ for (i = 0; i < NP; i++) { for (j = 0; j < NP; j++) { array[i][j] = world[i][j][1]; } } cpgsci(4); cpgslw(2); cpgcont(array[0], NP, NP, 1, NP, 1, NP, clev, 10, ltm); cpgsci(7); cpgcont(array[0], NP, NP, 1, NP, 1, NP, clev+10, 1, ltm); cpgsci(5); cpgcont(array[0], NP, NP, 1, NP, 1, NP, clev+11, 20, ltm); cpgebuf(); } } } cpgend(); tabfree(&tab); return 0; } pywcs-1.12/wcslib/C/test/ttab3.c0000644001153600020070000001223112310355626020452 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: ttab3.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * ttab3 tests the -TAB routines using PGPLOT for graphical display. It * constructs a table that approximates Bonne's projection and uses it to * draw a graticule. * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #define K1 271 #define K2 235 int main() { /* Set up the lookup table. */ const int M = 2; const int K[] = {K1, K2}; const int map[] = {0, 1}; const double crval[] = {135.0, 95.0}; char text[80]; int ci, i, ilat, ilng, j, k, m, stat[K2][K1], status; float xr[361], yr[361]; double *dp, world[361][2], x[K1], xy[361][2], y[K2]; struct tabprm tab; struct prjprm prj; printf( "Testing WCSLIB inverse coordinate lookup table routines (ttab3.c)\n" "-----------------------------------------------------------------\n"); /* List status return messages. */ printf("\nList of tab status return values:\n"); for (status = 1; status <= 5; status++) { printf("%4d: %s.\n", status, tab_errmsg[status]); } printf("\n"); /* PGPLOT initialization. */ strcpy(text, "/xwindow"); cpgbeg(0, text, 1, 1); cpgvstd(); cpgsch(0.7f); cpgwnad(-135.0f, 135.0f, -95.0f, 140.0f); cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgscr(0, 0.00f, 0.00f, 0.00f); cpgscr(1, 1.00f, 1.00f, 0.00f); cpgscr(2, 1.00f, 1.00f, 1.00f); cpgscr(3, 0.50f, 0.50f, 0.80f); cpgscr(4, 0.80f, 0.50f, 0.50f); cpgscr(5, 0.80f, 0.80f, 0.80f); cpgscr(6, 0.50f, 0.50f, 0.80f); cpgscr(7, 0.80f, 0.50f, 0.50f); cpgscr(8, 0.30f, 0.50f, 0.30f); /* Set up the lookup table. */ tab.flag = -1; if ((status = tabini(1, M, K, &tab))) { printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); return 1; } tab.M = M; for (m = 0; m < tab.M; m++) { tab.K[m] = K[m]; tab.map[m] = map[m]; tab.crval[m] = crval[m]; for (k = 0; k < tab.K[m]; k++) { tab.index[m][k] = (double)k; } } /* Set up the lookup table to approximate Bonne's projection. */ for (i = 0; i < K1; i++) { x[i] = 135 - i; } for (j = 0; j < K2; j++) { y[j] = j - 95; } prjini(&prj); prj.pv[1] = 35.0; status = bonx2s(&prj, K1, K2, 1, 2, x, y, tab.coord, tab.coord+1, (int *)stat); dp = tab.coord; for (j = 0; j < K2; j++) { for (i = 0; i < K1; i++) { if (stat[j][i]) { *dp = 999.0; *(dp+1) = 999.0; } dp += 2; } } /* Draw meridians. */ ci = 1; for (ilng = -180; ilng <= 180; ilng += 15) { if (++ci > 7) ci = 2; cpgsci(ilng?ci:1); for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { world[j][0] = (double)ilng; world[j][1] = (double)ilat; } /* A fudge to account for the singularity at the poles. */ world[0][0] = 0.0; world[180][0] = 0.0; status = tabs2x(&tab, 181, 2, (double *)world, (double *)xy, (int *)stat); k = 0; for (j = 0; j < 181; j++) { if (stat[0][j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } xr[k] = xy[j][0]; yr[k] = xy[j][1]; k++; } cpgline(k, xr, yr); } /* Draw parallels. */ ci = 1; for (ilat = -75; ilat <= 75; ilat += 15) { if (++ci > 7) ci = 2; cpgsci(ilat?ci:1); for (j = 0, ilng = -180; ilng <= 180; ilng++, j++) { world[j][0] = (double)ilng; world[j][1] = (double)ilat; } status = tabs2x(&tab, 361, 2, (double *)world, (double *)xy, (int *)stat); k = 0; for (j = 0; j < 361; j++) { if (stat[0][j]) { if (k > 1) cpgline(k, xr, yr); k = 0; continue; } xr[k] = xy[j][0]; yr[k] = xy[j][1]; k++; } cpgline(k, xr, yr); } cpgend(); return 0; } pywcs-1.12/wcslib/C/test/tunits.c0000644001153600020070000001027712310355626020773 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tunits.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * tunits tests wcsulex(), wcsutrn(), and wcsunits() the FITS units * specification parser, translator and converter. * *---------------------------------------------------------------------------*/ #include #include #include #include #include int main() { char have[80], want[80]; int func, i, interactive, status; double offset, power, scale, units[WCSUNITS_NTYPE]; interactive = isatty(0); printf("Testing FITS unit specification parser (tunits.c)\n" "-------------------------------------------------\n"); if (interactive) printf("\nTo test wcsulex(), enter when prompted " "with \"Unit string (want):\".\n"); while (1) { if (interactive) printf("\nUnit string (have): "); if (!fgets(have, 80, stdin)) break; have[strlen(have)-1] = '\0'; if (!interactive) printf("\nUnit string (have): %s\n", have); if ((status = wcsutrn(7, have)) >= 0) { printf(" Translation: %s", have); if (status == 0) { printf("\n"); } else { printf(" (WARNING: %s)\n", wcsunits_errmsg[status]); } } if (interactive) printf("Unit string (want): "); if (!fgets(want, 80, stdin)) break; want[strlen(want)-1] = '\0'; if (*want) { if (!interactive) printf("Unit string (want): %s\n", want); if ((status = wcsutrn(7, want)) >= 0) { printf(" Translation: %s", want); if (status == 0) { printf("\n"); } else { printf(" (WARNING: %s)\n", wcsunits_errmsg[status]); } } printf("Conversion: \"%s\" -> \"%s\"\n", have, want); if ((status = wcsunits(have, want, &scale, &offset, &power))) { printf("wcsunits ERROR %d: %s.\n", status, wcsunits_errmsg[status]); continue; } printf(" = %s", (power == 1.0) ? "" : "("); if (scale == 1.0) { printf("value"); } else { printf("%.8g * value", scale); } if (offset != 0.0) { printf(" + %.8g", offset); } if (power == 1.0) { printf("\n"); } else { printf(")^%.8g\n", power); } } else { /* Parse the unit string. */ printf(" Parsing: \"%s\"\n", have); if ((status = wcsulex(have, &func, &scale, units))) { printf("wcsulex ERROR %d: %s.\n", status, wcsunits_errmsg[status]); continue; } printf("%15.8g *\n", scale); for (i = 0; i < WCSUNITS_NTYPE; i++) { if (units[i] != 0.0) { printf("%11.2f %s", units[i], wcsunits_types[i]); if (strlen(wcsunits_units[i])) { printf(" (%s)\n", wcsunits_units[i]); } else { printf("\n"); } } } } } printf("\n"); return 0; } pywcs-1.12/wcslib/C/test/twcs.c0000644001153600020070000003270212310355626020422 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility and: Michael Droetboom, Space Telescope Science Institute http://www.atnf.csiro.au/~mcalabre/index.html $Id: twcs.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * twcs tests wcss2p() and wcsp2s() for closure on an oblique 2-D slice through * a 4-D image with celestial, spectral and logarithmic coordinate axes. * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include void parser(struct wcsprm *); int check_error(struct wcsprm *, int, int, char *); int test_errors(); /* Reporting tolerance. */ const double tol = 1.0e-10; /* In real life these would be encoded as FITS header keyrecords. */ const int NAXIS = 4; const double CRPIX[4] = { 513.0, 0.0, 0.0, 0.0}; const double PC[4][4] = {{ 1.1, 0.0, 0.0, 0.0}, { 0.0, 1.0, 0.0, 0.1}, { 0.0, 0.0, 1.0, 0.0}, { 0.0, 0.2, 0.0, 1.0}}; const double CDELT[4] = {-9.635265432e-6, 1.0, 0.1, -1.0}; char CTYPE[4][9] = {"WAVE-F2W", "XLAT-BON", "TIME-LOG", "XLON-BON"}; const double CRVAL[4] = {0.214982042, -30.0, 1.0, 150.0}; const double LONPOLE = 150.0; const double LATPOLE = 999.0; const double RESTFRQ = 1.42040575e9; const double RESTWAV = 0.0; int NPV = 3; struct pvcard PV[3]; /* Projection parameters are set in main(). */ int itest = 0; int main() { #define NELEM 9 char ok[] = "", mismatch[] = " (WARNING, mismatch)", *s; int i, k, lat, lng, nFail1 = 0, nFail2 = 0, stat[361], status; double freq, img[361][NELEM], lat1, lng1, phi[361], pixel1[361][NELEM], pixel2[361][NELEM], r, resid, residmax, theta[361], time, world1[361][NELEM], world2[361][NELEM]; struct wcsprm *wcs; printf("Testing closure of WCSLIB world coordinate transformation " "routines (twcs.c)\n" "----------------------------------------------------------" "-----------------\n"); /* List status return messages. */ printf("\nList of wcs status return values:\n"); for (status = 1; status <= 13; status++) { printf("%4d: %s.\n", status, wcs_errmsg[status]); } printf("\nSize of data types (bytes):\n"); printf(" char:%5"MODZ"u\n", sizeof(char)); printf(" short int:%5"MODZ"u\n", sizeof(short int)); printf(" int:%5"MODZ"u\n", sizeof(int)); printf(" long int:%5"MODZ"u\n", sizeof(long int)); printf(" float:%5"MODZ"u\n", sizeof(float)); printf(" double:%5"MODZ"u\n", sizeof(double)); printf(" char *:%5"MODZ"u\n", sizeof(char *)); printf(" char (*)[72]:%5"MODZ"u\n", sizeof(char (*)[72])); printf(" int *:%5"MODZ"u\n", sizeof(int *)); printf(" float *:%5"MODZ"u\n", sizeof(float *)); printf(" double *:%5"MODZ"u\n", sizeof(double *)); printf("struct pvcard *:%5"MODZ"u\n", sizeof(struct pvcard *)); printf("struct pscard *:%5"MODZ"u\n", sizeof(struct pscard *)); printf("\nSize of structs (bytes/ints):\n"); s = (sizeof(struct celprm) == sizeof(int)*CELLEN) ? ok : mismatch; printf(" celprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct celprm), CELLEN, s); s = (sizeof(struct fitskey) == sizeof(int)*KEYLEN) ? ok : mismatch; printf(" fitskey:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct fitskey), KEYLEN, s); s = (sizeof(struct fitskeyid) == sizeof(int)*KEYIDLEN) ? ok : mismatch; printf(" fitskeyid:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct fitskeyid), KEYIDLEN, s); s = (sizeof(struct linprm) == sizeof(int)*LINLEN) ? ok : mismatch; printf(" linprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct linprm), LINLEN, s); s = (sizeof(struct prjprm) == sizeof(int)*PRJLEN) ? ok : mismatch; printf(" prjprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct prjprm), PRJLEN, s); s = (sizeof(struct spcprm) == sizeof(int)*SPCLEN) ? ok : mismatch; printf(" spcprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct spcprm), SPCLEN, s); s = (sizeof(struct spxprm) == sizeof(int)*SPXLEN) ? ok : mismatch; printf(" spxprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct spxprm), SPXLEN, s); s = (sizeof(struct tabprm) == sizeof(int)*TABLEN) ? ok : mismatch; printf(" tabprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct tabprm), TABLEN, s); s = (sizeof(struct wcserr) == sizeof(int)*ERRLEN) ? ok : mismatch; printf(" wcserr:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct wcserr), ERRLEN, s); s = (sizeof(struct wcsprm) == sizeof(int)*WCSLEN) ? ok : mismatch; printf(" wcsprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct wcsprm), WCSLEN, s); /* Set the PVi_ma keyvalues for the longitude axis. */ /*----------------------------------------------------------*/ /* For test purposes, these are set so that the fiducial */ /* native coordinates are at the native pole, i.e. so that */ /* (phi0,theta0) = (0,90), but without any fiducial offset, */ /* i.e. iwith PVi_0a == 0 (by default). */ /*----------------------------------------------------------*/ PV[0].i = 4; /* Longitude is on axis 4. */ PV[0].m = 1; /* Parameter number 1. */ PV[0].value = 0.0; /* Fiducial native longitude. */ PV[1].i = 4; /* Longitude is on axis 4. */ PV[1].m = 2; /* Parameter number 2. */ PV[1].value = 90.0; /* Fiducial native latitude. */ /* Set the PVi_m keyvaluess for the latitude axis. */ PV[2].i = 2; /* Latitude is on axis 2. */ PV[2].m = 1; /* Parameter number 1. */ PV[2].value = -30.0; /* PVi_1. */ /* The following routine simulates the actions of a FITS header parser. */ wcs = malloc(sizeof(struct wcsprm)); wcs->flag = -1; parser(wcs); printf("\nReporting tolerance %5.1g pixel.\n", tol); /* Initialize non-celestial world coordinates. */ time = 1.0; freq = 1.42040595e9 - 180.0 * 62500.0; for (k = 0; k < 361; k++) { world1[k][0] = 0.0; world1[k][1] = 0.0; world1[k][2] = 0.0; world1[k][3] = 0.0; world1[k][2] = time; time *= 1.01; world1[k][wcs->spec] = 2.99792458e8 / freq; freq += 62500.0; } residmax = 0.0; for (lat = 90; lat >= -90; lat--) { lat1 = (double)lat; for (lng = -180, k = 0; lng <= 180; lng++, k++) { lng1 = (double)lng; world1[k][wcs->lng] = lng1; world1[k][wcs->lat] = lat1; } if (wcss2p(wcs, 361, NELEM, world1[0], phi, theta, img[0], pixel1[0], stat)) { printf(" At wcss2p#1 with lat1 == %f\n", lat1); wcsperr(wcs, " "); continue; } if (wcsp2s(wcs, 361, NELEM, pixel1[0], img[0], phi, theta, world2[0], stat)) { printf(" At wcsp2s with lat1 == %f\n", lat1); wcsperr(wcs, " "); continue; } if (wcss2p(wcs, 361, NELEM, world2[0], phi, theta, img[0], pixel2[0], stat)) { printf(" At wcss2p#2 with lat1 == %f\n", lat1); wcsperr(wcs, " "); continue; } for (k = 0; k < 361; k++) { resid = 0.0; for (i = 0; i < NAXIS; i++) { r = pixel2[k][i] - pixel1[k][i]; resid += r*r; } resid = sqrt(resid); if (resid > residmax) residmax = resid; if (resid > tol) { nFail1++; printf("\nClosure error:\n" "world1:%18.12f%18.12f%18.12f%18.12f\n" "pixel1:%18.12f%18.12f%18.12f%18.12f\n" "world2:%18.12f%18.12f%18.12f%18.12f\n" "pixel2:%18.12f%18.12f%18.12f%18.12f\n", world1[k][0], world1[k][1], world1[k][2], world1[k][3], pixel1[k][0], pixel1[k][1], pixel1[k][2], pixel1[k][3], world2[k][0], world2[k][1], world2[k][2], world2[k][3], pixel2[k][0], pixel2[k][1], pixel2[k][2], pixel2[k][3]); } } } printf("wcsp2s/wcss2p: Maximum closure residual = %.1e pixel.\n", residmax); /* Test wcserr and wcsprintf() as well. */ nFail2 = 0; wcsprintf_set(stdout); wcsprintf("\n\nIGNORE messages marked with 'OK', they test wcserr " "(and wcsprintf):\n"); wcserr_enable(1); /* Test 1. */ wcs->pv[2].value = UNDEFINED; status = wcsset(wcs); nFail2 += check_error(wcs, status, WCSERR_BAD_PARAM, "Invalid parameter value"); nFail2 += test_errors(); if (nFail1 || nFail2) { if (nFail1) { printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", nFail1); } if (nFail2) { printf("FAIL: %d error messages differ from that expected.\n", nFail2); } } else { printf("\nPASS: All closure residuals are within reporting tolerance.\n"); printf("PASS: All error messages reported as expected.\n"); } /* Clean up. */ wcsfree(wcs); free(wcs); return nFail1 + nFail2; } /*--------------------------------------------------------------------------*/ void parser(wcs) struct wcsprm *wcs; { int i, j; double *pcij; /* In practice a parser would read the FITS header until it encountered */ /* the NAXIS keyword which must occur near the start, before any of the */ /* WCS keywords. It would then use wcsini() to allocate memory for */ /* arrays in the wcsprm struct and set default values. In this */ /* simulation the header keyvalues are set as global variables. */ wcsini(1, NAXIS, wcs); /* Now the parser scans the FITS header, identifying WCS keywords and */ /* loading their values into the appropriate elements of the wcsprm */ /* struct. */ for (j = 0; j < NAXIS; j++) { wcs->crpix[j] = CRPIX[j]; } pcij = wcs->pc; for (i = 0; i < NAXIS; i++) { for (j = 0; j < NAXIS; j++) { *(pcij++) = PC[i][j]; } } for (i = 0; i < NAXIS; i++) { wcs->cdelt[i] = CDELT[i]; } for (i = 0; i < NAXIS; i++) { strcpy(wcs->ctype[i], &CTYPE[i][0]); } for (i = 0; i < NAXIS; i++) { wcs->crval[i] = CRVAL[i]; } wcs->lonpole = LONPOLE; wcs->latpole = LATPOLE; wcs->restfrq = RESTFRQ; wcs->restwav = RESTWAV; wcs->npv = NPV; for (i = 0; i < NPV; i++) { wcs->pv[i] = PV[i]; } /* Extract information from the FITS header. */ if (wcsset(wcs)) { wcsperr(wcs, ""); } return; } /*--------------------------------------------------------------------------*/ int check_error(struct wcsprm *wcs, int status, int exstatus, char *exmsg) { const char *errmsg = (status ? (wcs->err)->msg : ""); wcsprintf("\nTest %d...\n", ++itest); if (status == exstatus && strcmp(errmsg, exmsg) == 0) { wcsperr(wcs, "OK: "); wcsprintf("...succeeded.\n"); } else { wcsprintf("Expected error %d: '%s', got\n", exstatus, exmsg); wcsperr(wcs, ""); wcsprintf("...failed.\n"); return 1; } return 0; } /*--------------------------------------------------------------------------*/ int test_errors() { const char *(multiple_cubeface[2]) = {"CUBEFACE", "CUBEFACE"}; const char *(projection_code[2]) = {"RA---FOO", "DEC--BAR"}; const char *(unmatched[2]) = {"RA---TAN", "FREQ-LOG"}; int i, nFail = 0, status; struct wcsprm wcs; /* Test 2. */ wcs.flag = -1; status = wcsini(1, -32, &wcs); nFail += check_error(&wcs, status, WCSERR_MEMORY, "naxis must be positive (got -32)"); /* Test 3. */ wcs.flag = 0; status = wcsini(1, 2, &wcs); nFail += check_error(&wcs, status, WCSERR_SUCCESS, ""); /* Test 4. */ for (i = 0; i < 2; i++) { strcpy(wcs.ctype[i], &multiple_cubeface[i][0]); } status = wcsset(&wcs); nFail += check_error(&wcs, status, WCSERR_BAD_CTYPE, "Multiple CUBEFACE axes (in CTYPE1 and CTYPE2)"); /* Test 5. */ wcs.flag = 0; status = wcsini(1, 2, &wcs); for (i = 0; i < 2; i++) { strcpy(wcs.ctype[i], &projection_code[i][0]); } status = wcsset(&wcs); nFail += check_error(&wcs, status, WCSERR_BAD_CTYPE, "Unrecognized projection code (FOO in CTYPE1)"); /* Test 6. */ wcs.flag = 0; status = wcsini(1, 2, &wcs); for (i = 0; i < 2; i++) { strcpy(wcs.ctype[i], &unmatched[i][0]); } status = wcsset(&wcs); nFail += check_error(&wcs, status, WCSERR_BAD_CTYPE, "Unmatched celestial axes"); return nFail; } pywcs-1.12/wcslib/C/test/twcsfix.c0000644001153600020070000001332512310355626021131 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: twcsfix.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * twcsfix tests the translation routines for non-standard WCS keyvalues, the * wcsfix() suite, and the spectral coordinate translation routine wcssptr(). * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include #include void parser(struct wcsprm *); const int NAXIS = 3; const double CRPIX[3] = {90.0, 90.0, 1.0}; const double PC[3][3] = {{ 1.0, 0.0, 0.0}, { 0.0, 1.0, 0.0}, { 0.0, 0.0, 1.0}}; const double CDELT[3] = {-1.0, 1.0, 19.68717093222}; char CUNIT[3][9] = {"ARCSEC", "ARCSEC", "KM/SEC"}; /* N.B. non-standard. */ char CTYPE[3][9] = {"RA---NCP", "DEC--NCP", "FELO-HEL"}; const double CRVAL[3] = {265.6220947090*3600.0, -28.98849996030*3600.0, 5569.27104}; const double RESTFRQ = 1.42040575e9; const double RESTWAV = 0.0; /* N.B. non-standard, corresponding to MJD 35884.04861111 */ const char DATEOBS[] = "1957/02/15 01:10:00"; /* For testing spcfix(). */ const int VELREF = 2; const char SPECSYS[] = "BARYCENT"; int main() { char ctypeS[9]; int i, stat[NWCSFIX], status; struct wcsprm wcs; struct wcserr info[NWCSFIX]; wcsprintf("Testing WCSLIB translator for non-standard usage (twcsfix.c)\n" "------------------------------------------------------------\n\n"); wcs.flag = -1; parser(&wcs); /* Note: to print the unfixed wcsprm struct using wcsprt() the struct would first have to be initialized by wcsset(). However, if the struct contains non-standard keyvalues then wcsset() will either fix them itself or else fail (e.g. for non-standard units). Thus, in general, wcsprt() cannot be used to print the unmodified struct. */ /* Fix non-standard WCS keyvalues. */ wcserr_enable(1); status = wcsfixi(7, 0, &wcs, stat, info); wcsprintf("wcsfix status returns: ("); for (i = 0; i < NWCSFIX; i++) { wcsprintf(i ? ", %d" : "%d", stat[i]); } wcsprintf(")\n"); for (i = 0; i < NWCSFIX; i++) { if (info[i].status < -1 || 0 < info[i].status) { wcsprintf("\n"); wcserr_prt(info+i, 0x0); } } if (status) { wcsprintf("\nwcsfix error %d", status); return 1; } /* Extract information from the FITS header. */ if (wcsset(&wcs)) { wcsprintf("\n"); wcserr_prt(wcs.err, 0x0); } wcsprintf("\n"); wcsprt(&wcs); wcsprintf("\n------------------------------------" "------------------------------------\n"); /* Should now have a 'VOPT-F2W' axis, translate it to frequency. */ strcpy(ctypeS, "FREQ-???"); i = -1; if (wcssptr(&wcs, &i, ctypeS)) { wcserr_prt(wcs.err, 0x0); return 1; } if (wcsset(&wcs)) { wcserr_prt(wcs.err, 0x0); return 1; } wcsprt(&wcs); wcsfree(&wcs); return 0; } /*--------------------------------------------------------------------------*/ void parser(wcs) struct wcsprm *wcs; { int i, j; double *pcij; /* In practice a parser would read the FITS header until it encountered */ /* the NAXIS keyword which must occur near the start, before any of the */ /* WCS keywords. It would then use wcsini() to allocate memory for */ /* arrays in the wcsprm struct and set default values. In this */ /* simulation the header keyvalues are set as global variables. */ wcsnpv(2); wcsini(1, NAXIS, wcs); /* Now the parser scans the FITS header, identifying WCS keywords and */ /* loading their values into the appropriate elements of the wcsprm */ /* struct. */ for (j = 0; j < NAXIS; j++) { wcs->crpix[j] = CRPIX[j]; } pcij = wcs->pc; for (i = 0; i < NAXIS; i++) { for (j = 0; j < NAXIS; j++) { *(pcij++) = PC[i][j]; } } for (i = 0; i < NAXIS; i++) { wcs->cdelt[i] = CDELT[i]; } for (i = 0; i < NAXIS; i++) { strcpy(wcs->cunit[i], &CUNIT[i][0]); } for (i = 0; i < NAXIS; i++) { strcpy(wcs->ctype[i], &CTYPE[i][0]); } for (i = 0; i < NAXIS; i++) { wcs->crval[i] = CRVAL[i]; } wcs->restfrq = RESTFRQ; wcs->restwav = RESTWAV; wcs->pv[0].i = -1; wcs->pv[0].m = -1; wcs->pv[0].value = -1.0; wcs->npv = 1; wcs->velref = VELREF; strcpy(wcs->dateobs, DATEOBS); strcpy(wcs->specsys, SPECSYS); return; } pywcs-1.12/wcslib/C/test/twcshdr.c0000644001153600020070000001333012310355626021114 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: twcshdr.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * twcshdr illustrates the steps required to read WCS information (including * -TAB coordinates) from a FITS header using the CFITSIO library * * Options: * -h: Uses wcshdo() to translate the wcsprm struct into a FITS header and * prints it. * * -p: Asks the user for a pixel coordinate which it transforms to world * coordinates and prints. * * -w: Asks the user for a world coordinate which it transforms to pixel * coordinates and prints. * * If none of the above options are specified it uses wcsprt() to print the * wcsprm struct itself. * * Input comes from a user-specified FITS file. * *===========================================================================*/ #include #include #include #include int main(int argc, char *argv[]) { char *header, *hptr; int dohdr = 0, dopixel = 0, doworld = 0; int i, nkeyrec, nreject, nwcs, stat[NWCSFIX], status = 0; double imgcrd[2], phi, pixcrd[2], theta, world[2]; fitsfile *fptr; struct wcsprm *wcs; /* Parse options. */ for (i = 1; i < argc && argv[i][0] == '-'; i++) { if (!argv[i][1]) break; switch (argv[i][1]) { case 'h': dohdr = 1; break; case 'p': dopixel = 1; break; case 'w': doworld = 1; break; default: fprintf(stderr, "Usage: twcshdr [-h | -p | -w] \n"); return 1; } } if (i != (argc-1)) { fprintf(stderr, "Usage: twcshdr [-h | -p | -w] \n"); return 1; } /* Open the FITS test file and read the primary header. */ fits_open_file(&fptr, argv[i], READONLY, &status); if ((status = fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status))) { fits_report_error(stderr, status); return 1; } /*-----------------------------------------------------------------------*/ /* Basic steps required to interpret a FITS WCS header, including -TAB. */ /*-----------------------------------------------------------------------*/ /* Parse the primary header of the FITS file. */ if ((status = wcspih(header, nkeyrec, WCSHDR_all, 2, &nreject, &nwcs, &wcs))) { fprintf(stderr, "wcspih ERROR %d: %s.\n", status,wcshdr_errmsg[status]); } /* Read coordinate arrays from the binary table extension. */ if ((status = fits_read_wcstab(fptr, wcs->nwtb, (wtbarr *)wcs->wtb, &status))) { fits_report_error(stderr, status); return 1; } /* Translate non-standard WCS keyvalues. */ if ((status = wcsfix(7, 0, wcs, stat))) { for (i = 0; i < NWCSFIX; i++) { if (stat[i] > 0) { fprintf(stderr, "wcsfix ERROR %d: %s.\n", status, wcsfix_errmsg[stat[i]]); } } return 1; } /*-----------------------------------------------------------------------*/ /* The wcsprm struct is now ready for use. */ /*-----------------------------------------------------------------------*/ /* Finished with the FITS file. */ fits_close_file(fptr, &status); free(header); /* Initialize the wcsprm struct, also taking control of memory allocated by * fits_read_wcstab(). */ if ((status = wcsset(wcs))) { fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); return 1; } if (dohdr) { if ((status = wcshdo(WCSHDO_all, wcs+2, &nkeyrec, &header))) { return 1; } hptr = header; printf("\n\n"); for (i = 0; i < nkeyrec; i++, hptr += 80) { printf("%.80s\n", hptr); } free(header); } else if (dopixel) { while (1) { printf("Enter pixel coordinates: "); if (scanf("%lf%*[ ,]%lf", pixcrd, pixcrd+1) != wcs->naxis) break; status = wcsp2s(wcs, 1, 2, pixcrd, imgcrd, &phi, &theta, world, stat); printf(" (%20.15f, %20.15f) ->\n (%20.15f, %20.15f)\n\n", pixcrd[0], pixcrd[1], world[0], world[1]); } } else if (doworld) { while (1) { printf("Enter world coordinates: "); if (scanf("%lf%*[ ,]%lf", world, world+1) != wcs->naxis) break; status = wcss2p(wcs, 1, 2, world, &phi, &theta, imgcrd, pixcrd, stat); printf(" (%20.15f, %20.15f) ->\n (%20.15f, %20.15f)\n\n", world[0], world[1], pixcrd[0], pixcrd[1]); } } else { /* Print the struct. */ if ((status = wcsprt(wcs))) { return 1; } } /* Clean up. */ status = wcsvfree(&nwcs, &wcs); return 0; } pywcs-1.12/wcslib/C/test/twcsmix.c0000644001153600020070000005570012310355625021142 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: twcsmix.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * twcsmix tests wcsmix() for closure on the 1 degree celestial graticule for * a number of selected projections. Points with good solutions are marked * with a white dot on a graphical display of the projection while bad * solutions are flagged with a red circle. * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include void mixex(double, double, double, double); void id(struct wcsprm *, int *, double, double, double, double); void grdplt(struct wcsprm *, double, double, double, double); void parser(struct wcsprm *); /* Set to 1 to skip wcsmix(), primarily for debugging purposes. */ const int skip_wcsmix = 0; /* Reporting tolerance for mixex(). */ const double tol = 1.0e-9; /* In real life these would be encoded as FITS header keyrecords. */ const int NAXIS = 4; const double CRPIX[4] = { 513.0, 0.0, 0.0, 0.0}; const double PC[4][4] = {{ 1.1, 0.0, 0.0, 0.0}, { 0.0, 1.0, 0.0, 0.1}, { 0.0, 0.0, 1.0, 0.0}, { 0.0, 0.2, 0.0, 1.0}}; const double CDELT[4] = {-9.635265432e-6, 1.0, 1.0, -1.0}; /* The "xxx" is reset in main(). */ char CTYPE[4][9] = {"WAVE-F2W", "XLAT-xxx", "TIME ", "XLON-xxx"}; /* Will be reset in mixex(). */ double CRVAL[4] = {0.214982042, -30.0, -2e3, 150.0}; double LONPOLE = 150.0; double LATPOLE = 999.0; double RESTFRQ = 1.42040575e9; double RESTWAV = 0.0; int NPV; struct pvcard PV[10]; /* Projection parameters are set in main(). */ int main() { char text[80]; register int status; printf("Testing WCSLIB wcsmix() routine (twcsmix.c)\n" "-------------------------------------------\n"); /* List status return messages. */ printf("\nList of wcs status return values:\n"); for (status = 1; status <= 13; status++) { printf("%4d: %s.\n", status, wcs_errmsg[status]); } /* PGPLOT initialization. */ strcpy(text, "/xwindow"); cpgbeg(0, text, 1, 1); /* Define pen colours. */ cpgscr(0, 0.00f, 0.00f, 0.00f); cpgscr(1, 1.00f, 1.00f, 0.00f); cpgscr(2, 1.00f, 1.00f, 1.00f); cpgscr(3, 0.50f, 0.50f, 0.80f); cpgscr(4, 0.80f, 0.50f, 0.50f); cpgscr(5, 0.80f, 0.80f, 0.80f); cpgscr(6, 0.50f, 0.50f, 0.80f); cpgscr(7, 0.80f, 0.50f, 0.50f); cpgscr(8, 0.30f, 0.50f, 0.30f); cpgscr(9, 1.00f, 0.75f, 0.00f); /*----------------------------------------------------------*/ /* Set the PVi_m keyvalues for the longitude axis so that */ /* the fiducial native coordinates are at the native pole, */ /* i.e. (phi0,theta0) = (0,90), but without any fiducial */ /* offset. We do this as a test, and also so that all */ /* projections will be exercised with the same obliquity */ /* parameters. */ /*----------------------------------------------------------*/ PV[0].i = 4; /* Longitude is on axis 4. */ PV[0].m = 1; /* Parameter number 1. */ PV[0].value = 0.0; /* Fiducial native longitude. */ PV[1].i = 4; /* Longitude is on axis 4. */ PV[1].m = 2; /* Parameter number 2. */ PV[1].value = 90.0; /* Fiducial native latitude. */ /* Set the PVi_m keyvalues for the latitude axis. */ PV[2].i = 2; /* Latitude is on axis 2. */ PV[2].m = 1; /* Parameter number 1. */ PV[2].value = 0.0; /* PVi_1 (set below). */ PV[3].i = 2; /* Latitude is on axis 2. */ PV[3].m = 2; /* Parameter number 2. */ PV[3].value = 0.0; /* PVi_2 (set below). */ /* ARC: zenithal/azimuthal equidistant. */ strncpy(&CTYPE[1][5], "ARC", 3); strncpy(&CTYPE[3][5], "ARC", 3); NPV = 2; mixex(-190.0, 190.0, -190.0, 190.0); /* ZEA: zenithal/azimuthal equal area. */ strncpy(&CTYPE[1][5], "ZEA", 3); strncpy(&CTYPE[3][5], "ZEA", 3); NPV = 2; mixex(-120.0, 120.0, -120.0, 120.0); /* CYP: cylindrical perspective. */ strncpy(&CTYPE[1][5], "CYP", 3); strncpy(&CTYPE[3][5], "CYP", 3); NPV = 4; PV[2].value = 3.0; PV[3].value = 0.8; mixex(-170.0, 170.0, -170.0, 170.0); /* CEA: cylindrical equal area. */ strncpy(&CTYPE[1][5], "CEA", 3); strncpy(&CTYPE[3][5], "CEA", 3); NPV = 3; PV[2].value = 0.75; mixex(-200.0, 200.0, -200.0, 200.0); /* CAR: plate carree. */ strncpy(&CTYPE[1][5], "CAR", 3); strncpy(&CTYPE[3][5], "CAR", 3); NPV = 2; mixex(-210.0, 210.0, -210.0, 210.0); /* SFL: Sanson-Flamsteed. */ strncpy(&CTYPE[1][5], "SFL", 3); strncpy(&CTYPE[3][5], "SFL", 3); NPV = 2; mixex(-190.0, 190.0, -190.0, 190.0); /* PAR: parabolic. */ strncpy(&CTYPE[1][5], "PAR", 3); strncpy(&CTYPE[3][5], "PAR", 3); NPV = 2; mixex(-190.0, 190.0, -190.0, 190.0); /* MOL: Mollweide's projection. */ strncpy(&CTYPE[1][5], "MOL", 3); strncpy(&CTYPE[3][5], "MOL", 3); NPV = 2; mixex(-170.0, 170.0, -170.0, 170.0); /* AIT: Hammer-Aitoff. */ strncpy(&CTYPE[1][5], "AIT", 3); strncpy(&CTYPE[3][5], "AIT", 3); NPV = 2; mixex(-170.0, 170.0, -170.0, 170.0); /* COE: conic equal area. */ strncpy(&CTYPE[1][5], "COE", 3); strncpy(&CTYPE[3][5], "COE", 3); NPV = 4; PV[2].value = 60.0; PV[3].value = 15.0; mixex(-140.0, 140.0, -120.0, 160.0); /* COD: conic equidistant. */ strncpy(&CTYPE[1][5], "COD", 3); strncpy(&CTYPE[3][5], "COD", 3); NPV = 4; PV[2].value = 60.0; PV[3].value = 15.0; mixex(-200.0, 200.0, -180.0, 220.0); /* BON: Bonne's projection. */ strncpy(&CTYPE[1][5], "BON", 3); strncpy(&CTYPE[3][5], "BON", 3); NPV = 3; PV[2].value = 30.0; mixex(-160.0, 160.0, -160.0, 160.0); /* PCO: polyconic. */ strncpy(&CTYPE[1][5], "PCO", 3); strncpy(&CTYPE[3][5], "PCO", 3); NPV = 2; mixex(-190.0, 190.0, -190.0, 190.0); /* TSC: tangential spherical cube. */ strncpy(&CTYPE[1][5], "TSC", 3); strncpy(&CTYPE[3][5], "TSC", 3); NPV = 2; mixex(-340.0, 80.0, -210.0, 210.0); /* QSC: quadrilateralized spherical cube. */ strncpy(&CTYPE[1][5], "QSC", 3); strncpy(&CTYPE[3][5], "QSC", 3); NPV = 2; mixex(-340.0, 80.0, -210.0, 210.0); cpgend(); return 0; } /*---------------------------------------------------------------------------- * mixex() tests wcsmix(). *---------------------------------------------------------------------------*/ void mixex(imin, imax, jmin, jmax) double imax, imin, jmax, jmin; { int doid, lat, lng, wcslat, wcslng, stat, status; float ipt[1], jpt[1]; double lng1, lat1, phi, theta; double latspan[2], lngspan[2]; double img[4], pix1[4], pix2[4], pix3[4], world[4]; double pixlng, pixlat, *worldlat, *worldlng; struct wcsprm wcs; struct prjprm *wcsprj = &(wcs.cel.prj); /* This routine simulates the actions of a FITS header parser. */ wcs.flag = -1; parser(&wcs); /* Draw the coordinate graticule. */ grdplt(&wcs, imin, imax, jmin, jmax); if (skip_wcsmix) return; printf("Testing %s; reporting tolerance %5.1g deg.\n", wcsprj->code, tol); /* Cache frequently used values. */ wcslng = wcs.lng; wcslat = wcs.lat; worldlng = world + wcslng; worldlat = world + wcslat; world[0] = 0.0; world[1] = 0.0; world[2] = 0.0; world[3] = 0.0; world[wcs.spec] = 2.99792458e8 / RESTFRQ; for (lat = 90; lat >= -90; lat--) { lat1 = (double)lat; for (lng = -180; lng <= 180; lng+=15) { lng1 = (double)lng; *worldlng = lng1; *worldlat = lat1; if ((status = wcss2p(&wcs, 1, 4, world, &phi, &theta, img, pix1, &stat))) { printf("%3s(s2x): lng1 =%20.15f lat1 =%20.15f ERROR %3d\n", wcsprj->code, lng1, lat1, status); continue; } pixlng = pix1[wcslng]; pixlat = pix1[wcslat]; ipt[0] = pixlng; jpt[0] = pixlat; cpgpt(1, ipt, jpt, -1); lngspan[0] = lng1 - 9.3; if (lngspan[0] < -180.0) lngspan[0] = -180.0; lngspan[1] = lng1 + 4.1; if (lngspan[1] > 180.0) lngspan[1] = 180.0; latspan[0] = lat1 - 3.7; if (latspan[0] < -90.0) latspan[0] = -90.0; latspan[1] = lat1 + 7.2; if (latspan[1] > 90.0) latspan[1] = 90.0; doid = 1; pix2[wcslng] = pixlng; if ((status = wcsmix(&wcs, wcslng, 1, latspan, 1.0, 0, world, &phi, &theta, img, pix2))) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" A: wcsmix ERROR %d: %s.\n", status, wcs_errmsg[status]); } else if ((status = wcss2p(&wcs, 1, 0, world, &phi, &theta, img, pix3, &stat))) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" A: wcss2p ERROR %d: %s.\n", status, wcs_errmsg[status]); } else if (fabs(pix3[wcslng]-pixlng) > tol && (fabs(*worldlat-lat1) > tol || fabs(pix2[wcslat]-pixlat) > tol)) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" A: (lng2) =%20.15f lat2 =%20.15f\n", *worldlng, *worldlat); printf(" phi =%20.15f theta =%20.15f\n", phi, theta); printf(" (i2) =%20.15f j2 =%20.15f\n", pix2[wcslng], pix2[wcslat]); } pix2[wcslat] = pixlat; if ((status = wcsmix(&wcs, wcslat, 1, latspan, 1.0, 0, world, &phi, &theta, img, pix2))) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" B: wcsmix ERROR %d: %s.\n", status, wcs_errmsg[status]); } else if ((status = wcss2p(&wcs, 1, 0, world, &phi, &theta, img, pix3, &stat))) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" B: wcss2p ERROR %d: %s.\n", status, wcs_errmsg[status]); } else if (fabs(pix3[wcslat]-pixlat) > tol && (fabs(*worldlat-lat1) > tol || fabs(pix2[wcslng]-pixlng) > tol)) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" B: (lng2) =%20.15f lat2 =%20.15f\n", *worldlng, *worldlat); printf(" phi =%20.15f theta =%20.15f\n", phi, theta); printf(" i2 =%20.15f (j2) =%20.15f\n", pix2[wcslng], pix2[wcslat]); } *worldlat = lat1; pix2[wcslng] = pixlng; if ((status = wcsmix(&wcs, wcslng, 2, lngspan, 1.0, 0, world, &phi, &theta, img, pix2))) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" C: wcsmix ERROR %d: %s.\n", status, wcs_errmsg[status]); } else if ((status = wcss2p(&wcs, 1, 0, world, &phi, &theta, img, pix3, &stat))) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" C: wcss2p ERROR %d: %s.\n", status, wcs_errmsg[status]); } else if (fabs(pix3[wcslng]-pixlng) > tol && (fabs(*worldlng-lng1) > tol || fabs(pix2[wcslat]-pixlat) > tol)) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" C: lng2 =%20.15f (lat2) =%20.15f\n", *worldlng, *worldlat); printf(" phi =%20.15f theta =%20.15f\n", phi, theta); printf(" (i2) =%20.15f j2 =%20.15f\n", pix2[wcslng], pix2[wcslat]); } pix2[wcslat] = pixlat; if ((status = wcsmix(&wcs, wcslat, 2, lngspan, 1.0, 0, world, &phi, &theta, img, pix2))) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" D: wcsmix ERROR %d: %s.\n", status, wcs_errmsg[status]); } else if ((status = wcss2p(&wcs, 1, 0, world, &phi, &theta, img, pix3, &stat))) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" D: wcss2p ERROR %d: %s.\n", status, wcs_errmsg[status]); } else if (fabs(pix3[wcslat]-pixlat) > tol && (fabs(*worldlng-lng1) > tol || fabs(pix2[wcslng]-pixlng) > tol)) { id(&wcs, &doid, lng1, lat1, pixlng, pixlat); printf(" D: lng2 =%20.15f (lat2) =%20.15f\n", *worldlng, *worldlat); printf(" phi =%20.15f theta =%20.15f\n", phi, theta); printf(" i2 =%20.15f (j2) =%20.15f\n", pix2[wcslng], pix2[wcslat]); } } } wcsfree(&wcs); return; } /*--------------------------------------------------------------------------*/ void id(wcs, doid, lng1, lat1, pixlng, pixlat) struct wcsprm *wcs; int *doid; double lng1, lat1, pixlng, pixlat; { float ipt[1], jpt[1]; double phi, theta; struct celprm *wcscel = &(wcs->cel); struct prjprm *wcsprj = &(wcscel->prj); if (*doid) { /* Compute native coordinates. */ sphs2x(wcscel->euler, 1, 1, 1, 1, &lng1, &lat1, &phi, &theta); printf("\n%3s: lng1 =%20.15f lat1 =%20.15f\n", wcsprj->code, lng1, lat1); printf( " phi =%20.15f theta =%20.15f\n", phi, theta); printf( " i1 =%20.15f j1 =%20.15f\n", pixlng, pixlat); *doid = 0; cpgsci(9); ipt[0] = pixlng; jpt[0] = pixlat; cpgpt(1, ipt, jpt, 21); cpgsci(2); } return; } /*--------------------------------------------------------------------------*/ void grdplt(wcs, imin, imax, jmin, jmax) struct wcsprm *wcs; double imax, imin, jmax, jmin; { #define NELEM 9 char text[80]; int ci, ilat, ilng, j, k, stat[361]; float fimax, fimin, fjmax, fjmin, ir[1024], jr[1024]; double freq, img[361][NELEM], lat, lng, phi[361], pix[361][NELEM], step, theta[361], world[361][NELEM]; double *pixlat, *pixlng, *worldlat, *worldlng; struct wcsprm native; struct celprm *wcscel = &(wcs->cel); struct prjprm *wcsprj = &(wcscel->prj); struct prjprm *ntvprj = &(native.cel.prj); /* Initialize non-celestial world coordinates. */ freq = 1.42040595e9 - 180.0 * 62500.0; for (j = 0; j < 361; j++) { world[j][0] = 0.0; world[j][1] = 0.0; world[j][2] = 0.0; world[j][3] = 0.0; world[j][wcs->spec] = 2.99792458e8 / freq; freq += 62500.0; } /* Define PGPLOT viewport. */ fimax = (float)imax; fimin = (float)imin; fjmax = (float)jmax; fjmin = (float)jmin; cpgenv(fimin, fimax, fjmin, fjmax, 1, -2); /* Draw face boundaries of the quad-cube projections. */ if (wcsprj->category == QUADCUBE) { cpgsci(8); /* Draw the map boundary. */ for (j = 0; j < 9; j++) { img[j][0] = 0.0; img[j][1] = 0.0; img[j][2] = 0.0; img[j][3] = 0.0; } img[0][wcs->lng] = -wcsprj->w[0]; img[0][wcs->lat] = wcsprj->w[0]; img[1][wcs->lng] = -wcsprj->w[0]; img[1][wcs->lat] = wcsprj->w[0]*3.0; img[2][wcs->lng] = wcsprj->w[0]; img[2][wcs->lat] = wcsprj->w[0]*3.0; img[3][wcs->lng] = wcsprj->w[0]; img[3][wcs->lat] = -wcsprj->w[0]*3.0; img[4][wcs->lng] = -wcsprj->w[0]; img[4][wcs->lat] = -wcsprj->w[0]*3.0; img[5][wcs->lng] = -wcsprj->w[0]; img[5][wcs->lat] = wcsprj->w[0]; img[6][wcs->lng] = wcsprj->w[0]*7.0; img[6][wcs->lat] = wcsprj->w[0]; img[7][wcs->lng] = wcsprj->w[0]*7.0; img[7][wcs->lat] = -wcsprj->w[0]; img[8][wcs->lng] = -wcsprj->w[0]; img[8][wcs->lat] = -wcsprj->w[0]; linx2p(&(wcs->lin), 9, NELEM, img[0], pix[0]); for (j = 0; j < 9; j++) { ir[j] = pix[j][wcs->lng]; jr[j] = pix[j][wcs->lat]; } cpgline(9, ir, jr); } if (wcsprj->category == POLYCONIC) { step = 10.0; } else { step = 15.0; } /* Draw the native coordinate graticule faintly in the background. */ native.flag = -1; (void)wcscopy(1, wcs, &native); native.crval[wcs->lng] = 0.0; native.crval[wcs->lat] = 90.0; native.lonpole = 180.0; (void)wcsset(&native); cpgsci(8); /* Draw native meridians of longitude. */ for (ilng = -180; ilng <= 180; ilng += 15) { lng = (double)ilng; if (ilng == -180) lng = -179.99; if (ilng == 180) lng = 179.99; worldlng = world[0] + native.lng; worldlat = world[0] + native.lat; for (ilat = -90; ilat <= 90; ilat++) { *worldlng = lng; *worldlat = (double)ilat; worldlng += NELEM; worldlat += NELEM; } if (wcss2p(&native, 181, NELEM, world[0], phi, theta, img[0], pix[0], stat)) { continue; } k = 0; pixlng = pix[0] + native.lng; pixlat = pix[0] + native.lat; for (ilat = -90; ilat <= 90; ilat++) { if (ntvprj->category == QUADCUBE && k > 0) { if (fabs(*pixlng - ir[k-1]) > 2.0 || fabs(*pixlat - jr[k-1]) > 5.0) { if (k > 1) cpgline(k, ir, jr); k = 0; } } ir[k] = *pixlng; jr[k] = *pixlat; k++; pixlng += NELEM; pixlat += NELEM; } cpgline(k, ir, jr); } /* Draw native parallels of latitude. */ for (ilat = -90; ilat <= 90; ilat += 15) { lat = (double)ilat; worldlng = world[0] + native.lng; worldlat = world[0] + native.lat; for (ilng = -180; ilng <= 180; ilng++) { lng = (double)ilng; if (ilng == -180) lng = -179.99; if (ilng == 180) lng = 179.99; *worldlng = lng; *worldlat = lat; worldlng += NELEM; worldlat += NELEM; } if (wcss2p(&native, 361, NELEM, world[0], phi, theta, img[0], pix[0], stat)) { continue; } k = 0; pixlng = pix[0] + native.lng; pixlat = pix[0] + native.lat; for (ilng = -180; ilng <= 180; ilng++) { if (ntvprj->category == QUADCUBE && k > 0) { if (fabs(*pixlng - ir[k-1]) > 2.0 || fabs(*pixlat - jr[k-1]) > 5.0) { if (k > 1) cpgline(k, ir, jr); k = 0; } } ir[k] = *pixlng; jr[k] = *pixlat; k++; pixlng += NELEM; pixlat += NELEM; } cpgline(k, ir, jr); } /* Draw a colour-coded celestial coordinate graticule. */ ci = 1; /* Draw celestial meridians of longitude. */ for (ilng = -180; ilng <= 180; ilng += 15) { lng = (double)ilng; if (++ci > 7) ci = 2; cpgsci(ilng?ci:1); worldlng = world[0] + wcs->lng; worldlat = world[0] + wcs->lat; for (ilat = -90; ilat <= 90; ilat++) { lat = (double)ilat; *worldlng = lng; *worldlat = lat; worldlng += NELEM; worldlat += NELEM; } if (wcss2p(wcs, 181, NELEM, world[0], phi, theta, img[0], pix[0], stat)) { continue; } k = 0; pixlng = pix[0] + wcs->lng; pixlat = pix[0] + wcs->lat; for (ilat = -90; ilat <= 90; ilat++) { /* Test for discontinuities. */ if (k > 0) { if (fabs(*pixlng - ir[k-1]) > step || fabs(*pixlat - jr[k-1]) > step) { if (k > 1) cpgline(k, ir, jr); k = 0; } } ir[k] = *pixlng; jr[k] = *pixlat; k++; pixlng += NELEM; pixlat += NELEM; } cpgline(k, ir, jr); } /* Draw celestial parallels of latitude. */ ci = 1; for (ilat = -90; ilat <= 90; ilat += 15) { lat = (double)ilat; if (++ci > 7) ci = 2; cpgsci(ilat?ci:1); worldlng = world[0] + wcs->lng; worldlat = world[0] + wcs->lat; for (ilng = -180; ilng <= 180; ilng++) { lng = (double)ilng; *worldlng = lng; *worldlat = lat; worldlng += NELEM; worldlat += NELEM; } if (wcss2p(wcs, 361, NELEM, world[0], phi, theta, img[0], pix[0], stat)) { continue; } k = 0; pixlng = pix[0] + wcs->lng; pixlat = pix[0] + wcs->lat; for (ilng = -180; ilng <= 180; ilng++) { /* Test for discontinuities. */ if (k > 0) { if (fabs(*pixlng - ir[k-1]) > step || fabs(*pixlat - jr[k-1]) > step) { if (k > 1) cpgline(k, ir, jr); k = 0; } } ir[k] = *pixlng; jr[k] = *pixlat; k++; pixlng += NELEM; pixlat += NELEM; } cpgline(k, ir, jr); } /* Write a descriptive title. */ cpgsci(1); sprintf(text, "%s projection - 15 degree graticule", wcsprj->code); printf("\n\n%s\n", text); fjmin = jmin - 10.0; cpgtext(fimin, fjmin, text); sprintf(text, "centered on celestial coordinates (%6.2f,%6.2f)", wcscel->ref[0], wcscel->ref[1]); printf("%s\n", text); fjmin = jmin - 20.0; cpgtext(fimin, fjmin, text); sprintf(text, "with celestial pole at native coordinates (%7.2f,%7.2f)", wcscel->ref[2], wcscel->ref[3]); printf("%s\n", text); fjmin = jmin - 30.0; cpgtext(fimin, fjmin, text); cpgsci(2); return; } /*--------------------------------------------------------------------------*/ void parser(wcs) struct wcsprm *wcs; { int i, j, status; double *pcij; /* In practice a parser would read the FITS header until it encountered */ /* the NAXIS keyword which must occur near the start, before any of the */ /* WCS keywords. It would then use wcsini() to allocate memory for */ /* arrays in the wcsprm struct and set default values. In this */ /* simulation the header keyvalues are set as global variables. */ wcsini(1, NAXIS, wcs); /* Now the parser scans the FITS header, identifying WCS keywords and */ /* loading their values into the appropriate elements of the wcsprm */ /* struct. */ for (j = 0; j < NAXIS; j++) { wcs->crpix[j] = CRPIX[j]; } pcij = wcs->pc; for (i = 0; i < NAXIS; i++) { for (j = 0; j < NAXIS; j++) { *(pcij++) = PC[i][j]; } } for (i = 0; i < NAXIS; i++) { wcs->cdelt[i] = CDELT[i]; } for (i = 0; i < NAXIS; i++) { strcpy(wcs->ctype[i], &CTYPE[i][0]); } for (i = 0; i < NAXIS; i++) { wcs->crval[i] = CRVAL[i]; } wcs->lonpole = LONPOLE; wcs->latpole = LATPOLE; wcs->restfrq = RESTFRQ; wcs->restwav = RESTWAV; wcs->npv = NPV; for (i = 0; i < NPV; i++) { wcs->pv[i] = PV[i]; } /* Extract information from the FITS header. */ if ((status = wcsset(wcs))) { printf("wcsset ERROR%3d\n", status); } return; } pywcs-1.12/wcslib/C/test/twcssub.c0000644001153600020070000001272312310355626021135 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: twcssub.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * twcssub tests wcssub() which extracts the coordinate description for a * subimage from a wcsprm struct. * *---------------------------------------------------------------------------*/ #include #include #include #include /* In real life these would be encoded as FITS header keyrecords. */ const int NAXIS = 4; const double CRPIX[4] = { 1025.0, 64.0, 512.0, 513.0}; const double PC[4][4] = {{ 1.1, 0.0, 0.0, 0.0}, { 0.0, 1.0, 0.0, 0.0}, { 0.0, 0.0, 1.0, 0.1}, { 0.0, 0.0, 0.2, 1.0}}; const double CDELT[4] = {-9.2e-6, 10.0, 1.0, -1.0}; char CUNIT[4][16] = {"m", "s", "deg", "deg"}; char CTYPE[4][16] = {"WAVE-F2W", "TIME", "XLAT-SZP", "XLON-SZP"}; const double CRVAL[4] = {0.214982042, -2e3, -30.0, 150.0}; const double LONPOLE = 150.0; const double LATPOLE = 999.0; const double RESTFRQ = 1.42040575e9; const double RESTWAV = 0.0; char CNAME[4][16] = {"Wavelength", "Time", "Latitude", "Longitude"}; int NPS, NPV; struct pvcard PV[10]; struct pscard PS[10]; int main() { int axes[4], i, j, nsub, status; struct wcsprm wcs, wcsext; double *pcij; PV[0].i = 1; /* Frequency on axis 1. */ PV[0].m = 1; /* Parameter number 1. */ PV[0].value = -1.0; /* PV1_1. */ PV[1].i = 3; /* Latitude on axis 3. */ PV[1].m = 1; /* Parameter number 1. */ PV[1].value = 2.0; /* PV3_1. */ PV[2].i = 3; /* Latitude on axis 3. */ PV[2].m = 2; /* Parameter number 2. */ PV[2].value = 210.0; /* PV3_2. */ PV[3].i = 3; /* Latitude on axis 3. */ PV[3].m = 3; /* Parameter number 3. */ PV[3].value = 60.0; /* PV3_3. */ NPV = 4; PS[0].i = 2; /* Time on axis 2. */ PS[0].m = 1; /* Parameter number 1. */ strcpy(PS[0].value, "UTC"); /* PS2_1. */ NPS = 1; wcs.flag = -1; wcsini(1, NAXIS, &wcs); for (j = 0; j < NAXIS; j++) { wcs.crpix[j] = CRPIX[j]; } pcij = wcs.pc; for (i = 0; i < NAXIS; i++) { for (j = 0; j < NAXIS; j++) { *(pcij++) = PC[i][j]; } } for (i = 0; i < NAXIS; i++) { wcs.cdelt[i] = CDELT[i]; } for (i = 0; i < NAXIS; i++) { strcpy(wcs.cunit[i], &CUNIT[i][0]); strcpy(wcs.ctype[i], &CTYPE[i][0]); strcpy(wcs.cname[i], &CNAME[i][0]); } for (i = 0; i < NAXIS; i++) { wcs.crval[i] = CRVAL[i]; } wcs.lonpole = LONPOLE; wcs.latpole = LATPOLE; wcs.restfrq = RESTFRQ; wcs.restwav = RESTWAV; wcs.npv = NPV; for (i = 0; i < NPV; i++) { wcs.pv[i] = PV[i]; } wcs.nps = NPS; for (i = 0; i < NPS; i++) { wcs.ps[i] = PS[i]; } /* Initialize the wcsprm struct. */ wcserr_enable(1); (void) wcsset(&wcs); printf("Testing WCSLIB subimage extraction routine (twcssub.c)\n" "------------------------------------------------------\n"); printf("\nInitial contents of wcsprm struct:\n"); wcsprt(&wcs); /* Extract the coordinate description for a subimage and add a new axis. */ nsub = 4; wcsext.flag = -1; axes[0] = WCSSUB_LONGITUDE; axes[1] = WCSSUB_LATITUDE; axes[2] = -(WCSSUB_SPECTRAL | WCSSUB_STOKES); axes[3] = 0; printf("\n\nExtracted contents of wcsprm struct:\n"); if (wcssub(1, &wcs, &nsub, axes, &wcsext)) { wcsperr(&wcsext, ""); } else if (nsub == 0) { printf("None of the requested subimage axes were found.\n"); } else if (wcsset(&wcsext)) { wcsperr(&wcsext, ""); } else { wcsprt(&wcsext); } /* Set it up for failure by setting PC1_3 non-zero. */ *(wcs.pc+2) = 1.0; nsub = 2; axes[0] = 4; axes[1] = 3; status = wcssub(1, &wcs, &nsub, axes, &wcsext); if (status == WCSERR_NON_SEPARABLE) { printf("\n\nReceived wcssub status %d as expected for a non-separable " "subimage\ncoordinate system.\n", WCSERR_NON_SEPARABLE); } else { printf("\n\nERROR: expected wcssub status %d for a non-separable " "subimage coordinate\nsystem, but received status %d instead.\n", WCSERR_NON_SEPARABLE, status); } wcsfree(&wcs); wcsfree(&wcsext); return 0; } pywcs-1.12/wcslib/C/test/twcstab.c0000644001153600020070000003057712310355625021120 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: twcstab.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * twcstab tests wcstab() and also provides sample code for using it in * conjunction with wcspih() and fits_read_wcstab(). Although this example * and fits_read_wcstab() are based on the CFITSIO library, wcstab() itself * is completely independent of it. * * The input FITS file is constructed by create_input() from a list of header * keyrecords in wcstab.keyrec together with some hard-coded parameters. The * output fits file, wcstab.fits, is left for inspection. * *===========================================================================*/ #include #include #include #include #include #include int create_input(); int do_wcs_stuff(fitsfile *fptr, struct wcsprm *wcs); double lcprng(); int main() { char *header; int i, nkeyrec, nreject, nwcs, stat[NWCSFIX], status = 0; fitsfile *fptr; struct wcsprm *wcs; /* Set line buffering in case stdout is redirected to a file, otherwise * stdout and stderr messages will be jumbled (stderr is unbuffered). */ setvbuf(stdout, NULL, _IOLBF, 0); printf("Testing -TAB interpreter (twcstab.c)\n" "------------------------------------\n\n"); /* Create the input FITS test file. */ if (create_input()) { fprintf(stderr, "Failed to create FITS test file."); return 1; } /* Open the FITS test file and read the primary header. */ fits_open_file(&fptr, "wcstab.fits", READONLY, &status); if ((status = fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status))) { fits_report_error(stderr, status); return 1; } /*-----------------------------------------------------------------------*/ /* Basic steps required to interpret a FITS WCS header, including -TAB. */ /*-----------------------------------------------------------------------*/ /* Parse the primary header of the FITS file. */ if ((status = wcspih(header, nkeyrec, WCSHDR_all, 2, &nreject, &nwcs, &wcs))) { fprintf(stderr, "wcspih ERROR %d: %s.\n", status,wcshdr_errmsg[status]); } /* Read coordinate arrays from the binary table extension. */ if ((status = fits_read_wcstab(fptr, wcs->nwtb, (wtbarr *)wcs->wtb, &status))) { fits_report_error(stderr, status); return 1; } /* Translate non-standard WCS keyvalues. */ if ((status = wcsfix(7, 0, wcs, stat))) { for (i = 0; i < NWCSFIX; i++) { if (stat[i] > 0) { fprintf(stderr, "wcsfix ERROR %d: %s.\n", status, wcsfix_errmsg[stat[i]]); } } return 1; } /*-----------------------------------------------------------------------*/ /* The wcsprm struct is now ready for use. */ /*-----------------------------------------------------------------------*/ /* Do something with it. */ do_wcs_stuff(fptr, wcs); /* Finished with the FITS file. */ fits_close_file(fptr, &status); free(header); /* Clean up. */ status = wcsvfree(&nwcs, &wcs); return 0; } /*--------------------------------------------------------------------------*/ /* The celestial plane is 256 x 128 with the table indexed at every fourth */ /* pixel on each axis, but the image is rotated by 5 deg so the table needs */ /* to be a bit wider than 65 x 33. */ #define K1 70L #define K2 40L int create_input() { const double TWOPI = 2.0 * 3.14159265358979323846; /* These must match wcstab.keyrec. */ const char infile[] = "test/wcstab.keyrec"; const long NAXIS1 = 256; const long NAXIS2 = 128; const long NAXIS3 = 4; const char *ttype1[3] = {"CelCoords", "RAIndex", "DecIndex"}; const char *tform1[3] = {"5600E", "70E", "40E"}; const char *tunit1[3] = {"deg", "", ""}; const char *ttype2[4] = {"WaveIndex", "WaveCoord", "TimeIndex", "TimeCoord"}; const char *tform2[4] = {"8E", "8D", "8E", "8D"}; const char *tunit2[4] = {"", "m", "", "a"}; /* The remaining parameters may be chosen at will. */ float refval[] = {150.0f, -30.0f}; float span[] = {5.0f, (5.0f*K2)/K1}; float sigma[] = {0.10f, 0.05f}; double wcoord[] = {0.21106114, 0.21076437, 2.0e-6, 2.2e-6, 500.0e-9, 650.0e-9, 1.24e-9, 2.48e-9}; double windex[] = {0.5, 1.5, 1.5, 2.5, 2.5, 3.5, 3.5, 4.5}; double tcoord[] = {1997.84512, 1997.84631, 1993.28451, 1993.28456, 2001.59234, 2001.59239, 2002.18265, 2002.18301}; double tindex[] = {0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0}; char keyrec[84]; int i, status; long dummy, firstelem, k1, k2, p1, p2, p3; float array[2*K1*K2], *fp, image[256]; double s, t, x1, x2, z, z1, z2; FILE *stream; fitsfile *fptr; /* Look for the input header keyrecords. */ if ((stream = fopen(infile+5, "r")) == 0x0) { if ((stream = fopen(infile, "r")) == 0x0) { printf("ERROR opening %s\n", infile); return 1; } } /* Create the FITS output file, deleting any pre-existing file. */ status = 0; fits_create_file(&fptr, "!wcstab.fits", &status); /* Convert header keyrecords to FITS. */ while (fgets(keyrec, 82, stream) != NULL) { /* Ignore meta-comments (copyright information, etc.). */ if (keyrec[0] == '#') continue; /* Strip off the newline. */ i = strlen(keyrec) - 1; if (keyrec[i] == '\n') keyrec[i] = '\0'; fits_write_record(fptr, keyrec, &status); } /* Create and write some phoney image data. */ firstelem = 1; for (p3 = 0; p3 < NAXIS3; p3++) { for (p2 = 0; p2 < NAXIS2; p2++) { fp = image; s = (p3 + 1) * cos(0.2 * p2); t = cos(0.8*p2); for (p1 = 0; p1 < NAXIS1; p1++) { /* Do not adjust your set! */ *(fp++) = sin(0.1*(p1+p2) + s) * cos(0.4*p1) * t; } fits_write_img_flt(fptr, 0L, firstelem, NAXIS1, image, &status); firstelem += NAXIS1; } } /* Add the first binary table extension. */ fits_create_tbl(fptr, BINARY_TBL, 1L, 3L, (char **)ttype1, (char **)tform1, (char **)tunit1, NULL, &status); /* Write EXTNAME and EXTVER near the top, after TFIELDS. */ fits_read_key_lng(fptr, "TFIELDS", &dummy, NULL, &status); fits_insert_key_str(fptr, "EXTNAME", "WCS-TABLE", "WCS Coordinate lookup table", &status); fits_insert_key_lng(fptr, "EXTVER", 1L, "Table number 1", &status); /* Write the TDIM1 keyrecord after TFORM1. */ fits_read_key_str(fptr, "TFORM1", keyrec, NULL, &status); sprintf(keyrec, "(2,%ld,%ld)", K1, K2); fits_insert_key_str(fptr, "TDIM1", keyrec, "Dimensions of 3-D array", &status); /* Plate carrée projection with a bit of noise for the sake of realism. */ fp = array; for (k2 = 0; k2 < K2; k2++) { for (k1 = 0; k1 < K1; k1++) { /* Box-Muller transformation: uniform -> normal distribution. */ x1 = lcprng(); x2 = lcprng(); if (x1 == 0.0) x1 = 1.0; z = sqrt(-2.0 * log(x1)); x2 *= TWOPI; z1 = z * cos(x2); z2 = z * sin(x2); *(fp++) = refval[0] + span[0] * (k1/(K1-1.0) - 0.5) + z1 * sigma[0]; *(fp++) = refval[1] + span[1] * (k2/(K2-1.0) - 0.5) + z2 * sigma[1]; } } fits_write_col_flt(fptr, 1, 1L, 1L, 2*K1*K2, array, &status); fp = array; for (k1 = 0; k1 < K1; k1++) { *(fp++) = 4.0f * k1; } fits_write_col_flt(fptr, 2, 1L, 1L, K1, array, &status); fp = array; for (k2 = 0; k2 < K2; k2++) { *(fp++) = 4.0f * k2; } fits_write_col_flt(fptr, 3, 1L, 1L, K2, array, &status); /* Add the second binary table extension. */ if (fits_create_tbl(fptr, BINARY_TBL, 1L, 4L, (char **)ttype2, (char **)tform2, (char **)tunit2, NULL, &status)) { fits_report_error(stderr, status); return 1; } /* Write EXTNAME and EXTVER near the top, after TFIELDS. */ fits_read_key_lng(fptr, "TFIELDS", &dummy, NULL, &status); fits_insert_key_str(fptr, "EXTNAME", "WCS-TABLE", "WCS Coordinate lookup table", &status); fits_insert_key_lng(fptr, "EXTVER", 2L, "Table number 2", &status); /* Write the TDIM2 keyrecord after TFORM2. */ fits_read_key_str(fptr, "TFORM2", keyrec, NULL, &status); fits_insert_key_str(fptr, "TDIM2", "(1,8)", "Dimensions of 2-D array", &status); /* Write the TDIM4 keyrecord after TFORM4. */ fits_read_key_str(fptr, "TFORM4", keyrec, NULL, &status); fits_insert_key_str(fptr, "TDIM4", "(1,8)", "Dimensions of 2-D array", &status); fits_write_col_dbl(fptr, 1, 1L, 1L, 8L, windex, &status); fits_write_col_dbl(fptr, 2, 1L, 1L, 8L, wcoord, &status); fits_write_col_dbl(fptr, 3, 1L, 1L, 8L, tindex, &status); fits_write_col_dbl(fptr, 4, 1L, 1L, 8L, tcoord, &status); fits_close_file(fptr, &status); if (status) { fits_report_error(stderr, status); return 1; } return 0; } /*--------------------------------------------------------------------------*/ /* A simple linear congruential pseudo-random number generator that produces * the same results on all systems so that the test output can be compared. * It produces a fixed sequence of uniformly distributed numbers in [0,1]. * Adapted from the example in Numerical Recipes in C. */ double lcprng() { static unsigned long next = 137UL; next = next * 1664525UL + 1013904223UL; return (double)(next % 1073741824UL) / 1073741823.0; } /*--------------------------------------------------------------------------*/ int do_wcs_stuff(fitsfile *fptr, struct wcsprm *wcs) { int i1, i2, i3, k, naxis1, naxis2, naxis3, stat[8], status; double phi[8], pixcrd[8][4], imgcrd[8][4], theta[8], world[8][4], x1, x2, x3; /* Initialize the wcsprm struct, also taking control of memory allocated by * fits_read_wcstab(). */ if ((status = wcsset(wcs))) { fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); return 1; } /* Print the struct. */ if ((status = wcsprt(wcs))) return status; /* Compute coordinates in the corners. */ fits_read_key(fptr, TINT, "NAXIS1", &naxis1, NULL, &status); fits_read_key(fptr, TINT, "NAXIS2", &naxis2, NULL, &status); fits_read_key(fptr, TINT, "NAXIS3", &naxis3, NULL, &status); k = 0; x3 = 1.0f; for (i3 = 0; i3 < 2; i3++) { x2 = 0.5f; for (i2 = 0; i2 < 2; i2++) { x1 = 0.5f; for (i1 = 0; i1 < 2; i1++) { pixcrd[k][0] = x1; pixcrd[k][1] = x2; pixcrd[k][2] = x3; pixcrd[k][3] = 1.0f; k++; x1 = naxis1 + 0.5f; } x2 = naxis2 + 0.5f; } x3 = naxis3; } if ((status = wcsp2s(wcs, 8, 4, pixcrd[0], imgcrd[0], phi, theta, world[0], stat))) { fprintf(stderr, "\n\nwcsp2s ERROR %d: %s.\n", status, wcs_errmsg[status]); /* Invalid pixel coordinates. */ if (status == 8) status = 0; } if (status == 0) { printf("\n\nCorner world coordinates:\n" " Pixel World\n"); for (k = 0; k < 8; k++) { printf(" (%5.1f,%6.1f,%4.1f,%4.1f) -> (%7.3f,%8.3f,%9g,%11.5f)", pixcrd[k][0], pixcrd[k][1], pixcrd[k][2], pixcrd[k][3], world[k][0], world[k][1], world[k][2], world[k][3]); if (stat[k]) printf(" (BAD)"); printf("\n"); } } return 0; } pywcs-1.12/wcslib/C/test/units_test0000644001153600020070000000016112310355626021414 0ustar cslocumSTSCI\science00000000000000km/h m/ms JY/BEAM (kg/s^2)/beam KM/SEC m/s KM/H M/S log(MHZ) ln(/s) DEG ARCMINS ARCSEC sqrt(HZ^2) Jy Volts pywcs-1.12/wcslib/C/test/wcstab.keyrec0000644001153600020070000001605012310355626021763 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # # WCSLIB 4.10 - an implementation of the FITS WCS standard. # Copyright (C) 1995-2012, Mark Calabretta # # This file is part of WCSLIB. # # WCSLIB is free software: you can redistribute it and/or modify it under the # terms of the GNU Lesser General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for # more details. # # You should have received a copy of the GNU Lesser General Public License # along with WCSLIB. If not, see . # # Correspondence concerning WCSLIB may be directed to: # Internet email: mcalabre@atnf.csiro.au # Postal address: Dr. Mark Calabretta # Australia Telescope National Facility, CSIRO # PO Box 76 # Epping NSW 1710 # AUSTRALIA # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: wcstab.keyrec,v 4.10 2012/02/05 23:41:44 cal103 Exp $ #----------------------------------------------------------------------------- # List of FITS header keyrecords used by 'twcstab' to construct a FITS file # for testing wcstab() and fits_read_wcstab(). The coordinate arrays and # index vectors in the binary tables extensions are generated by twcstab # itself. # # Lines in this file beginning with '#' are ignored by twcstab. #----------------------------------------------------------------------------- SIMPLE = T / Standards-conformant FITS format BITPIX = -32 / IEEE single precision floating point NAXIS = 4 / Four image axes NAXIS1 = 256 / Length of 1st image axis - fastest varying NAXIS2 = 128 / Length of 2nd image axis NAXIS3 = 4 / Length of 3rd image axis NAXIS4 = 1 / Length of 4th image axis - slowest varying EXTEND = T / Binary table extensions contain lookup tables. COMMENT ----------------------------------------------------------------------- COMMENT Of the four -TAB coordinate axes, the first two celestial axes are COMMENT associated with a 2-D lookup table; the third spectral axis contains COMMENT a list of four wavelengths in the radio, infrared, optical, and x-ray COMMENT regimes; and the fourth time axis contains a list of observation COMMENT dates. Axes 3 and 4 are adapted from Table 11 of WCS Paper III. COMMENT COMMENT There are two separate bintables holding the -TAB arrays that differ COMMENT only in EXTVER. The first holds the 2-D celestial table, and the COMMENT second holds the two 1-D spectral and time coordinate tables. COMMENT ----------------------------------------------------------------------- WCSAXES = 4 / Four coordinate axes WCSNAME = '-TAB test file' / Name of this system CRPIX1 = 129.0 / Pixel coordinate of reference point CRPIX2 = 65.0 / Pixel coordinate of reference point PC1_1 = 0.996194698 / 5 deg rotation matrix element PC1_2 = 0.087155743 / 5 deg rotation matrix element PC2_1 = -0.087155743 / 5 deg rotation matrix element PC2_2 = 0.996194698 / 5 deg rotation matrix element CDELT1 = 1.0 / Index (psi_m) changes by one per pixel CDELT2 = 1.0 / Index (psi_m) changes by one per pixel CRVAL1 = 136.0 / Table index (Psi_m) at the reference point CRVAL2 = 76.0 / Table index (Psi_m) at the reference point CTYPE1 = 'RA---TAB' / Right ascension in lookup table CUNIT1 = 'deg' / Right ascension units CNAME1 = 'Right ascension (J2000)' / Axis name for labelling purposes PS1_0 = 'WCS-TABLE' / EXTNAME of bintable extension for -TAB arrays PV1_1 = 1 / EXTVER of bintable extension for -TAB arrays PV1_2 = 1 / EXTLEVEL of bintable extension for -TAB arrays PS1_1 = 'CelCoords' / Celestial coordinate array PS1_2 = 'RAIndex' / Right ascension index vector PV1_3 = 1 / Axis number in coordinate array CTYPE2 = 'DEC--TAB' / Declination in a slant zenithal projection CUNIT2 = 'deg' / Declination units CNAME2 = 'Declination (J2000)' / Axis name for labelling purposes PS2_0 = 'WCS-TABLE' / EXTNAME of bintable extension for -TAB arrays PV2_1 = 1 / EXTVER of bintable extension for -TAB arrays PV2_2 = 1 / EXTLEVEL of bintable extension for -TAB arrays PS2_1 = 'CelCoords' / Celestial coordinate array PS2_2 = 'DecIndex' / Declination index vector PV2_3 = 2 / Axis number in coordinate array RADESYS = 'FK5' / Mean equatorial coordinates, IAU 1984 system EQUINOX = 2000.0 / [yr] Equinox of equatorial coordinates CRPIX3 = 0.5 / Spectral bin initial edge of initial pixel CRPIX4 = 1.0 / Temporal bins are at begin/end time PC3_3 = 1.0 / Linear transformation matrix element PC3_4 = 0.0 / Linear transformation matrix element PC4_3 = 1.0 / Linear transformation matrix element PC4_4 = 1.0 / Linear transformation matrix element CDELT3 = 1.0 / Index (psi_m) changes by one per pixel CDELT4 = 1.0 / Index (psi_m) changes by one per pixel CRVAL3 = 0.5 / Table index (Psi_m) at the reference point CRVAL4 = 0.0 / Table index (Psi_m) at the reference point CTYPE3 = 'WAVE-TAB' / Wavelength axis by lookup table CUNIT3 = 'm' / Wavelength in metres CNAME3 = 'Wavelength' / Axis name for labelling purposes PS3_0 = 'WCS-TABLE' / EXTNAME of bintable extension for -TAB arrays PV3_1 = 2 / EXTVER of bintable extension for -TAB arrays PV3_2 = 1 / EXTLEVEL of bintable extension for -TAB arrays PS3_1 = 'WaveCoord' / Wavelength coordinate array PS3_2 = 'WaveIndex' / Wavelength index vector PV3_3 = 1 / Axis number in coordinate array CTYPE4 = 'TIME-TAB' / Time axis by lookup table CUNIT4 = 'a' / Time in years CNAME4 = 'Observation date' / Axis name for labelling purposes PS4_0 = 'WCS-TABLE' / EXTNAME of bintable extension for -TAB arrays PV4_1 = 2 / EXTVER of bintable extension for -TAB arrays PV4_2 = 1 / EXTLEVEL of bintable extension for -TAB arrays PS4_1 = 'TimeCoord' / Time coordinate array PS4_2 = 'TimeIndex' / Time index vector PV4_3 = 1 / Axis number in coordinate array END pywcs-1.12/wcslib/C/wcs.c0000644001153600020070000025161612310355626017266 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcs.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include #include "wcserr.h" #include "wcsmath.h" #include "wcsprintf.h" #include "wcstrig.h" #include "wcsunits.h" #include "wcsutil.h" #include "lin.h" #include "log.h" #include "spc.h" #include "prj.h" #include "sph.h" #include "cel.h" #include "tab.h" #include "wcs.h" const int WCSSET = 137; /* Maximum number of PVi_ma and PSi_ma keywords. */ int NPVMAX = 64; int NPSMAX = 8; /* Map status return value to message. */ const char *wcs_errmsg[] = { "Success", "Null wcsprm pointer passed", "Memory allocation failed", "Linear transformation matrix is singular", "Inconsistent or unrecognized coordinate axis types", "Invalid parameter value", "Invalid coordinate transformation parameters", "Ill-conditioned coordinate transformation parameters", "One or more of the pixel coordinates were invalid", "One or more of the world coordinates were invalid", "Invalid world coordinate", "No solution found in the specified interval", "Invalid subimage specification", "Non-separable subimage coordinate system"}; /* Convenience macro for invoking wcserr_set(). */ #define WCS_ERRMSG(status) WCSERR_SET(status), wcs_errmsg[status] #ifndef signbit #define signbit(X) ((X) < 0.0 ? 1 : 0) #endif /* Internal helper functions, not for general use. */ static int wcs_types(struct wcsprm *); static int wcs_units(struct wcsprm *); /*--------------------------------------------------------------------------*/ int wcsnpv(int npvmax) { if (npvmax >= 0) NPVMAX = npvmax; return NPVMAX; } int wcsnps(int npsmax) { if (npsmax >= 0) NPSMAX = npsmax; return NPSMAX; } /*--------------------------------------------------------------------------*/ int wcsini(int alloc, int naxis, struct wcsprm *wcs) { static const char *function = "wcsini"; int i, j, k, status; double *cd; struct wcserr **err; if (wcs == 0x0) return WCSERR_NULL_POINTER; /* Initialize error message handling. */ err = &(wcs->err); if (wcs->flag != -1) { if (wcs->err) free(wcs->err); if (wcs->lin.err) free(wcs->lin.err); if (wcs->cel.err) free(wcs->cel.err); if (wcs->spc.err) free(wcs->spc.err); if (wcs->cel.prj.err) free(wcs->cel.prj.err); } wcs->err = 0x0; wcs->lin.err = 0x0; wcs->cel.err = 0x0; wcs->spc.err = 0x0; wcs->cel.prj.err = 0x0; /* Initialize pointers. */ if (wcs->flag == -1 || wcs->m_flag != WCSSET) { if (wcs->flag == -1) { wcs->types = 0x0; wcs->lin.flag = -1; wcs->tab = 0x0; } /* Initialize memory management. */ wcs->m_flag = 0; wcs->m_naxis = 0; wcs->m_crpix = 0x0; wcs->m_pc = 0x0; wcs->m_cdelt = 0x0; wcs->m_crval = 0x0; wcs->m_cunit = 0x0; wcs->m_ctype = 0x0; wcs->m_pv = 0x0; wcs->m_ps = 0x0; wcs->m_cd = 0x0; wcs->m_crota = 0x0; wcs->m_colax = 0x0; wcs->m_cname = 0x0; wcs->m_crder = 0x0; wcs->m_csyer = 0x0; wcs->m_tab = 0x0; wcs->m_wtb = 0x0; } if (naxis <= 0) { return wcserr_set(WCSERR_SET(WCSERR_MEMORY), "naxis must be positive (got %d)", naxis); } /* Allocate memory for arrays if required. */ if (alloc || wcs->crpix == 0x0 || wcs->pc == 0x0 || wcs->cdelt == 0x0 || wcs->crval == 0x0 || wcs->cunit == 0x0 || wcs->ctype == 0x0 || (NPVMAX && wcs->pv == 0x0) || (NPSMAX && wcs->ps == 0x0) || wcs->cd == 0x0 || wcs->crota == 0x0 || wcs->colax == 0x0 || wcs->cname == 0x0 || wcs->crder == 0x0 || wcs->csyer == 0x0) { /* Was sufficient allocated previously? */ if (wcs->m_flag == WCSSET && (wcs->m_naxis < naxis || wcs->npvmax < NPVMAX || wcs->npsmax < NPSMAX)) { /* No, free it. */ wcsfree(wcs); } if (alloc || wcs->crpix == 0x0) { if (wcs->m_crpix) { /* In case the caller fiddled with it. */ wcs->crpix = wcs->m_crpix; } else { if (!(wcs->crpix = calloc(naxis, sizeof(double)))) { return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_crpix = wcs->crpix; } } if (alloc || wcs->pc == 0x0) { if (wcs->m_pc) { /* In case the caller fiddled with it. */ wcs->pc = wcs->m_pc; } else { if (!(wcs->pc = calloc(naxis*naxis, sizeof(double)))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_pc = wcs->pc; } } if (alloc || wcs->cdelt == 0x0) { if (wcs->m_cdelt) { /* In case the caller fiddled with it. */ wcs->cdelt = wcs->m_cdelt; } else { if (!(wcs->cdelt = calloc(naxis, sizeof(double)))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_cdelt = wcs->cdelt; } } if (alloc || wcs->crval == 0x0) { if (wcs->m_crval) { /* In case the caller fiddled with it. */ wcs->crval = wcs->m_crval; } else { if (!(wcs->crval = calloc(naxis, sizeof(double)))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_crval = wcs->crval; } } if (alloc || wcs->cunit == 0x0) { if (wcs->m_cunit) { /* In case the caller fiddled with it. */ wcs->cunit = wcs->m_cunit; } else { if (!(wcs->cunit = calloc(naxis, sizeof(char [72])))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_cunit = wcs->cunit; } } if (alloc || wcs->ctype == 0x0) { if (wcs->m_ctype) { /* In case the caller fiddled with it. */ wcs->ctype = wcs->m_ctype; } else { if (!(wcs->ctype = calloc(naxis, sizeof(char [72])))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_ctype = wcs->ctype; } } if (alloc || wcs->pv == 0x0) { if (wcs->m_pv) { /* In case the caller fiddled with it. */ wcs->pv = wcs->m_pv; } else { if (NPVMAX) { if (!(wcs->pv = calloc(NPVMAX, sizeof(struct pvcard)))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } } else { wcs->pv = (struct pvcard *)0; } wcs->npvmax = NPVMAX; wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_pv = wcs->pv; } } if (alloc || wcs->ps == 0x0) { if (wcs->m_ps) { /* In case the caller fiddled with it. */ wcs->ps = wcs->m_ps; } else { if (NPSMAX) { if (!(wcs->ps = calloc(NPSMAX, sizeof(struct pscard)))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } } else { wcs->ps = (struct pscard *)0; } wcs->npsmax = NPSMAX; wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_ps = wcs->ps; } } if (alloc || wcs->cd == 0x0) { if (wcs->m_cd) { /* In case the caller fiddled with it. */ wcs->cd = wcs->m_cd; } else { if (!(wcs->cd = calloc(naxis*naxis, sizeof(double)))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_cd = wcs->cd; } } if (alloc || wcs->crota == 0x0) { if (wcs->m_crota) { /* In case the caller fiddled with it. */ wcs->crota = wcs->m_crota; } else { if (!(wcs->crota = calloc(naxis, sizeof(double)))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_crota = wcs->crota; } } if (alloc || wcs->colax == 0x0) { if (wcs->m_colax) { /* In case the caller fiddled with it. */ wcs->colax = wcs->m_colax; } else { if (!(wcs->colax = calloc(naxis, sizeof(int)))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_colax = wcs->colax; } } if (alloc || wcs->cname == 0x0) { if (wcs->m_cname) { /* In case the caller fiddled with it. */ wcs->cname = wcs->m_cname; } else { if (!(wcs->cname = calloc(naxis, sizeof(char [72])))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_cname = wcs->cname; } } if (alloc || wcs->crder == 0x0) { if (wcs->m_crder) { /* In case the caller fiddled with it. */ wcs->crder = wcs->m_crder; } else { if (!(wcs->crder = calloc(naxis, sizeof(double)))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_crder = wcs->crder; } } if (alloc || wcs->csyer == 0x0) { if (wcs->m_csyer) { /* In case the caller fiddled with it. */ wcs->csyer = wcs->m_csyer; } else { if (!(wcs->csyer = calloc(naxis, sizeof(double)))) { wcsfree(wcs); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } wcs->m_flag = WCSSET; wcs->m_naxis = naxis; wcs->m_csyer = wcs->csyer; } } } wcs->flag = 0; wcs->naxis = naxis; /* Set defaults for the linear transformation. */ wcs->lin.crpix = wcs->crpix; wcs->lin.pc = wcs->pc; wcs->lin.cdelt = wcs->cdelt; wcs->lin.m_flag = 0; if ((status = linini(0, naxis, &(wcs->lin)))) { return wcserr_set(WCS_ERRMSG(status)); } /* CRVALia defaults to 0.0. */ for (i = 0; i < naxis; i++) { wcs->crval[i] = 0.0; } /* CUNITia and CTYPEia are blank by default. */ for (i = 0; i < naxis; i++) { memset(wcs->cunit[i], 0, 72); memset(wcs->ctype[i], 0, 72); } /* Set defaults for the celestial transformation parameters. */ wcs->lonpole = UNDEFINED; wcs->latpole = +90.0; /* Set defaults for the spectral transformation parameters. */ wcs->restfrq = 0.0; wcs->restwav = 0.0; /* Default parameter values. */ wcs->npv = 0; for (k = 0; k < wcs->npvmax; k++) { wcs->pv[k].i = 0; wcs->pv[k].m = 0; wcs->pv[k].value = 0.0; } wcs->nps = 0; for (k = 0; k < wcs->npsmax; k++) { wcs->ps[k].i = 0; wcs->ps[k].m = 0; memset(wcs->ps[k].value, 0, 72); } /* Defaults for alternate linear transformations. */ cd = wcs->cd; for (i = 0; i < naxis; i++) { for (j = 0; j < naxis; j++) { *(cd++) = 0.0; } } for (i = 0; i < naxis; i++) { wcs->crota[i] = 0.0; } wcs->altlin = 0; wcs->velref = 0; /* Defaults for auxiliary coordinate system information. */ memset(wcs->alt, 0, 4); wcs->alt[0] = ' '; wcs->colnum = 0; memset(wcs->wcsname, 0, 72); for (i = 0; i < naxis; i++) { wcs->colax[i] = 0; memset(wcs->cname[i], 0, 72); wcs->crder[i] = UNDEFINED; wcs->csyer[i] = UNDEFINED; } memset(wcs->radesys, 0, 72); wcs->equinox = UNDEFINED; memset(wcs->specsys, 0, 72); memset(wcs->ssysobs, 0, 72); wcs->velosys = UNDEFINED; memset(wcs->ssyssrc, 0, 72); wcs->zsource = UNDEFINED; wcs->obsgeo[0] = UNDEFINED; wcs->obsgeo[1] = UNDEFINED; wcs->obsgeo[2] = UNDEFINED; memset(wcs->dateobs, 0, 72); memset(wcs->dateavg, 0, 72); wcs->mjdobs = UNDEFINED; wcs->mjdavg = UNDEFINED; wcs->ntab = 0; wcs->tab = 0x0; wcs->nwtb = 0; wcs->wtb = 0x0; /* Reset derived values. */ strcpy(wcs->lngtyp, " "); strcpy(wcs->lattyp, " "); wcs->lng = -1; wcs->lat = -1; wcs->spec = -1; wcs->cubeface = -1; celini(&(wcs->cel)); spcini(&(wcs->spc)); return 0; } /*--------------------------------------------------------------------------*/ int wcssub( int alloc, const struct wcsprm *wcssrc, int *nsub, int axes[], struct wcsprm *wcsdst) { static const char *function = "wcssub"; char *c, ctypei[16]; int axis, cubeface, dealloc, dummy, i, itab, j, k, latitude, longitude, m, *map = 0x0, msub, naxis, npv, nps, other, spectral, status, stokes; const double *srcp; double *dstp; struct tabprm *tabp; struct wcserr **err; if (wcssrc == 0x0) return WCSERR_NULL_POINTER; err = &(wcsdst->err); if ((naxis = wcssrc->naxis) <= 0) { return wcserr_set(WCSERR_SET(WCSERR_MEMORY), "naxis must be positive (got %d)", naxis); } if (!(map = calloc(naxis, sizeof(int)))) { return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } if (nsub == 0x0) { nsub = &dummy; *nsub = naxis; } else if (*nsub == 0) { *nsub = naxis; } if ((dealloc = (axes == 0x0))) { /* Construct an index array. */ if (!(axes = calloc(naxis, sizeof(int)))) { free(map); return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } for (i = 0; i < naxis; i++) { axes[i] = i+1; } } /* So that we don't try to free an uninitialized pointer on cleanup. */ wcsdst->m_tab = 0x0; msub = 0; for (j = 0; j < *nsub; j++) { axis = axes[j]; if (abs(axis) > 0x1000) { /* Subimage extraction by type. */ k = abs(axis) & 0xFF; longitude = k & WCSSUB_LONGITUDE; latitude = k & WCSSUB_LATITUDE; cubeface = k & WCSSUB_CUBEFACE; spectral = k & WCSSUB_SPECTRAL; stokes = k & WCSSUB_STOKES; if ((other = (axis < 0))) { longitude = !longitude; latitude = !latitude; cubeface = !cubeface; spectral = !spectral; stokes = !stokes; } for (i = 0; i < naxis; i++) { strncpy (ctypei, (char *)(wcssrc->ctype + i), 8); ctypei[8] = '\0'; /* Find the last non-blank character. */ c = ctypei + 8; while (c-- > ctypei) { if (*c == ' ') *c = '\0'; if (*c != '\0') break; } if ( strcmp(ctypei, "RA") == 0 || strcmp(ctypei+1, "LON") == 0 || strcmp(ctypei+2, "LN") == 0 || strncmp(ctypei, "RA---", 5) == 0 || strncmp(ctypei+1, "LON-", 4) == 0 || strncmp(ctypei+2, "LN-", 3) == 0) { if (!longitude) { continue; } } else if ( strcmp(ctypei, "DEC") == 0 || strcmp(ctypei+1, "LAT") == 0 || strcmp(ctypei+2, "LT") == 0 || strncmp(ctypei, "DEC--", 5) == 0 || strncmp(ctypei+1, "LAT-", 4) == 0 || strncmp(ctypei+2, "LT-", 3) == 0) { if (!latitude) { continue; } } else if (strcmp(ctypei, "CUBEFACE") == 0) { if (!cubeface) { continue; } } else if (( strncmp(ctypei, "FREQ", 4) == 0 || strncmp(ctypei, "ENER", 4) == 0 || strncmp(ctypei, "WAVN", 4) == 0 || strncmp(ctypei, "VRAD", 4) == 0 || strncmp(ctypei, "WAVE", 4) == 0 || strncmp(ctypei, "VOPT", 4) == 0 || strncmp(ctypei, "ZOPT", 4) == 0 || strncmp(ctypei, "AWAV", 4) == 0 || strncmp(ctypei, "VELO", 4) == 0 || strncmp(ctypei, "BETA", 4) == 0) && (ctypei[4] == '\0' || ctypei[4] == '-')) { if (!spectral) { continue; } } else if (strcmp(ctypei, "STOKES") == 0) { if (!stokes) { continue; } } else if (!other) { continue; } /* This axis is wanted, but has it already been added? */ for (k = 0; k < msub; k++) { if (map[k] == i+1) { break; } } if (k == msub) map[msub++] = i+1; } } else if (0 < axis && axis <= naxis) { /* Check that the requested axis has not already been added. */ for (k = 0; k < msub; k++) { if (map[k] == axis) { break; } } if (k == msub) map[msub++] = axis; } else if (axis == 0) { /* Graft on a new axis. */ map[msub++] = 0; } else { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_SUBIMAGE)); goto cleanup; } } if ((*nsub = msub) == 0) { status = 0; goto cleanup; } for (i = 0; i < *nsub; i++) { axes[i] = map[i]; } /* Construct the inverse axis map: axes[i] == j means that output axis i+1 comes from input axis j, axes[i] == 0 means to create a new axis, map[i] == j means that input axis i+1 goes to output axis j, map[i] == 0 means that input axis i+1 is not used. */ for (i = 0; i < naxis; i++) { map[i] = 0; } for (i = 0; i < *nsub; i++) { if (axes[i] > 0) { map[axes[i]-1] = i+1; } } /* Check that the subimage coordinate system is separable. */ if (*nsub < naxis) { srcp = wcssrc->pc; for (i = 0; i < naxis; i++) { for (j = 0; j < naxis; j++) { if (*(srcp++) == 0.0 || j == i) continue; if ((map[i] == 0) != (map[j] == 0)) { status = wcserr_set(WCS_ERRMSG(WCSERR_NON_SEPARABLE)); goto cleanup; } } } } /* Initialize the destination. */ npv = NPVMAX; nps = NPSMAX; NPVMAX = 0; for (k = 0; k < wcssrc->npv; k++) { i = wcssrc->pv[k].i; if (i == 0 || (i > 0 && map[i-1])) { NPVMAX++; } } NPSMAX = 0; for (k = 0; k < wcssrc->nps; k++) { i = wcssrc->ps[k].i; if (i > 0 && map[i-1]) { NPSMAX++; } } status = wcsini(alloc, *nsub, wcsdst); NPVMAX = npv; NPSMAX = nps; if (status) { goto cleanup; } /* Linear transformation. */ srcp = wcssrc->crpix; dstp = wcsdst->crpix; for (j = 0; j < *nsub; j++, dstp++) { if (axes[j] > 0) { k = axes[j] - 1; *dstp = *(srcp+k); } } srcp = wcssrc->pc; dstp = wcsdst->pc; for (i = 0; i < *nsub; i++) { if (axes[i] > 0) { for (j = 0; j < *nsub; j++, dstp++) { if (axes[j] > 0) { k = (axes[i]-1)*naxis + (axes[j]-1); *dstp = *(srcp+k); } } } } srcp = wcssrc->cdelt; dstp = wcsdst->cdelt; for (i = 0; i < *nsub; i++, dstp++) { if (axes[i] > 0) { k = axes[i] - 1; *dstp = *(srcp+k); } } /* Coordinate reference value. */ srcp = wcssrc->crval; dstp = wcsdst->crval; for (i = 0; i < *nsub; i++, dstp++) { if (axes[i] > 0) { k = axes[i] - 1; *dstp = *(srcp+k); } } /* Coordinate units and type. */ for (i = 0; i < *nsub; i++) { if (axes[i] > 0) { k = axes[i] - 1; strncpy(wcsdst->cunit[i], wcssrc->cunit[k], 72); strncpy(wcsdst->ctype[i], wcssrc->ctype[k], 72); } } /* Celestial and spectral transformation parameters. */ wcsdst->lonpole = wcssrc->lonpole; wcsdst->latpole = wcssrc->latpole; wcsdst->restfrq = wcssrc->restfrq; wcsdst->restwav = wcssrc->restwav; /* Parameter values. */ npv = 0; for (k = 0; k < wcssrc->npv; k++) { i = wcssrc->pv[k].i; if (i == 0 || (i > 0 && map[i-1])) { /* i == 0 is a special code for the latitude axis. */ wcsdst->pv[npv] = wcssrc->pv[k]; wcsdst->pv[npv].i = map[i-1]; npv++; } } wcsdst->npv = npv; nps = 0; for (k = 0; k < wcssrc->nps; k++) { i = wcssrc->ps[k].i; if (i > 0 && map[i-1]) { wcsdst->ps[nps] = wcssrc->ps[k]; wcsdst->ps[nps].i = map[i-1]; nps++; } } wcsdst->nps = nps; /* Alternate linear transformations. */ srcp = wcssrc->cd; dstp = wcsdst->cd; for (i = 0; i < *nsub; i++) { if (axes[i] > 0) { for (j = 0; j < *nsub; j++, dstp++) { if (axes[j] > 0) { k = (axes[i]-1)*naxis + (axes[j]-1); *dstp = *(srcp+k); } } } } srcp = wcssrc->crota; dstp = wcsdst->crota; for (i = 0; i < *nsub; i++, dstp++) { if (axes[i] > 0) { k = axes[i] - 1; *dstp = *(srcp+k); } } wcsdst->altlin = wcssrc->altlin; wcsdst->velref = wcssrc->velref; /* Auxiliary coordinate system information. */ strncpy(wcsdst->alt, wcssrc->alt, 4); wcsdst->colnum = wcssrc->colnum; strncpy(wcsdst->wcsname, wcssrc->wcsname, 72); for (i = 0; i < *nsub; i++) { if (axes[i] > 0) { k = axes[i] - 1; wcsdst->colax[i] = wcssrc->colax[k]; strncpy(wcsdst->cname[i], wcssrc->cname[k], 72); wcsdst->crder[i] = wcssrc->crder[k]; wcsdst->csyer[i] = wcssrc->csyer[k]; } } strncpy(wcsdst->radesys, wcssrc->radesys, 72); wcsdst->equinox = wcssrc->equinox; strncpy(wcsdst->specsys, wcssrc->specsys, 72); strncpy(wcsdst->ssysobs, wcssrc->ssysobs, 72); wcsdst->velosys = wcssrc->velosys; strncpy(wcsdst->ssyssrc, wcssrc->ssyssrc, 72); wcsdst->zsource = wcssrc->zsource; wcsdst->obsgeo[0] = wcssrc->obsgeo[0]; wcsdst->obsgeo[1] = wcssrc->obsgeo[1]; wcsdst->obsgeo[2] = wcssrc->obsgeo[2]; strncpy(wcsdst->dateobs, wcssrc->dateobs, 72); strncpy(wcsdst->dateavg, wcssrc->dateavg, 72); wcsdst->mjdobs = wcssrc->mjdobs; wcsdst->mjdavg = wcssrc->mjdavg; /* Coordinate lookup tables; only copy what's needed. */ wcsdst->ntab = 0; for (itab = 0; itab < wcssrc->ntab; itab++) { /* Is this table wanted? */ for (m = 0; m < wcssrc->tab[itab].M; m++) { i = wcssrc->tab[itab].map[m]; if (map[i-1]) { wcsdst->ntab++; break; } } } if (wcsdst->ntab) { /* Allocate memory for tabprm structs. */ if (!(wcsdst->tab = calloc(wcsdst->ntab, sizeof(struct tabprm)))) { wcsdst->ntab = 0; status = wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); goto cleanup; } wcsdst->m_tab = wcsdst->tab; } tabp = wcsdst->tab; for (itab = 0; itab < wcssrc->ntab; itab++) { for (m = 0; m < wcssrc->tab[itab].M; m++) { i = wcssrc->tab[itab].map[m]; if (map[i-1]) { if ((status = tabcpy(1, wcssrc->tab + itab, tabp))) { wcserr_set(WCS_ERRMSG(status)); goto cleanup; } tabp++; break; } } } cleanup: if (map) free(map); if (dealloc) { free(axes); } if (status && wcsdst->m_tab) free(wcsdst->m_tab); return status; } /*--------------------------------------------------------------------------*/ int wcsfree(struct wcsprm *wcs) { int j; if (wcs == 0x0) return WCSERR_NULL_POINTER; if (wcs->flag == -1) { wcs->lin.flag = -1; } else { /* Free memory allocated by wcsini(). */ if (wcs->m_flag == WCSSET) { if (wcs->crpix == wcs->m_crpix) wcs->crpix = 0x0; if (wcs->pc == wcs->m_pc) wcs->pc = 0x0; if (wcs->cdelt == wcs->m_cdelt) wcs->cdelt = 0x0; if (wcs->crval == wcs->m_crval) wcs->crval = 0x0; if (wcs->cunit == wcs->m_cunit) wcs->cunit = 0x0; if (wcs->ctype == wcs->m_ctype) wcs->ctype = 0x0; if (wcs->pv == wcs->m_pv) wcs->pv = 0x0; if (wcs->ps == wcs->m_ps) wcs->ps = 0x0; if (wcs->cd == wcs->m_cd) wcs->cd = 0x0; if (wcs->crota == wcs->m_crota) wcs->crota = 0x0; if (wcs->colax == wcs->m_colax) wcs->colax = 0x0; if (wcs->cname == wcs->m_cname) wcs->cname = 0x0; if (wcs->crder == wcs->m_crder) wcs->crder = 0x0; if (wcs->csyer == wcs->m_csyer) wcs->csyer = 0x0; if (wcs->tab == wcs->m_tab) wcs->tab = 0x0; if (wcs->wtb == wcs->m_wtb) wcs->wtb = 0x0; if (wcs->m_crpix) free(wcs->m_crpix); if (wcs->m_pc) free(wcs->m_pc); if (wcs->m_cdelt) free(wcs->m_cdelt); if (wcs->m_crval) free(wcs->m_crval); if (wcs->m_cunit) free(wcs->m_cunit); if (wcs->m_ctype) free(wcs->m_ctype); if (wcs->m_pv) free(wcs->m_pv); if (wcs->m_ps) free(wcs->m_ps); if (wcs->m_cd) free(wcs->m_cd); if (wcs->m_crota) free(wcs->m_crota); if (wcs->m_colax) free(wcs->m_colax); if (wcs->m_cname) free(wcs->m_cname); if (wcs->m_crder) free(wcs->m_crder); if (wcs->m_csyer) free(wcs->m_csyer); /* Free memory allocated by wcstab(). */ if (wcs->m_tab) { for (j = 0; j < wcs->ntab; j++) { tabfree(wcs->m_tab + j); } free(wcs->m_tab); } if (wcs->m_wtb) free(wcs->m_wtb); } /* Free memory allocated by wcsset(). */ if (wcs->types) free(wcs->types); if (wcs->lin.crpix == wcs->m_crpix) wcs->lin.crpix = 0x0; if (wcs->lin.pc == wcs->m_pc) wcs->lin.pc = 0x0; if (wcs->lin.cdelt == wcs->m_cdelt) wcs->lin.cdelt = 0x0; } wcs->m_flag = 0; wcs->m_naxis = 0x0; wcs->m_crpix = 0x0; wcs->m_pc = 0x0; wcs->m_cdelt = 0x0; wcs->m_crval = 0x0; wcs->m_cunit = 0x0; wcs->m_ctype = 0x0; wcs->m_pv = 0x0; wcs->m_ps = 0x0; wcs->m_cd = 0x0; wcs->m_crota = 0x0; wcs->m_colax = 0x0; wcs->m_cname = 0x0; wcs->m_crder = 0x0; wcs->m_csyer = 0x0; wcs->ntab = 0; wcs->m_tab = 0x0; wcs->nwtb = 0; wcs->m_wtb = 0x0; wcs->types = 0x0; wcs->flag = 0; if (wcs->err) free(wcs->err); wcs->err = 0x0; linfree(&(wcs->lin)); celfree(&(wcs->cel)); spcfree(&(wcs->spc)); return 0; } /*--------------------------------------------------------------------------*/ int wcsprt(const struct wcsprm *wcs) { int i, j, k; struct wtbarr *wtbp; if (wcs == 0x0) return WCSERR_NULL_POINTER; if (wcs->flag != WCSSET) { wcsprintf("The wcsprm struct is UNINITIALIZED.\n"); return 0; } wcsprintf(" flag: %d\n", wcs->flag); wcsprintf(" naxis: %d\n", wcs->naxis); WCSPRINTF_PTR(" crpix: ", wcs->crpix, "\n"); wcsprintf(" "); for (i = 0; i < wcs->naxis; i++) { wcsprintf(" %- 11.5g", wcs->crpix[i]); } wcsprintf("\n"); /* Linear transformation. */ k = 0; WCSPRINTF_PTR(" pc: ", wcs->pc, "\n"); for (i = 0; i < wcs->naxis; i++) { wcsprintf(" pc[%d][]:", i); for (j = 0; j < wcs->naxis; j++) { wcsprintf(" %- 11.5g", wcs->pc[k++]); } wcsprintf("\n"); } /* Coordinate increment at reference point. */ WCSPRINTF_PTR(" cdelt: ", wcs->cdelt, "\n"); wcsprintf(" "); for (i = 0; i < wcs->naxis; i++) { wcsprintf(" %- 11.5g", wcs->cdelt[i]); } wcsprintf("\n"); /* Coordinate value at reference point. */ WCSPRINTF_PTR(" crval: ", wcs->crval, "\n"); wcsprintf(" "); for (i = 0; i < wcs->naxis; i++) { wcsprintf(" %- 11.5g", wcs->crval[i]); } wcsprintf("\n"); /* Coordinate units and type. */ WCSPRINTF_PTR(" cunit: ", wcs->cunit, "\n"); for (i = 0; i < wcs->naxis; i++) { wcsprintf(" \"%s\"\n", wcs->cunit[i]); } WCSPRINTF_PTR(" ctype: ", wcs->ctype, "\n"); for (i = 0; i < wcs->naxis; i++) { wcsprintf(" \"%s\"\n", wcs->ctype[i]); } /* Celestial and spectral transformation parameters. */ if (undefined(wcs->lonpole)) { wcsprintf(" lonpole: UNDEFINED\n"); } else { wcsprintf(" lonpole: %9f\n", wcs->lonpole); } wcsprintf(" latpole: %9f\n", wcs->latpole); wcsprintf(" restfrq: %f\n", wcs->restfrq); wcsprintf(" restwav: %f\n", wcs->restwav); /* Parameter values. */ wcsprintf(" npv: %d\n", wcs->npv); wcsprintf(" npvmax: %d\n", wcs->npvmax); WCSPRINTF_PTR(" pv: ", wcs->pv, "\n"); for (i = 0; i < wcs->npv; i++) { wcsprintf(" %3d%4d %- 11.5g\n", (wcs->pv[i]).i, (wcs->pv[i]).m, (wcs->pv[i]).value); } wcsprintf(" nps: %d\n", wcs->nps); wcsprintf(" npsmax: %d\n", wcs->npsmax); WCSPRINTF_PTR(" ps: ", wcs->ps, "\n"); for (i = 0; i < wcs->nps; i++) { wcsprintf(" %3d%4d %s\n", (wcs->ps[i]).i, (wcs->ps[i]).m, (wcs->ps[i]).value); } /* Alternate linear transformations. */ k = 0; WCSPRINTF_PTR(" cd: ", wcs->cd, "\n"); if (wcs->cd) { for (i = 0; i < wcs->naxis; i++) { wcsprintf(" cd[%d][]:", i); for (j = 0; j < wcs->naxis; j++) { wcsprintf(" %- 11.5g", wcs->cd[k++]); } wcsprintf("\n"); } } WCSPRINTF_PTR(" crota: ", wcs->crota, "\n"); if (wcs->crota) { wcsprintf(" "); for (i = 0; i < wcs->naxis; i++) { wcsprintf(" %- 11.5g", wcs->crota[i]); } wcsprintf("\n"); } wcsprintf(" altlin: %d\n", wcs->altlin); wcsprintf(" velref: %d\n", wcs->velref); /* Auxiliary coordinate system information. */ wcsprintf(" alt: '%c'\n", wcs->alt[0]); wcsprintf(" colnum: %d\n", wcs->colnum); WCSPRINTF_PTR(" colax: ", wcs->colax, "\n"); if (wcs->colax) { wcsprintf(" "); for (i = 0; i < wcs->naxis; i++) { wcsprintf(" %5d", wcs->colax[i]); } wcsprintf("\n"); } if (wcs->wcsname[0] == '\0') { wcsprintf(" wcsname: UNDEFINED\n"); } else { wcsprintf(" wcsname: \"%s\"\n", wcs->wcsname); } WCSPRINTF_PTR(" cname: ", wcs->cname, "\n"); if (wcs->cname) { for (i = 0; i < wcs->naxis; i++) { if (wcs->cname[i][0] == '\0') { wcsprintf(" UNDEFINED\n"); } else { wcsprintf(" \"%s\"\n", wcs->cname[i]); } } } WCSPRINTF_PTR(" crder: ", wcs->crder, "\n"); if (wcs->crder) { wcsprintf(" "); for (i = 0; i < wcs->naxis; i++) { if (undefined(wcs->crder[i])) { wcsprintf(" UNDEFINED "); } else { wcsprintf(" %- 11.5g", wcs->crder[i]); } } wcsprintf("\n"); } WCSPRINTF_PTR(" csyer: ", wcs->csyer, "\n"); if (wcs->csyer) { wcsprintf(" "); for (i = 0; i < wcs->naxis; i++) { if (undefined(wcs->csyer[i])) { wcsprintf(" UNDEFINED "); } else { wcsprintf(" %- 11.5g", wcs->csyer[i]); } } wcsprintf("\n"); } if (wcs->radesys[0] == '\0') { wcsprintf(" radesys: UNDEFINED\n"); } else { wcsprintf(" radesys: \"%s\"\n", wcs->radesys); } if (undefined(wcs->equinox)) { wcsprintf(" equinox: UNDEFINED\n"); } else { wcsprintf(" equinox: %9f\n", wcs->equinox); } if (wcs->specsys[0] == '\0') { wcsprintf(" specsys: UNDEFINED\n"); } else { wcsprintf(" specsys: \"%s\"\n", wcs->specsys); } if (wcs->ssysobs[0] == '\0') { wcsprintf(" ssysobs: UNDEFINED\n"); } else { wcsprintf(" ssysobs: \"%s\"\n", wcs->ssysobs); } if (undefined(wcs->velosys)) { wcsprintf(" velosys: UNDEFINED\n"); } else { wcsprintf(" velosys: %9f\n", wcs->velosys); } if (wcs->ssyssrc[0] == '\0') { wcsprintf(" ssyssrc: UNDEFINED\n"); } else { wcsprintf(" ssyssrc: \"%s\"\n", wcs->ssyssrc); } if (undefined(wcs->zsource)) { wcsprintf(" zsource: UNDEFINED\n"); } else { wcsprintf(" zsource: %9f\n", wcs->zsource); } wcsprintf(" obsgeo: "); for (i = 0; i < 3; i++) { if (undefined(wcs->obsgeo[i])) { wcsprintf("UNDEFINED "); } else { wcsprintf("%- 11.5g ", wcs->obsgeo[i]); } } wcsprintf("\n"); if (wcs->dateobs[0] == '\0') { wcsprintf(" dateobs: UNDEFINED\n"); } else { wcsprintf(" dateobs: \"%s\"\n", wcs->dateobs); } if (wcs->dateavg[0] == '\0') { wcsprintf(" dateavg: UNDEFINED\n"); } else { wcsprintf(" dateavg: \"%s\"\n", wcs->dateavg); } if (undefined(wcs->mjdobs)) { wcsprintf(" mjdobs: UNDEFINED\n"); } else { wcsprintf(" mjdobs: %9f\n", wcs->mjdobs); } if (undefined(wcs->mjdavg)) { wcsprintf(" mjdavg: UNDEFINED\n"); } else { wcsprintf(" mjdavg: %9f\n", wcs->mjdavg); } wcsprintf(" ntab: %d\n", wcs->ntab); WCSPRINTF_PTR(" tab: ", wcs->tab, ""); if (wcs->tab != 0x0) wcsprintf(" (see below)"); wcsprintf("\n"); wcsprintf(" nwtb: %d\n", wcs->nwtb); WCSPRINTF_PTR(" wtb: ", wcs->wtb, ""); if (wcs->wtb != 0x0) wcsprintf(" (see below)"); wcsprintf("\n"); /* Derived values. */ WCSPRINTF_PTR(" types: ", wcs->types, "\n "); for (i = 0; i < wcs->naxis; i++) { wcsprintf("%5d", wcs->types[i]); } wcsprintf("\n"); wcsprintf(" lngtyp: \"%s\"\n", wcs->lngtyp); wcsprintf(" lattyp: \"%s\"\n", wcs->lattyp); wcsprintf(" lng: %d\n", wcs->lng); wcsprintf(" lat: %d\n", wcs->lat); wcsprintf(" spec: %d\n", wcs->spec); wcsprintf(" cubeface: %d\n", wcs->cubeface); WCSPRINTF_PTR(" err: ", wcs->err, "\n"); if (wcs->err) { wcserr_prt(wcs->err, " "); } wcsprintf(" lin: (see below)\n"); wcsprintf(" cel: (see below)\n"); wcsprintf(" spc: (see below)\n"); /* Memory management. */ wcsprintf(" m_flag: %d\n", wcs->m_flag); wcsprintf(" m_naxis: %d\n", wcs->m_naxis); WCSPRINTF_PTR(" m_crpix: ", wcs->m_crpix, ""); if (wcs->m_crpix == wcs->crpix) wcsprintf(" (= crpix)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_pc: ", wcs->m_pc, ""); if (wcs->m_pc == wcs->pc) wcsprintf(" (= pc)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_cdelt: ", wcs->m_cdelt, ""); if (wcs->m_cdelt == wcs->cdelt) wcsprintf(" (= cdelt)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_crval: ", wcs->m_crval, ""); if (wcs->m_crval == wcs->crval) wcsprintf(" (= crval)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_cunit: ", wcs->m_cunit, ""); if (wcs->m_cunit == wcs->cunit) wcsprintf(" (= cunit)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_ctype: ", wcs->m_ctype, ""); if (wcs->m_ctype == wcs->ctype) wcsprintf(" (= ctype)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_pv: ", wcs->m_pv, ""); if (wcs->m_pv == wcs->pv) wcsprintf(" (= pv)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_ps: ", wcs->m_ps, ""); if (wcs->m_ps == wcs->ps) wcsprintf(" (= ps)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_cd: ", wcs->m_cd, ""); if (wcs->m_cd == wcs->cd) wcsprintf(" (= cd)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_crota: ", wcs->m_crota, ""); if (wcs->m_crota == wcs->crota) wcsprintf(" (= crota)"); wcsprintf("\n"); wcsprintf("\n"); WCSPRINTF_PTR(" m_colax: ", wcs->m_colax, ""); if (wcs->m_colax == wcs->colax) wcsprintf(" (= colax)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_cname: ", wcs->m_cname, ""); if (wcs->m_cname == wcs->cname) wcsprintf(" (= cname)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_crder: ", wcs->m_crder, ""); if (wcs->m_crder == wcs->crder) wcsprintf(" (= crder)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_csyer: ", wcs->m_csyer, ""); if (wcs->m_csyer == wcs->csyer) wcsprintf(" (= csyer)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_tab: ", wcs->m_tab, ""); if (wcs->m_tab == wcs->tab) wcsprintf(" (= tab)"); wcsprintf("\n"); WCSPRINTF_PTR(" m_wtb: ", wcs->m_wtb, ""); if (wcs->m_wtb == wcs->wtb) wcsprintf(" (= wtb)"); wcsprintf("\n"); /* Tabular transformation parameters. */ if ((wtbp = wcs->wtb)) { for (j = 0; j < wcs->nwtb; j++, wtbp++) { wcsprintf("\n"); wcsprintf("wtb[%d].*\n", j); wcsprintf(" i: %d\n", wtbp->i); wcsprintf(" m: %d\n", wtbp->m); wcsprintf(" kind: %c\n", wtbp->kind); wcsprintf(" extnam: %s\n", wtbp->extnam); wcsprintf(" extver: %d\n", wtbp->extver); wcsprintf(" extlev: %d\n", wtbp->extlev); wcsprintf(" ttype: %s\n", wtbp->ttype); wcsprintf(" row: %ld\n", wtbp->row); wcsprintf(" ndim: %d\n", wtbp->ndim); WCSPRINTF_PTR(" dimlen: ", wtbp->dimlen, "\n"); WCSPRINTF_PTR(" arrayp: ", wtbp->arrayp, " -> "); WCSPRINTF_PTR("", *(wtbp->arrayp), "\n"); } } if (wcs->tab) { for (j = 0; j < wcs->ntab; j++) { wcsprintf("\n"); wcsprintf("tab[%d].*\n", j); tabprt(wcs->tab + j); } } /* Linear transformation parameters. */ wcsprintf("\n"); wcsprintf(" lin.*\n"); linprt(&(wcs->lin)); /* Celestial transformation parameters. */ wcsprintf("\n"); wcsprintf(" cel.*\n"); celprt(&(wcs->cel)); /* Spectral transformation parameters. */ wcsprintf("\n"); wcsprintf(" spc.*\n"); spcprt(&(wcs->spc)); return 0; } /*--------------------------------------------------------------------------*/ int wcsperr(const struct wcsprm *wcs, const char *prefix) { int j; if (wcs == 0x0) return WCSERR_NULL_POINTER; if (!wcserr_prt(wcs->err, prefix)) { wcserr_prt(wcs->lin.err, prefix); wcserr_prt(wcs->cel.err, prefix); wcserr_prt(wcs->cel.prj.err, prefix); wcserr_prt(wcs->spc.err, prefix); if (wcs->tab) { for (j = 0; j < wcs->ntab; j++) { wcserr_prt((wcs->tab + j)->err, prefix); } } } return 0; } /*--------------------------------------------------------------------------*/ int wcsset(struct wcsprm *wcs) { static const char *function = "wcsset"; char scode[4], stype[5]; int i, j, k, m, naxis, status; double lambda, rho; double *cd, *pc; struct celprm *wcscel = &(wcs->cel); struct prjprm *wcsprj = &(wcscel->prj); struct spcprm *wcsspc = &(wcs->spc); struct wcserr **err; if (wcs == 0x0) return WCSERR_NULL_POINTER; err = &(wcs->err); /* Determine axis types from CTYPEia. */ if ((status = wcs_types(wcs))) { return status; } /* Convert to canonical units. */ if ((status = wcs_units(wcs))) { return status; } /* Non-linear celestial axes present? */ if (wcs->lng >= 0 && wcs->types[wcs->lng] == 2200) { celini(wcscel); /* CRVALia, LONPOLEa, and LATPOLEa keyvalues. */ wcscel->ref[0] = wcs->crval[wcs->lng]; wcscel->ref[1] = wcs->crval[wcs->lat]; wcscel->ref[2] = wcs->lonpole; wcscel->ref[3] = wcs->latpole; /* PVi_ma keyvalues. */ for (k = 0; k < wcs->npv; k++) { i = wcs->pv[k].i - 1; m = wcs->pv[k].m; if (i == -1) { /* From a PROJPn keyword. */ i = wcs->lat; } if (i == wcs->lat) { /* PVi_ma associated with latitude axis. */ if (m < 30) { wcsprj->pv[m] = wcs->pv[k].value; } } else if (i == wcs->lng) { /* PVi_ma associated with longitude axis. */ switch (m) { case 0: wcscel->offset = (wcs->pv[k].value != 0.0); break; case 1: wcscel->phi0 = wcs->pv[k].value; break; case 2: wcscel->theta0 = wcs->pv[k].value; break; case 3: /* If present, overrides LONPOLEa. */ wcscel->ref[2] = wcs->pv[k].value; break; case 4: /* If present, overrides LATPOLEa. */ wcscel->ref[3] = wcs->pv[k].value; break; default: return wcserr_set(WCSERR_SET(WCSERR_BAD_COORD_TRANS), "PV%i_%i%s: Unrecognized coordinate transformation parameter", i+1, m, wcs->alt); break; } } } /* Do simple alias translations. */ if (strncmp(wcs->ctype[wcs->lng]+5, "GLS", 3) == 0) { wcscel->offset = 1; wcscel->phi0 = 0.0; wcscel->theta0 = wcs->crval[wcs->lat]; strcpy(wcsprj->code, "SFL"); } else if (strncmp(wcs->ctype[wcs->lng]+5, "NCP", 3) == 0) { /* Convert NCP to SIN. */ if (wcscel->ref[1] == 0.0) { return wcserr_set(WCSERR_SET(WCSERR_BAD_PARAM), "Invalid projection: NCP blows up on the equator"); } strcpy(wcsprj->code, "SIN"); wcsprj->pv[1] = 0.0; wcsprj->pv[2] = cosd(wcscel->ref[1])/sind(wcscel->ref[1]); } else { strncpy(wcsprj->code, wcs->ctype[wcs->lng]+5, 3); wcsprj->code[3] = '\0'; } /* Initialize the celestial transformation routines. */ wcsprj->r0 = 0.0; if ((status = celset(wcscel))) { return wcserr_set(WCS_ERRMSG(status+3)); } /* Update LONPOLE, LATPOLE, and PVi_ma keyvalues. */ wcs->lonpole = wcscel->ref[2]; wcs->latpole = wcscel->ref[3]; for (k = 0; k < wcs->npv; k++) { i = wcs->pv[k].i - 1; m = wcs->pv[k].m; if (i == wcs->lng) { switch (m) { case 1: wcs->pv[k].value = wcscel->phi0; break; case 2: wcs->pv[k].value = wcscel->theta0; break; case 3: wcs->pv[k].value = wcscel->ref[2]; break; case 4: wcs->pv[k].value = wcscel->ref[3]; break; } } } } /* Non-linear spectral axis present? */ if (wcs->spec >= 0 && wcs->types[wcs->spec] == 3300) { spcini(wcsspc); if ((status = spctype(wcs->ctype[wcs->spec], stype, scode, 0x0, 0x0, 0x0, 0x0, 0x0, err))) { return status; } strcpy(wcsspc->type, stype); strcpy(wcsspc->code, scode); /* CRVALia, RESTFRQa, and RESTWAVa keyvalues. */ wcsspc->crval = wcs->crval[wcs->spec]; wcsspc->restfrq = wcs->restfrq; wcsspc->restwav = wcs->restwav; /* PVi_ma keyvalues. */ for (k = 0; k < wcs->npv; k++) { i = wcs->pv[k].i - 1; m = wcs->pv[k].m; if (i == wcs->spec) { /* PVi_ma associated with grism axis. */ if (m < 7) { wcsspc->pv[m] = wcs->pv[k].value; } } } /* Initialize the spectral transformation routines. */ if ((status = spcset(wcsspc))) { return wcserr_set(WCS_ERRMSG(status+3)); } } /* Tabular axes present? */ for (j = 0; j < wcs->ntab; j++) { if ((status = tabset(wcs->tab + j))) { return wcserr_set(WCS_ERRMSG(status+3)); } } /* Initialize the linear transformation. */ naxis = wcs->naxis; wcs->altlin &= 7; if (wcs->altlin > 1 && !(wcs->altlin & 1)) { pc = wcs->pc; if (wcs->altlin & 2) { /* Copy CDi_ja to PCi_ja and reset CDELTia. */ cd = wcs->cd; for (i = 0; i < naxis; i++) { for (j = 0; j < naxis; j++) { *(pc++) = *(cd++); } wcs->cdelt[i] = 1.0; } } else if (wcs->altlin & 4) { /* Construct PCi_ja from CROTAia. */ if ((i = wcs->lng) >= 0 && (j = wcs->lat) >= 0) { rho = wcs->crota[j]; if (wcs->cdelt[i] == 0.0) { return wcserr_set(WCSERR_SET(WCSERR_SINGULAR_MTX), "Singular transformation matrix, CDELT%d is zero", i+1); } lambda = wcs->cdelt[j]/wcs->cdelt[i]; *(pc + i*naxis + i) = *(pc + j*naxis + j) = cosd(rho); *(pc + i*naxis + j) = *(pc + j*naxis + i) = sind(rho); *(pc + i*naxis + j) *= -lambda; *(pc + j*naxis + i) /= lambda; } } } wcs->lin.crpix = wcs->crpix; wcs->lin.pc = wcs->pc; wcs->lin.cdelt = wcs->cdelt; if ((status = linset(&(wcs->lin)))) { return wcserr_set(WCS_ERRMSG(status)); } /* Strip off trailing blanks and null-fill auxiliary string members. */ wcsutil_null_fill(4, wcs->alt); wcsutil_null_fill(72, wcs->wcsname); for (i = 0; i < naxis; i++) { wcsutil_null_fill(72, wcs->cname[i]); } wcsutil_null_fill(72, wcs->radesys); wcsutil_null_fill(72, wcs->specsys); wcsutil_null_fill(72, wcs->ssysobs); wcsutil_null_fill(72, wcs->ssyssrc); wcsutil_null_fill(72, wcs->dateobs); wcsutil_null_fill(72, wcs->dateavg); wcs->flag = WCSSET; return 0; } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int wcs_types(struct wcsprm *wcs) { static const char *function = "wcs_types"; const int nalias = 2; const char aliases [2][4] = {"NCP", "GLS"}; const char *alt = ""; char ctypei[16], pcode[4], requir[9], scode[4], specsys[9]; int i, j, m, naxis, *ndx = 0x0, type; struct wcserr **err; if (wcs == 0x0) return WCSERR_NULL_POINTER; err = &(wcs->err); /* Parse the CTYPEia keyvalues. */ pcode[0] = '\0'; requir[0] = '\0'; wcs->lng = -1; wcs->lat = -1; wcs->spec = -1; wcs->cubeface = -1; if (*(wcs->alt) != ' ') alt = wcs->alt; naxis = wcs->naxis; if (wcs->types) free(wcs->types); wcs->types = calloc(naxis, sizeof(int)); if (wcs->types == NULL) { return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } for (i = 0; i < naxis; i++) { /* Null fill. */ wcsutil_null_fill(72, wcs->ctype[i]); strncpy(ctypei, wcs->ctype[i], 15); ctypei[15] = '\0'; /* Check for early Paper IV syntax (e.g. '-SIP' used by Spitzer). */ if (strlen(ctypei) == 12 && ctypei[8] == '-') { /* Excise the "4-3-3" or "8-3"-form distortion code. */ ctypei[8] = '\0'; /* Remove trailing dashes from "8-3"-form codes. */ for (j = 7; j > 0; j--) { if (ctypei[j] != '-') break; ctypei[j] = '\0'; } } /* Logarithmic or tabular axis? */ wcs->types[i] = 0; if (strcmp(ctypei+4, "-LOG") == 0) { /* Logarithmic axis. */ wcs->types[i] = 400; } else if (strcmp(ctypei+4, "-TAB") == 0) { /* Tabular axis. */ wcs->types[i] = 500; } if (wcs->types[i]) { /* Could have -LOG or -TAB with celestial or spectral types. */ ctypei[4] = '\0'; /* Take care of things like 'FREQ-LOG' or 'RA---TAB'. */ for (j = 3; j >= 0; j--) { if (ctypei[j] != '-') break; ctypei[j] = '\0'; } } /* Translate AIPS spectral types for spctyp(). */ if (spcaips(ctypei, wcs->velref, ctypei, specsys) == 0) { strcpy(wcs->ctype[i], ctypei); if (wcs->specsys[0] == '\0') strcpy(wcs->specsys, specsys); } /* Process linear axes. */ if (!(strlen(ctypei) == 8 && ctypei[4] == '-') || (strlen(ctypei) > 8 && ctypei[8] == '-')) { /* Identify Stokes, celestial and spectral types. */ if (strcmp(ctypei, "STOKES") == 0) { /* STOKES axis. */ wcs->types[i] = 1100; } else if (strcmp(ctypei, "RA") == 0 || strcmp(ctypei+1, "LON") == 0 || strcmp(ctypei+2, "LN") == 0) { /* Longitude axis. */ if (wcs->lng < 0) wcs->lng = i; wcs->types[i] += 2000; } else if (strcmp(ctypei, "DEC") == 0 || strcmp(ctypei+1, "LAT") == 0 || strcmp(ctypei+2, "LT") == 0) { /* Latitude axis. */ if (wcs->lat < 0) wcs->lat = i; wcs->types[i] += 2001; } else if (strcmp(ctypei, "CUBEFACE") == 0) { /* CUBEFACE axis. */ if (wcs->cubeface == -1) { wcs->types[i] = 2102; wcs->cubeface = i; } else { /* Multiple CUBEFACE axes! */ return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), "Multiple CUBEFACE axes (in CTYPE%d%.1s and CTYPE%d%.1s)", wcs->cubeface+1, alt, i+1, alt); } } else if (spctyp(ctypei, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) == 0) { /* Spectral axis. */ if (wcs->spec < 0) wcs->spec = i; wcs->types[i] += 3000; } continue; } /* CTYPEia is in "4-3" form; is it a recognized spectral type? */ if (spctyp(ctypei, 0x0, scode, 0x0, 0x0, 0x0, 0x0, 0x0) == 0) { /* Non-linear spectral axis found. */ wcs->types[i] = 3300; /* Check uniqueness. */ if (wcs->spec >= 0) { return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), "Multiple spectral axes (in CTYPE%d%.1s and CTYPE%d%.1s)", wcs->spec+1, alt, i+1, alt); } wcs->spec = i; continue; } /* Is it a recognized celestial projection? */ for (j = 0; j < prj_ncode; j++) { if (strncmp(ctypei+5, prj_codes[j], 3) == 0) break; } if (j == prj_ncode) { /* Not a standard projection code, maybe it's an alias. */ for (j = 0; j < nalias; j++) { if (strncmp(ctypei+5, aliases[j], 3) == 0) break; } if (j == nalias) { /* Not a recognized algorithm code of any type. */ wcs->types[i] = -1; return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), "Unrecognized projection code (%s in CTYPE%d%.1s)", ctypei+5, i+1, alt); } } /* Parse the celestial axis type. */ wcs->types[i] = 2200; if (*pcode == '\0') { /* The first of the two celestial axes. */ sprintf(pcode, "%.3s", ctypei+5); if (strncmp(ctypei, "RA--", 4) == 0) { wcs->lng = i; strcpy(wcs->lngtyp, "RA"); strcpy(wcs->lattyp, "DEC"); ndx = &wcs->lat; sprintf(requir, "DEC--%s", pcode); } else if (strncmp(ctypei, "DEC-", 4) == 0) { wcs->lat = i; strcpy(wcs->lngtyp, "RA"); strcpy(wcs->lattyp, "DEC"); ndx = &wcs->lng; sprintf(requir, "RA---%s", pcode); } else if (strncmp(ctypei+1, "LON", 3) == 0) { wcs->lng = i; sprintf(wcs->lngtyp, "%cLON", ctypei[0]); sprintf(wcs->lattyp, "%cLAT", ctypei[0]); ndx = &wcs->lat; sprintf(requir, "%s-%s", wcs->lattyp, pcode); } else if (strncmp(ctypei+1, "LAT", 3) == 0) { wcs->lat = i; sprintf(wcs->lngtyp, "%cLON", ctypei[0]); sprintf(wcs->lattyp, "%cLAT", ctypei[0]); ndx = &wcs->lng; sprintf(requir, "%s-%s", wcs->lngtyp, pcode); } else if (strncmp(ctypei+2, "LN", 2) == 0) { wcs->lng = i; sprintf(wcs->lngtyp, "%c%cLN", ctypei[0], ctypei[1]); sprintf(wcs->lattyp, "%c%cLT", ctypei[0], ctypei[1]); ndx = &wcs->lat; sprintf(requir, "%s-%s", wcs->lattyp, pcode); } else if (strncmp(ctypei+2, "LT", 2) == 0) { wcs->lat = i; sprintf(wcs->lngtyp, "%c%cLN", ctypei[0], ctypei[1]); sprintf(wcs->lattyp, "%c%cLT", ctypei[0], ctypei[1]); ndx = &wcs->lng; sprintf(requir, "%s-%s", wcs->lngtyp, pcode); } else { /* Unrecognized celestial type. */ wcs->types[i] = -1; wcs->lng = -1; wcs->lat = -1; return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), "Unrecognized celestial type (%5s in CTYPE%d%.1s)", ctypei, i+1, alt); } if (wcs->lat >= 0) wcs->types[i]++; } else { /* Looking for the complementary celestial axis. */ if (wcs->lat < 0) wcs->types[i]++; if (strncmp(ctypei, requir, 8) != 0) { /* Inconsistent projection types. */ wcs->lng = -1; wcs->lat = -1; return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), "Inconsistent " "projection types (expected %s, got %s in CTYPE%d%.1s)", requir, ctypei, i+1, alt); } *ndx = i; requir[0] = '\0'; } } /* Do we have a complementary pair of celestial axes? */ if (strcmp(requir, "")) { /* Unmatched celestial axis. */ wcs->lng = -1; wcs->lat = -1; return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), "Unmatched celestial axes"); } /* Table group numbers. */ for (j = 0; j < wcs->ntab; j++) { for (m = 0; m < wcs->tab[j].M; m++) { /* Get image axis number. */ i = wcs->tab[j].map[m]; type = (wcs->types[i] / 100) % 10; if (type != 5) { return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), "Table parameters set for non-table axis type"); } wcs->types[i] += 10 * j; } } return 0; } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int wcs_units(struct wcsprm *wcs) { static const char *function = "wcs_units"; char ctype[9], units[16]; int i, j, naxis; double scale, offset, power; struct wcserr *uniterr = 0x0, **err; if (wcs == 0x0) return WCSERR_NULL_POINTER; err = &(wcs->err); naxis = wcs->naxis; for (i = 0; i < naxis; i++) { /* Use types set by wcs_types(). */ switch (wcs->types[i]/1000) { case 2: /* Celestial axis. */ strcpy(units, "deg"); break; case 3: /* Spectral axis. */ strncpy(ctype, wcs->ctype[i], 8); ctype[8] = '\0'; spctyp(ctype, 0x0, 0x0, 0x0, units, 0x0, 0x0, 0x0); break; default: continue; } /* Tabular axis, CDELTia and CRVALia relate to indices. */ if ((wcs->types[i]/100)%10 == 5) { continue; } wcsutil_null_fill(72, wcs->cunit[i]); if (wcs->cunit[i][0]) { if (wcsunitse(wcs->cunit[i], units, &scale, &offset, &power, &uniterr)) { wcserr_set(WCSERR_SET(WCSERR_BAD_COORD_TRANS), "In CUNIT%d%.1s: %s", i, (*wcs->alt)?wcs->alt:"", uniterr->msg); free(uniterr); return WCSERR_BAD_COORD_TRANS; } if (scale != 1.0) { wcs->cdelt[i] *= scale; wcs->crval[i] *= scale; for (j = 0; j < naxis; j++) { *(wcs->cd + i*naxis + j) *= scale; } strcpy(wcs->cunit[i], units); } } else { strcpy(wcs->cunit[i], units); } } return 0; } /*--------------------------------------------------------------------------*/ int wcsp2s( struct wcsprm *wcs, int ncoord, int nelem, const double pixcrd[], double imgcrd[], double phi[], double theta[], double world[], int stat[]) { static const char *function = "wcsp2s"; int bits, face, i, iso_x, iso_y, istat, *istatp, itab, k, m, nx, ny, *statp, status, type; double crvali, offset; register double *img, *wrl; struct celprm *wcscel = &(wcs->cel); struct prjprm *wcsprj = &(wcscel->prj); struct wcserr **err; /* Initialize if required. */ if (wcs == 0x0) return WCSERR_NULL_POINTER; err = &(wcs->err); if (wcs->flag != WCSSET) { if ((status = wcsset(wcs))) return status; } /* Sanity check. */ if (ncoord < 1 || (ncoord > 1 && nelem < wcs->naxis)) { return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), "ncoord and/or nelem inconsistent with the wcsprm"); } /* Apply pixel-to-world linear transformation. */ if ((status = linp2x(&(wcs->lin), ncoord, nelem, pixcrd, imgcrd))) { return wcserr_set(WCS_ERRMSG(status)); } /* Initialize status vectors. */ if (!(istatp = calloc(ncoord, sizeof(int)))) { return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } stat[0] = 0; wcsutil_setAli(ncoord, 1, stat); /* Convert intermediate world coordinates to world coordinates. */ for (i = 0; i < wcs->naxis; i++) { /* Extract the second digit of the axis type code. */ type = (wcs->types[i] / 100) % 10; if (type <= 1) { /* Linear or quantized coordinate axis. */ img = imgcrd + i; wrl = world + i; crvali = wcs->crval[i]; for (k = 0; k < ncoord; k++) { *wrl = *img + crvali; img += nelem; wrl += nelem; } } else if (wcs->types[i] == 2200) { /* Convert celestial coordinates; do we have a CUBEFACE axis? */ if (wcs->cubeface != -1) { /* Separation between faces. */ if (wcsprj->r0 == 0.0) { offset = 90.0; } else { offset = wcsprj->r0*PI/2.0; } /* Lay out faces in a plane. */ img = imgcrd; statp = stat; bits = (1 << i) | (1 << wcs->lat); for (k = 0; k < ncoord; k++, statp++) { face = (int)(*(img+wcs->cubeface) + 0.5); if (fabs(*(img+wcs->cubeface) - face) > 1e-10) { *statp |= bits; status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_PIX)); } else { *statp = 0; switch (face) { case 0: *(img+wcs->lat) += offset; break; case 1: break; case 2: *(img+i) += offset; break; case 3: *(img+i) += offset*2; break; case 4: *(img+i) += offset*3; break; case 5: *(img+wcs->lat) -= offset; break; default: *statp |= bits; status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_PIX)); } } img += nelem; } } /* Check for constant x and/or y. */ nx = ncoord; ny = 0; if ((iso_x = wcsutil_allEq(ncoord, nelem, imgcrd+i))) { nx = 1; ny = ncoord; } if ((iso_y = wcsutil_allEq(ncoord, nelem, imgcrd+wcs->lat))) { ny = 1; } /* Transform projection plane coordinates to celestial coordinates. */ if ((istat = celx2s(wcscel, nx, ny, nelem, nelem, imgcrd+i, imgcrd+wcs->lat, phi, theta, world+i, world+wcs->lat, istatp))) { if (istat == CELERR_BAD_PIX) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_PIX)); } else { status = wcserr_set(WCS_ERRMSG(istat+3)); goto cleanup; } } /* If x and y were both constant, replicate values. */ if (iso_x && iso_y) { wcsutil_setAll(ncoord, nelem, world+i); wcsutil_setAll(ncoord, nelem, world+wcs->lat); wcsutil_setAll(ncoord, 1, phi); wcsutil_setAll(ncoord, 1, theta); wcsutil_setAli(ncoord, 1, istatp); } if (istat == 5) { bits = (1 << i) | (1 << wcs->lat); wcsutil_setBit(ncoord, istatp, bits, stat); } } else if (type == 3 || type == 4) { /* Check for constant x. */ nx = ncoord; if ((iso_x = wcsutil_allEq(ncoord, nelem, imgcrd+i))) { nx = 1; } istat = 0; if (wcs->types[i] == 3300) { /* Spectral coordinates. */ istat = spcx2s(&(wcs->spc), nx, nelem, nelem, imgcrd+i, world+i, istatp); if (istat == SPCERR_BAD_X) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_PIX)); } else if (istat) { status = wcserr_set(WCS_ERRMSG(istat+3)); goto cleanup; } } else if (type == 4) { /* Logarithmic coordinates. */ istat = logx2s(wcs->crval[i], nx, nelem, nelem, imgcrd+i, world+i, istatp); if (istat == LOGERR_BAD_X) { if (*err == 0x0) { wcserr_set(WCS_ERRMSG(WCSERR_BAD_PIX)); } } else if (istat == LOGERR_BAD_LOG_REF_VAL) { wcserr_set(WCSERR_SET(WCSERR_BAD_PARAM), log_errmsg[istat]); goto cleanup; } } /* If x was constant, replicate values. */ if (iso_x) { wcsutil_setAll(ncoord, nelem, world+i); wcsutil_setAli(ncoord, 1, istatp); } if (istat == 3) { wcsutil_setBit(ncoord, istatp, 1 << i, stat); } } } /* Do tabular coordinates. */ for (itab = 0; itab < wcs->ntab; itab++) { istat = tabx2s(wcs->tab + itab, ncoord, nelem, imgcrd, world, istatp); if (istat == TABERR_BAD_X) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_PIX)); bits = 0; for (m = 0; m < wcs->tab[itab].M; m++) { bits |= 1 << wcs->tab[itab].map[m]; } wcsutil_setBit(ncoord, istatp, bits, stat); } else if (istat) { if (istat == TABERR_BAD_PARAMS) istat = WCSERR_BAD_PARAM; status = wcserr_set(WCS_ERRMSG(istat)); goto cleanup; } } /* Zero the unused world coordinate elements. */ for (i = wcs->naxis; i < nelem; i++) { world[i] = 0.0; wcsutil_setAll(ncoord, nelem, world+i); } cleanup: free(istatp); return status; } /*--------------------------------------------------------------------------*/ int wcss2p( struct wcsprm* wcs, int ncoord, int nelem, const double world[], double phi[], double theta[], double imgcrd[], double pixcrd[], int stat[]) { static const char *function = "wcss2p"; int bits, i, isolat, isolng, isospec, istat, *istatp, itab, k, m, nlat, nlng, nwrld, status, type; double crvali, offset; register const double *wrl; register double *img; struct celprm *wcscel = &(wcs->cel); struct prjprm *wcsprj = &(wcscel->prj); struct wcserr **err; /* Initialize if required. */ if (wcs == 0x0) return WCSERR_NULL_POINTER; err = &(wcs->err); if (wcs->flag != WCSSET) { if ((status = wcsset(wcs))) return status; } /* Sanity check. */ if (ncoord < 1 || (ncoord > 1 && nelem < wcs->naxis)) { return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), "ncoord and/or nelem inconsistent with the wcsprm"); } /* Initialize status vectors. */ if (!(istatp = calloc(ncoord, sizeof(int)))) { return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); } status = 0; stat[0] = 0; wcsutil_setAli(ncoord, 1, stat); /* Convert world coordinates to intermediate world coordinates. */ for (i = 0; i < wcs->naxis; i++) { /* Extract the second digit of the axis type code. */ type = (wcs->types[i] / 100) % 10; if (type <= 1) { /* Linear or quantized coordinate axis. */ wrl = world + i; img = imgcrd + i; crvali = wcs->crval[i]; for (k = 0; k < ncoord; k++) { *img = *wrl - crvali; wrl += nelem; img += nelem; } } else if (wcs->types[i] == 2200) { /* Celestial coordinates; check for constant lng and/or lat. */ nlng = ncoord; nlat = 0; if ((isolng = wcsutil_allEq(ncoord, nelem, world+i))) { nlng = 1; nlat = ncoord; } if ((isolat = wcsutil_allEq(ncoord, nelem, world+wcs->lat))) { nlat = 1; } /* Transform celestial coordinates to projection plane coordinates. */ if ((istat = cels2x(wcscel, nlng, nlat, nelem, nelem, world+i, world+wcs->lat, phi, theta, imgcrd+i, imgcrd+wcs->lat, istatp))) { if (istat == CELERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD)); } else { status = wcserr_set(WCS_ERRMSG(istat+3)); goto cleanup; } } /* If lng and lat were both constant, replicate values. */ if (isolng && isolat) { wcsutil_setAll(ncoord, nelem, imgcrd+i); wcsutil_setAll(ncoord, nelem, imgcrd+wcs->lat); wcsutil_setAll(ncoord, 1, phi); wcsutil_setAll(ncoord, 1, theta); wcsutil_setAli(ncoord, 1, istatp); } if (istat == CELERR_BAD_WORLD) { bits = (1 << i) | (1 << wcs->lat); wcsutil_setBit(ncoord, istatp, bits, stat); } /* Do we have a CUBEFACE axis? */ if (wcs->cubeface != -1) { /* Separation between faces. */ if (wcsprj->r0 == 0.0) { offset = 90.0; } else { offset = wcsprj->r0*PI/2.0; } /* Stack faces in a cube. */ img = imgcrd; for (k = 0; k < ncoord; k++) { if (*(img+wcs->lat) < -0.5*offset) { *(img+wcs->lat) += offset; *(img+wcs->cubeface) = 5.0; } else if (*(img+wcs->lat) > 0.5*offset) { *(img+wcs->lat) -= offset; *(img+wcs->cubeface) = 0.0; } else if (*(img+i) > 2.5*offset) { *(img+i) -= 3.0*offset; *(img+wcs->cubeface) = 4.0; } else if (*(img+i) > 1.5*offset) { *(img+i) -= 2.0*offset; *(img+wcs->cubeface) = 3.0; } else if (*(img+i) > 0.5*offset) { *(img+i) -= offset; *(img+wcs->cubeface) = 2.0; } else { *(img+wcs->cubeface) = 1.0; } img += nelem; } } } else if (type == 3 || type == 4) { /* Check for constancy. */ nwrld = ncoord; if ((isospec = wcsutil_allEq(ncoord, nelem, world+i))) { nwrld = 1; } istat = 0; if (wcs->types[i] == 3300) { /* Spectral coordinates. */ istat = spcs2x(&(wcs->spc), nwrld, nelem, nelem, world+i, imgcrd+i, istatp); if (istat == SPCERR_BAD_SPEC) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD)); } else if (istat) { status = wcserr_set(WCS_ERRMSG(istat+3)); goto cleanup; } } else if (type == 4) { /* Logarithmic coordinates. */ istat = logs2x(wcs->crval[i], nwrld, nelem, nelem, world+i, imgcrd+i, istatp); if (istat == LOGERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD)); } else if (istat == LOGERR_BAD_LOG_REF_VAL) { status = wcserr_set(WCSERR_SET(WCSERR_BAD_PARAM), log_errmsg[istat]); goto cleanup; } } /* If constant, replicate values. */ if (isospec) { wcsutil_setAll(ncoord, nelem, imgcrd+i); wcsutil_setAli(ncoord, 1, istatp); } if (istat == 4) { wcsutil_setBit(ncoord, istatp, 1 << i, stat); } } } /* Do tabular coordinates. */ for (itab = 0; itab < wcs->ntab; itab++) { istat = tabs2x(wcs->tab + itab, ncoord, nelem, world, imgcrd, istatp); if (istat == TABERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD)); bits = 0; for (m = 0; m < wcs->tab[itab].M; m++) { bits |= 1 << wcs->tab[itab].map[m]; } wcsutil_setBit(ncoord, istatp, bits, stat); } else if (istat) { if (istat == TABERR_BAD_PARAMS) istat = WCSERR_BAD_PARAM; status = wcserr_set(WCS_ERRMSG(istat)); goto cleanup; } } /* Zero the unused intermediate world coordinate elements. */ for (i = wcs->naxis; i < nelem; i++) { imgcrd[i] = 0.0; wcsutil_setAll(ncoord, nelem, imgcrd+i); } /* Apply world-to-pixel linear transformation. */ if ((istat = linx2p(&(wcs->lin), ncoord, nelem, imgcrd, pixcrd))) { status = wcserr_set(WCS_ERRMSG(istat)); goto cleanup; } cleanup: free(istatp); return status; } /*--------------------------------------------------------------------------*/ int wcsmix( struct wcsprm *wcs, int mixpix, int mixcel, const double vspan[2], double vstep, int viter, double world[], double phi[], double theta[], double imgcrd[], double pixcrd[]) { static const char *function = "wcsmix"; const int niter = 60; int crossed, istep, iter, j, k, nstep, retry, stat[1], status; const double tol = 1.0e-10; const double tol2 = 100.0*tol; double *worldlat, *worldlng; double lambda, span[2], step; double pixmix; double dlng, lng, lng0, lng0m, lng1, lng1m; double dlat, lat, lat0, lat0m, lat1, lat1m; double d, d0, d0m, d1, d1m, dx = 0.0; double dabs, dmin, lmin; double dphi, phi0, phi1; struct celprm *wcscel = &(wcs->cel); struct wcsprm wcs0; struct wcserr **err; /* Initialize if required. */ if (wcs == 0x0) return WCSERR_NULL_POINTER; err = &(wcs->err); if (wcs->flag != WCSSET) { if ((status = wcsset(wcs))) return status; } worldlng = world + wcs->lng; worldlat = world + wcs->lat; /* Check vspan. */ if (vspan[0] <= vspan[1]) { span[0] = vspan[0]; span[1] = vspan[1]; } else { /* Swap them. */ span[0] = vspan[1]; span[1] = vspan[0]; } /* Check vstep. */ step = fabs(vstep); if (step == 0.0) { step = (span[1] - span[0])/10.0; if (step > 1.0 || step == 0.0) step = 1.0; } /* Check viter. */ nstep = viter; if (nstep < 5) { nstep = 5; } else if (nstep > 10) { nstep = 10; } /* Given pixel element. */ pixmix = pixcrd[mixpix]; /* Iterate on the step size. */ for (istep = 0; istep <= nstep; istep++) { if (istep) step /= 2.0; /* Iterate on the sky coordinate between the specified range. */ if (mixcel == 1) { /* Celestial longitude is given. */ /* Check whether the solution interval is a crossing interval. */ lat0 = span[0]; *worldlat = lat0; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d0 = pixcrd[mixpix] - pixmix; dabs = fabs(d0); if (dabs < tol) return 0; lat1 = span[1]; *worldlat = lat1; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d1 = pixcrd[mixpix] - pixmix; dabs = fabs(d1); if (dabs < tol) return 0; lmin = lat1; dmin = dabs; /* Check for a crossing point. */ if (signbit(d0) != signbit(d1)) { crossed = 1; dx = d1; } else { crossed = 0; lat0 = span[1]; } for (retry = 0; retry < 4; retry++) { /* Refine the solution interval. */ while (lat0 > span[0]) { lat0 -= step; if (lat0 < span[0]) lat0 = span[0]; *worldlat = lat0; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d0 = pixcrd[mixpix] - pixmix; /* Check for a solution. */ dabs = fabs(d0); if (dabs < tol) return 0; /* Record the point of closest approach. */ if (dabs < dmin) { lmin = lat0; dmin = dabs; } /* Check for a crossing point. */ if (signbit(d0) != signbit(d1)) { crossed = 2; dx = d0; break; } /* Advance to the next subinterval. */ lat1 = lat0; d1 = d0; } if (crossed) { /* A crossing point was found. */ for (iter = 0; iter < niter; iter++) { /* Use regula falsi division of the interval. */ lambda = d0/(d0-d1); if (lambda < 0.1) { lambda = 0.1; } else if (lambda > 0.9) { lambda = 0.9; } dlat = lat1 - lat0; lat = lat0 + lambda*dlat; *worldlat = lat; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } /* Check for a solution. */ d = pixcrd[mixpix] - pixmix; dabs = fabs(d); if (dabs < tol) return 0; if (dlat < tol) { /* An artifact of numerical imprecision. */ if (dabs < tol2) return 0; /* Must be a discontinuity. */ break; } /* Record the point of closest approach. */ if (dabs < dmin) { lmin = lat; dmin = dabs; } if (signbit(d0) == signbit(d)) { lat0 = lat; d0 = d; } else { lat1 = lat; d1 = d; } } /* No convergence, must have been a discontinuity. */ if (crossed == 1) lat0 = span[1]; lat1 = lat0; d1 = dx; crossed = 0; } else { /* No crossing point; look for a tangent point. */ if (lmin == span[0]) break; if (lmin == span[1]) break; lat = lmin; lat0 = lat - step; if (lat0 < span[0]) lat0 = span[0]; lat1 = lat + step; if (lat1 > span[1]) lat1 = span[1]; *worldlat = lat0; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d0 = fabs(pixcrd[mixpix] - pixmix); d = dmin; *worldlat = lat1; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d1 = fabs(pixcrd[mixpix] - pixmix); for (iter = 0; iter < niter; iter++) { lat0m = (lat0 + lat)/2.0; *worldlat = lat0m; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d0m = fabs(pixcrd[mixpix] - pixmix); if (d0m < tol) return 0; lat1m = (lat1 + lat)/2.0; *worldlat = lat1m; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d1m = fabs(pixcrd[mixpix] - pixmix); if (d1m < tol) return 0; if (d0m < d && d0m <= d1m) { lat1 = lat; d1 = d; lat = lat0m; d = d0m; } else if (d1m < d) { lat0 = lat; d0 = d; lat = lat1m; d = d1m; } else { lat0 = lat0m; d0 = d0m; lat1 = lat1m; d1 = d1m; } } } } } else { /* Celestial latitude is given. */ /* Check whether the solution interval is a crossing interval. */ lng0 = span[0]; *worldlng = lng0; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d0 = pixcrd[mixpix] - pixmix; dabs = fabs(d0); if (dabs < tol) return 0; lng1 = span[1]; *worldlng = lng1; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d1 = pixcrd[mixpix] - pixmix; dabs = fabs(d1); if (dabs < tol) return 0; lmin = lng1; dmin = dabs; /* Check for a crossing point. */ if (signbit(d0) != signbit(d1)) { crossed = 1; dx = d1; } else { crossed = 0; lng0 = span[1]; } for (retry = 0; retry < 4; retry++) { /* Refine the solution interval. */ while (lng0 > span[0]) { lng0 -= step; if (lng0 < span[0]) lng0 = span[0]; *worldlng = lng0; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d0 = pixcrd[mixpix] - pixmix; /* Check for a solution. */ dabs = fabs(d0); if (dabs < tol) return 0; /* Record the point of closest approach. */ if (dabs < dmin) { lmin = lng0; dmin = dabs; } /* Check for a crossing point. */ if (signbit(d0) != signbit(d1)) { crossed = 2; dx = d0; break; } /* Advance to the next subinterval. */ lng1 = lng0; d1 = d0; } if (crossed) { /* A crossing point was found. */ for (iter = 0; iter < niter; iter++) { /* Use regula falsi division of the interval. */ lambda = d0/(d0-d1); if (lambda < 0.1) { lambda = 0.1; } else if (lambda > 0.9) { lambda = 0.9; } dlng = lng1 - lng0; lng = lng0 + lambda*dlng; *worldlng = lng; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } /* Check for a solution. */ d = pixcrd[mixpix] - pixmix; dabs = fabs(d); if (dabs < tol) return 0; if (dlng < tol) { /* An artifact of numerical imprecision. */ if (dabs < tol2) return 0; /* Must be a discontinuity. */ break; } /* Record the point of closest approach. */ if (dabs < dmin) { lmin = lng; dmin = dabs; } if (signbit(d0) == signbit(d)) { lng0 = lng; d0 = d; } else { lng1 = lng; d1 = d; } } /* No convergence, must have been a discontinuity. */ if (crossed == 1) lng0 = span[1]; lng1 = lng0; d1 = dx; crossed = 0; } else { /* No crossing point; look for a tangent point. */ if (lmin == span[0]) break; if (lmin == span[1]) break; lng = lmin; lng0 = lng - step; if (lng0 < span[0]) lng0 = span[0]; lng1 = lng + step; if (lng1 > span[1]) lng1 = span[1]; *worldlng = lng0; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d0 = fabs(pixcrd[mixpix] - pixmix); d = dmin; *worldlng = lng1; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d1 = fabs(pixcrd[mixpix] - pixmix); for (iter = 0; iter < niter; iter++) { lng0m = (lng0 + lng)/2.0; *worldlng = lng0m; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d0m = fabs(pixcrd[mixpix] - pixmix); if (d0m < tol) return 0; lng1m = (lng1 + lng)/2.0; *worldlng = lng1m; if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d1m = fabs(pixcrd[mixpix] - pixmix); if (d1m < tol) return 0; if (d0m < d && d0m <= d1m) { lng1 = lng; d1 = d; lng = lng0m; d = d0m; } else if (d1m < d) { lng0 = lng; d0 = d; lng = lng1m; d = d1m; } else { lng0 = lng0m; d0 = d0m; lng1 = lng1m; d1 = d1m; } } } } } } /* Set cel0 to the unity transformation. */ wcs0 = *wcs; wcs0.cel.euler[0] = -90.0; wcs0.cel.euler[1] = 0.0; wcs0.cel.euler[2] = 90.0; wcs0.cel.euler[3] = 1.0; wcs0.cel.euler[4] = 0.0; /* No convergence, check for aberrant behaviour at a native pole. */ *theta = -90.0; for (j = 1; j <= 2; j++) { /* Could the celestial coordinate element map to a native pole? */ *phi = 0.0; *theta = -*theta; sphx2s(wcscel->euler, 1, 1, 1, 1, phi, theta, &lng, &lat); if (mixcel == 1) { if (fabs(fmod(*worldlng-lng, 360.0)) > tol) continue; if (lat < span[0]) continue; if (lat > span[1]) continue; *worldlat = lat; } else { if (fabs(*worldlat-lat) > tol) continue; if (lng < span[0]) lng += 360.0; if (lng > span[1]) lng -= 360.0; if (lng < span[0]) continue; if (lng > span[1]) continue; *worldlng = lng; } /* Is there a solution for the given pixel coordinate element? */ lng = *worldlng; lat = *worldlat; /* Feed native coordinates to wcss2p() with cel0 set to unity. */ *worldlng = -180.0; *worldlat = *theta; if ((status = wcss2p(&wcs0, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (wcs->err) free(wcs->err); wcs->err = wcs0.err; if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d0 = pixcrd[mixpix] - pixmix; /* Check for a solution. */ if (fabs(d0) < tol) { /* Recall saved world coordinates. */ *worldlng = lng; *worldlat = lat; return 0; } /* Search for a crossing interval. */ phi0 = -180.0; for (k = -179; k <= 180; k++) { phi1 = (double) k; *worldlng = phi1; if ((status = wcss2p(&wcs0, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (wcs->err) free(wcs->err); wcs->err = wcs0.err; if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } d1 = pixcrd[mixpix] - pixmix; /* Check for a solution. */ dabs = fabs(d1); if (dabs < tol) { /* Recall saved world coordinates. */ *worldlng = lng; *worldlat = lat; return 0; } /* Is it a crossing interval? */ if (signbit(d0) != signbit(d1)) break; phi0 = phi1; d0 = d1; } for (iter = 1; iter <= niter; iter++) { /* Use regula falsi division of the interval. */ lambda = d0/(d0-d1); if (lambda < 0.1) { lambda = 0.1; } else if (lambda > 0.9) { lambda = 0.9; } dphi = phi1 - phi0; *worldlng = phi0 + lambda*dphi; if ((status = wcss2p(&wcs0, 1, 0, world, phi, theta, imgcrd, pixcrd, stat))) { if (wcs->err) free(wcs->err); wcs->err = wcs0.err; if (status == WCSERR_BAD_WORLD) { status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); } return status; } /* Check for a solution. */ d = pixcrd[mixpix] - pixmix; dabs = fabs(d); if (dabs < tol || (dphi < tol && dabs < tol2)) { /* Recall saved world coordinates. */ *worldlng = lng; *worldlat = lat; return 0; } if (signbit(d0) == signbit(d)) { phi0 = *worldlng; d0 = d; } else { phi1 = *worldlng; d1 = d; } } } /* No solution. */ return wcserr_set(WCS_ERRMSG(WCSERR_NO_SOLUTION)); } /*--------------------------------------------------------------------------*/ int wcssptr( struct wcsprm *wcs, int *i, char ctype[9]) { static const char *function = "wcssptr"; int j, status; double cdelt, crval; struct wcserr **err; /* Initialize if required. */ if (wcs == 0x0) return WCSERR_NULL_POINTER; err = &(wcs->err); if (wcs->flag != WCSSET) { if ((status = wcsset(wcs))) return status; } if ((j = *i) < 0) { if ((j = wcs->spec) < 0) { /* Look for a linear spectral axis. */ for (j = 0; j < wcs->naxis; j++) { if (wcs->types[j]/100 == 30) { break; } } if (j >= wcs->naxis) { /* No spectral axis. */ return wcserr_set(WCSERR_SET(WCSERR_BAD_SUBIMAGE), "No spectral axis found."); } } *i = j; } /* Translate the spectral axis. */ if (spctrne(wcs->ctype[j], wcs->crval[j], wcs->cdelt[j], wcs->restfrq, wcs->restwav, ctype, &crval, &cdelt, &(wcs->spc.err))) { return wcserr_set(WCS_ERRMSG(WCSERR_BAD_COORD_TRANS)); } /* Translate keyvalues. */ wcs->flag = 0; wcs->cdelt[j] = cdelt; wcs->crval[j] = crval; spctyp(ctype, 0x0, 0x0, 0x0, wcs->cunit[j], 0x0, 0x0, 0x0); strcpy(wcs->ctype[j], ctype); /* This keeps things tidy if the spectral axis is linear. */ spcini(&(wcs->spc)); return 0; } pywcs-1.12/wcslib/C/wcs.h0000644001153600020070000017546312310355626017300 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcs.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the FITS World Coordinate System * (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * "Representations of celestial coordinates in FITS", * Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (Paper II) * * "Representations of spectral coordinates in FITS", * Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. * 2006, A&A, 446, 747 (Paper III) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the wcs routines * --------------------------- * These routines implement the FITS World Coordinate System (WCS) standard * which defines methods to be used for computing world coordinates from image * pixel coordinates, and vice versa. They are based on the wcsprm struct * which contains all information needed for the computations. The struct * contains some members that must be set by the user, and others that are * maintained by these routines, somewhat like a C++ class but with no * encapsulation. * * Three routines, wcsini(), wcssub(), and wcsfree() are provided to manage the * wcsprm struct and another, wcsprt(), to prints its contents. Refer to the * description of the wcsprm struct for an explanation of the anticipated usage * of these routines. wcscopy(), which does a deep copy of one wcsprm struct * to another, is defined as a preprocessor macro function that invokes * wcssub(). * * wcsperr() prints the error message(s) (if any) stored in a wcsprm struct, * and the linprm, celprm, prjprm, spcprm, and tabprm structs that it contains. * * A setup routine, wcsset(), computes intermediate values in the wcsprm struct * from parameters in it that were supplied by the user. The struct always * needs to be set up by wcsset() but this need not be called explicitly - * refer to the explanation of wcsprm::flag. * * wcsp2s() and wcss2p() implement the WCS world coordinate transformations. * In fact, they are high level driver routines for the WCS linear, * logarithmic, celestial, spectral and tabular transformation routines * described in lin.h, log.h, cel.h, spc.h and tab.h. * * Given either the celestial longitude or latitude plus an element of the * pixel coordinate a hybrid routine, wcsmix(), iteratively solves for the * unknown elements. * * wcssptr() translates the spectral axis in a wcsprm struct. For example, a * 'FREQ' axis may be translated into 'ZOPT-F2W' and vice versa. * * Quadcube projections: * --------------------- * The quadcube projections (TSC, CSC, QSC) may be represented in FITS in * either of two ways: * * a: The six faces may be laid out in one plane and numbered as follows: * = 0 = = 4 3 2 1 4 3 2 = = 5 * * Faces 2, 3 and 4 may appear on one side or the other (or both). The * world-to-pixel routines map faces 2, 3 and 4 to the left but the * pixel-to-world routines accept them on either side. * * b: The "COBE" convention in which the six faces are stored in a * three-dimensional structure using a CUBEFACE axis indexed from * 0 to 5 as above. * * These routines support both methods; wcsset() determines which is being * used by the presence or absence of a CUBEFACE axis in ctype[]. wcsp2s() * and wcss2p() translate the CUBEFACE axis representation to the single * plane representation understood by the lower-level WCSLIB projection * routines. * * * wcsini() - Default constructor for the wcsprm struct * ---------------------------------------------------- * wcsini() optionally allocates memory for arrays in a wcsprm struct and sets * all members of the struct to default values. Memory is allocated for up to * NPVMAX PVi_ma keywords or NPSMAX PSi_ma keywords per WCS representation. * These may be changed via wcsnpv() and wcsnps() before wcsini() is called. * * PLEASE NOTE: every wcsprm struct should be initialized by wcsini(), possibly * repeatedly. On the first invokation, and only the first invokation, * wcsprm::flag must be set to -1 to initialize memory management, regardless * of whether wcsini() will actually be used to allocate memory. * * Given: * alloc int If true, allocate memory unconditionally for the * crpix, etc. arrays. * * If false, it is assumed that pointers to these arrays * have been set by the user except if they are null * pointers in which case memory will be allocated for * them regardless. (In other words, setting alloc true * saves having to initalize these pointers to zero.) * * naxis int The number of world coordinate axes. This is used to * determine the length of the various wcsprm vectors and * matrices and therefore the amount of memory to * allocate for them. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. * * Note that, in order to initialize memory management, * wcsprm::flag should be set to -1 when wcs is * initialized for the first time (memory leaks may * result if it had already been initialized). * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * * wcsnpv() - Memory allocation for PVi_ma * --------------------------------------- * wcsnpv() changes the value of NPVMAX (default 64). This global variable * controls the number of PVi_ma keywords that wcsini() should allocate space * for. * * PLEASE NOTE: This function is not thread-safe. * * Given: * n int Value of NPVMAX; ignored if < 0. * * Function return value: * int Current value of NPVMAX. * * * wcsnps() - Memory allocation for PSi_ma * --------------------------------------- * wcsnps() changes the values of NPSMAX (default 8). This global variable * controls the number of PSi_ma keywords that wcsini() should allocate space * for. * * PLEASE NOTE: This function is not thread-safe. * * Given: * n int Value of NPSMAX; ignored if < 0. * * Function return value: * int Current value of NPSMAX. * * * wcssub() - Subimage extraction routine for the wcsprm struct * ------------------------------------------------------------ * wcssub() extracts the coordinate description for a subimage from a wcsprm * struct. It does a deep copy, using wcsini() to allocate memory for its * arrays if required. Only the "information to be provided" part of the * struct is extracted; a call to wcsset() is required to set up the remainder. * * The world coordinate system of the subimage must be separable in the sense * that the world coordinates at any point in the subimage must depend only on * the pixel coordinates of the axes extracted. In practice, this means that * the PCi_ja matrix of the original image must not contain non-zero * off-diagonal terms that associate any of the subimage axes with any of the * non-subimage axes. * * Note that while the required elements of the tabprm array are extracted, the * wtbarr array is not. (Thus it is not appropriate to call wcssub() after * wcstab() but before filling the tabprm structs - refer to wcshdr.h.) * * wcssub() can also add axes to a wcsprm struct. The new axes will be created * using the defaults set by wcsini() which produce a simple, unnamed, linear * axis with world coordinate equal to the pixel coordinate. These default * values can be changed in before invoking wcsset(). * * Given: * alloc int If true, allocate memory for the crpix, etc. arrays in * the destination. Otherwise, it is assumed that * pointers to these arrays have been set by the user * except if they are null pointers in which case memory * will be allocated for them regardless. * * wcssrc const struct wcsprm* * Struct to extract from. * * Given and returned: * nsub int* * axes int[] Vector of length *nsub containing the image axis * numbers (1-relative) to extract. Order is * significant; axes[0] is the axis number of the input * image that corresponds to the first axis in the * subimage, etc. * * Use an axis number of 0 to create a new axis using * the defaults set by wcsini(). * * nsub (the pointer) may be set to zero, and so also may * nsub, to indicate the number of axes in the input * image; the number of axes will be returned if * nsub != 0x0. axes itself (the pointer) may be set to * zero to indicate the first *nsub axes in their * original order. * * Set both nsub and axes to zero to do a deep copy of * one wcsprm struct to another. * * Subimage extraction by coordinate axis type may be * done by setting the elements of axes[] to the * following special preprocessor macro values: * * WCSSUB_LONGITUDE: Celestial longitude. * WCSSUB_LATITUDE: Celestial latitude. * WCSSUB_CUBEFACE: Quadcube CUBEFACE axis. * WCSSUB_SPECTRAL: Spectral axis. * WCSSUB_STOKES: Stokes axis. * * Refer to the notes (below) for further usage examples. * * On return, *nsub will contain the number of axes in * the subimage; this may be zero if there were no axes * of the required type(s) (in which case no memory will * be allocated). axes[] will contain the axis numbers * that were extracted, or 0 for newly created axes. The * vector length must be sufficient to contain all axis * numbers. No checks are performed to verify that the * coordinate axes are consistent, this is done by * wcsset(). * * wcsdst struct wcsprm* * Struct describing the subimage. wcsprm::flag should * be set to -1 if wcsdst was not previously initialized * (memory leaks may result if it was previously * initialized). * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 12: Invalid subimage specification. * 13: Non-separable subimage coordinate system. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * Notes: * Combinations of subimage axes of particular types may be extracted in the * same order as they occur in the input image by combining preprocessor * codes, for example * = *nsub = 1; = axes[0] = WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_SPECTRAL; * * would extract the longitude, latitude, and spectral axes in the same order * as the input image. If one of each were present, *nsub = 3 would be * returned. * * For convenience, WCSSUB_CELESTIAL is defined as the combination * WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_CUBEFACE. * * The codes may also be negated to extract all but the types specified, for * example * = *nsub = 4; = axes[0] = WCSSUB_LONGITUDE; = axes[1] = WCSSUB_LATITUDE; = axes[2] = WCSSUB_CUBEFACE; = axes[3] = -(WCSSUB_SPECTRAL | WCSSUB_STOKES); * * The last of these specifies all axis types other than spectral or Stokes. * Extraction is done in the order specified by axes[] a longitude axis (if * present) would be extracted first (via axes[0]) and not subsequently (via * axes[3]). Likewise for the latitude and cubeface axes in this example. * * From the foregoing, it is apparent that the value of *nsub returned may be * less than or greater than that given. However, it will never exceed the * number of axes in the input image (plus the number of newly-created axes * if any were specified on input). * * * wcscopy() macro - Copy routine for the wcsprm struct * ---------------------------------------------------- * wcscopy() does a deep copy of one wcsprm struct to another. As of * WCSLIB 3.6, it is implemented as a preprocessor macro that invokes * wcssub() with the nsub and axes pointers both set to zero. * * * wcsfree() - Destructor for the wcsprm struct * -------------------------------------------- * wcsfree() frees memory allocated for the wcsprm arrays by wcsini() and/or * wcsset(). wcsini() records the memory it allocates and wcsfree() will only * attempt to free this. * * PLEASE NOTE: wcsfree() must not be invoked on a wcsprm struct that was not * initialized by wcsini(). * * Returned: * wcs struct wcsprm* * Coordinate transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * * * wcsprt() - Print routine for the wcsprm struct * ---------------------------------------------- * wcsprt() prints the contents of a wcsprm struct using wcsprintf(). Mainly * intended for diagnostic purposes. * * Given: * wcs const struct wcsprm* * Coordinate transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * * * wcsperr() - Print error messages from a wcsprm struct * ----------------------------------------------------- * wcsperr() prints the error message(s), if any, stored in a wcsprm struct, * and the linprm, celprm, prjprm, spcprm, and tabprm structs that it contains. * If there are no errors then nothing is printed. It uses wcserr_prt(), q.v. * * Given: * wcs const struct wcsprm* * Coordinate transformation parameters. * * prefix const char * * If non-NULL, each output line will be prefixed with * this string. * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * * * wcsset() - Setup routine for the wcsprm struct * ---------------------------------------------- * wcsset() sets up a wcsprm struct according to information supplied within * it (refer to the description of the wcsprm struct). * * wcsset() recognizes the NCP projection and converts it to the equivalent SIN * projection and likewise translates GLS into SFL. It also translates the * AIPS spectral types ('FREQ-LSR', 'FELO-HEL', etc.), possibly changing the * input header keywords wcsprm::ctype and/or wcsprm::specsys if necessary. * * Note that this routine need not be called directly; it will be invoked by * wcsp2s() and wcss2p() if the wcsprm::flag is anything other than a * predefined magic value. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Linear transformation matrix is singular. * 4: Inconsistent or unrecognized coordinate axis * types. * 5: Invalid parameter value. * 6: Invalid coordinate transformation parameters. * 7: Ill-conditioned coordinate transformation * parameters. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * * wcsp2s() - Pixel-to-world transformation * ---------------------------------------- * wcsp2s() transforms pixel coordinates to world coordinates. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. * * Given: * ncoord, * nelem int The number of coordinates, each of vector length * nelem but containing wcs.naxis coordinate elements. * Thus nelem must equal or exceed the value of the * NAXIS keyword unless ncoord == 1, in which case nelem * is not used. * * pixcrd const double[ncoord][nelem] * Array of pixel coordinates. * * Returned: * imgcrd double[ncoord][nelem] * Array of intermediate world coordinates. For * celestial axes, imgcrd[][wcs.lng] and * imgcrd[][wcs.lat] are the projected x-, and * y-coordinates in pseudo "degrees". For spectral * axes, imgcrd[][wcs.spec] is the intermediate spectral * coordinate, in SI units. * * phi,theta double[ncoord] * Longitude and latitude in the native coordinate system * of the projection [deg]. * * world double[ncoord][nelem] * Array of world coordinates. For celestial axes, * world[][wcs.lng] and world[][wcs.lat] are the * celestial longitude and latitude [deg]. For * spectral axes, imgcrd[][wcs.spec] is the intermediate * spectral coordinate, in SI units. * * stat int[ncoord] * Status return value for each coordinate: * 0: Success. * 1+: A bit mask indicating invalid pixel coordinate * element(s). * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Linear transformation matrix is singular. * 4: Inconsistent or unrecognized coordinate axis * types. * 5: Invalid parameter value. * 6: Invalid coordinate transformation parameters. * 7: Ill-conditioned coordinate transformation * parameters. * 8: One or more of the pixel coordinates were * invalid, as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * * wcss2p() - World-to-pixel transformation * ---------------------------------------- * wcss2p() transforms world coordinates to pixel coordinates. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. * * Given: * ncoord, * nelem int The number of coordinates, each of vector length nelem * but containing wcs.naxis coordinate elements. Thus * nelem must equal or exceed the value of the NAXIS * keyword unless ncoord == 1, in which case nelem is not * used. * * world const double[ncoord][nelem] * Array of world coordinates. For celestial axes, * world[][wcs.lng] and world[][wcs.lat] are the * celestial longitude and latitude [deg]. For spectral * axes, world[][wcs.spec] is the spectral coordinate, in * SI units. * * Returned: * phi,theta double[ncoord] * Longitude and latitude in the native coordinate * system of the projection [deg]. * * imgcrd double[ncoord][nelem] * Array of intermediate world coordinates. For * celestial axes, imgcrd[][wcs.lng] and * imgcrd[][wcs.lat] are the projected x-, and * y-coordinates in pseudo "degrees". For quadcube * projections with a CUBEFACE axis the face number is * also returned in imgcrd[][wcs.cubeface]. For * spectral axes, imgcrd[][wcs.spec] is the intermediate * spectral coordinate, in SI units. * * pixcrd double[ncoord][nelem] * Array of pixel coordinates. * * stat int[ncoord] * Status return value for each coordinate: * 0: Success. * 1+: A bit mask indicating invalid world coordinate * element(s). * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Linear transformation matrix is singular. * 4: Inconsistent or unrecognized coordinate axis * types. * 5: Invalid parameter value. * 6: Invalid coordinate transformation parameters. * 7: Ill-conditioned coordinate transformation * parameters. * 9: One or more of the world coordinates were * invalid, as indicated by the stat vector. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * * wcsmix() - Hybrid coordinate transformation * ------------------------------------------- * wcsmix(), given either the celestial longitude or latitude plus an element * of the pixel coordinate, solves for the remaining elements by iterating on * the unknown celestial coordinate element using wcss2p(). Refer also to the * notes below. * * Given and returned: * wcs struct wcsprm* * Indices for the celestial coordinates obtained * by parsing the wcsprm::ctype[]. * * Given: * mixpix int Which element of the pixel coordinate is given. * * mixcel int Which element of the celestial coordinate is given: * 1: Celestial longitude is given in * world[wcs.lng], latitude returned in * world[wcs.lat]. * 2: Celestial latitude is given in * world[wcs.lat], longitude returned in * world[wcs.lng]. * * vspan const double[2] * Solution interval for the celestial coordinate [deg]. * The ordering of the two limits is irrelevant. * Longitude ranges may be specified with any convenient * normalization, for example [-120,+120] is the same as * [240,480], except that the solution will be returned * with the same normalization, i.e. lie within the * interval specified. * * vstep const double * Step size for solution search [deg]. If zero, a * sensible, although perhaps non-optimal default will be * used. * * viter int If a solution is not found then the step size will be * halved and the search recommenced. viter controls how * many times the step size is halved. The allowed range * is 5 - 10. * * Given and returned: * world double[naxis] * World coordinate elements. world[wcs.lng] and * world[wcs.lat] are the celestial longitude and * latitude [deg]. Which is given and which returned * depends on the value of mixcel. All other elements * are given. * * Returned: * phi,theta double[naxis] * Longitude and latitude in the native coordinate * system of the projection [deg]. * * imgcrd double[naxis] * Image coordinate elements. imgcrd[wcs.lng] and * imgcrd[wcs.lat] are the projected x-, and * y-coordinates in pseudo "degrees". * * Given and returned: * pixcrd double[naxis] * Pixel coordinate. The element indicated by mixpix is * given and the remaining elements are returned. * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Linear transformation matrix is singular. * 4: Inconsistent or unrecognized coordinate axis * types. * 5: Invalid parameter value. * 6: Invalid coordinate transformation parameters. * 7: Ill-conditioned coordinate transformation * parameters. * 10: Invalid world coordinate. * 11: No solution found in the specified interval. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * Notes: * Initially the specified solution interval is checked to see if it's a * "crossing" interval. If it isn't, a search is made for a crossing * solution by iterating on the unknown celestial coordinate starting at the * upper limit of the solution interval and decrementing by the specified * step size. A crossing is indicated if the trial value of the pixel * coordinate steps through the value specified. If a crossing interval is * found then the solution is determined by a modified form of "regula falsi" * division of the crossing interval. If no crossing interval was found * within the specified solution interval then a search is made for a * "non-crossing" solution as may arise from a point of tangency. The * process is complicated by having to make allowance for the discontinuities * that occur in all map projections. * * Once one solution has been determined others may be found by subsequent * invokations of wcsmix() with suitably restricted solution intervals. * * Note the circumstance that arises when the solution point lies at a native * pole of a projection in which the pole is represented as a finite curve, * for example the zenithals and conics. In such cases two or more valid * solutions may exist but wcsmix() only ever returns one. * * Because of its generality wcsmix() is very compute-intensive. For * compute-limited applications more efficient special-case solvers could be * written for simple projections, for example non-oblique cylindrical * projections. * * * wcssptr() - Spectral axis translation * ------------------------------------- * wcssptr() translates the spectral axis in a wcsprm struct. For example, a * 'FREQ' axis may be translated into 'ZOPT-F2W' and vice versa. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. * * i int* Index of the spectral axis (0-relative). If given < 0 * it will be set to the first spectral axis identified * from the ctype[] keyvalues in the wcsprm struct. * * ctype char[9] Desired spectral CTYPEia. Wildcarding may be used as * for the ctypeS2 argument to spctrn() as described in * the prologue of spc.h, i.e. if the final three * characters are specified as "???", or if just the * eighth character is specified as '?', the correct * algorithm code will be substituted and returned. * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Linear transformation matrix is singular. * 4: Inconsistent or unrecognized coordinate axis * types. * 5: Invalid parameter value. * 6: Invalid coordinate transformation parameters. * 7: Ill-conditioned coordinate transformation * parameters. * 12: Invalid subimage specification (no spectral * axis). * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * * wcsprm struct - Coordinate transformation parameters * ---------------------------------------------------- * The wcsprm struct contains information required to transform world * coordinates. It consists of certain members that must be set by the user * ("given") and others that are set by the WCSLIB routines ("returned"). * Some of the former are not actually required for transforming coordinates. * These are described as "auxiliary"; the struct simply provides a place to * store them, though they may be used by wcshdo() in constructing a FITS * header from a wcsprm struct. Some of the returned values are supplied for * informational purposes and others are for internal use only as indicated. * * In practice, it is expected that a WCS parser would scan the FITS header to * determine the number of coordinate axes. It would then use wcsini() to * allocate memory for arrays in the wcsprm struct and set default values. * Then as it reread the header and identified each WCS keyrecord it would load * the value into the relevant wcsprm array element. This is essentially what * wcspih() does - refer to the prologue of wcshdr.h. As the final step, * wcsset() is invoked, either directly or indirectly, to set the derived * members of the wcsprm struct. wcsset() strips off trailing blanks in all * string members and null-fills the character array. * * int flag * (Given and returned) This flag must be set to zero whenever any of the * following wcsprm struct members are set or changed: * * - wcsprm::naxis (q.v., not normally set by the user), * - wcsprm::crpix, * - wcsprm::pc, * - wcsprm::cdelt, * - wcsprm::crval, * - wcsprm::cunit, * - wcsprm::ctype, * - wcsprm::lonpole, * - wcsprm::latpole, * - wcsprm::restfrq, * - wcsprm::restwav, * - wcsprm::npv, * - wcsprm::pv, * - wcsprm::nps, * - wcsprm::ps, * - wcsprm::cd, * - wcsprm::crota, * - wcsprm::altlin. * * This signals the initialization routine, wcsset(), to recompute the * returned members of the celprm struct. celset() will reset flag to * indicate that this has been done. * * PLEASE NOTE: flag should be set to -1 when wcsini() is called for the * first time for a particular wcsprm struct in order to initialize memory * management. It must ONLY be used on the first initialization otherwise * memory leaks may result. * * int naxis * (Given or returned) Number of pixel and world coordinate elements. * * If wcsini() is used to initialize the linprm struct (as would normally * be the case) then it will set naxis from the value passed to it as a * function argument. The user should not subsequently modify it. * * double *crpix * (Given) Address of the first element of an array of double containing * the coordinate reference pixel, CRPIXja. * * double *pc * (Given) Address of the first element of the PCi_ja (pixel coordinate) * transformation matrix. The expected order is * = struct wcsprm wcs; = wcs.pc = {PC1_1, PC1_2, PC2_1, PC2_2}; * * This may be constructed conveniently from a 2-D array via * = double m[2][2] = {{PC1_1, PC1_2}, = {PC2_1, PC2_2}}; * * which is equivalent to * = double m[2][2]; = m[0][0] = PC1_1; = m[0][1] = PC1_2; = m[1][0] = PC2_1; = m[1][1] = PC2_2; * * The storage order for this 2-D array is the same as for the 1-D array, * whence * = wcs.pc = *m; * * would be legitimate. * * double *cdelt * (Given) Address of the first element of an array of double containing * the coordinate increments, CDELTia. * * double *crval * (Given) Address of the first element of an array of double containing * the coordinate reference values, CRVALia. * * char (*cunit)[72] * (Given) Address of the first element of an array of char[72] containing * the CUNITia keyvalues which define the units of measurement of the * CRVALia, CDELTia, and CDi_ja keywords. * * As CUNITia is an optional header keyword, cunit[][72] may be left blank * but otherwise is expected to contain a standard units specification as * defined by WCS Paper I. Utility function wcsutrn(), described in * wcsunits.h, is available to translate commonly used non-standard units * specifications but this must be done as a separate step before invoking * wcsset(). * * For celestial axes, if cunit[][72] is not blank, wcsset() uses * wcsunits() to parse it and scale cdelt[], crval[], and cd[][*] to * degrees. It then resets cunit[][72] to "deg". * * For spectral axes, if cunit[][72] is not blank, wcsset() uses wcsunits() * to parse it and scale cdelt[], crval[], and cd[][*] to SI units. It * then resets cunit[][72] accordingly. * * wcsset() ignores cunit[][72] for other coordinate types; cunit[][72] may * be used to label coordinate values. * * These variables accomodate the longest allowed string-valued FITS * keyword, being limited to 68 characters, plus the null-terminating * character. * * char (*ctype)[72] * (Given) Address of the first element of an array of char[72] containing * the coordinate axis types, CTYPEia. * * The ctype[][72] keyword values must be in upper case and there must be * zero or one pair of matched celestial axis types, and zero or one * spectral axis. The ctype[][72] strings should be padded with blanks on * the right and null-terminated so that they are at least eight characters * in length. * * These variables accomodate the longest allowed string-valued FITS * keyword, being limited to 68 characters, plus the null-terminating * character. * * double lonpole * (Given and returned) The native longitude of the celestial pole, phi_p, * given by LONPOLEa [deg] or by PVi_2a [deg] attached to the longitude * axis which takes precedence if defined, and ... * double latpole * (Given and returned) ... the native latitude of the celestial pole, * theta_p, given by LATPOLEa [deg] or by PVi_3a [deg] attached to the * longitude axis which takes precedence if defined. * * lonpole and latpole may be left to default to values set by wcsini() * (see celprm::ref), but in any case they will be reset by wcsset() to * the values actually used. Note therefore that if the wcsprm struct is * reused without resetting them, whether directly or via wcsini(), they * will no longer have their default values. * * double restfrq * (Given) The rest frequency [Hz], and/or ... * double restwav * (Given) ... the rest wavelength in vacuuo [m], only one of which need be * given, the other should be set to zero. * * int npv * (Given) The number of entries in the wcsprm::pv[] array. * * int npvmax * (Given or returned) The length of the wcsprm::pv[] array. * * npvmax will be set by wcsini() if it allocates memory for wcsprm::pv[], * otherwise it must be set by the user. See also wcsnpv(). * * struct pvcard *pv * (Given or returned) Address of the first element of an array of length * npvmax of pvcard structs. Set by wcsini() if it allocates memory for * pv[], otherwise it must be set by the user. See also wcsnpv(). * * As a FITS header parser encounters each PVi_ma keyword it should load it * into a pvcard struct in the array and increment npv. wcsset() * interprets these as required. * * Note that, if they were not given, wcsset() resets the entries for * PVi_1a, PVi_2a, PVi_3a, and PVi_4a for longitude axis i to match * phi_0 and theta_0 (the native longitude and latitude of the reference * point), LONPOLEa and LATPOLEa respectively. * * int nps * (Given) The number of entries in the wcsprm::ps[] array. * * int npsmax * (Given or returned) The length of the wcsprm::ps[] array. * * npsmax will be set by wcsini() if it allocates memory for wcsprm::ps[], * otherwise it must be set by the user. See also wcsnps(). * * struct pscard *ps * (Given or returned) Address of the first element of an array of length * npsmax of pscard structs. Set by wcsini() if it allocates memory for * ps[], otherwise it must be set by the user. See also wcsnps(). * * As a FITS header parser encounters each PSi_ma keyword it should load it * into a pscard struct in the array and increment nps. wcsset() * interprets these as required (currently no PSi_ma keyvalues are * recognized). * * double *cd * (Given) For historical compatibility, the wcsprm struct supports two * alternate specifications of the linear transformation matrix, those * associated with the CDi_ja keywords, and ... * double *crota * (Given) ... those associated with the CROTAia keywords. Although these * may not formally co-exist with PCi_ja, the approach taken here is simply * to ignore them if given in conjunction with PCi_ja. * * int altlin * (Given) altlin is a bit flag that denotes which of the PCi_ja, CDi_ja * and CROTAia keywords are present in the header: * * - Bit 0: PCi_ja is present. * * - Bit 1: CDi_ja is present. * * Matrix elements in the IRAF convention are * equivalent to the product CDi_ja = CDELTia * PCi_ja, but the * defaults differ from that of the PCi_ja matrix. If one or more * CDi_ja keywords are present then all unspecified CDi_ja default to * zero. If no CDi_ja (or CROTAia) keywords are present, then the * header is assumed to be in PCi_ja form whether or not any PCi_ja * keywords are present since this results in an interpretation of * CDELTia consistent with the original FITS specification. * * While CDi_ja may not formally co-exist with PCi_ja, it may co-exist * with CDELTia and CROTAia which are to be ignored. * * - Bit 2: CROTAia is present. * * In the AIPS convention, CROTAia may only be * associated with the latitude axis of a celestial axis pair. It * specifies a rotation in the image plane that is applied AFTER the * CDELTia; any other CROTAia keywords are ignored. * * CROTAia may not formally co-exist with PCi_ja. * * CROTAia and CDELTia may formally co-exist with CDi_ja but if so are to * be ignored. * * CDi_ja and CROTAia keywords, if found, are to be stored in the * wcsprm::cd and wcsprm::crota arrays which are dimensioned similarly to * wcsprm::pc and wcsprm::cdelt. FITS * header parsers should use the following procedure: * * - Whenever a PCi_ja keyword is encountered: altlin |= 1; * * - Whenever a CDi_ja keyword is encountered: altlin |= 2; * * - Whenever a CROTAia keyword is encountered: altlin |= 4; * * If none of these bits are set the PCi_ja representation results, i.e. * wcsprm::pc and wcsprm::cdelt will be used as given. * * These alternate specifications of the linear transformation matrix are * translated immediately to PCi_ja by wcsset() and are invisible to the * lower-level WCSLIB routines. In particular, wcsset() resets * wcsprm::cdelt to unity if CDi_ja is present (and no PCi_ja). * * If CROTAia are present but none is associated with the latitude axis * (and no PCi_ja or CDi_ja), then wcsset() reverts to a unity PCi_ja * matrix. * * int velref * (Given) AIPS velocity code VELREF, refer to spcaips(). * * char alt[4] * (Given, auxiliary) Character code for alternate coordinate descriptions * (i.e. the 'a' in keyword names such as CTYPEia). This is blank for the * primary coordinate description, or one of the 26 upper-case letters, * A-Z. * * An array of four characters is provided for alignment purposes, only the * first is used. * * int colnum * (Given, auxiliary) Where the coordinate representation is associated * with an image-array column in a FITS binary table, this variable may be * used to record the relevant column number. * * It should be set to zero for an image header or pixel list. * * int *colax * (Given, auxiliary) Address of the first element of an array of int * recording the column numbers for each axis in a pixel list. * * The array elements should be set to zero for an image header or image * array in a binary table. * * char (*cname)[72] * (Given, auxiliary) The address of the first element of an array of * char[72] containing the coordinate axis names, CNAMEia. * * These variables accomodate the longest allowed string-valued FITS * keyword, being limited to 68 characters, plus the null-terminating * character. * * double *crder * (Given, auxiliary) Address of the first element of an array of double * recording the random error in the coordinate value, CRDERia. * double *csyer * (Given, auxiliary) Address of the first element of an array of double * recording the systematic error in the coordinate value, CSYERia. * * char dateavg[72] * (Given, auxiliary) The date of a representative mid-point of the * observation in ISO format, yyyy-mm-ddThh:mm:ss. * char dateobs[72] * (Given, auxiliary) The date of the start of the observation unless * otherwise explained in the comment field of the DATE-OBS keyword, in * ISO format, yyyy-mm-ddThh:mm:ss. * * double equinox * (Given, auxiliary) The equinox associated with dynamical equatorial or * ecliptic coordinate systems, EQUINOXa (or EPOCH in older headers). Not * applicable to ICRS equatorial or ecliptic coordinates. * * double mjdavg * (Given, auxiliary) Modified Julian Date (MJD = JD - 2400000.5), MJD-AVG, * corresponding to DATE-AVG. * double mjdobs * (Given, auxiliary) Modified Julian Date (MJD = JD - 2400000.5), MJD-OBS, * corresponding to DATE-OBS. * * double obsgeo[3] * (Given, auxiliary) Location of the observer in a standard terrestrial * reference frame, OBSGEO-X, OBSGEO-Y, OBSGEO-Z [m]. * * char radesys[72] * (Given, auxiliary) The equatorial or ecliptic coordinate system type, * RADESYSa. * * char specsys[72] * (Given, auxiliary) Spectral reference frame (standard of rest), * SPECSYSa, and ... * char ssysobs[72] * (Given, auxiliary) ... the actual frame in which there is no * differential variation in the spectral coordinate across the * field-of-view, SSYSOBSa. * double velosys * (Given, auxiliary) The relative radial velocity [m/s] between the * observer and the selected standard of rest in the direction of the * celestial reference coordinate, VELOSYSa. * * double zsource * (Given, auxiliary) The redshift, ZSOURCEa, of the source, and ... * char ssyssrc[72] * (Given, auxiliary) ... the spectral reference frame (standard of rest) * in which this was measured, SSYSSRCa. * * double velangl * (Given, auxiliary) The angle [deg] that should be used to decompose an * observed velocity into radial and transverse components. * * char wcsname[72] * (Given, auxiliary) The name given to the coordinate representation, * WCSNAMEa. This variable accomodates the longest allowed string-valued * FITS keyword, being limited to 68 characters, plus the null-terminating * character. * * int ntab * (Given) See wcsprm::tab. * * int nwtb * (Given) See wcsprm::wtb. * * struct tabprm *tab * (Given) Address of the first element of an array of ntab tabprm structs * for which memory has been allocated. These are used to store tabular * transformation parameters. * * Although technically wcsprm::ntab and tab are "given", they will * normally be set by invoking wcstab(), whether directly or indirectly. * * The tabprm structs contain some members that must be supplied and others * that are derived. The information to be supplied comes primarily from * arrays stored in one or more FITS binary table extensions. These * arrays, referred to here as "wcstab arrays", are themselves located by * parameters stored in the FITS image header. * * struct wtbarr *wtb * (Given) Address of the first element of an array of nwtb wtbarr structs * for which memory has been allocated. These are used in extracting * wcstab arrays from a FITS binary table. * * Although technically wcsprm::nwtb and wtb are "given", they will * normally be set by invoking wcstab(), whether directly or indirectly. * * char lngtyp[8] * (Returned) Four-character WCS celestial longitude and ... * char lattyp[8] * (Returned) ... latitude axis types. e.g. "RA", "DEC", "GLON", "GLAT", * etc. extracted from 'RA--', 'DEC-', 'GLON', 'GLAT', etc. in the first * four characters of CTYPEia but with trailing dashes removed. (Declared * as char[8] for alignment reasons.) * * int lng * (Returned) Index for the longitude coordinate, and ... * int lat * (Returned) ... index for the latitude coordinate, and ... * int spec * (Returned) ... index for the spectral coordinate in the imgcrd[][] and * world[][] arrays in the API of wcsp2s(), wcss2p() and wcsmix(). * * These may also serve as indices into the pixcrd[][] array provided that * the PCi_ja matrix does not transpose axes. * * int cubeface * (Returned) Index into the pixcrd[][] array for the CUBEFACE axis. This * is used for quadcube projections where the cube faces are stored on a * separate axis (see wcs.h). * * int *types * (Returned) Address of the first element of an array of int containing a * four-digit type code for each axis. * * - First digit (i.e. 1000s): * - 0: Non-specific coordinate type. * - 1: Stokes coordinate. * - 2: Celestial coordinate (including CUBEFACE). * - 3: Spectral coordinate. * * - Second digit (i.e. 100s): * - 0: Linear axis. * - 1: Quantized axis (STOKES, CUBEFACE). * - 2: Non-linear celestial axis. * - 3: Non-linear spectral axis. * - 4: Logarithmic axis. * - 5: Tabular axis. * * - Third digit (i.e. 10s): * - 0: Group number, e.g. lookup table number, being an index into the * tabprm array (see above). * * - The fourth digit is used as a qualifier depending on the axis type. * * - For celestial axes: * - 0: Longitude coordinate. * - 1: Latitude coordinate. * - 2: CUBEFACE number. * * - For lookup tables: the axis number in a multidimensional table. * * CTYPEia in "4-3" form with unrecognized algorithm code will have its * type set to -1 and generate an error. * * void *padding * (An unused variable inserted for alignment purposes only.) * * struct linprm lin * (Returned) Linear transformation parameters (usage is described in the * prologue to lin.h). * * struct celprm cel * (Returned) Celestial transformation parameters (usage is described in * the prologue to cel.h). * * struct spcprm spc * (Returned) Spectral transformation parameters (usage is described in the * prologue to spc.h). * * struct wcserr *err * (Returned) If enabled, when an error status is returned this struct * contains detailed information about the error, see wcserr_enable(). * * void *m_padding * (For internal use only.) * int m_flag * (For internal use only.) * int m_naxis * (For internal use only.) * double *m_crpix * (For internal use only.) * double *m_pc * (For internal use only.) * double *m_cdelt * (For internal use only.) * double *m_crval * (For internal use only.) * char (*m_cunit)[72] * (For internal use only.) * char (*m_ctype)[72] * (For internal use only.) * struct pvcard *m_pv * (For internal use only.) * struct pscard *m_ps * (For internal use only.) * double *m_cd * (For internal use only.) * double *m_crota * (For internal use only.) * int *m_colax * (For internal use only.) * char (*m_cname)[72] * (For internal use only.) * double *m_crder * (For internal use only.) * double *m_csyer * (For internal use only.) * struct tabprm *m_tab * (For internal use only.) * struct wtbarr *m_wtb * (For internal use only.) * * * pscard struct - Store for PSi_ma keyrecords * ------------------------------------------- * The pscard struct is used to pass the parsed contents of PSi_ma keyrecords * to wcsset() via the wcsprm struct. * * All members of this struct are to be set by the user. * * int i * (Given) Axis number (1-relative), as in the FITS PSi_ma keyword. * * int m * (Given) Parameter number (non-negative), as in the FITS PSi_ma keyword. * * char value[72] * (Given) Parameter value. * * * pvcard struct - Store for PVi_ma keyrecords * ------------------------------------------- * The pvcard struct is used to pass the parsed contents of PVi_ma keyrecords * to wcsset() via the wcsprm struct. * * All members of this struct are to be set by the user. * * int i * (Given) Axis number (1-relative), as in the FITS PVi_ma keyword. If * i == 0, wcsset() will replace it with the latitude axis number. * * int m * (Given) Parameter number (non-negative), as in the FITS PVi_ma keyword. * * double value * (Given) Parameter value. * * * wtbarr struct - Extraction of coordinate lookup tables from BINTABLE * -------------------------------------------------------------------- * Function wcstab(), which is invoked automatically by wcspih(), sets up an * array of wtbarr structs to assist in extracting coordinate lookup tables * from a binary table extension (BINTABLE) and copying them into the tabprm * structs stored in wcsprm. Refer to the usage notes for wcspih() and * wcstab() in wcshdr.h, and also the prologue to tab.h. * * For C++ usage, because of a name space conflict with the wtbarr typedef * defined in CFITSIO header fitsio.h, the wtbarr struct is renamed to wtbarr_s * by preprocessor macro substitution with scope limited to wcs.h itself. * * int i * (Given) Image axis number. * * int m * (Given) wcstab array axis number for index vectors. * * int kind * (Given) Character identifying the wcstab array type: * - c: coordinate array, * - i: index vector. * * char extnam[72] * (Given) EXTNAME identifying the binary table extension. * * int extver * (Given) EXTVER identifying the binary table extension. * * int extlev * (Given) EXTLEV identifying the binary table extension. * * char ttype[72] * (Given) TTYPEn identifying the column of the binary table that contains * the wcstab array. * * long row * (Given) Table row number. * * int ndim * (Given) Expected dimensionality of the wcstab array. * * int *dimlen * (Given) Address of the first element of an array of int of length ndim * into which the wcstab array axis lengths are to be written. * * double **arrayp * (Given) Pointer to an array of double which is to be allocated by the * user and into which the wcstab array is to be written. * * * Global variable: const char *wcs_errmsg[] - Status return messages * ------------------------------------------------------------------ * Error messages to match the status value returned from each function. * *===========================================================================*/ #ifndef WCSLIB_WCS #define WCSLIB_WCS #include "lin.h" #include "cel.h" #include "spc.h" #include "tab.h" #include "wcserr.h" #ifdef __cplusplus extern "C" { #endif #define WCSSUB_LONGITUDE 0x1001 #define WCSSUB_LATITUDE 0x1002 #define WCSSUB_CUBEFACE 0x1004 #define WCSSUB_CELESTIAL 0x1007 #define WCSSUB_SPECTRAL 0x1008 #define WCSSUB_STOKES 0x1010 extern const char *wcs_errmsg[]; enum wcs_errmsg_enum { WCSERR_SUCCESS = 0, /* Success. */ WCSERR_NULL_POINTER = 1, /* Null wcsprm pointer passed. */ WCSERR_MEMORY = 2, /* Memory allocation failed. */ WCSERR_SINGULAR_MTX = 3, /* Linear transformation matrix is singular. */ WCSERR_BAD_CTYPE = 4, /* Inconsistent or unrecognized coordinate axis types. */ WCSERR_BAD_PARAM = 5, /* Invalid parameter value. */ WCSERR_BAD_COORD_TRANS = 6, /* Invalid coordinate transformation parameters. */ WCSERR_ILL_COORD_TRANS = 7, /* Ill-conditioned coordinate transformation parameters. */ WCSERR_BAD_PIX = 8, /* One or more of the pixel coordinates were invalid. */ WCSERR_BAD_WORLD = 9, /* One or more of the world coordinates were invalid. */ WCSERR_BAD_WORLD_COORD = 10, /* Invalid world coordinate. */ WCSERR_NO_SOLUTION = 11, /* No solution found in the specified interval. */ WCSERR_BAD_SUBIMAGE = 12, /* Invalid subimage specification. */ WCSERR_NON_SEPARABLE = 13 /* Non-separable subimage coordinate system. */ }; /* Struct used for storing PVi_ma keywords. */ struct pvcard { int i; /* Axis number, as in PVi_ma (1-relative). */ int m; /* Parameter number, ditto (0-relative). */ double value; /* Parameter value. */ }; /* Struct used for storing PSi_ma keywords. */ struct pscard { int i; /* Axis number, as in PSi_ma (1-relative). */ int m; /* Parameter number, ditto (0-relative). */ char value[72]; /* Parameter value. */ }; /* For extracting wcstab arrays. Matches */ /* the wtbarr typedef defined in CFITSIO */ /* header fitsio.h. */ #ifdef __cplusplus #define wtbarr wtbarr_s /* See prologue above. */ #endif struct wtbarr { int i; /* Image axis number. */ int m; /* Array axis number for index vectors. */ int kind; /* wcstab array type. */ char extnam[72]; /* EXTNAME of binary table extension. */ int extver; /* EXTVER of binary table extension. */ int extlev; /* EXTLEV of binary table extension. */ char ttype[72]; /* TTYPEn of column containing the array. */ long row; /* Table row number. */ int ndim; /* Expected wcstab array dimensionality. */ int *dimlen; /* Where to write the array axis lengths. */ double **arrayp; /* Where to write the address of the array */ /* allocated to store the wcstab array. */ }; struct wcsprm { /* Initialization flag (see the prologue above). */ /*------------------------------------------------------------------------*/ int flag; /* Set to zero to force initialization. */ /* FITS header keyvalues to be provided (see the prologue above). */ /*------------------------------------------------------------------------*/ int naxis; /* Number of axes (pixel and coordinate). */ double *crpix; /* CRPIXja keyvalues for each pixel axis. */ double *pc; /* PCi_ja linear transformation matrix. */ double *cdelt; /* CDELTia keyvalues for each coord axis. */ double *crval; /* CRVALia keyvalues for each coord axis. */ char (*cunit)[72]; /* CUNITia keyvalues for each coord axis. */ char (*ctype)[72]; /* CTYPEia keyvalues for each coord axis. */ double lonpole; /* LONPOLEa keyvalue. */ double latpole; /* LATPOLEa keyvalue. */ double restfrq; /* RESTFRQa keyvalue. */ double restwav; /* RESTWAVa keyvalue. */ int npv; /* Number of PVi_ma keywords, and the */ int npvmax; /* number for which space was allocated. */ struct pvcard *pv; /* PVi_ma keywords for each i and m. */ int nps; /* Number of PSi_ma keywords, and the */ int npsmax; /* number for which space was allocated. */ struct pscard *ps; /* PSi_ma keywords for each i and m. */ /* Alternative header keyvalues (see the prologue above). */ /*------------------------------------------------------------------------*/ double *cd; /* CDi_ja linear transformation matrix. */ double *crota; /* CROTAia keyvalues for each coord axis. */ int altlin; /* Alternative representations */ /* Bit 0: PCi_ja is present, */ /* Bit 1: CDi_ja is present, */ /* Bit 2: CROTAia is present. */ int velref; /* AIPS velocity code, VELREF. */ /* Auxiliary coordinate system information, not used by WCSLIB. */ char alt[4]; int colnum; int *colax; char (*cname)[72]; double *crder; double *csyer; char dateavg[72]; char dateobs[72]; double equinox; double mjdavg; double mjdobs; double obsgeo[3]; char radesys[72]; char specsys[72]; char ssysobs[72]; double velosys; double zsource; char ssyssrc[72]; double velangl; char wcsname[72]; /* Coordinate lookup tables (see the prologue above). */ /*------------------------------------------------------------------------*/ int ntab; /* Number of separate tables. */ int nwtb; /* Number of wtbarr structs. */ struct tabprm *tab; /* Tabular transformation parameters. */ struct wtbarr *wtb; /* Array of wtbarr structs. */ /* Information derived from the FITS header keyvalues by wcsset(). */ /*------------------------------------------------------------------------*/ char lngtyp[8], lattyp[8]; /* Celestial axis types, e.g. RA, DEC. */ int lng, lat, spec; /* Longitude, latitude and spectral axis */ /* indices (0-relative). */ int cubeface; /* True if there is a CUBEFACE axis. */ int *types; /* Coordinate type codes for each axis. */ void *padding; /* (Dummy inserted for alignment purposes.) */ struct linprm lin; /* Linear transformation parameters. */ struct celprm cel; /* Celestial transformation parameters. */ struct spcprm spc; /* Spectral transformation parameters. */ /* Error handling */ /*------------------------------------------------------------------------*/ struct wcserr *err; /* Private - the remainder are for memory management. */ /*------------------------------------------------------------------------*/ void *m_padding; int m_flag, m_naxis; double *m_crpix, *m_pc, *m_cdelt, *m_crval; char (*m_cunit)[72], (*m_ctype)[72]; struct pvcard *m_pv; struct pscard *m_ps; double *m_cd, *m_crota; int *m_colax; char (*m_cname)[72]; double *m_crder, *m_csyer; struct tabprm *m_tab; struct wtbarr *m_wtb; }; /* Size of the wcsprm struct in int units, used by the Fortran wrappers. */ #define WCSLEN (sizeof(struct wcsprm)/sizeof(int)) int wcsnpv(int n); int wcsnps(int n); int wcsini(int alloc, int naxis, struct wcsprm *wcs); int wcssub(int alloc, const struct wcsprm *wcssrc, int *nsub, int axes[], struct wcsprm *wcsdst); int wcsfree(struct wcsprm *wcs); int wcsprt(const struct wcsprm *wcs); int wcsperr(const struct wcsprm *wcs, const char *prefix); int wcsset(struct wcsprm *wcs); int wcsp2s(struct wcsprm *wcs, int ncoord, int nelem, const double pixcrd[], double imgcrd[], double phi[], double theta[], double world[], int stat[]); int wcss2p(struct wcsprm *wcs, int ncoord, int nelem, const double world[], double phi[], double theta[], double imgcrd[], double pixcrd[], int stat[]); int wcsmix(struct wcsprm *wcs, int mixpix, int mixcel, const double vspan[], double vstep, int viter, double world[], double phi[], double theta[], double imgcrd[], double pixcrd[]); int wcssptr(struct wcsprm *wcs, int *i, char ctype[9]); /* Defined mainly for backwards compatibility, use wcssub() instead. */ #define wcscopy(alloc, wcssrc, wcsdst) wcssub(alloc, wcssrc, 0x0, 0x0, wcsdst) /* Deprecated. */ #define wcsini_errmsg wcs_errmsg #define wcssub_errmsg wcs_errmsg #define wcscopy_errmsg wcs_errmsg #define wcsfree_errmsg wcs_errmsg #define wcsprt_errmsg wcs_errmsg #define wcsset_errmsg wcs_errmsg #define wcsp2s_errmsg wcs_errmsg #define wcss2p_errmsg wcs_errmsg #define wcsmix_errmsg wcs_errmsg #ifdef __cplusplus #undef wtbarr } #endif #endif /* WCSLIB_WCS */ pywcs-1.12/wcslib/C/wcsbth.l0000644001153600020070000015346112310355626017774 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsbth.l,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * wcsbth.l is a Flex description file containing the definition of a lexical * scanner for parsing the WCS keyrecords for one or more image arrays and/or * pixel lists in a FITS binary table header. It can also handle primary image * and image extension headers. * * wcsbth.l requires Flex v2.5.4 or later. Refer to wcshdr.h for a description * of the user interface and operating notes. * * Implementation notes * -------------------- * wcsbth() may be invoked with an option that causes it to recognise the * image-header form of WCS keywords as defaults for each alternate coordinate * representation (up to 27). By design, with this option enabled wcsbth() can * also handle primary image and image extension headers, effectively treating * them as a single-column binary table though with WCS keywords of a different * form. * * NAXIS is always 2 for binary tables, it refers to the two-dimensional nature * of the table. Thus NAXIS does not count the number of image axes in either * image arrays or pixels lists and for the latter there is not even a formal * equivalent of WCSAXESa. Hence NAXIS is always ignored and a first pass * through the header is required to determine the number of images, the number * of alternate coordinate representations for each image (up to 27), and the * number of coordinate axes in each representation; this pass also counts the * number of iPVn_ma and iPSn_ma or TVk_ma and TSk_ma keywords in each * representation. * * On completion of the first pass, the association between column number and * axis number is defined for each representation of a pixel list. Memory is * allocated for an array of the required number of wcsprm structs and each of * these is initialized appropriately. These structs are filled in the second * pass. * * It is permissible for a scalar table column to contain degenerate (single- * point) image arrays and simultaneously form one axis of a pixel list. * * The parser does not check for duplicated keywords, for most keywords it * accepts the last encountered. * * wcsbth() does not currently handle the Green Bank convention. * *===========================================================================*/ /* Options. */ %option full %option never-interactive %option noyywrap %option outfile="wcsbth.c" %option prefix="wcsbth" /* Indices for parameterized keywords. */ I0 [0-9] I1 [1-9] I2 [1-9][0-9] I3 [1-9][0-9]{2} I4 [1-9][0-9]{3} /* Alternate coordinate system identifier. */ ALT [ A-Z] /* Keyvalue data types. */ INTEGER [+-]?[0-9]+ FLOAT [+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)? STRING '([^']|'')*' /* Exclusive start states. */ %x CCCCCia iCCCna iCCCCn TCCCna TCCCCn %x CCi_ja ijCCna TCn_ka TCCn_ka %x CROTAi iCROTn TCROTn %x CCi_ma iCn_ma iCCn_ma TCn_ma TCCn_ma %x PROJPm %x CCCCCCCC CCCCCCCa %x CCCCna CCCCCna %x CCCCn CCCCCn %x VALUE INTEGER_VAL FLOAT_VAL STRING_VAL %x COMMENT DISCARD ERROR FLUSH %{ #include #include #include #include #include #include "wcs.h" #include "wcshdr.h" #include "wcsmath.h" /* Codes used for keyvalue data types. */ #define INTEGER 0 #define FLOAT 1 #define STRING 2 /* Bit masks used for keyword types: */ #define IMGAUX 0x1 /* Auxiliary image header, e.g. LONPOLEa or */ /* DATE-OBS. */ #define IMGAXIS 0x2 /* Image header with axis number, e.g. */ /* CTYPEia. */ #define IMGHEAD 0x3 /* Image header of either type. */ #define BIMGARR 0x4 /* Binary table image array with axis */ /* number, e.g. iCTYna. */ #define PIXLIST 0x8 /* Pixel list, e.g. TCTYna. */ #define BINTAB 0xC /* Shared binary table image array (without */ /* axis number) or pixel list, e.g. LONPna */ /* or OBSGXn. */ #define YY_DECL int wcsbth(char *header, int nkeyrec, int relax, int ctrl, \ int keysel, int *colsel, int *nreject, int *nwcs, \ struct wcsprm **wcs) #define YY_INPUT(inbuff, count, bufsize) \ { \ if (wcsbth_nkeyrec) { \ strncpy(inbuff, wcsbth_hdr, 80); \ inbuff[80] = '\n'; \ wcsbth_hdr += 80; \ wcsbth_nkeyrec--; \ count = 81; \ } else { \ count = YY_NULL; \ } \ } /* A convenience macro to get around incompatibilities between unput() and yyless(): put yytext followed by a blank back onto the input stream. */ #define WCSBTH_PUTBACK \ sprintf(stmp, "%s ", yytext); \ itmp = strlen(stmp); \ while (itmp) unput(stmp[--itmp]); /* These global variables are required by YY_INPUT. */ char *wcsbth_hdr; int wcsbth_nkeyrec; /* Used in preempting the call to exit() by yy_fatal_error(). */ jmp_buf wcsbth_abort_jmp_env; #define exit(status) longjmp(wcsbth_abort_jmp_env, status) /* Struct used internally for header bookkeeping. */ struct wcsbth_alts { int ncol, ialt, icol, imgherit; short int (*arridx)[27]; short int pixidx[27]; short int pad1; unsigned int *pixlist; unsigned char (*npv)[27]; unsigned char (*nps)[27]; unsigned char pixnpv[27]; unsigned char pixnps[27]; unsigned char pad2[2]; }; int wcsbth_pass1(int keytype, int i, int j, int n, int k, char a, char ptype, struct wcsbth_alts *alts); int wcsbth_init1(struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs); struct wcsprm *wcsbth_idx(struct wcsprm *wcs, struct wcsbth_alts *alts, int keytype, int n, char a); int wcsbth_colax(struct wcsprm *wcs, struct wcsbth_alts *alts, int k, char a); int wcsbth_epoch(void *wptr); int wcsbth_vsource(void *wptr); int wcsbth_final(struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs); %} %% /* Keyword indices, as used in the WCS papers, e.g. iVn_ma, TPn_ka. */ char a; int i, j, k, m, n; char *cptr, *errmsg, errtxt[80], exclude[1000], *extkey, *hptr, ptype, stmp[16]; int altlin, ialt, icol, incl, ipass, ipx, itmp, ix, jx, keytype, nsel, npass, status, valtype, voff; void *vptr, *wptr; struct wcsbth_alts alts; struct wcsprm *wcsp, wcstem; int (*special)(void *); int yylex_destroy(void); /* The data structures produced. */ *nwcs = 0; *wcs = 0x0; /* Parameters used to implement YY_INPUT. */ wcsbth_hdr = header; wcsbth_nkeyrec = nkeyrec; /* Our handle on the input stream. */ hptr = header; *nreject = 0; /* Keyword parameters. */ i = j = 0; n = k = 0; m = 0; a = ' '; /* Header bookkeeping. */ alts.ncol = 0; alts.arridx = 0x0; alts.pixlist = 0x0; alts.npv = 0x0; alts.nps = 0x0; for (ialt = 0; ialt < 27; ialt++) { alts.pixidx[ialt] = 0; alts.pixnpv[ialt] = 0; alts.pixnps[ialt] = 0; } /* For decoding the keyvalue. */ keytype = 0; valtype = -1; vptr = 0x0; /* For keywords that require special handling. */ altlin = 0; ptype = ' '; special = 0x0; /* Selection by column number. */ nsel = colsel ? colsel[0] : 0; incl = (nsel > 0); for (icol = 0; icol < 1000; icol++) { exclude[icol] = incl; } for (icol = 1; icol <= abs(nsel); icol++) { itmp = colsel[icol]; if (0 < itmp && itmp < 1000) { exclude[itmp] = !incl; } } exclude[0] = 0; /* Selection by keyword type. */ itmp = keysel; keysel = 0; if (itmp) { if (itmp & WCSHDR_IMGHEAD) keysel |= IMGHEAD; if (itmp & WCSHDR_BIMGARR) keysel |= BIMGARR; if (itmp & WCSHDR_PIXLIST) keysel |= PIXLIST; } if (keysel == 0) { keysel = IMGHEAD | BINTAB; } /* Control variables. */ ipass = 1; npass = 2; /* Return here via longjmp() invoked by yy_fatal_error(). */ if (setjmp(wcsbth_abort_jmp_env)) { return 4; } BEGIN(INITIAL); ^TFIELDS" = "" "*{INTEGER} { if (ipass == 1) { if (alts.ncol == 0) { sscanf(yytext, "TFIELDS = %d", &(alts.ncol)); BEGIN(FLUSH); } else { errmsg = "Duplicate or out-of-sequence TFIELDS keyword"; BEGIN(ERROR); } } else { BEGIN(FLUSH); } } ^WCSAXES{ALT}=" "" "*{INTEGER} { keytype = IMGAXIS; if (!(keytype & keysel)) { /* Ignore this key type. */ BEGIN(DISCARD); } else { if (relax & WCSHDR_ALLIMG) { if (ipass == 1) { sscanf(yytext, "WCSAXES%c= %d", &a, &i); wcsbth_pass1(IMGAXIS, i, 0, 0, 0, a, ' ', &alts); } BEGIN(FLUSH); } else if (relax & WCSHDR_reject) { errmsg = "Image-header keyword WCSAXESa in binary table"; BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } } ^WCAX{I1}{ALT}" = "" "*{INTEGER} | ^WCAX{I2}{ALT}" = "" "*{INTEGER} | ^WCAX{I3}{ALT}"= "" "*{INTEGER} { keytype = BIMGARR; /* Note that a blank in the sscanf() format string matches zero or more of them in the input. */ sscanf(yytext, "WCAX%d%c = %d", &n, &a, &i); if (!(keytype & keysel) || exclude[n]) { /* Ignore this key type or column. */ BEGIN(DISCARD); } else { if (ipass == 1) { wcsbth_pass1(BIMGARR, i, 0, n, 0, a, ' ', &alts); } BEGIN(FLUSH); } } ^WCST{I1}{ALT}" = "" "*{STRING} | ^WCST{I2}{ALT}" = "" "*{STRING} | ^WCST{I3}{ALT}"= "" "*{STRING} { /* Cross-reference supplier. */ keytype = BIMGARR; errmsg = "Cross-references are not currently implemented"; BEGIN(ERROR); } ^WCSX{I1}{ALT}" = "" "*{STRING} | ^WCSX{I2}{ALT}" = "" "*{STRING} | ^WCSX{I3}{ALT}"= "" "*{STRING} { /* Cross-reference consumer. */ keytype = BIMGARR; errmsg = "Cross-references are not currently implemented"; BEGIN(ERROR); } ^CRPIX { valtype = FLOAT; vptr = &(wcstem.crpix); extkey = "CRPIXja"; BEGIN(CCCCCia); } ^{I1}CRP | ^{I1}CRPX { valtype = FLOAT; vptr = &(wcstem.crpix); sscanf(yytext, "%d", &i); if (yyleng == 4) { BEGIN(iCCCna); } else { extkey = "jCRPXn"; BEGIN(iCCCCn); } } ^TCRP | ^TCRPX { valtype = FLOAT; vptr = &(wcstem.crpix); if (yyleng == 4) { BEGIN(TCCCna); } else { extkey = "TCRPXn"; BEGIN(TCCCCn); } } ^PC { valtype = FLOAT; vptr = &(wcstem.pc); altlin = 1; extkey = "PCi_ja"; BEGIN(CCi_ja); } ^{I2}PC { valtype = FLOAT; vptr = &(wcstem.pc); altlin = 1; sscanf(yytext, "%1d%1d", &i, &j); BEGIN(ijCCna); } ^TP | ^TPC { valtype = FLOAT; vptr = &(wcstem.pc); altlin = 1; if (yyleng == 2) { BEGIN(TCn_ka); } else { extkey = "TPCn_ka"; BEGIN(TCCn_ka); } } ^CD { valtype = FLOAT; vptr = &(wcstem.cd); altlin = 2; extkey = "CDi_ja"; BEGIN(CCi_ja); } ^{I2}CD { valtype = FLOAT; vptr = &(wcstem.cd); altlin = 2; sscanf(yytext, "%1d%1d", &i, &j); BEGIN(ijCCna); } ^TC | ^TCD { valtype = FLOAT; vptr = &(wcstem.cd); altlin = 2; if (yyleng == 2) { BEGIN(TCn_ka); } else { extkey = "TCDn_ka"; BEGIN(TCCn_ka); } } ^CDELT { valtype = FLOAT; vptr = &(wcstem.cdelt); extkey = "CDELTia"; BEGIN(CCCCCia); } ^{I1}CDE | ^{I1}CDLT { valtype = FLOAT; vptr = &(wcstem.cdelt); sscanf(yytext, "%d", &i); if (yyleng == 4) { BEGIN(iCCCna); } else { extkey = "iCDLTn"; BEGIN(iCCCCn); } } ^TCDE | ^TCDLT { valtype = FLOAT; vptr = &(wcstem.cdelt); if (yyleng == 4) { BEGIN(TCCCna); } else { extkey = "TCDLTn"; BEGIN(TCCCCn); } } ^CROTA { valtype = FLOAT; vptr = &(wcstem.crota); altlin = 4; extkey = "CROTAi"; BEGIN(CROTAi); } ^{I1}CROT { valtype = FLOAT; vptr = &(wcstem.crota); altlin = 4; sscanf(yytext, "%d", &i); extkey = "iCROTn"; BEGIN(iCROTn); } ^TCROT { valtype = FLOAT; vptr = &(wcstem.crota); altlin = 4; extkey = "TCROTn"; BEGIN(TCROTn); } ^CUNIT { valtype = STRING; vptr = &(wcstem.cunit); extkey = "CUNITia"; BEGIN(CCCCCia); } ^{I1}CUN | ^{I1}CUNI { valtype = STRING; vptr = &(wcstem.cunit); sscanf(yytext, "%d", &i); if (yyleng == 4) { BEGIN(iCCCna); } else { extkey = "iCUNIn"; BEGIN(iCCCCn); } } ^TCUN | ^TCUNI { valtype = STRING; vptr = &(wcstem.cunit); if (yyleng == 4) { BEGIN(TCCCna); } else { extkey = "TCUNIn"; BEGIN(TCCCCn); } } ^CTYPE { valtype = STRING; vptr = &(wcstem.ctype); extkey = "CTYPEia"; BEGIN(CCCCCia); } ^{I1}CTY | ^{I1}CTYP { valtype = STRING; vptr = &(wcstem.ctype); sscanf(yytext, "%d", &i); if (yyleng == 4) { BEGIN(iCCCna); } else { extkey = "iCTYPn"; BEGIN(iCCCCn); } } ^TCTY | ^TCTYP { valtype = STRING; vptr = &(wcstem.ctype); if (yyleng == 4) { BEGIN(TCCCna); } else { extkey = "TCTYPn"; BEGIN(TCCCCn); } } ^CRVAL { valtype = FLOAT; vptr = &(wcstem.crval); extkey = "CRVALia"; BEGIN(CCCCCia); } ^{I1}CRV | ^{I1}CRVL { valtype = FLOAT; vptr = &(wcstem.crval); sscanf(yytext, "%d", &i); if (yyleng == 4) { BEGIN(iCCCna); } else { extkey = "iCRVLn"; BEGIN(iCCCCn); } } ^TCRV | ^TCRVL { valtype = FLOAT; vptr = &(wcstem.crval); if (yyleng == 4) { BEGIN(TCCCna); } else { extkey = "TCRVLn"; BEGIN(TCCCCn); } } ^LONPOLE | ^LONP { valtype = FLOAT; vptr = &(wcstem.lonpole); if (yyleng == 7) { extkey = "LONPOLEa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^LATPOLE | ^LATP { valtype = FLOAT; vptr = &(wcstem.latpole); if (yyleng == 7) { extkey = "LATPOLEa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^RESTFRQ | ^RESTFREQ | ^RFRQ { valtype = FLOAT; vptr = &(wcstem.restfrq); if (yyleng == 8) { unput(' '); extkey = "RESTFREQ"; BEGIN(CCCCCCCa); } else if (yyleng == 7) { extkey = "RESTFRQa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^RESTWAV | ^RWAV { valtype = FLOAT; vptr = &(wcstem.restwav); if (yyleng == 7) { extkey = "RESTWAVa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^PV { valtype = FLOAT; vptr = &(wcstem.pv); ptype = 'v'; extkey = "PVi_ma"; BEGIN(CCi_ma); } ^{I1}V | ^{I1}PV { valtype = FLOAT; vptr = &(wcstem.pv); ptype = 'v'; sscanf(yytext, "%d", &i); if (yyleng == 2) { BEGIN(iCn_ma); } else { extkey = "iPVn_ma"; BEGIN(iCCn_ma); } } ^TV | ^TPV { valtype = FLOAT; vptr = &(wcstem.pv); ptype = 'v'; if (yyleng == 2) { BEGIN(TCn_ma); } else { extkey = "TPVn_ma"; BEGIN(TCCn_ma); } } ^PROJP { valtype = FLOAT; vptr = &(wcstem.pv); ptype = 'v'; BEGIN(PROJPm); } ^PS { valtype = STRING; vptr = &(wcstem.ps); ptype = 's'; extkey = "PSi_ma"; BEGIN(CCi_ma); } ^{I1}S | ^{I1}PS { valtype = STRING; vptr = &(wcstem.ps); ptype = 's'; sscanf(yytext, "%d", &i); if (yyleng == 2) { BEGIN(iCn_ma); } else { extkey = "iPSn_ma"; BEGIN(iCCn_ma); } } ^TS | ^TPS { valtype = STRING; vptr = &(wcstem.ps); ptype = 's'; if (yyleng == 2) { BEGIN(TCn_ma); } else { extkey = "TPSn_ma"; BEGIN(TCCn_ma); } } ^CNAME { valtype = STRING; vptr = &(wcstem.cname); extkey = "CNAMEia"; BEGIN(CCCCCia); } ^{I1}CNA | ^{I1}CNAM { valtype = STRING; vptr = &(wcstem.cname); sscanf(yytext, "%d", &i); if (yyleng == 4) { BEGIN(iCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "iCNAMn"; BEGIN(iCCCCn); } } ^TCNA | ^TCNAM { valtype = STRING; vptr = &(wcstem.cname); if (yyleng == 4) { BEGIN(TCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "TCNAMn"; BEGIN(TCCCCn); } } ^CRDER { valtype = FLOAT; vptr = &(wcstem.crder); extkey = "CRDERia"; BEGIN(CCCCCia); } ^{I1}CRD | ^{I1}CRDE { valtype = FLOAT; vptr = &(wcstem.crder); sscanf(yytext, "%d", &i); if (yyleng == 4) { BEGIN(iCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "iCRDEn"; BEGIN(iCCCCn); } } ^TCRD | ^TCRDE { valtype = FLOAT; vptr = &(wcstem.crder); if (yyleng == 4) { BEGIN(TCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "TCRDEn"; BEGIN(TCCCCn); } } ^CSYER { valtype = FLOAT; vptr = &(wcstem.csyer); extkey = "CSYERia"; BEGIN(CCCCCia); } ^{I1}CSY | ^{I1}CSYE { valtype = FLOAT; vptr = &(wcstem.csyer); sscanf(yytext, "%d", &i); if (yyleng == 4) { BEGIN(iCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "iCSYEn"; BEGIN(iCCCCn); } } ^TCSY | ^TCSYE { valtype = FLOAT; vptr = &(wcstem.csyer); if (yyleng == 4) { BEGIN(TCCCna); } else { if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; extkey = "TCSYEn"; BEGIN(TCCCCn); } } ^DATE-AVG | ^DAVG { valtype = STRING; vptr = wcstem.dateavg; if (yyleng == 8) { extkey = "DATE-AVG"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCn); } } ^DATE-OBS { valtype = STRING; vptr = wcstem.dateobs; extkey = "DATE-OBS"; BEGIN(CCCCCCCC); } ^DOBS{I1}" " | ^DOBS{I2}" " | ^DOBS{I3}" " { if (relax & WCSHDR_DOBSn) { valtype = STRING; vptr = wcstem.dateobs; yyless(4); BEGIN(CCCCn); } else { keytype = BINTAB; if (relax & WCSHDR_reject) { errmsg = "DOBSna keyword is non-standard"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } } ^EPOCH{ALT}" " { sscanf(yytext, "EPOCH%c", &a); if (a == ' ' || (relax & WCSHDR_EPOCHa)) { valtype = FLOAT; vptr = &(wcstem.equinox); special = wcsbth_epoch; unput(a); extkey = "EPOCH"; BEGIN(CCCCCCCa); } else { keytype = IMGAUX; if (relax & WCSHDR_reject) { errmsg = "EPOCH keyword may not have an alternate version code"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } } ^EQUINOX | ^EQUI { valtype = FLOAT; vptr = &(wcstem.equinox); if (yyleng == 7) { extkey = "EQUINOXa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^MJD-AVG" " | ^MJDA { valtype = FLOAT; vptr = &(wcstem.mjdavg); if (yyleng == 8) { extkey = "MJD-AVG"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCn); } } ^MJD-OBS" " | ^MJDOB { valtype = FLOAT; vptr = &(wcstem.mjdobs); if (yyleng == 8) { extkey = "MJD-OBS"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCCn); } } ^OBSGEO-X | ^OBSGX { valtype = FLOAT; vptr = wcstem.obsgeo; if (yyleng == 8) { extkey = "OBSGEO-X"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCCn); } } ^OBSGEO-Y | ^OBSGY { valtype = FLOAT; vptr = wcstem.obsgeo + 1; if (yyleng == 8) { extkey = "OBSGEO-Y"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCCn); } } ^OBSGEO-Z | ^OBSGZ { valtype = FLOAT; vptr = wcstem.obsgeo + 2; if (yyleng == 8) { extkey = "OBSGEO-Z"; BEGIN(CCCCCCCC); } else { BEGIN(CCCCCn); } } ^RADESYS | ^RADE { valtype = STRING; vptr = wcstem.radesys; if (yyleng == 7) { extkey = "RADESYSa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^RADECSYS { if (relax & WCSHDR_RADECSYS) { valtype = STRING; vptr = wcstem.radesys; unput(' '); extkey = "RADECSYS"; BEGIN(CCCCCCCa); } else { keytype = IMGAUX; if (relax & WCSHDR_reject) { errmsg = "RADECSYS keyword is non-standard"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } } ^SPECSYS | ^SPEC { valtype = STRING; vptr = wcstem.specsys; if (yyleng == 7) { extkey = "SPECSYSa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^SSYSOBS | ^SOBS { valtype = STRING; vptr = wcstem.ssysobs; if (yyleng == 7) { extkey = "SSYSOBSa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^SSYSSRC | ^SSRC { valtype = STRING; vptr = wcstem.ssyssrc; if (yyleng == 7) { extkey = "SSYSSRCa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^VELOSYS | ^VSYS { valtype = FLOAT; vptr = &(wcstem.velosys); if (yyleng == 7) { extkey = "VELOSYSa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^VELANGL | ^VANG { valtype = FLOAT; vptr = &(wcstem.velangl); if (yyleng == 7) { extkey = "VELANGLa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^VELREF{ALT}" " { sscanf(yytext, "VELREF%c", &a); if (a == ' ' || (relax & WCSHDR_VELREFa)) { valtype = INTEGER; vptr = &(wcstem.velref); unput(a); extkey = "VELREF"; BEGIN(CCCCCCCa); } else { keytype = IMGAUX; if (relax & WCSHDR_reject) { errmsg = "VELREF keyword may not have an alternate version code"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } } ^VSOURCE{ALT} { if (relax & WCSHDR_VSOURCE) { valtype = FLOAT; vptr = &(wcstem.zsource); special = wcsbth_vsource; yyless(7); extkey = "VSOURCEa"; BEGIN(CCCCCCCa); } else { keytype = IMGAUX; if (relax & WCSHDR_reject) { errmsg = "VSOURCEa keyword is deprecated"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } } ^VSOU{I1}{ALT}" " | ^VSOU{I2}{ALT}" " | ^VSOU{I3}{ALT} { if (relax & WCSHDR_VSOURCE) { valtype = FLOAT; vptr = &(wcstem.zsource); special = wcsbth_vsource; yyless(4); BEGIN(CCCCna); } else { keytype = BINTAB; if (relax & WCSHDR_reject) { errmsg = "VSOUna keyword is deprecated"; BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } } ^WCSNAME | ^WCSN | ^TWCS { valtype = STRING; vptr = wcstem.wcsname; if (yyleng == 7) { extkey = "WCSNAMEa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^ZSOURCE | ^ZSOU { valtype = FLOAT; vptr = &(wcstem.zsource); if (yyleng == 7) { extkey = "ZSOURCEa"; BEGIN(CCCCCCCa); } else { BEGIN(CCCCna); } } ^END" "{77} { yyless(0); if (wcsbth_nkeyrec) { wcsbth_nkeyrec = 0; errmsg = "Keyrecords following the END keyrecord were ignored"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } ^. { yyless(0); BEGIN(DISCARD); } {I1}{ALT}" " | {I2}{ALT} { /* Image-header keyword. */ keytype = IMGAXIS; if (relax & WCSHDR_ALLIMG) { sscanf(yytext, "%d%c", &i, &a); BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Image-header keyword %s in binary table", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } {I3} { /* Invalid axis number in image-header keyword. */ keytype = IMGAXIS; if (relax & WCSHDR_ALLIMG) { /* Will also be flagged by as invalid. */ sscanf(yytext, "%3d", &i); BEGIN(VALUE); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } {I1}" " | {I2}" " | {I3} | {I1}" " | {I2}" " | {I3} { if (vptr) { WCSBTH_PUTBACK; BEGIN((YY_START == iCCCCn) ? iCCCna : TCCCna); } else { keytype = (YY_START == iCCCCn) ? BIMGARR : PIXLIST; if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "%s keyword is non-standard", extkey); BEGIN(ERROR); } else { BEGIN(DISCARD); } } } {I1}[A-Z]" " | {I2}[A-Z] | {I1}[A-Z]" " | {I2}[A-Z] { if (vptr && (relax & WCSHDR_LONGKEY)) { WCSBTH_PUTBACK; BEGIN((YY_START == iCCCCn) ? iCCCna : TCCCna); } else { keytype = (YY_START == iCCCna) ? BIMGARR : PIXLIST; if (relax & WCSHDR_reject) { errmsg = errtxt; if (!vptr) { sprintf(errmsg, "%s keyword is non-standard", extkey); } else { sprintf(errmsg, "%s keyword may not have an alternate version code", extkey); } BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } } . | . { BEGIN(DISCARD); } {I1}{ALT}" " | {I2}{ALT}" " | {I3}{ALT} | {I1}{ALT}" " | {I2}{ALT}" " | {I3}{ALT} { sscanf(yytext, "%d%c", &n, &a); if (YY_START == TCCCna) i = wcsbth_colax(*wcs, &alts, n, a); keytype = (YY_START == iCCCna) ? BIMGARR : PIXLIST; BEGIN(VALUE); } . | . { BEGIN(DISCARD); } {I1}_{I1}{ALT}" " | {I1}_{I2}{ALT}" " | {I2}_{I1}{ALT}" " | {I2}_{I2}{ALT} { /* Image-header keyword. */ if (relax & WCSHDR_ALLIMG) { sscanf(yytext, "%d_%d%c", &i, &j, &a); keytype = IMGAXIS; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Image-header keyword %s in binary table", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } {I1}_{I3}{ALT} | {I3}_{I1}{ALT} | {I1}_{I4} | {I2}_{I3} | {I3}_{I2} | {I4}_{I1} { /* Invalid axis number in image-header keyword. */ if (relax & WCSHDR_ALLIMG) { /* Will be flagged by as invalid. */ sscanf(yytext, "%d_%d", &i, &j); keytype = IMGAXIS; BEGIN(VALUE); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } {I0}{6} { /* This covers the defunct forms CD00i00j and PC00i00j. */ if (((relax & WCSHDR_PC00i00j) && (altlin == 1)) || ((relax & WCSHDR_CD00i00j) && (altlin == 2))) { sscanf(yytext, "%3d%3d", &i, &j); a = ' '; keytype = IMGAXIS; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Defunct form of %si_ja keyword", (altlin==1) ? "PC" : "CD"); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } . { BEGIN(DISCARD); } {I1}{ALT}" " | {I2}{ALT}" " | {I3}{ALT} { sscanf(yytext, "%d%c", &n, &a); keytype = BIMGARR; BEGIN(VALUE); } {I1}_{I1}{ALT}" " | {I1}_{I2}{ALT} | {I2}_{I1}{ALT} | {I1}_{I3} | {I2}_{I2} | {I3}_{I1} { if (relax & WCSHDR_LONGKEY) { WCSBTH_PUTBACK; BEGIN(TCn_ka); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "%s keyword is non-standard", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } . { BEGIN(DISCARD); } {I1}_{I1}{ALT}" " | {I1}_{I2}{ALT}" " | {I2}_{I1}{ALT}" " | {I1}_{I3}{ALT} | {I2}_{I2}{ALT} | {I3}_{I1}{ALT} { sscanf(yytext, "%d_%d%c", &n, &k, &a); i = wcsbth_colax(*wcs, &alts, n, a); j = wcsbth_colax(*wcs, &alts, k, a); keytype = PIXLIST; BEGIN(VALUE); } {I1}_{I4} | {I2}_{I3} | {I3}_{I2} | {I4}_{I1} { sscanf(yytext, "%d_%d", &n, &k); a = ' '; i = wcsbth_colax(*wcs, &alts, n, a); j = wcsbth_colax(*wcs, &alts, k, a); keytype = PIXLIST; BEGIN(VALUE); } . { BEGIN(DISCARD); } {I1}" " | {I2}" " { yyless(0); BEGIN(CCCCCia); } {I1}[A-Z]" " | {I2}[A-Z] { if (relax & WCSHDR_CROTAia) { yyless(0); BEGIN(CCCCCia); } else if (relax & WCSHDR_reject) { errmsg = "CROTAn keyword may not have an alternate version code"; BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } . { BEGIN(DISCARD); } {I1}" " | {I2}" " | {I3} | {I1}" " | {I2}" " | {I3} { WCSBTH_PUTBACK; BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna); } {I1}[A-Z]" " | {I2}[A-Z] | {I1}[A-Z]" " | {I2}[A-Z] { if (relax & WCSHDR_CROTAia) { WCSBTH_PUTBACK; BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "%s keyword may not have an alternate version code", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } . | . { BEGIN(DISCARD); } {ALT} | . { /* Image-header keyword. */ if (relax & (WCSHDR_AUXIMG | WCSHDR_ALLIMG)) { if (YY_START == CCCCCCCa) { sscanf(yytext, "%c", &a); } else { a = 0; unput(yytext[0]); } keytype = IMGAUX; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Image-header keyword %s in binary table", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } . { BEGIN(DISCARD); } {I1}{ALT}" " | {I2}{ALT}" " | {I3}{ALT} | {I1}{ALT}" " | {I2}{ALT} { sscanf(yytext, "%d%c", &n, &a); keytype = BINTAB; BEGIN(VALUE); } {I3} { sscanf(yytext, "%d", &n); a = ' '; keytype = BINTAB; BEGIN(VALUE); } . | . { BEGIN(DISCARD); } {I1}" " | {I2}" " | {I3}" " | {I4} | {I1}" " | {I2}" " | {I3} { sscanf(yytext, "%d", &n); a = 0; keytype = BINTAB; BEGIN(VALUE); } . | . { BEGIN(DISCARD); } {I1}_{I0}{ALT}" " | {I1}_{I2}{ALT}" " | {I2}_{I0}{ALT}" " | {I2}_{I2}{ALT} { /* Image-header keyword. */ if (relax & WCSHDR_ALLIMG) { sscanf(yytext, "%d_%d%c", &i, &m, &a); keytype = IMGAXIS; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Image-header keyword %s in binary table", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } {I1}_{I3}{ALT} | {I3}_{I0}{ALT} | {I1}_{I4} | {I2}_{I3} | {I3}_{I2} | {I4}_{I0} { /* Invalid parameter in image-header keyword. */ if (relax & WCSHDR_ALLIMG) { /* Will be flagged by as invalid. */ sscanf(yytext, "%d_%d", &i, &m); keytype = IMGAXIS; BEGIN(VALUE); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } . { BEGIN(DISCARD); } {I1}_{I0}{ALT}" " | {I1}_{I2}{ALT} | {I1}_{I3} | {I2}_{I0}{ALT} | {I2}_{I2} | {I3}_{I0} | {I1}_{I0}{ALT}" " | {I1}_{I2}{ALT} | {I1}_{I3} | {I2}_{I0}{ALT} | {I2}_{I2} | {I3}_{I0} { if (relax & WCSHDR_LONGKEY) { WCSBTH_PUTBACK; BEGIN((YY_START == iCCn_ma) ? iCn_ma : TCn_ma); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "%s keyword is non-standard", extkey); BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } . | . { BEGIN(DISCARD); } {I1}_{I0}{ALT}" " | {I1}_{I2}{ALT}" " | {I1}_{I3}{ALT} | {I2}_{I0}{ALT}" " | {I2}_{I2}{ALT} | {I3}_{I0}{ALT} | {I1}_{I0}{ALT}" " | {I1}_{I2}{ALT}" " | {I1}_{I3}{ALT} | {I2}_{I0}{ALT}" " | {I2}_{I2}{ALT} | {I3}_{I0}{ALT} { sscanf(yytext, "%d_%d%c", &n, &m, &a); if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a); keytype = (YY_START == iCn_ma) ? BIMGARR : PIXLIST; BEGIN(VALUE); } {I1}_{I4} | {I2}_{I3} | {I3}_{I2} | {I4}_{I0} | {I1}_{I4} | {I2}_{I3} | {I3}_{I2} | {I4}_{I0} { /* Invalid combinations will be flagged by . */ sscanf(yytext, "%d_%d", &n, &m); a = ' '; if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a); keytype = (YY_START == iCn_ma) ? BIMGARR : PIXLIST; BEGIN(VALUE); } . | . { BEGIN(DISCARD); } {I0}" " { if (relax & WCSHDR_PROJPn) { sscanf(yytext, "%d", &m); i = 0; a = ' '; keytype = IMGAXIS; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = "PROJPn keyword is defunct"; BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } . { BEGIN(DISCARD); } =" "+ { /* Do checks on i, j, m, n, k. */ if (!(keytype & keysel)) { /* Selection by keyword type. */ BEGIN(DISCARD); } else if (exclude[n] || exclude[k]) { /* One or other column is not selected. */ if (k && (exclude[n] != exclude[k])) { /* For keywords such as TCn_ka, both columns must be excluded. User error, so return immediately. */ yylex_destroy(); return 3; } else { BEGIN(DISCARD); } } else if (i > 99 || j > 99 || m > 99 || n > 999 || k > 999) { if (relax & WCSHDR_reject) { errmsg = errtxt; if (i > 99 || j > 99) { sprintf(errmsg, "Axis number exceeds 99"); } else if (m > 99) { sprintf(errmsg, "Parameter number exceeds 99"); } else if (n > 999 || k > 999) { sprintf(errmsg, "Column number exceeds 999"); } BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } else if (ipass == 2 && npass == 3 && (keytype & BINTAB)) { /* Skip keyvalues that won't be inherited. */ BEGIN(FLUSH); } else if (ipass == 3 && (keytype & IMGHEAD)) { /* IMGHEAD keytypes are always dealt with on the second pass. */ BEGIN(FLUSH); } else if (vptr) { alts.icol = 0; alts.ialt = 0; voff = (char *)vptr - (char *)(&wcstem); if (valtype == INTEGER) { BEGIN(INTEGER_VAL); } else if (valtype == FLOAT) { BEGIN(FLOAT_VAL); } else if (valtype == STRING) { BEGIN(STRING_VAL); } else { errmsg = errtxt; sprintf(errmsg, "Internal parser ERROR, bad data type: %d", valtype); BEGIN(ERROR); } } else { errmsg = "Internal parser ERROR, null pointer"; BEGIN(ERROR); } } . { errmsg = "Invalid KEYWORD = VALUE syntax"; BEGIN(ERROR); } {INTEGER} { if (ipass == 1) { /* Do first-pass bookkeeping. */ wcsbth_pass1(keytype, i, j, n, k, a, ptype, &alts); BEGIN(FLUSH); } else { /* Update each coordinate representation. */ while ((wcsp = wcsbth_idx(*wcs, &alts, keytype, n, a))) { wptr = (void *)((char *)wcsp + voff); /* Read the keyvalue. */ if (special) { special(wptr); } else { sscanf(yytext, "%d", (int *)wptr); } } BEGIN(COMMENT); } } . { errmsg = "An integer value was expected"; BEGIN(ERROR); } {FLOAT} { if (ipass == 1) { /* Do first-pass bookkeeping. */ wcsbth_pass1(keytype, i, j, n, k, a, ptype, &alts); BEGIN(FLUSH); } else { /* Update each coordinate representation. */ while ((wcsp = wcsbth_idx(*wcs, &alts, keytype, n, a))) { wptr = (void *)((char *)wcsp + voff); /* Apply keyword parameterization. */ if (ptype == 'v') { ipx = wcsp->npv++; wcsp->pv[ipx].i = i; wcsp->pv[ipx].m = m; wptr = &(wcsp->pv[ipx].value); } else if (j) { /* Is the de-reference necessary? */ wptr = *((double **)wptr) + (i - 1)*(wcsp->naxis) + (j - 1); } else if (i) { wptr = *((double **)wptr) + (i - 1); } /* Read the keyvalue. */ if (special) { special(wptr); } else { sscanf(yytext, "%lf", (double *)wptr); } /* Flag the presence of PC, or CD and/or CROTA. */ if (altlin) { wcsp->altlin |= altlin; altlin = 0; } } BEGIN(COMMENT); } } . { errmsg = "A floating-point value was expected"; BEGIN(ERROR); } {STRING} { if (ipass == 1) { /* Do first-pass bookkeeping. */ wcsbth_pass1(keytype, i, j, n, k, a, ptype, &alts); BEGIN(FLUSH); } else { /* Update each coordinate representation. */ while ((wcsp = wcsbth_idx(*wcs, &alts, keytype, n, a))) { wptr = (void *)((char *)wcsp + voff); /* Apply keyword parameterization. */ if (ptype == 's') { ipx = wcsp->nps++; wcsp->ps[ipx].i = i; wcsp->ps[ipx].m = m; wptr = wcsp->ps[ipx].value; } else if (j) { wptr = *((char (**)[72])wptr) + (i - 1)*(wcsp->naxis) + (j - 1); } else if (i) { wptr = *((char (**)[72])wptr) + (i - 1); } /* Read the keyvalue. */ cptr = (char *)wptr; strcpy(cptr, yytext+1); /* Squeeze out repeated quotes. */ ix = 0; for (jx = 0; jx < 72; jx++) { if (ix < jx) { cptr[ix] = cptr[jx]; } if (cptr[jx] == '\0') { if (ix) cptr[ix-1] = '\0'; break; } else if (cptr[jx] == '\'' && cptr[jx+1] == '\'') { jx++; } ix++; } } BEGIN(COMMENT); } } . { errmsg = "A string value was expected"; BEGIN(ERROR); } " "*\/.* | " "* { BEGIN(FLUSH); } . { errmsg = "Malformed keycomment"; BEGIN(ERROR); } .* { if (ipass == npass) { if (ctrl < 0) { /* Preserve discards. */ if (hptr < wcsbth_hdr-80) { strncpy(hptr, wcsbth_hdr-80, 80); } hptr += 80; } else if (ctrl > 2) { fprintf(stderr, "%.80s\n Discarded.\n", wcsbth_hdr-80); } } BEGIN(FLUSH); } .* { (*nreject)++; if (ipass == npass) { if (ctrl == -1) { if (hptr < wcsbth_hdr-80) { /* Preserve rejects. */ strncpy(hptr, wcsbth_hdr-80, 80); } hptr += 80; } if (abs(ctrl) > 1) { fprintf(stderr, "%.80s\n%4d: %s.\n", wcsbth_hdr-80, *nreject, errmsg); } } BEGIN(FLUSH); } .*\n { /* Throw away the rest of the line and reset for the next one. */ i = j = 0; n = k = 0; m = 0; a = ' '; keytype = 0; valtype = -1; vptr = 0x0; altlin = 0; ptype = ' '; special = 0x0; BEGIN(INITIAL); } <> { /* End-of-input. */ if (ipass == 1) { if ((status = wcsbth_init1(&alts, nwcs, wcs)) || *nwcs == 0) { yylex_destroy(); return status; } if (alts.imgherit) npass = 3; if (abs(ctrl) > 2) { if (*nwcs == 1) { fprintf(stderr, "Found one coordinate representation.\n"); } else { fprintf(stderr, "Found %d coordinate representations.\n", *nwcs); } } } if (ipass++ < npass) { wcsbth_hdr = header; wcsbth_nkeyrec = nkeyrec; *nreject = 0; i = j = 0; k = n = 0; m = 0; a = ' '; keytype = 0; valtype = -1; vptr = 0x0; altlin = 0; ptype = ' '; special = 0x0; yyrestart(yyin); } else { yylex_destroy(); if (ctrl < 0) { *hptr = '\0'; } else if (ctrl == 1) { fprintf(stderr, "%d WCS keyrecords were rejected.\n", *nreject); } return wcsbth_final(&alts, nwcs, wcs); } } %% /*---------------------------------------------------------------------------- * Perform first-pass tasks: * * 1) Count the number of coordinate axes in each of the 27 possible alternate * image-header coordinate representations. Also count the number of PVi_ma * and PSi_ma keywords in each representation. * * 2) Determine the number of binary table columns that have an image array * with a coordinate representation (up to 999), and count the number of * coordinate axes in each of the 27 possible alternates. Also count the * number of iVn_ma and iSn_ma keywords in each representation. * * 3) Determine the number of alternate pixel list coordinate representations * (up to 27) and the table columns associated with each. Also count the * number of TVn_ma and TSn_ma keywords in each representation. * * In the first pass alts->arridx[icol][27] is used to determine the number of * axes in each of 27 possible image-header coordinate descriptions (icol == 0) * and each of the 27 possible coordinate representations for an image array in * each column. * * The elements of alts->pixlist[icol] are used as bit arrays to flag which of * the 27 possible pixel list coordinate representations are associated with * each table column. *---------------------------------------------------------------------------*/ int wcsbth_pass1( int keytype, int i, int j, int n, int k, char a, char ptype, struct wcsbth_alts *alts) { int ialt, icol, mask, ncol; if (a == 0) { /* Keywords such as DATE-OBS go along for the ride. */ return 0; } ncol = alts->ncol; /* Do we need to allocate memory for alts? */ if (alts->arridx == 0x0) { if (ncol == 0) { /* Can only happen if TFIELDS is missing or out-of-sequence. If n and k are both zero then we may be processing an image header so leave ncol alone - the array will be realloc'd later if required. */ if (n || k) { /* The header is mangled, assume the worst. */ ncol = 999; } } if (!(alts->arridx = calloc((1 + ncol)*27, sizeof(short int))) || !(alts->npv = calloc((1 + ncol)*27, sizeof(unsigned char))) || !(alts->nps = calloc((1 + ncol)*27, sizeof(unsigned char))) || !(alts->pixlist = calloc((1 + ncol), sizeof(unsigned int)))) { if (alts->arridx) free(alts->arridx); if (alts->npv) free(alts->npv); if (alts->nps) free(alts->nps); if (alts->pixlist) free(alts->pixlist); return 2; } alts->ncol = ncol; } else if (n > ncol || k > ncol) { /* Can only happen if TFIELDS or the WCS keyword is wrong; carry on. */ ncol = 999; if (!(alts->arridx = realloc(alts->arridx, 27*(1 + ncol)*sizeof(short int))) || !(alts->npv = realloc(alts->npv, 27*(1 + ncol)*sizeof(unsigned char))) || !(alts->nps = realloc(alts->nps, 27*(1 + ncol)*sizeof(unsigned char))) || !(alts->pixlist = realloc(alts->pixlist, (1 + ncol)*sizeof(unsigned int)))) { if (alts->arridx) free(alts->arridx); if (alts->npv) free(alts->npv); if (alts->nps) free(alts->nps); if (alts->pixlist) free(alts->pixlist); return 2; } /* Since realloc() doesn't initialize the extra memory. */ for (icol = (1 + alts->ncol); icol < (1 + ncol); icol++) { for (ialt = 0; ialt < 27; ialt++) { alts->arridx[icol][ialt] = 0; alts->npv[icol][ialt] = 0; alts->nps[icol][ialt] = 0; alts->pixlist[icol] = 0; } } alts->ncol = ncol; } ialt = 0; if (a != ' ') { ialt = a - 'A' + 1; } /* A BINTAB keytype such as LONPna, in conjunction with an IMGAXIS keytype causes a table column to be recognized as an image array. */ if (keytype & IMGHEAD || keytype & BIMGARR) { /* n == 0 is expected for IMGHEAD keywords. */ if (i == 0 && j == 0) { if (alts->arridx[n][ialt] == 0) { /* Flag that an auxiliary keyword was seen. */ alts->arridx[n][ialt] = -1; } } else { /* Record the maximum axis number found. */ if (alts->arridx[n][ialt] < i) { alts->arridx[n][ialt] = i; } if (alts->arridx[n][ialt] < j) { alts->arridx[n][ialt] = j; } } if (ptype == 'v') { alts->npv[n][ialt]++; } else if (ptype == 's') { alts->nps[n][ialt]++; } } /* BINTAB keytypes, which apply both to pixel lists as well as binary table image arrays, never contribute to recognizing a table column as a pixel list axis. A PIXLIST keytype is required for that. */ if (keytype == PIXLIST) { mask = 1 << ialt; /* n > 0 for PIXLIST keytypes. */ alts->pixlist[n] |= mask; if (k) alts->pixlist[k] |= mask; /* Used as a flag over all columns. */ alts->pixlist[0] |= mask; if (ptype == 'v') { alts->pixnpv[ialt]++; } else if (ptype == 's') { alts->pixnps[ialt]++; } } return 0; } /*---------------------------------------------------------------------------- * Perform initializations at the end of the first pass: * * 1) Determine the required number of wcsprm structs, allocate memory for * an array of them and initialize each one. *---------------------------------------------------------------------------*/ int wcsbth_init1( struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs) { int ialt, icol, inherit[27], ix, mask, ncol, npsmax, npvmax, status = 0; struct wcsprm *wcsp; if (alts->arridx == 0x0) { *nwcs = 0; return 0; } /* Determine the number of axes in each pixel list representation. */ ncol = alts->ncol; for (ialt = 0, mask = 1; ialt < 27; ialt++, mask <<= 1) { alts->pixidx[ialt] = 0; if (alts->pixlist[0] | mask) { for (icol = 1; icol <= ncol; icol++) { if (alts->pixlist[icol] & mask) { alts->pixidx[ialt]++; } } } } /* Find the total number of coordinate representations. */ *nwcs = 0; alts->imgherit = 0; for (ialt = 0; ialt < 27; ialt++) { inherit[ialt] = 0; for (icol = 1; icol <= ncol; icol++) { if (alts->arridx[icol][ialt] < 0) { /* No BIMGARR keytype but there's at least one BINTAB. */ if (alts->arridx[0][ialt] > 0) { /* There is an IMGAXIS keytype that we will inherit, so count this representation. */ alts->arridx[icol][ialt] = alts->arridx[0][ialt]; } else { alts->arridx[icol][ialt] = 0; } } if (alts->arridx[icol][ialt]) { if (alts->arridx[0][ialt]) { /* All IMGHEAD keywords are inherited for this ialt. */ inherit[ialt] = 1; if (alts->arridx[icol][ialt] < alts->arridx[0][ialt]) { /* The extra axes are also inherited. */ alts->arridx[icol][ialt] = alts->arridx[0][ialt]; } } (*nwcs)++; } } /* Count every "a" found in any IMGHEAD keyword... */ if (alts->arridx[0][ialt]) { if (inherit[ialt]) { /* ...but not if the IMGHEAD keywords will be inherited. */ alts->arridx[0][ialt] = 0; alts->imgherit = 1; } else { (*nwcs)++; } } /* We need a struct for every "a" found in a PIXLIST keyword. */ if (alts->pixidx[ialt]) { (*nwcs)++; } } if (*nwcs) { /* Allocate memory for the required number of wcsprm structs. */ if (!(*wcs = calloc(*nwcs, sizeof(struct wcsprm)))) { return 2; } /* Record the current values of NPVMAX and NPSMAX. */ npvmax = wcsnpv(-1); npsmax = wcsnps(-1); /* Initialize each wcsprm struct. */ wcsp = *wcs; *nwcs = 0; for (icol = 0; icol <= ncol; icol++) { for (ialt = 0; ialt < 27; ialt++) { if (alts->arridx[icol][ialt]) { /* Image-header representations that are not for inheritance (icol == 0) or binary table image array representations. */ wcsp->flag = -1; wcsnpv(alts->npv[icol][ialt]); wcsnps(alts->nps[icol][ialt]); if ((status = wcsini(1, (int)(alts->arridx[icol][ialt]), wcsp))) { wcsvfree(nwcs, wcs); break; } /* Record the alternate version code. */ if (ialt) { wcsp->alt[0] = 'A' + ialt - 1; } /* Record the table column number. */ wcsp->colnum = icol; /* On the second pass alts->arridx[icol][27] indexes the array of wcsprm structs. */ alts->arridx[icol][ialt] = (*nwcs)++; wcsp++; } else { /* Signal that this column has no WCS for this "a". */ alts->arridx[icol][ialt] = -1; } } } for (ialt = 0; ialt < 27; ialt++) { if (alts->pixidx[ialt]) { /* Pixel lists representations. */ wcsp->flag = -1; wcsnpv(alts->pixnpv[ialt]); wcsnps(alts->pixnps[ialt]); if ((status = wcsini(1, (int)(alts->pixidx[ialt]), wcsp))) { wcsvfree(nwcs, wcs); break; } /* Record the alternate version code. */ if (ialt) { wcsp->alt[0] = 'A' + ialt - 1; } /* Record the pixel list column numbers. */ mask = (1 << ialt); for (icol = 1, ix = 0; icol <= ncol; icol++) { if (alts->pixlist[icol] & mask) { wcsp->colax[ix++] = icol; } } /* alts->pixidx[] indexes the array of wcsprm structs. */ alts->pixidx[ialt] = (*nwcs)++; wcsp++; } else { /* Signal that this column is not a pixel list axis for this "a". */ alts->pixidx[ialt] = -1; } } /* Restore the original values of NPVMAX and NPSMAX. */ wcsnpv(npvmax); wcsnps(npsmax); } return status; } /*---------------------------------------------------------------------------- * Return a pointer to the next wcsprm struct for a particular column number * and alternate. *---------------------------------------------------------------------------*/ struct wcsprm *wcsbth_idx( struct wcsprm *wcs, struct wcsbth_alts *alts, int keytype, int n, char a) { const char as[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int iwcs; if (!wcs) return 0x0; iwcs = -1; for (; iwcs < 0 && alts->ialt < 27; alts->ialt++) { /* Note that a == 0 applies to every alternate, otherwise this loop simply determines the appropriate value of alts->ialt. */ if (a && a != as[alts->ialt]) continue; if (keytype & (IMGHEAD | BIMGARR)) { for (; iwcs < 0 && alts->icol <= alts->ncol; alts->icol++) { /* Image header keywords, n == 0, apply to all columns, otherwise this loop simply determines the appropriate value of alts->icol. */ if (n && n != alts->icol) continue; iwcs = alts->arridx[alts->icol][alts->ialt]; } /* Break out of the loop to stop alts->ialt from being incremented. */ if (iwcs >= 0) break; /* Start from scratch for the next alts->ialt. */ alts->icol = 0; } if (keytype & (IMGAUX | PIXLIST)) { iwcs = alts->pixidx[alts->ialt]; } } return (iwcs >= 0) ? (wcs + iwcs) : 0x0; } /*---------------------------------------------------------------------------- * Return the axis number associated with the specified column number in a * particular pixel list coordinate representation. *---------------------------------------------------------------------------*/ int wcsbth_colax( struct wcsprm *wcs, struct wcsbth_alts *alts, int n, char a) { int ix; struct wcsprm *wcsp; if (!wcs) return 0; wcsp = wcs; if (a != ' ') { wcsp += alts->pixidx[a-'A'+1]; } for (ix = 0; ix < wcsp->naxis; ix++) { if (wcsp->colax[ix] == n) { return ++ix; } } return 0; } /*---------------------------------------------------------------------------- * Interpret EPOCH keywords. *---------------------------------------------------------------------------*/ int wcsbth_epoch(void *wptr) { double *equinox; /* If EQUINOXa is currently undefined then set it from EPOCHa. */ equinox = (double *)wptr; if (undefined(*equinox)) { sscanf(yytext, "%lf", equinox); } return 0; } /*---------------------------------------------------------------------------- * Interpret VSOURCE keywords. *---------------------------------------------------------------------------*/ int wcsbth_vsource(void *wptr) { double beta, c = 299792458.0, vsource, *zsource; /* If ZSOURCEa is currently undefined then set it from VSOURCEa. */ zsource = (double *)wptr; if (undefined(*zsource)) { sscanf(yytext, "%lf", &vsource); /* Convert relativistic Doppler velocity to redshift. */ beta = vsource/c; *zsource = (1.0 + beta)/sqrt(1.0 - beta*beta) - 1.0; } return 0; } /*---------------------------------------------------------------------------- * Tie up loose ends. *---------------------------------------------------------------------------*/ int wcsbth_final( struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs) { int ialt, status; if (alts->arridx) free(alts->arridx); if (alts->npv) free(alts->npv); if (alts->nps) free(alts->nps); if (alts->pixlist) free(alts->pixlist); for (ialt = 0; ialt < *nwcs; ialt++) { /* Interpret -TAB header keywords. */ if ((status = wcstab(*wcs+ialt))) { wcsvfree(nwcs, wcs); return status; } } return 0; } pywcs-1.12/wcslib/C/wcserr.c0000644001153600020070000000733712310355626017776 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility Module author: Michael Droettboom http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcserr.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include #include "wcserr.h" #include "wcsprintf.h" static int wcserr_enabled = 0; /*--------------------------------------------------------------------------*/ int wcserr_enable(int enable) { return wcserr_enabled = (enable ? 1 : 0); } /*--------------------------------------------------------------------------*/ int wcserr_prt( const struct wcserr *err, const char *prefix) { if (!wcserr_enabled) { wcsprintf("Error messaging is not enabled, use wcserr_enable().\n"); return 2; } if (err == 0x0) { return 0; } if (err->status) { if (prefix == 0x0) prefix = ""; if (err->status > 0) { wcsprintf("%sERROR %d in %s() at line %d of file %s:\n%s%s.\n", prefix, err->status, err->function, err->line_no, err->file, prefix, err->msg); } else { /* An informative message only. */ wcsprintf("%sINFORMATIVE message from %s() at line %d of file " "%s:\n%s%s.\n", prefix, err->function, err->line_no, err->file, prefix, err->msg); } } return 0; } /*--------------------------------------------------------------------------*/ int wcserr_clear( struct wcserr **err) { if (*err) free(*err); *err = 0x0; return 0; } /*--------------------------------------------------------------------------*/ int wcserr_set( struct wcserr **err, int status, const char *function, const char *file, int line_no, const char *format, ...) { va_list argp; if (!wcserr_enabled) return status; if (err == 0x0) { return status; } if (status) { if (*err == 0x0) { *err = calloc(1, sizeof(struct wcserr)); } (*err)->status = status; (*err)->function = function; (*err)->file = file; (*err)->line_no = line_no; va_start(argp, format); vsnprintf((*err)->msg, WCSERR_MSG_LENGTH, format, argp); va_end(argp); } else { if (*err) free(*err); *err = 0x0; } return status; } /*--------------------------------------------------------------------------*/ int wcserr_copy( const struct wcserr *src, struct wcserr *dst) { if (src == 0x0) { if (dst) { memset(dst, 0, sizeof(struct wcserr)); } return 0; } if (dst) { memcpy(dst, src, sizeof(struct wcserr)); } return src->status; } pywcs-1.12/wcslib/C/wcserr.h0000644001153600020070000002174212310355626017777 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility Module author: Michael Droettboom http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcserr.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * Summary of the wcserr routines * ------------------------------ * Most of the structs in WCSLIB contain a pointer to a wcserr struct as a * member. Functions in WCSLIB that return an error status code can also * allocate and set a detailed error message in this struct which also * identifies the function, source file, and line number where the error * occurred. * * For example: * = struct prjprm prj; = wcserr_enable(1); = if (prjini(&prj)) { = // Print the error message to stderr. = wcsprintf_set(stderr); = wcserr_prt(prj.err, 0x0); = } * * A number of utility functions used in managing the wcserr struct are for * internal use only. They are documented here solely as an aid to * understanding the code. They are not intended for external use - the API * may change without notice! * * * wcserr struct - Error message handling * -------------------------------------- * The wcserr struct contains the numeric error code, a textual description of * the error, and information about the function, source file, and line number * where the error was generated. * * int status * Numeric status code associated with the error, the meaning of which * depends on the function that generated it. See the documentation for * the particular function. * * int line_no * Line number where the error occurred as given by the __LINE__ * preprocessor macro. * * const char *function * Name of the function where the error occurred. * * const char *file * Name of the source file where the error occurred as given by the * __FILE__ preprocessor macro. * * char msg[WCSERR_MSG_LENGTH] * Informative error message. * * * wcserr_enable() - Enable/disable error messaging * ------------------------------------------------ * wcserr_enable() enables or disables wcserr error messaging. By default it * is disabled. * * PLEASE NOTE: This function is not thread-safe. * * Given: * enable int If true (non-zero), enable error messaging, else * disable it. * * Function return value: * int Status return value: * 0: Error messaging is disabled. * 1: Error messaging is enabled. * * * wcserr_prt() - Print a wcserr struct * ------------------------------------ * wcserr_prt() prints the error message (if any) contained in a wcserr struct. * It uses the wcsprintf() functions. * * Given: * err const struct wcserr* * The error object. If NULL, nothing is printed. * * prefix const char * * If non-NULL, each output line will be prefixed with * this string. * * Function return value: * int Status return value: * 0: Success. * 2: Error messaging is not enabled. * * * wcserr_clear() - Clear a wcserr struct * -------------------------------------- * wcserr_clear() clears the error (if any) contained in a wcserr struct. * * Given and returned: * err struct wcserr** * The error object. If NULL, nothing is done. Set to * NULL on return. * * Function return value: * int Status return value: * 0: Success. * * * wcserr_set() - Fill in the contents of an error object * ------------------------------------------------------ * INTERNAL USE ONLY. * * wcserr_set() fills a wcserr struct with information about an error. * * A convenience macro, WCSERR_SET, provides the source file and line number * information automatically. * * Given and returned: * err struct wcserr** * Error object. * * If err is NULL, returns the status code given without * setting an error message. * * If *err is NULL, allocates memory for a wcserr struct * (provided that status is non-zero). * * Given: * status int Numeric status code to set. If 0, then *err will be * deleted and *err will be returned as NULL. * * function const char * * Name of the function generating the error. This * must point to a constant string, i.e. in the * initialized read-only data section ("data") of the * executable. * * file const char * * Name of the source file generating the error. This * must point to a constant string, i.e. in the * initialized read-only data section ("data") of the * executable such as given by the __FILE__ preprocessor * macro. * * line_no int Line number in the source file generating the error * such as given by the __LINE__ preprocessor macro. * * format const char * * Format string of the error message. May contain * printf-style %-formatting codes. * * ... mixed The remaining variable arguments are applied (like * printf) to the format string to generate the error * message. * * Function return value: * int The status return code passed in. * * * wcserr_copy() - Copy an error object * ------------------------------------ * INTERNAL USE ONLY. * * wcserr_copy() copies one error object to another. Use of this function * should be avoided in general since the function, source file, and line * number information copied to the destination may lose its context. * * Given: * src const struct wcserr* * Source error object. If src is NULL, dst is cleared. * * Returned: * dst struct wcserr* * Destination error object. If NULL, no copy is made. * * Function return value: * int Numeric status code of the source error object. * * * WCSERR_SET() macro - Fill in the contents of an error object * ------------------------------------------------------------ * INTERNAL USE ONLY. * * WCSERR_SET() is a preprocessor macro that helps to fill in the argument list * of wcserr_set(). It takes status as an argument of its own and provides the * name of the source file and the line number at the point where invoked. It * assumes that the err and function arguments of wcserr_set() will be provided * by variables of the same names. * *===========================================================================*/ #ifndef WCSLIB_WCSERR #define WCSLIB_WCSERR #define WCSERR_MSG_LENGTH 160 struct wcserr { int status; /* Status code for the error. */ int line_no; /* Line number where the error occurred. */ const char *function; /* Function name. */ const char *file; /* Source file name. */ char msg[WCSERR_MSG_LENGTH]; /* Informative error message. */ }; /* Size of the wcserr struct in int units, used by the Fortran wrappers. */ #define ERRLEN (sizeof(struct wcserr)/sizeof(int)) int wcserr_enable(int enable); int wcserr_prt(const struct wcserr *err, const char *prefix); int wcserr_clear(struct wcserr **err); /* INTERNAL USE ONLY -------------------------------------------------------*/ int wcserr_set(struct wcserr **err, int status, const char *function, const char *file, int line_no, const char *format, ...); int wcserr_copy(const struct wcserr *src, struct wcserr *dst); /* Convenience macro for invoking wcserr_set(). */ #define WCSERR_SET(status) err, status, function, __FILE__, __LINE__ #endif /* WSCLIB_WCSERR */ pywcs-1.12/wcslib/C/wcsfix.c0000644001153600020070000005125612310355626017773 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsfix.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include #include "wcserr.h" #include "wcsmath.h" #include "wcsutil.h" #include "sph.h" #include "wcs.h" #include "wcsunits.h" #include "wcsfix.h" extern const int WCSSET; /* Maximum number of coordinate axes that can be handled. */ #define NMAX 16 /* Map status return value to message. */ const char *wcsfix_errmsg[] = { "Success", "Null wcsprm pointer passed", "Memory allocation failed", "Linear transformation matrix is singular", "Inconsistent or unrecognized coordinate axis types", "Invalid parameter value", "Invalid coordinate transformation parameters", "Ill-conditioned coordinate transformation parameters", "All of the corner pixel coordinates are invalid", "Could not determine reference pixel coordinate", "Could not determine reference pixel value"}; /* Convenience macro for invoking wcserr_set(). */ #define WCSFIX_ERRMSG(status) WCSERR_SET(status), wcsfix_errmsg[status] /*--------------------------------------------------------------------------*/ int wcsfix(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[]) { int status = 0; if ((stat[CDFIX] = cdfix(wcs)) > 0) { status = 1; } if ((stat[DATFIX] = datfix(wcs)) > 0) { status = 1; } if ((stat[UNITFIX] = unitfix(ctrl, wcs)) > 0) { status = 1; } if ((stat[SPCFIX] = spcfix(wcs)) > 0) { status = 1; } if ((stat[CELFIX] = celfix(wcs)) > 0) { status = 1; } if ((stat[CYLFIX] = cylfix(naxis, wcs)) > 0) { status = 1; } return status; } /*--------------------------------------------------------------------------*/ int wcsfixi(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[], struct wcserr info[]) { int ifix, status = 0; struct wcserr err; /* Handling the status values returned from the sub-fixers is trickier than it might seem, especially considering that wcs->err may contain an error status on input which should be preserved if no translation errors occur. The simplest way seems to be to save a copy of wcs->err and clear it before each sub-fixer. The last real error to occur, excluding informative messages, is the one returned. To get informative messages from spcfix() it must precede celfix() and cylfix(). The latter call wcsset() which also translates AIPS-convention spectral axes. */ wcserr_copy(wcs->err, &err); for (ifix = CDFIX; ifix < NWCSFIX; ifix++) { /* Clear (delete) wcs->err. */ wcserr_clear(&(wcs->err)); switch (ifix) { case CDFIX: stat[ifix] = cdfix(wcs); break; case DATFIX: stat[ifix] = datfix(wcs); break; case UNITFIX: stat[ifix] = unitfix(ctrl, wcs); break; case SPCFIX: stat[ifix] = spcfix(wcs); break; case CELFIX: stat[ifix] = celfix(wcs); break; case CYLFIX: stat[ifix] = cylfix(naxis, wcs); break; default: continue; } if (stat[ifix] == FIXERR_NO_CHANGE) { /* No change => no message. */ wcserr_copy(0x0, info+ifix); } else if (stat[ifix] == FIXERR_SUCCESS) { /* Successful translation, but there may be an informative message. */ if (wcs->err && wcs->err->status < 0) { wcserr_copy(wcs->err, info+ifix); } else { wcserr_copy(0x0, info+ifix); } } else { /* An informative message or error message. */ wcserr_copy(wcs->err, info+ifix); if ((status = (stat[ifix] > 0))) { /* It was an error, replace the previous one. */ wcserr_copy(wcs->err, &err); } } } /* Restore the last error to occur. */ if (err.status) { wcserr_copy(&err, wcs->err); } else { wcserr_clear(&(wcs->err)); } return status; } /*--------------------------------------------------------------------------*/ int cdfix(struct wcsprm *wcs) { int i, k, naxis, status = FIXERR_NO_CHANGE; double *cd; if (wcs == 0x0) return FIXERR_NULL_POINTER; if ((wcs->altlin & 1) || !(wcs->altlin & 2)) { /* Either we have PCi_ja or there are no CDi_ja. */ return FIXERR_NO_CHANGE; } naxis = wcs->naxis; status = FIXERR_NO_CHANGE; for (i = 0; i < naxis; i++) { /* Row of zeros? */ cd = wcs->cd + i * naxis; for (k = 0; k < naxis; k++, cd++) { if (*cd != 0.0) goto next; } /* Column of zeros? */ cd = wcs->cd + i; for (k = 0; k < naxis; k++, cd += naxis) { if (*cd != 0.0) goto next; } cd = wcs->cd + i * (naxis + 1); *cd = 1.0; status = FIXERR_SUCCESS; next: ; } return status; } /*--------------------------------------------------------------------------*/ int datfix(struct wcsprm *wcs) { static const char *function = "datfix"; char orig_dateobs[72]; char *dateobs; int day, dd, hour = 0, jd, minute = 0, month, msec, n4, year; double mjdobs, sec = 0.0, t; struct wcserr **err; if (wcs == 0x0) return FIXERR_NULL_POINTER; err = &(wcs->err); dateobs = wcs->dateobs; strncpy(orig_dateobs, dateobs, 72); if (dateobs[0] == '\0') { if (undefined(wcs->mjdobs)) { /* No date information was provided. */ return FIXERR_NO_CHANGE; } else { /* Calendar date from MJD. */ jd = 2400001 + (int)wcs->mjdobs; n4 = 4*(jd + ((2*((4*jd - 17918)/146097)*3)/4 + 1)/2 - 37); dd = 10*(((n4-237)%1461)/4) + 5; year = n4/1461 - 4712; month = (2 + dd/306)%12 + 1; day = (dd%306)/10 + 1; sprintf(dateobs, "%.4d-%.2d-%.2d", year, month, day); /* Write time part only if non-zero. */ if ((t = wcs->mjdobs - (int)wcs->mjdobs) > 0.0) { t *= 24.0; hour = (int)t; t = 60.0 * (t - hour); minute = (int)t; sec = 60.0 * (t - minute); /* Round to 1ms. */ dd = 60000*(60*hour + minute) + (int)(1000*(sec+0.0005)); hour = dd / 3600000; dd -= 3600000 * hour; minute = dd / 60000; msec = dd - 60000 * minute; sprintf(dateobs+10, "T%.2d:%.2d:%.2d", hour, minute, msec/1000); /* Write fractions of a second only if non-zero. */ if (msec%1000) { sprintf(dateobs+19, ".%.3d", msec%1000); } } } } else { if (strlen(dateobs) < 8) { /* Can't be a valid date. */ return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), "Invalid parameter value: date string too short '%s'", dateobs); } /* Identify the date format. */ if (dateobs[4] == '-' && dateobs[7] == '-') { /* Standard year-2000 form: CCYY-MM-DD[Thh:mm:ss[.sss...]] */ if (sscanf(dateobs, "%4d-%2d-%2d", &year, &month, &day) < 3) { return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), "Invalid parameter value: invalid date '%s'", dateobs); } if (dateobs[10] == 'T') { if (sscanf(dateobs+11, "%2d:%2d:%lf", &hour, &minute, &sec) < 3) { return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), "Invalid parameter value: invalid time '%s'", dateobs+11); } } else if (dateobs[10] == ' ') { hour = 0; minute = 0; sec = 0.0; if (sscanf(dateobs+11, "%2d:%2d:%lf", &hour, &minute, &sec) == 3) { dateobs[10] = 'T'; } else { sprintf(dateobs+10, "T%.2d:%.2d:%04.1f", hour, minute, sec); } } } else if (dateobs[4] == '/' && dateobs[7] == '/') { /* Also allow CCYY/MM/DD[Thh:mm:ss[.sss...]] */ if (sscanf(dateobs, "%4d/%2d/%2d", &year, &month, &day) < 3) { return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), "Invalid parameter value: invalid date '%s'", dateobs); } if (dateobs[10] == 'T') { if (sscanf(dateobs+11, "%2d:%2d:%lf", &hour, &minute, &sec) < 3) { return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), "Invalid parameter value: invalid time '%s'", dateobs+11); } } else if (dateobs[10] == ' ') { hour = 0; minute = 0; sec = 0.0; if (sscanf(dateobs+11, "%2d:%2d:%lf", &hour, &minute, &sec) == 3) { dateobs[10] = 'T'; } else { sprintf(dateobs+10, "T%.2d:%.2d:%04.1f", hour, minute, sec); } } /* Looks ok, fix it up. */ dateobs[4] = '-'; dateobs[7] = '-'; } else { if (dateobs[2] == '/' && dateobs[5] == '/') { /* Old format date: DD/MM/YY, also allowing DD/MM/CCYY. */ if (sscanf(dateobs, "%2d/%2d/%4d", &day, &month, &year) < 3) { return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), "Invalid parameter value: invalid date '%s'", dateobs); } } else if (dateobs[2] == '-' && dateobs[5] == '-') { /* Also recognize DD-MM-YY and DD-MM-CCYY */ if (sscanf(dateobs, "%2d-%2d-%4d", &day, &month, &year) < 3) { return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), "Invalid parameter value: invalid date '%s'", dateobs); } } else { /* Not a valid date format. */ return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), "Invalid parameter value: invalid date '%s'", dateobs); } if (year < 100) year += 1900; /* Doesn't have a time. */ sprintf(dateobs, "%.4d-%.2d-%.2d", year, month, day); } /* Compute MJD. */ mjdobs = (double)((1461*(year - (12-month)/10 + 4712))/4 + (306*((month+9)%12) + 5)/10 - (3*((year - (12-month)/10 + 4900)/100))/4 + day - 2399904) + (hour + (minute + sec/60.0)/60.0)/24.0; if (undefined(wcs->mjdobs)) { wcs->mjdobs = mjdobs; } else { /* Check for consistency. */ if (fabs(mjdobs - wcs->mjdobs) > 0.5) { return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), "Invalid parameter value: inconsistent date '%s'", dateobs); } } } if (strncmp(orig_dateobs, dateobs, 72)) { wcserr_set(WCSERR_SET(FIXERR_DATE_FIX), "Changed '%s' to '%s'", orig_dateobs, dateobs); return FIXERR_SUCCESS; } return FIXERR_NO_CHANGE; } /*--------------------------------------------------------------------------*/ int unitfix(int ctrl, struct wcsprm *wcs) { int i, k, status = FIXERR_NO_CHANGE; char orig_unit[80], msg[WCSERR_MSG_LENGTH]; const char *function = "unitfix"; struct wcserr **err; if (wcs == 0x0) return FIXERR_NULL_POINTER; err = &(wcs->err); strcpy(msg, "Changed units: "); for (i = 0; i < wcs->naxis; i++) { strncpy(orig_unit, wcs->cunit[i], 80); if (wcsutrne(ctrl, wcs->cunit[i], &(wcs->err)) == 0) { k = strlen(msg); sprintf(msg+k, "'%s' -> '%s', ", orig_unit, wcs->cunit[i]); status = FIXERR_UNITS_ALIAS; } } if (status == FIXERR_UNITS_ALIAS) { k = strlen(msg) - 2; msg[k] = '\0'; wcserr_set(WCSERR_SET(FIXERR_UNITS_ALIAS), msg); status = FIXERR_SUCCESS; } return status; } /*--------------------------------------------------------------------------*/ int spcfix(struct wcsprm *wcs) { static const char *function = "spcfix"; char ctype[9], specsys[9]; int i, status; struct wcserr **err; if (wcs == 0x0) return FIXERR_NULL_POINTER; err = &(wcs->err); for (i = 0; i < wcs->naxis; i++) { /* Translate an AIPS-convention spectral type if present. */ status = spcaips(wcs->ctype[i], wcs->velref, ctype, specsys); if (status == 0) { /* An AIPS type was found but it may match what we already have. */ status = FIXERR_NO_CHANGE; /* Was specsys translated? */ if (wcs->specsys[0] == '\0' && *specsys) { strncpy(wcs->specsys, specsys, 9); wcserr_set(WCSERR_SET(FIXERR_SPC_UPDATE), "Changed SPECSYS to '%s'", specsys); status = FIXERR_SUCCESS; } /* Was ctype translated? Have to null-fill for comparing them. */ wcsutil_null_fill(9, wcs->ctype[i]); if (strncmp(wcs->ctype[i], ctype, 9)) { /* ctype was translated... */ if (status == FIXERR_SUCCESS) { /* ...and specsys was also. */ wcserr_set(WCSERR_SET(FIXERR_SPC_UPDATE), "Changed CTYPE%d from '%s' to '%s', and SPECSYS to '%s'", i+1, wcs->ctype[i], ctype, wcs->specsys); } else { wcserr_set(WCSERR_SET(FIXERR_SPC_UPDATE), "Changed CTYPE%d from '%s' to '%s'", i+1, wcs->ctype[i], ctype); status = FIXERR_SUCCESS; } strncpy(wcs->ctype[i], ctype, 9); } /* Tidy up. */ if (status == FIXERR_SUCCESS) { wcsutil_null_fill(72, wcs->ctype[i]); wcsutil_null_fill(72, wcs->specsys); } /* No need to check for others, wcsset() will fail if so. */ return status; } else if (status == SPCERR_BAD_SPEC_PARAMS) { /* An AIPS spectral type was found but with invalid velref. */ return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), "Invalid parameter value: velref = %d", wcs->velref); } } return FIXERR_NO_CHANGE; } /*--------------------------------------------------------------------------*/ int celfix(struct wcsprm *wcs) { static const char *function = "celfix"; int k, status; struct celprm *wcscel = &(wcs->cel); struct prjprm *wcsprj = &(wcscel->prj); struct wcserr **err; if (wcs == 0x0) return FIXERR_NULL_POINTER; err = &(wcs->err); /* Initialize if required. */ if (wcs->flag != WCSSET) { if ((status = wcsset(wcs))) return status; } /* Was an NCP or GLS projection code translated? */ if (wcs->lat >= 0) { /* Check ctype. */ if (strcmp(wcs->ctype[wcs->lat]+5, "NCP") == 0) { strcpy(wcs->ctype[wcs->lng]+5, "SIN"); strcpy(wcs->ctype[wcs->lat]+5, "SIN"); if (wcs->npvmax < wcs->npv + 2) { /* Allocate space for two more PVi_ja keyvalues. */ if (wcs->m_flag == WCSSET && wcs->pv == wcs->m_pv) { if (!(wcs->pv = calloc(wcs->npv+2, sizeof(struct pvcard)))) { wcs->pv = wcs->m_pv; return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); } wcs->npvmax = wcs->npv + 2; wcs->m_flag = WCSSET; for (k = 0; k < wcs->npv; k++) { wcs->pv[k] = wcs->m_pv[k]; } if (wcs->m_pv) free(wcs->m_pv); wcs->m_pv = wcs->pv; } else { return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); } } wcs->pv[wcs->npv].i = wcs->lat + 1; wcs->pv[wcs->npv].m = 1; wcs->pv[wcs->npv].value = wcsprj->pv[1]; (wcs->npv)++; wcs->pv[wcs->npv].i = wcs->lat + 1; wcs->pv[wcs->npv].m = 2; wcs->pv[wcs->npv].value = wcsprj->pv[2]; (wcs->npv)++; return FIXERR_SUCCESS; } else if (strcmp(wcs->ctype[wcs->lat]+5, "GLS") == 0) { strcpy(wcs->ctype[wcs->lng]+5, "SFL"); strcpy(wcs->ctype[wcs->lat]+5, "SFL"); if (wcs->crval[wcs->lng] != 0.0 || wcs->crval[wcs->lat] != 0.0) { /* In the AIPS convention, setting the reference longitude and * latitude for GLS does not create an oblique graticule. A non-zero * reference longitude introduces an offset in longitude in the normal * way, whereas a non-zero reference latitude simply translates the * reference point (i.e. the map as a whole) to that latitude. This * might be effected by adjusting CRPIXja but that is complicated by * the linear transformation and instead is accomplished here by * setting theta_0. */ if (wcs->npvmax < wcs->npv + 2) { /* Allocate space for three more PVi_ja keyvalues. */ if (wcs->m_flag == WCSSET && wcs->pv == wcs->m_pv) { if (!(wcs->pv = calloc(wcs->npv+3, sizeof(struct pvcard)))) { wcs->pv = wcs->m_pv; return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); } wcs->npvmax = wcs->npv + 3; wcs->m_flag = WCSSET; for (k = 0; k < wcs->npv; k++) { wcs->pv[k] = wcs->m_pv[k]; } if (wcs->m_pv) free(wcs->m_pv); wcs->m_pv = wcs->pv; } else { return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); } } wcs->pv[wcs->npv].i = wcs->lng + 1; wcs->pv[wcs->npv].m = 0; wcs->pv[wcs->npv].value = 1.0; (wcs->npv)++; /* Note that the reference longitude is still zero. */ wcs->pv[wcs->npv].i = wcs->lng + 1; wcs->pv[wcs->npv].m = 1; wcs->pv[wcs->npv].value = 0.0; (wcs->npv)++; wcs->pv[wcs->npv].i = wcs->lng + 1; wcs->pv[wcs->npv].m = 2; wcs->pv[wcs->npv].value = wcs->crval[wcs->lat]; (wcs->npv)++; } return FIXERR_SUCCESS; } } return FIXERR_NO_CHANGE; } /*--------------------------------------------------------------------------*/ int cylfix(const int naxis[], struct wcsprm *wcs) { static const char *function = "cylfix"; unsigned short icnr, indx[NMAX], ncnr; int j, k, stat[4], status; double img[4][NMAX], lat, lng, phi[4], phi0, phimax, phimin, pix[4][NMAX], *pixj, theta[4], theta0, world[4][NMAX], x, y; struct wcserr **err; if (naxis == 0x0) return FIXERR_NO_CHANGE; if (wcs == 0x0) return FIXERR_NULL_POINTER; err = &(wcs->err); /* Initialize if required. */ if (wcs->flag != WCSSET) { if ((status = wcsset(wcs))) return status; } /* Check that we have a cylindrical projection. */ if (wcs->cel.prj.category != CYLINDRICAL) return FIXERR_NO_CHANGE; if (wcs->naxis < 2) return FIXERR_NO_CHANGE; /* Compute the native longitude in each corner of the image. */ ncnr = 1 << wcs->naxis; for (k = 0; k < NMAX; k++) { indx[k] = 1 << k; } phimin = 1.0e99; phimax = -1.0e99; for (icnr = 0; icnr < ncnr;) { /* Do four corners at a time. */ for (j = 0; j < 4; j++, icnr++) { pixj = pix[j]; for (k = 0; k < wcs->naxis; k++) { if (icnr & indx[k]) { *(pixj++) = naxis[k] + 0.5; } else { *(pixj++) = 0.5; } } } if (!(status = wcsp2s(wcs, 4, NMAX, pix[0], img[0], phi, theta, world[0], stat))) { for (j = 0; j < 4; j++) { if (phi[j] < phimin) phimin = phi[j]; if (phi[j] > phimax) phimax = phi[j]; } } } if (phimin > phimax) return status; /* Any changes needed? */ if (phimin >= -180.0 && phimax <= 180.0) return FIXERR_NO_CHANGE; /* Compute the new reference pixel coordinates. */ phi0 = (phimin + phimax) / 2.0; theta0 = 0.0; if ((status = prjs2x(&(wcs->cel.prj), 1, 1, 1, 1, &phi0, &theta0, &x, &y, stat))) { if (status == PRJERR_BAD_PARAM) { return wcserr_set(WCSFIX_ERRMSG(FIXERR_BAD_PARAM)); } return wcserr_set(WCSFIX_ERRMSG(FIXERR_NO_REF_PIX_COORD)); } for (k = 0; k < wcs->naxis; k++) { img[0][k] = 0.0; } img[0][wcs->lng] = x; img[0][wcs->lat] = y; if ((status = linx2p(&(wcs->lin), 1, 0, img[0], pix[0]))) { return wcserr_set(WCSFIX_ERRMSG(status)); } /* Compute celestial coordinates at the new reference pixel. */ if ((status = wcsp2s(wcs, 1, 0, pix[0], img[0], phi, theta, world[0], stat))) { if (wcs->err->status == WCSERR_BAD_PIX) { wcs->err->status = FIXERR_NO_REF_PIX_COORD; } return wcs->err->status; } /* Compute native coordinates of the celestial pole. */ lng = 0.0; lat = 90.0; (void)sphs2x(wcs->cel.euler, 1, 1, 1, 1, &lng, &lat, phi, theta); wcs->crpix[wcs->lng] = pix[0][wcs->lng]; wcs->crpix[wcs->lat] = pix[0][wcs->lat]; wcs->crval[wcs->lng] = world[0][wcs->lng]; wcs->crval[wcs->lat] = world[0][wcs->lat]; wcs->lonpole = phi[0] - phi0; return wcsset(wcs); } pywcs-1.12/wcslib/C/wcsfix.h0000644001153600020070000004105712310355626017776 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsfix.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the FITS World Coordinate System * (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * "Representations of celestial coordinates in FITS", * Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (Paper II) * * "Representations of spectral coordinates in FITS", * Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. * 2006, A&A, 446, 747 (Paper III) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the wcsfix routines * ------------------------------ * Routines in this suite identify and translate various forms of non-standard * construct that are known to occur in FITS WCS headers. These range from the * translation of non-standard values for standard WCS keywords, to the repair * of malformed coordinate representations. * * Non-standard keyvalues: * ----------------------- * AIPS-convention celestial projection types, NCP and GLS, and spectral * types, 'FREQ-LSR', 'FELO-HEL', etc., set in CTYPEia are translated * on-the-fly by wcsset() but without modifying the relevant ctype[], pv[] or * specsys members of the wcsprm struct. That is, only the information * extracted from ctype[] is translated when wcsset() fills in wcsprm::cel * (celprm struct) or wcsprm::spc (spcprm struct). * * On the other hand, these routines do change the values of wcsprm::ctype[], * wcsprm::pv[], wcsprm::specsys and other wcsprm struct members as * appropriate to produce the same result as if the FITS header itself had * been translated. * * Auxiliary WCS header information not used directly by WCSLIB may also be * translated. For example, the older DATE-OBS date format (wcsprm::dateobs) * is recast to year-2000 standard form, and MJD-OBS (wcsprm::mjdobs) will be * deduced from it if not already set. * * Certain combinations of keyvalues that result in malformed coordinate * systems, as described in Sect. 7.3.4 of Paper I, may also be repaired. * These are handled by cylfix(). * * Non-standard keywords: * ---------------------- * The AIPS-convention CROTAn keywords are recognized as quasi-standard and * as such are accomodated by the wcsprm::crota[] and translated to * wcsprm::pc[][] by wcsset(). These are not dealt with here, nor are any * other non-standard keywords since these routines work only on the contents * of a wcsprm struct and do not deal with FITS headers per se. In * particular, they do not identify or translate CD00i00j, PC00i00j, PROJPn, * EPOCH, VELREF or VSOURCEa keywords; this may be done by the FITS WCS * header parser supplied with WCSLIB, refer to wcshdr.h. * * wcsfix() and wcsfixi() apply all of the corrections handled by the following * specific functions which may also be invoked separately: * * - cdfix(): Sets the diagonal element of the CDi_ja matrix to 1.0 if all * CDi_ja keywords associated with a particular axis are omitted. * * - datfix(): recast an older DATE-OBS date format in dateobs to year-2000 * standard form and derive mjdobs from it if not already set. * Alternatively, if mjdobs is set and dateobs isn't, then derive dateobs * from it. * * - unitfix(): translate some commonly used but non-standard unit strings in * the CUNITia keyvalues, e.g. 'DEG' -> 'deg'. * * - spcfix(): translate AIPS-convention spectral types, 'FREQ-LSR', * 'FELO-HEL', etc., in ctype[] as set from CTYPEia. * * - celfix(): translate AIPS-convention celestial projection types, NCP and * GLS, in ctype[] as set from CTYPEia. * * - cylfix(): fixes WCS keyvalues for malformed cylindrical projections that * suffer from the problem described in Sect. 7.3.4 of Paper I. * * * wcsfix() - Translate a non-standard WCS struct * ---------------------------------------------- * wcsfix() is identical to wcsfixi(), but lacks the info argument. * * * wcsfixi() - Translate a non-standard WCS struct * ----------------------------------------------- * wcsfix() applies all of the corrections handled separately by cdfix(), * datfix(), unitfix(), spcfix(), celfix(), and cylfix(). * * Given: * ctrl int Do potentially unsafe translations of non-standard * unit strings as described in the usage notes to * wcsutrn(). * * naxis const int [] * Image axis lengths. If this array pointer is set to * zero then cylfix() will not be invoked. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. * * Returned: * stat int [NWCSFIX] * Status returns from each of the functions. Use the * preprocessor macros NWCSFIX to dimension this vector * and CDFIX, DATFIX, UNITFIX, SPCFIX, CELFIX, and CYLFIX * to access its elements. A status value of -2 is set * for functions that were not invoked. * * info struct wcserr [NWCSFIX] * Status messages from each of the functions. Use the * preprocessor macros NWCSFIX to dimension this vector * and CDFIX, DATFIX, UNITFIX, SPCFIX, CELFIX, and CYLFIX * to access its elements. * * Function return value: * int Status return value: * 0: Success. * 1: One or more of the translation functions * returned an error. * * * cdfix() - Fix erroneously omitted CDi_ja keywords * ------------------------------------------------- * cdfix() sets the diagonal element of the CDi_ja matrix to unity if all * CDi_ja keywords associated with a given axis were omitted. According to * Paper I, if any CDi_ja keywords at all are given in a FITS header then those * not given default to zero. This results in a singular matrix with an * intersecting row and column of zeros. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. * * Function return value: * int Status return value: * -1: No change required (not an error). * 0: Success. * 1: Null wcsprm pointer passed. * * * datfix() - Translate DATE-OBS and derive MJD-OBS or vice versa * -------------------------------------------------------------- * datfix() translates the old DATE-OBS date format set in wcsprm::dateobs to * year-2000 standard form (yyyy-mm-ddThh:mm:ss) and derives MJD-OBS from it if * not already set. Alternatively, if wcsprm::mjdobs is set and * wcsprm::dateobs isn't, then datfix() derives wcsprm::dateobs from it. If * both are set but disagree by more than half a day then status 5 is returned. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. wcsprm::dateobs * and/or wcsprm::mjdobs may be changed. * * Function return value: * int Status return value: * -1: No change required (not an error). * 0: Success. * 1: Null wcsprm pointer passed. * 5: Invalid parameter value. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * Notes: * The MJD algorithms used by datfix() are from D.A. Hatcher, 1984, QJRAS, * 25, 53-55, as modified by P.T. Wallace for use in SLALIB subroutines CLDJ * and DJCL. * * * unitfix() - Correct aberrant CUNITia keyvalues * ---------------------------------------------- * unitfix() applies wcsutrn() to translate non-standard CUNITia keyvalues, * e.g. 'DEG' -> 'deg', also stripping off unnecessary whitespace. * * Given: * ctrl int Do potentially unsafe translations described in the * usage notes to wcsutrn(). * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. * * Function return value: * int Status return value: * -1: No change required (not an error). * 0: Success (an alias was applied). * 1: Null wcsprm pointer passed. * * When units are translated (i.e. status 0), status -2 * is set in the wcserr struct to allow an informative * message to be returned. * * * spcfix() - Translate AIPS-convention spectral types * --------------------------------------------------- * spcfix() translates AIPS-convention spectral coordinate types, * '{FREQ,FELO,VELO}-{LSR,HEL,OBS}' (e.g. 'FREQ-OBS', 'FELO-HEL', 'VELO-LSR') * set in wcsprm::ctype[], subject to VELREF set in wcsprm::velref. * * Note that if wcs::specsys is already set then it will not be overridden. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. wcsprm::ctype[] * and/or wcsprm::specsys may be changed. * * Function return value: * int Status return value: * -1: No change required (not an error). * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Linear transformation matrix is singular. * 4: Inconsistent or unrecognized coordinate axis * types. * 5: Invalid parameter value. * 6: Invalid coordinate transformation parameters. * 7: Ill-conditioned coordinate transformation * parameters. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * * celfix() - Translate AIPS-convention celestial projection types * --------------------------------------------------------------- * celfix() translates AIPS-convention celestial projection types, NCP and * GLS, set in the ctype[] member of the wcsprm struct. * * Two additional pv[] keyvalues are created when translating NCP. If the * pv[] array was initially allocated by wcsini() then the array will be * expanded if necessary. Otherwise, error 2 will be returned if two empty * slots are not already available for use. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. wcsprm::ctype[] * and/or wcsprm::pv[] may be changed. * * Function return value: * int Status return value: * -1: No change required (not an error). * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Linear transformation matrix is singular. * 4: Inconsistent or unrecognized coordinate axis * types. * 5: Invalid parameter value. * 6: Invalid coordinate transformation parameters. * 7: Ill-conditioned coordinate transformation * parameters. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * * cylfix() - Fix malformed cylindrical projections * ------------------------------------------------ * cylfix() fixes WCS keyvalues for malformed cylindrical projections that * suffer from the problem described in Sect. 7.3.4 of Paper I. * * Given: * naxis const int [] * Image axis lengths. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters. * * Function return value: * int Status return value: * -1: No change required (not an error). * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Linear transformation matrix is singular. * 4: Inconsistent or unrecognized coordinate axis * types. * 5: Invalid parameter value. * 6: Invalid coordinate transformation parameters. * 7: Ill-conditioned coordinate transformation * parameters. * 8: All of the corner pixel coordinates are invalid. * 9: Could not determine reference pixel coordinate. * 10: Could not determine reference pixel value. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * * Global variable: const char *wcsfix_errmsg[] - Status return messages * --------------------------------------------------------------------- * Error messages to match the status value returned from each function. * *===========================================================================*/ #ifndef WCSLIB_WCSFIX #define WCSLIB_WCSFIX #include "wcs.h" #include "wcserr.h" #ifdef __cplusplus extern "C" { #endif #define CDFIX 0 #define DATFIX 1 #define UNITFIX 2 #define SPCFIX 3 #define CELFIX 4 #define CYLFIX 5 #define NWCSFIX 6 extern const char *wcsfix_errmsg[]; #define cylfix_errmsg wcsfix_errmsg enum wcsfix_errmsg_enum { FIXERR_DATE_FIX = -4, /* The date formatting has been fixed up. */ FIXERR_SPC_UPDATE = -3, /* Spectral axis type modified. */ FIXERR_UNITS_ALIAS = -2, /* Units alias translation. */ FIXERR_NO_CHANGE = -1, /* No change. */ FIXERR_SUCCESS = 0, /* Success. */ FIXERR_NULL_POINTER = 1, /* Null wcsprm pointer passed. */ FIXERR_MEMORY = 2, /* Memory allocation failed. */ FIXERR_SINGULAR_MTX = 3, /* Linear transformation matrix is singular. */ FIXERR_BAD_CTYPE = 4, /* Inconsistent or unrecognized coordinate axis types. */ FIXERR_BAD_PARAM = 5, /* Invalid parameter value. */ FIXERR_BAD_COORD_TRANS = 6, /* Invalid coordinate transformation parameters. */ FIXERR_ILL_COORD_TRANS = 7, /* Ill-conditioned coordinate transformation parameters. */ FIXERR_BAD_CORNER_PIX = 8, /* All of the corner pixel coordinates are invalid. */ FIXERR_NO_REF_PIX_COORD = 9, /* Could not determine reference pixel coordinate. */ FIXERR_NO_REF_PIX_VAL = 10 /* Could not determine reference pixel value. */ }; int wcsfix(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[]); int wcsfixi(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[], struct wcserr info[]); int cdfix(struct wcsprm *wcs); int datfix(struct wcsprm *wcs); int unitfix(int ctrl, struct wcsprm *wcs); int spcfix(struct wcsprm *wcs); int celfix(struct wcsprm *wcs); int cylfix(const int naxis[], struct wcsprm *wcs); #ifdef __cplusplus } #endif #endif /* WCSLIB_WCSFIX */ pywcs-1.12/wcslib/C/wcshdr.c0000644001153600020070000007377612310355626017775 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcshdr.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include #include "wcsutil.h" #include "wcsmath.h" #include "wcshdr.h" #include "tab.h" #include "wcs.h" extern const int WCSSET; /* Map status return value to message. */ const char *wcshdr_errmsg[] = { "Success", "Null wcsprm pointer passed", "Memory allocation failed", "Invalid column selection", "Fatal error returned by Flex parser", "Invalid tabular parameters"}; /* Convenience macro for invoking wcserr_set(). */ #define WCSHDR_ERRMSG(status) WCSERR_SET(status), wcshdr_errmsg[status] static void wcshdo_util(int, const char [], const char [], int, const char [], int, int, int, char, int, int [], char [], const char [], int *, char **, int *); /*--------------------------------------------------------------------------*/ int wcstab(struct wcsprm *wcs) { static const char *function = "wcstab"; char (*PSi_0a)[72] = 0x0, (*PSi_1a)[72] = 0x0, (*PSi_2a)[72] = 0x0; int *PVi_1a = 0x0, *PVi_2a = 0x0, *PVi_3a = 0x0, *tabax, *tabidx = 0x0; int getcrd, i, ip, itab, itabax, j, jtabax, m, naxis, ntabax, status; struct wtbarr *wtbp; struct tabprm *tabp; struct wcserr **err; if (wcs == 0x0) return WCSHDRERR_NULL_POINTER; err = &(wcs->err); /* Free memory previously allocated by wcstab(). */ if (wcs->flag != -1 && wcs->m_flag == WCSSET) { if (wcs->wtb == wcs->m_wtb) wcs->wtb = 0x0; if (wcs->tab == wcs->m_tab) wcs->tab = 0x0; if (wcs->m_wtb) free(wcs->m_wtb); if (wcs->m_tab) { for (j = 0; j < wcs->ntab; j++) { tabfree(wcs->m_tab + j); } free(wcs->m_tab); } } wcs->ntab = 0; wcs->nwtb = 0; wcs->wtb = 0x0; wcs->tab = 0x0; /* Determine the number of -TAB axes. */ naxis = wcs->naxis; if (!(tabax = calloc(naxis, sizeof(int)))) { return wcserr_set(WCSHDR_ERRMSG(WCSHDRERR_MEMORY)); } ntabax = 0; for (i = 0; i < naxis; i++) { /* Null fill. */ wcsutil_null_fill(72, wcs->ctype[i]); if (!strcmp(wcs->ctype[i]+4, "-TAB")) { tabax[i] = ntabax++; } else { tabax[i] = -1; } } if (ntabax == 0) { /* No lookup tables. */ status = 0; goto cleanup; } /* Collect information from the PSi_ma and PVi_ma keyvalues. */ if (!((PSi_0a = calloc(ntabax, sizeof(char[72]))) && (PVi_1a = calloc(ntabax, sizeof(int))) && (PVi_2a = calloc(ntabax, sizeof(int))) && (PSi_1a = calloc(ntabax, sizeof(char[72]))) && (PSi_2a = calloc(ntabax, sizeof(char[72]))) && (PVi_3a = calloc(ntabax, sizeof(int))) && (tabidx = calloc(ntabax, sizeof(int))))) { status = wcserr_set(WCSHDR_ERRMSG(WCSHDRERR_MEMORY)); goto cleanup; } for (itabax = 0; itabax < ntabax; itabax++) { /* Remember that calloc() zeroes allocated memory. */ PVi_1a[itabax] = 1; PVi_2a[itabax] = 1; PVi_3a[itabax] = 1; } for (ip = 0; ip < wcs->nps; ip++) { itabax = tabax[wcs->ps[ip].i - 1]; if (itabax >= 0) { switch (wcs->ps[ip].m) { case 0: /* EXTNAME. */ strcpy(PSi_0a[itabax], wcs->ps[ip].value); wcsutil_null_fill(72, PSi_0a[itabax]); break; case 1: /* TTYPEn for coordinate array. */ strcpy(PSi_1a[itabax], wcs->ps[ip].value); wcsutil_null_fill(72, PSi_1a[itabax]); break; case 2: /* TTYPEn for index vector. */ strcpy(PSi_2a[itabax], wcs->ps[ip].value); wcsutil_null_fill(72, PSi_2a[itabax]); break; } } } for (ip = 0; ip < wcs->npv; ip++) { itabax = tabax[wcs->pv[ip].i - 1]; if (itabax >= 0) { switch (wcs->pv[ip].m) { case 1: /* EXTVER. */ PVi_1a[itabax] = (int)(wcs->pv[ip].value + 0.5); break; case 2: /* EXTLEVEL. */ PVi_2a[itabax] = (int)(wcs->pv[ip].value + 0.5); break; case 3: /* Table axis number. */ PVi_3a[itabax] = (int)(wcs->pv[ip].value + 0.5); break; } } } /* Determine the number of independent tables. */ for (itabax = 0; itabax < ntabax; itabax++) { /* These have no defaults. */ if (!PSi_0a[itabax][0] || !PSi_1a[itabax][0]) { status = wcserr_set(WCSERR_SET(WCSHDRERR_BAD_TABULAR_PARAMS), "Invalid tabular parameters: PSi_0a and PSi_1a must be specified"); goto cleanup; } tabidx[itabax] = -1; for (jtabax = 0; jtabax < i; jtabax++) { /* EXTNAME, EXTVER, EXTLEVEL, and TTYPEn for the coordinate array */ /* must match for each axis of a multi-dimensional lookup table. */ if (strcmp(PSi_0a[itabax], PSi_0a[jtabax]) == 0 && strcmp(PSi_1a[itabax], PSi_1a[jtabax]) == 0 && PVi_1a[itabax] == PVi_1a[jtabax] && PVi_2a[itabax] == PVi_2a[jtabax]) { tabidx[itabax] = tabidx[jtabax]; break; } } if (jtabax == itabax) { tabidx[itabax] = wcs->ntab; wcs->ntab++; } } if (!(wcs->tab = calloc(wcs->ntab, sizeof(struct tabprm)))) { status = wcserr_set(WCSHDR_ERRMSG(WCSHDRERR_MEMORY)); goto cleanup; } wcs->m_tab = wcs->tab; /* Table dimensionality; find the largest axis number. */ for (itabax = 0; itabax < ntabax; itabax++) { tabp = wcs->tab + tabidx[itabax]; /* PVi_3a records the 1-relative table axis number. */ if (PVi_3a[itabax] > tabp->M) { tabp->M = PVi_3a[itabax]; } } for (itab = 0; itab < wcs->ntab; itab++) { if ((status = tabini(1, wcs->tab[itab].M, 0, wcs->tab + itab))) { if (status == 3) status = 5; wcserr_set(WCSHDR_ERRMSG(status)); goto cleanup; } } /* Copy parameters into the tabprm structs. */ for (i = 0; i < naxis; i++) { if ((itabax = tabax[i]) < 0) { /* Not a -TAB axis. */ continue; } /* PVi_3a records the 1-relative table axis number. */ m = PVi_3a[itabax] - 1; tabp = wcs->tab + tabidx[itabax]; tabp->map[m] = i; tabp->crval[m] = wcs->crval[i]; } /* Check for completeness. */ for (itab = 0; itab < wcs->ntab; itab++) { for (m = 0; m < wcs->tab[itab].M; m++) { if (wcs->tab[itab].map[m] < 0) { status = wcserr_set(WCSERR_SET(WCSHDRERR_BAD_TABULAR_PARAMS), "Invalid tabular parameters: the axis mapping is undefined"); goto cleanup; } } } /* Set up for reading the arrays; how many arrays are there? */ for (itabax = 0; itabax < ntabax; itabax++) { /* Does this -TAB axis have a non-degenerate index array? */ if (PSi_2a[itabax][0]) { wcs->nwtb++; } } /* Add one coordinate array for each table. */ wcs->nwtb += wcs->ntab; /* Allocate memory for structs to be returned. */ if (!(wcs->wtb = calloc(wcs->nwtb, sizeof(struct wtbarr)))) { wcs->nwtb = 0; status = wcserr_set(WCSHDR_ERRMSG(WCSHDRERR_MEMORY)); goto cleanup; } wcs->m_wtb = wcs->wtb; /* Set pointers for the index and coordinate arrays. */ wtbp = wcs->wtb; for (itab = 0; itab < wcs->ntab; itab++) { getcrd = 1; for (itabax = 0; itabax < ntabax; itabax++) { if (tabidx[itabax] != itab) continue; if (getcrd) { /* Coordinate array. */ wtbp->i = itabax + 1; wtbp->m = PVi_3a[itabax]; wtbp->kind = 'c'; strcpy(wtbp->extnam, PSi_0a[itabax]); wtbp->extver = PVi_1a[itabax]; wtbp->extlev = PVi_2a[itabax]; strcpy(wtbp->ttype, PSi_1a[itabax]); wtbp->row = 1L; wtbp->ndim = wcs->tab[itab].M + 1; wtbp->dimlen = wcs->tab[itab].K; wtbp->arrayp = &(wcs->tab[itab].coord); /* Signal for tabset() to take this memory. */ wcs->tab[itab].m_coord = (double *)0x1; wtbp++; getcrd = 0; } if (PSi_2a[itabax][0]) { /* Index array. */ wtbp->i = itabax + 1; wtbp->m = PVi_3a[itabax]; wtbp->kind = 'i'; m = wtbp->m - 1; strcpy(wtbp->extnam, PSi_0a[itabax]); wtbp->extver = PVi_1a[itabax]; wtbp->extlev = PVi_2a[itabax]; strcpy(wtbp->ttype, PSi_2a[itabax]); wtbp->row = 1L; wtbp->ndim = 1; wtbp->dimlen = wcs->tab[itab].K + m; wtbp->arrayp = wcs->tab[itab].index + m; /* Signal for tabset() to take this memory. */ wcs->tab[itab].m_indxs[m] = (double *)0x1; wtbp++; } } } status = 0; cleanup: if (tabax) free(tabax); if (tabidx) free(tabidx); if (PSi_0a) free(PSi_0a); if (PVi_1a) free(PVi_1a); if (PVi_2a) free(PVi_2a); if (PSi_1a) free(PSi_1a); if (PSi_2a) free(PSi_2a); if (PVi_3a) free(PVi_3a); if (status) { if (wcs->tab) free(wcs->tab); if (wcs->wtb) free(wcs->wtb); } return status; } /*--------------------------------------------------------------------------*/ int wcsidx(int nwcs, struct wcsprm **wcs, int alts[27]) { int a, iwcs; struct wcsprm *wcsp; for (a = 0; a < 27; a++) { alts[a] = -1; } if (wcs == 0x0) { return WCSHDRERR_NULL_POINTER; } wcsp = *wcs; for (iwcs = 0; iwcs < nwcs; iwcs++, wcsp++) { if (wcsp->colnum || wcsp->colax[0]) continue; if (wcsp->alt[0] == ' ') { a = 0; } else { a = wcsp->alt[0] - 'A' + 1; } alts[a] = iwcs; } return 0; } /*--------------------------------------------------------------------------*/ int wcsbdx(int nwcs, struct wcsprm **wcs, int type, short alts[1000][28]) { short *ip; int a, i, icol, iwcs; struct wcsprm *wcsp; for (ip = alts[0]; ip < alts[0] + 28*1000; ip++) { *ip = -1; } for (icol = 0; icol < 1000; icol++) { alts[icol][27] = 0; } if (wcs == 0x0) { return WCSHDRERR_NULL_POINTER; } wcsp = *wcs; for (iwcs = 0; iwcs < nwcs; iwcs++, wcsp++) { if (wcsp->alt[0] == ' ') { a = 0; } else { a = wcsp->alt[0] - 'A' + 1; } if (type) { /* Pixel list. */ if (wcsp->colax[0]) { for (i = 0; i < wcsp->naxis; i++) { alts[wcsp->colax[i]][a] = iwcs; alts[wcsp->colax[i]][27]++; } } else if (!wcsp->colnum) { alts[0][a] = iwcs; alts[0][27]++; } } else { /* Binary table image array. */ if (wcsp->colnum) { alts[wcsp->colnum][a] = iwcs; alts[wcsp->colnum][27]++; } else if (!wcsp->colax[0]) { alts[0][a] = iwcs; alts[0][27]++; } } } return 0; } /*--------------------------------------------------------------------------*/ int wcsvfree(int *nwcs, struct wcsprm **wcs) { int a, status = 0; struct wcsprm *wcsp; if (wcs == 0x0) { return WCSHDRERR_NULL_POINTER; } wcsp = *wcs; for (a = 0; a < *nwcs; a++, wcsp++) { status |= wcsfree(wcsp); } free(*wcs); *nwcs = 0; *wcs = 0x0; return status; } /*--------------------------------------------------------------------------*/ int wcshdo(int relax, struct wcsprm *wcs, int *nkeyrec, char **header) /* ::: CUBEFACE and STOKES handling? */ { static const char *function = "wcshdo"; char alt, comment[72], keyvalue[72], keyword[16], obsg[8] = "OBSG?", obsgeo[8] = "OBSGEO-?", ptype, xtype, xyz[] = "XYZ"; int bintab, col0, *colax, colnum, i, j, k, naxis, pixlist, primage, status = 0; struct wcserr **err; *nkeyrec = 0; *header = 0x0; if (wcs == 0x0) return WCSHDRERR_NULL_POINTER; err = &(wcs->err); if (wcs->flag != WCSSET) { if ((status = wcsset(wcs))) return status; } if ((naxis = wcs->naxis) == 0) { return 0; } /* These are mainly for convenience. */ alt = wcs->alt[0]; if (alt == ' ') alt = '\0'; colnum = wcs->colnum; colax = wcs->colax; primage = 0; bintab = 0; pixlist = 0; if (colnum) { bintab = 1; col0 = colnum; } else if (colax[0]) { pixlist = 1; col0 = colax[0]; } else { primage = 1; } /* WCS dimension. */ if (!pixlist) { sprintf(keyvalue, "%20d", naxis); wcshdo_util(relax, "WCSAXES", "WCAX", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "Number of coordinate axes", nkeyrec, header, &status); } /* Reference pixel coordinates. */ for (j = 0; j < naxis; j++) { sprintf(keyvalue, "%20.12G", wcs->crpix[j]); wcshdo_util(relax, "CRPIX", "CRP", WCSHDO_CRPXna, "CRPX", 0, j+1, 0, alt, colnum, colax, keyvalue, "Pixel coordinate of reference point", nkeyrec, header, &status); } /* Linear transformation matrix. */ k = 0; for (i = 0; i < naxis; i++) { for (j = 0; j < naxis; j++, k++) { if (i == j) { if (wcs->pc[k] == 1.0) continue; } else { if (wcs->pc[k] == 0.0) continue; } sprintf(keyvalue, "%20.12G", wcs->pc[k]); wcshdo_util(relax, "PC", bintab ? "PC" : "P", WCSHDO_TPCn_ka, bintab ? 0x0 : "PC", i+1, j+1, 0, alt, colnum, colax, keyvalue, "Coordinate transformation matrix element", nkeyrec, header, &status); } } /* Coordinate increment at reference point. */ for (i = 0; i < naxis; i++) { sprintf(keyvalue, "%20.12G", wcs->cdelt[i]); comment[0] = '\0'; if (wcs->cunit[i][0]) sprintf(comment, "[%s] ", wcs->cunit[i]); strcat(comment, "Coordinate increment at reference point"); wcshdo_util(relax, "CDELT", "CDE", WCSHDO_CRPXna, "CDLT", i+1, 0, 0, alt, colnum, colax, keyvalue, comment, nkeyrec, header, &status); } /* Units of coordinate increment and reference value. */ for (i = 0; i < naxis; i++) { if (wcs->cunit[i][0] == '\0') continue; sprintf(keyvalue, "'%s'", wcs->cunit[i]); wcshdo_util(relax, "CUNIT", "CUN", WCSHDO_CRPXna, "CUNI", i+1, 0, 0, alt, colnum, colax, keyvalue, "Units of coordinate increment and value", nkeyrec, header, &status); } /* Coordinate type. */ for (i = 0; i < naxis; i++) { if (wcs->ctype[i][0] == '\0') continue; sprintf(keyvalue, "'%s'", wcs->ctype[i]); strcpy(comment, "Coordinate type code"); if (i == wcs->lng || i == wcs->lat) { if (strncmp(wcs->ctype[i], "RA--", 4) == 0) { strcpy(comment, "Right ascension, "); } else if (strncmp(wcs->ctype[i], "DEC-", 4) == 0) { strcpy(comment, "Declination, "); } else if (strncmp(wcs->ctype[i]+1, "LON", 3) == 0 || strncmp(wcs->ctype[i]+1, "LAT", 3) == 0) { switch (wcs->ctype[i][0]) { case 'G': strcpy(comment, "galactic "); break; case 'E': strcpy(comment, "ecliptic "); case 'H': strcpy(comment, "helioecliptic "); case 'S': strcpy(comment, "supergalactic "); } if (i == wcs->lng) { strcat(comment, "longitude, "); } else { strcat(comment, "latitude, "); } wcs->ctype[i][0] = toupper(wcs->ctype[i][0]); } strcat(comment, wcs->cel.prj.name); strcat(comment, " projection"); } else if (i == wcs->spec) { spctyp(wcs->ctype[i], 0x0, 0x0, comment, 0x0, &ptype, &xtype, 0x0); if (ptype == xtype) { strcat(comment, " (linear)"); } else { switch (xtype) { case 'F': strcat(comment, " (linear in frequency)"); break; case 'V': strcat(comment, " (linear in velocity)"); break; case 'W': strcat(comment, " (linear in wavelength)"); break; } } } wcshdo_util(relax, "CTYPE", "CTY", WCSHDO_CRPXna, "CTYP", i+1, 0, 0, alt, colnum, colax, keyvalue, comment, nkeyrec, header, &status); } /* Coordinate value at reference point. */ for (i = 0; i < naxis; i++) { sprintf(keyvalue, "%20.12G", wcs->crval[i]); comment[0] = '\0'; if (wcs->cunit[i][0]) sprintf(comment, "[%s] ", wcs->cunit[i]); strcat(comment, "Coordinate value at reference point"); wcshdo_util(relax, "CRVAL", "CRV", WCSHDO_CRPXna, "CRVL", i+1, 0, 0, alt, colnum, colax, keyvalue, comment, nkeyrec, header, &status); } /* Parameter values. */ for (k = 0; k < wcs->npv; k++) { sprintf(keyvalue, "%20.12G", (wcs->pv[k]).value); if ((wcs->pv[k]).i == (wcs->lng + 1)) { switch ((wcs->pv[k]).m) { case 1: strcpy(comment, "[deg] Native longitude of the reference point"); break; case 2: strcpy(comment, "[deg] Native latitude of the reference point"); break; case 3: if (primage) { sprintf(keyword, "LONPOLE%c", alt); } else if (bintab) { sprintf(keyword, "LONP%d%c", colnum, alt); } else { sprintf(keyword, "LONP%d%c", colax[(wcs->pv[k]).i - 1], alt); } sprintf(comment, "[deg] alias for %s (has precedence)", keyword); break; case 4: if (primage) { sprintf(keyword, "LATPOLE%c", alt); } else if (bintab) { sprintf(keyword, "LATP%d%c", colnum, alt); } else { sprintf(keyword, "LATP%d%c", colax[(wcs->pv[k]).i - 1], alt); } sprintf(comment, "[deg] alias for %s (has precedence)", keyword); break; } } else if ((wcs->pv[k]).i == (wcs->lat + 1)) { sprintf(comment, "%s projection parameter", wcs->cel.prj.code); } else { strcpy(comment, "Coordinate transformation parameter"); } wcshdo_util(relax, "PV", "V", WCSHDO_PVn_ma, "PV", wcs->pv[k].i, -1, wcs->pv[k].m, alt, colnum, colax, keyvalue, comment, nkeyrec, header, &status); } for (k = 0; k < wcs->nps; k++) { sprintf(keyvalue, "'%s'", (wcs->ps[k]).value); wcshdo_util(relax, "PS", "S", WCSHDO_PVn_ma, "PS", wcs->ps[k].i, -1, wcs->ps[k].m, alt, colnum, colax, keyvalue, "Coordinate transformation parameter", nkeyrec, header, &status); } /* Celestial and spectral transformation parameters. */ if (!undefined(wcs->lonpole)) { sprintf(keyvalue, "%20.12G", wcs->lonpole); wcshdo_util(relax, "LONPOLE", "LONP", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "[deg] Native longitude of celestial pole", nkeyrec, header, &status); } if (!undefined(wcs->latpole)) { sprintf(keyvalue, "%20.12G", wcs->latpole); wcshdo_util(relax, "LATPOLE", "LATP", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "[deg] Native latitude of celestial pole", nkeyrec, header, &status); } if (!undefined(wcs->restfrq)) { sprintf(keyvalue, "%20.12G", wcs->restfrq); wcshdo_util(relax, "RESTFRQ", "RFRQ", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "[Hz] Line rest frequency", nkeyrec, header, &status); } if (!undefined(wcs->restwav)) { sprintf(keyvalue, "%20.12G", wcs->restwav); wcshdo_util(relax, "RESTWAV", "RWAV", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "[Hz] Line rest wavelength", nkeyrec, header, &status); } /* Coordinate system title. */ if (wcs->wcsname[0]) { sprintf(keyvalue, "'%s'", wcs->wcsname); if (bintab) { wcshdo_util(relax, "WCSNAME", "WCSN", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "Coordinate system title", nkeyrec, header, &status); } else { /* TWCS was a mistake. */ wcshdo_util(relax, "WCSNAME", "TWCS", WCSHDO_WCSNna, "WCSN", 0, 0, 0, alt, colnum, colax, keyvalue, "Coordinate system title", nkeyrec, header, &status); } } /* Coordinate axis title. */ if (wcs->cname) { for (i = 0; i < naxis; i++) { if (wcs->cname[i][0] == '\0') continue; sprintf(keyvalue, "'%s'", wcs->cname[i]); wcshdo_util(relax, "CNAME", "CNA", WCSHDO_CNAMna, "CNAM", i+1, 0, 0, alt, colnum, colax, keyvalue, "Axis name for labelling purposes", nkeyrec, header, &status); } } /* Random error in coordinate. */ if (wcs->crder) { for (i = 0; i < naxis; i++) { if (undefined(wcs->crder[i])) continue; sprintf(keyvalue, "%20.12G", wcs->crder[i]); comment[0] = '\0'; if (wcs->cunit[i][0]) sprintf(comment, "[%s] ", wcs->cunit[i]); strcat(comment, "Random error in coordinate"); wcshdo_util(relax, "CRDER", "CRD", WCSHDO_CNAMna, "CRDE", i+1, 0, 0, alt, colnum, colax, keyvalue, comment, nkeyrec, header, &status); } } /* Systematic error in coordinate. */ if (wcs->csyer) { for (i = 0; i < naxis; i++) { if (undefined(wcs->csyer[i])) continue; sprintf(keyvalue, "%20.12G", wcs->csyer[i]); comment[0] = '\0'; if (wcs->cunit[i][0]) sprintf(comment, "[%s] ", wcs->cunit[i]); strcat(comment, "Systematic error in coordinate"); wcshdo_util(relax, "CSYER", "CSY", WCSHDO_CNAMna, "CSYE", i+1, 0, 0, alt, colnum, colax, keyvalue, comment, nkeyrec, header, &status); } } /* Equatorial coordinate system type. */ if (wcs->radesys[0]) { sprintf(keyvalue, "'%s'", wcs->radesys); wcshdo_util(relax, "RADESYS", "RADE", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "Equatorial coordinate system", nkeyrec, header, &status); } /* Equinox of equatorial coordinate system. */ if (!undefined(wcs->equinox)) { sprintf(keyvalue, "%20.12G", wcs->equinox); wcshdo_util(relax, "EQUINOX", "EQUI", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "[yr] Equinox of equatorial coordinates", nkeyrec, header, &status); } /* Reference frame of spectral coordinates. */ if (wcs->specsys[0]) { sprintf(keyvalue, "'%s'", wcs->specsys); wcshdo_util(relax, "SPECSYS", "SPEC", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "Reference frame of spectral coordinates", nkeyrec, header, &status); } /* Reference frame of spectral observation. */ if (wcs->ssysobs[0]) { sprintf(keyvalue, "'%s'", wcs->ssysobs); wcshdo_util(relax, "SSYSOBS", "SOBS", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "Reference frame of spectral observation", nkeyrec, header, &status); } /* Observer's velocity towards source. */ if (!undefined(wcs->velosys)) { sprintf(keyvalue, "%20.12G", wcs->velosys); wcshdo_util(relax, "VELOSYS", "VSYS", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "[m/s] Velocity towards source", nkeyrec, header, &status); } /* Reference frame of source redshift. */ if (wcs->ssyssrc[0]) { sprintf(keyvalue, "'%s'", wcs->ssyssrc); wcshdo_util(relax, "SSYSSRC", "SSRC", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "Reference frame of source redshift", nkeyrec, header, &status); } /* Redshift of the source. */ if (!undefined(wcs->zsource)) { sprintf(keyvalue, "%20.12G", wcs->zsource); wcshdo_util(relax, "ZSOURCE", "ZSOU", 0, 0x0, 0, 0, 0, alt, colnum, colax, keyvalue, "Redshift of the source", nkeyrec, header, &status); } /* Observatory coordinates. */ for (k = 0; k < 3; k++) { if (undefined(wcs->obsgeo[k])) continue; sprintf(keyvalue, "%20.12G", wcs->obsgeo[k]); sprintf(comment, "[m] ITRF observatory %c-coordinate", xyz[k]); obsgeo[7] = xyz[k]; obsg[4] = xyz[k]; wcshdo_util(relax, obsgeo, obsg, 0, 0x0, 0, 0, 0, ' ', colnum, colax, keyvalue, comment, nkeyrec, header, &status); } /* MJD of observation. */ if (!undefined(wcs->mjdobs)) { sprintf(keyvalue, "%20.12G", wcs->mjdobs); strcpy(comment, "[d] MJD of observation"); if (wcs->dateobs[0]) { if (primage || (relax & 1) == 0) { sprintf(comment+22, " matching DATE-OBS"); } else { sprintf(comment+22, " matching DOBS%d", col0); } } wcshdo_util(relax, "MJD-OBS", "MJDOB", 0, 0x0, 0, 0, 0, ' ', colnum, colax, keyvalue, comment, nkeyrec, header, &status); } /* MJD mid-observation time. */ if (!undefined(wcs->mjdavg)) { sprintf(keyvalue, "%20.12G", wcs->mjdavg); strcpy(comment, "[d] MJD mid-observation"); if (wcs->dateavg[0]) { if (primage) { sprintf(comment+23, " matching DATE-AVG"); } else { sprintf(comment+23, " matching DAVG%d", col0); } } wcshdo_util(relax, "MJD-AVG", "MJDA", 0, 0x0, 0, 0, 0, ' ', colnum, colax, keyvalue, comment, nkeyrec, header, &status); } /* ISO-8601 date corresponding to MJD-OBS. */ if (wcs->dateobs[0]) { sprintf(keyvalue, "'%s'", wcs->dateobs); strcpy(comment, "ISO-8601 observation date"); if (!undefined(wcs->mjdobs)) { if (primage) { sprintf(comment+25, " matching MJD-OBS"); } else { sprintf(comment+25, " matching MJDOB%d", col0); } } if (relax & 1) { /* Allow DOBSn. */ wcshdo_util(relax, "DATE-OBS", "DOBS", WCSHDO_DOBSn, 0x0, 0, 0, 0, ' ', colnum, colax, keyvalue, comment, nkeyrec, header, &status); } else { /* Force DATE-OBS. */ wcshdo_util(relax, "DATE-OBS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, keyvalue, comment, nkeyrec, header, &status); } } /* ISO-8601 date corresponding to MJD-OBS. */ if (wcs->dateavg[0]) { sprintf(keyvalue, "'%s'", wcs->dateavg); strcpy(comment, "ISO-8601 mid-observation date"); if (!undefined(wcs->mjdavg)) { if (primage) { sprintf(comment+29, " matching MJD-AVG"); } else { sprintf(comment+29, " matching MJDA%d", col0); } } wcshdo_util(relax, "DATE-AVG", "DAVG", 0, 0x0, 0, 0, 0, ' ', colnum, colax, keyvalue, comment, nkeyrec, header, &status); } if (status == WCSHDRERR_MEMORY) { wcserr_set(WCSHDR_ERRMSG(status)); } return status; } /*--------------------------------------------------------------------------*/ void wcshdo_util( int relax, const char pikey[], const char tbkey[], int level, const char tlkey[], int i, int j, int m, char alt, int btcol, int plcol[], char keyvalue[], const char keycomment[], int *nkeyrec, char **header, int *status) { char ch0, ch1, *hptr, keyword[16], *kptr; int nbyte, nc = 47, nv; if (*status) return; /* Reallocate memory in blocks of 2880 bytes. */ if ((*nkeyrec)%32 == 0) { nbyte = ((*nkeyrec)/32 + 1) * 2880; if (!(hptr = realloc(*header, nbyte))) { *status = WCSHDRERR_MEMORY; return; } *header = hptr; } /* Construct the keyword. */ if (alt == ' ') alt = '\0'; if (btcol) { /* Binary table image array. */ if (i > 0 && j) { if (j > 0) { sprintf(keyword, "%d%d%s%d%c", i, j, tbkey, btcol, alt); } else { sprintf(keyword, "%d%s%d_%d%c", i, tbkey, btcol, m, alt); } } else if (i > 0) { sprintf(keyword, "%d%s%d%c", i, tbkey, btcol, alt); } else if (j > 0) { sprintf(keyword, "%d%s%d%c", j, tbkey, btcol, alt); } else { sprintf(keyword, "%s%d%c", tbkey, btcol, alt); } if ((strlen(keyword) < 8) && tlkey && (relax & level)) { /* Use the long form. */ if (i > 0 && j) { if (j > 0) { sprintf(keyword, "%d%d%s%d%c", i, j, tlkey, btcol, alt); } else { sprintf(keyword, "%d%s%d_%d%c", i, tlkey, btcol, m, alt); } } else if (i > 0) { sprintf(keyword, "%d%s%d%c", i, tlkey, btcol, alt); } else if (j > 0) { sprintf(keyword, "%d%s%d%c", j, tlkey, btcol, alt); } else { sprintf(keyword, "%s%d%c", tlkey, btcol, alt); } } } else if (plcol && plcol[0]) { /* Pixel list. */ if (i > 0 && j) { if (j > 0) { sprintf(keyword, "T%s%d_%d%c", tbkey, plcol[i-1], plcol[j-1], alt); } else { sprintf(keyword, "T%s%d_%d%c", tbkey, plcol[i-1], m, alt); } } else if (i > 0) { sprintf(keyword, "T%s%d%c", tbkey, plcol[i-1], alt); } else if (j > 0) { sprintf(keyword, "T%s%d%c", tbkey, plcol[j-1], alt); } else { sprintf(keyword, "%s%d%c", tbkey, plcol[0], alt); } if ((strlen(keyword) < 8) && tlkey && (relax & level)) { /* Use the long form. */ if (i > 0 && j) { if (j > 0) { sprintf(keyword, "T%s%d_%d%c", tlkey, plcol[i-1], plcol[j-1], alt); } else { sprintf(keyword, "T%s%d_%d%c", tlkey, plcol[i-1], m, alt); } } else if (i > 0) { sprintf(keyword, "T%s%d%c", tlkey, plcol[i-1], alt); } else if (j > 0) { sprintf(keyword, "T%s%d%c", tlkey, plcol[j-1], alt); } else { sprintf(keyword, "%s%d%c", tlkey, plcol[0], alt); } } } else { if (i > 0 && j) { if (j > 0) { sprintf(keyword, "%s%d_%d%c", pikey, i, j, alt); } else { sprintf(keyword, "%s%d_%d%c", pikey, i, m, alt); } } else if (i > 0) { sprintf(keyword, "%s%d%c", pikey, i, alt); } else if (j > 0) { sprintf(keyword, "%s%d%c", pikey, j, alt); } else { sprintf(keyword, "%s%c", pikey, alt); } } /* Double-up single-quotes in the keyvalue. */ hptr = keyvalue + 1; while (*hptr) { if (*hptr == '\'') { kptr = hptr++; if (*hptr) { ch0 = *kptr; while (*kptr) { ch1 = *(++kptr); *kptr = ch0; ch0 = ch1; } } } hptr++; } if ((nv = strlen(keyvalue) > 20)) { /* Rob the keycomment to make space for the keyvalue. */ nc -= (nv - 20); } hptr = *header + (80 * ((*nkeyrec)++)); sprintf(hptr, "%-8.8s= %-20s / %-*.*s", keyword, keyvalue, nc, nc, keycomment); } pywcs-1.12/wcslib/C/wcshdr.h0000644001153600020070000015021612310355626017763 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcshdr.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the FITS World Coordinate System * (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * "Representations of celestial coordinates in FITS", * Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (Paper II) * * "Representations of spectral coordinates in FITS", * Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. * 2006, A&A, 446, 747 (Paper III) * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the wcshdr routines * ------------------------------ * Routines in this suite are aimed at extracting WCS information from a FITS * file. They provide the high-level interface between the FITS file and the * WCS coordinate transformation routines. * * Additionally, function wcshdo() is provided to write out the contents of a * wcsprm struct as a FITS header. * * Briefly, the anticipated sequence of operations is as follows: * * - 1: Open the FITS file and read the image or binary table header, e.g. * using CFITSIO routine fits_hdr2str(). * * - 2: Parse the header using wcspih() or wcsbth(); they will automatically * interpret 'TAB' header keywords using wcstab(). * * - 3: Allocate memory for, and read 'TAB' arrays from the binary table * extension, e.g. using CFITSIO routine fits_read_wcstab() - refer to * the prologue of getwcstab.h. wcsset() will automatically take * control of this allocated memory, in particular causing it to be * free'd by wcsfree(). * * - 4: Translate non-standard WCS usage using wcsfix(), see wcsfix.h. * * - 5: Initialize wcsprm struct(s) using wcsset() and calculate coordinates * using wcsp2s() and/or wcss2p(). Refer to the prologue of wcs.h for a * description of these and other high-level WCS coordinate * transformation routines. * * - 6: Clean up by freeing memory with wcsvfree(). * * In detail: * * - wcspih() is a high-level FITS WCS routine that parses an image header. It * returns an array of up to 27 wcsprm structs on each of which it invokes * wcstab(). * * - wcsbth() is the analogue of wcspih() for use with binary tables; it * handles image array and pixel list keywords. As an extension of the FITS * WCS standard, it also recognizes image header keywords which may be used * to provide default values via an inheritance mechanism. * * - wcstab() assists in filling in members of the wcsprm struct associated * with coordinate lookup tables ('TAB'). These are based on arrays stored * in a FITS binary table extension (BINTABLE) that are located by PVi_ma * keywords in the image header. * * - wcsidx() and wcsbdx() are utility routines that return the index for a * specified alternate coordinate descriptor in the array of wcsprm structs * returned by wcspih() or wcsbth(). * * - wcsvfree() deallocates memory for an array of wcsprm structs, such as * returned by wcspih() or wcsbth(). * * - wcshdo() writes out a wcsprm struct as a FITS header. * * * wcspih() - FITS WCS parser routine for image headers * ---------------------------------------------------- * wcspih() is a high-level FITS WCS routine that parses an image header, * either that of a primary HDU or of an image extension. All WCS keywords * defined in Papers I, II, and III are recognized, and also those used by the * AIPS convention and certain other keywords that existed in early drafts of * the WCS papers as explained in wcsbth() note 5. * * Given a character array containing a FITS image header, wcspih() identifies * and reads all WCS keywords for the primary coordinate representation and up * to 26 alternate representations. It returns this information as an array of * wcsprm structs. * * wcspih() invokes wcstab() on each of the wcsprm structs that it returns. * * Use wcsbth() in preference to wcspih() for FITS headers of unknown type; * wcsbth() can parse image headers as well as binary table and pixel list * headers. * * Given and returned: * header char[] Character array containing the (entire) FITS image * header from which to identify and construct the * coordinate representations, for example, as might be * obtained conveniently via the CFITSIO routine * fits_hdr2str(). * * Each header "keyrecord" (formerly "card image") * consists of exactly 80 7-bit ASCII printing characters * in the range 0x20 to 0x7e (which excludes NUL, BS, * TAB, LF, FF and CR) especially noting that the * keyrecords are NOT null-terminated. * * For negative values of ctrl (see below), header[] is * modified so that WCS keyrecords processed by wcspih() * are removed from it. * * Given: * nkeyrec int Number of keyrecords in header[]. * * relax int Degree of permissiveness: * 0: Recognize only FITS keywords defined by the * published WCS standard. * WCSHDR_all: Admit all recognized informal * extensions of the WCS standard. * Fine-grained control of the degree of permissiveness * is also possible as explained in wcsbth() note 5. * * ctrl int Error reporting and other control options for invalid * WCS and other header keyrecords: * 0: Do not report any rejected header keyrecords. * 1: Produce a one-line message stating the number * of WCS keyrecords rejected (nreject). * 2: Report each rejected keyrecord and the reason * why it was rejected. * 3: As above, but also report all non-WCS * keyrecords that were discarded, and the number * of coordinate representations (nwcs) found. * The report is written to stderr. * * For ctrl < 0, WCS keyrecords processed by wcspih() * are removed from header[]: * -1: Remove only valid WCS keyrecords whose values * were successfully extracted, nothing is * reported. * -2: Also remove WCS keyrecords that were rejected, * reporting each one and the reason that it was * rejected. * -3: As above, and also report the number of * coordinate representations (nwcs) found. * -11: Same as -1 but preserving the basic keywords * '{DATE,MJD}-{OBS,AVG}' and 'OBSGEO-{X,Y,Z}'. * If any keyrecords are removed from header[] it will * be null-terminated (NUL not being a legal FITS header * character), otherwise it will contain its original * complement of nkeyrec keyrecords and possibly not be * null-terminated. * * Returned: * nreject int* Number of WCS keywords rejected for syntax errors, * illegal values, etc. Keywords not recognized as WCS * keywords are simply ignored. Refer also to wcsbth() * note 5. * * nwcs int* Number of coordinate representations found. * * wcs struct wcsprm** * Pointer to an array of wcsprm structs containing up to * 27 coordinate representations. * * Memory for the array is allocated by wcspih() which * also invokes wcsini() for each struct to allocate * memory for internal arrays and initialize their * members to default values. Refer also to wcsbth() * note 8. Note that wcsset() is not invoked on these * structs. * * This allocated memory must be freed by the user, first * by invoking wcsfree() for each struct, and then by * freeing the array itself. A routine, wcsvfree(), is * provided to do this (see below). * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 4: Fatal error returned by Flex parser. * * Notes: * Refer to wcsbth() notes 1, 2, 3, 5, 7, and 8. * * * wcsbth() - FITS WCS parser routine for binary table and image headers * --------------------------------------------------------------------- * wcsbth() is a high-level FITS WCS routine that parses a binary table header. * It handles image array and pixel list WCS keywords which may be present * together in one header. * * As an extension of the FITS WCS standard, wcsbth() also recognizes image * header keywords in a binary table header. These may be used to provide * default values via an inheritance mechanism discussed in note 5 (c.f. * WCSHDR_AUXIMG and WCSHDR_ALLIMG), or may instead result in wcsprm structs * that are not associated with any particular column. Thus wcsbth() can * handle primary image and image extension headers in addition to binary table * headers (it ignores NAXIS and does not rely on the presence of the TFIELDS * keyword). * * All WCS keywords defined in Papers I, II, and III are recognized, and also * those used by the AIPS convention and certain other keywords that existed in * early drafts of the WCS papers as explained in note 5 below. * * wcsbth() sets the colnum or colax[] members of the wcsprm structs that it * returns with the column number of an image array or the column numbers * associated with each pixel coordinate element in a pixel list. wcsprm * structs that are not associated with any particular column, as may be * derived from image header keywords, have colnum == 0. * * Note 6 below discusses the number of wcsprm structs returned by wcsbth(), * and the circumstances in which image header keywords cause a struct to be * created. See also note 9 concerning the number of separate images that may * be stored in a pixel list. * * The API to wcsbth() is similar to that of wcspih() except for the addition * of extra arguments that may be used to restrict its operation. Like * wcspih(), wcsbth() invokes wcstab() on each of the wcsprm structs that it * returns. * * Given and returned: * header char[] Character array containing the (entire) FITS binary * table, primary image, or image extension header from * which to identify and construct the coordinate * representations, for example, as might be obtained * conveniently via the CFITSIO routine fits_hdr2str(). * * Each header "keyrecord" (formerly "card image") * consists of exactly 80 7-bit ASCII printing * characters in the range 0x20 to 0x7e (which excludes * NUL, BS, TAB, LF, FF and CR) especially noting that * the keyrecords are NOT null-terminated. * * For negative values of ctrl (see below), header[] is * modified so that WCS keyrecords processed by wcsbth() * are removed from it. * * Given: * nkeyrec int Number of keyrecords in header[]. * * relax int Degree of permissiveness: * 0: Recognize only FITS keywords defined by the * published WCS standard. * WCSHDR_all: Admit all recognized informal * extensions of the WCS standard. * Fine-grained control of the degree of permissiveness * is also possible, as explained in note 5 below. * * ctrl int Error reporting and other control options for invalid * WCS and other header keyrecords: * 0: Do not report any rejected header keyrecords. * 1: Produce a one-line message stating the number * of WCS keyrecords rejected (nreject). * 2: Report each rejected keyrecord and the reason * why it was rejected. * 3: As above, but also report all non-WCS * keyrecords that were discarded, and the number * of coordinate representations (nwcs) found. * The report is written to stderr. * * For ctrl < 0, WCS keyrecords processed by wcsbth() * are removed from header[]: * -1: Remove only valid WCS keyrecords whose values * were successfully extracted, nothing is * reported. * -2: Also remove WCS keyrecords that were rejected, * reporting each one and the reason that it was * rejected. * -3: As above, and also report the number of * coordinate representations (nwcs) found. * -11: Same as -1 but preserving the basic keywords * '{DATE,MJD}-{OBS,AVG}' and 'OBSGEO-{X,Y,Z}'. * If any keyrecords are removed from header[] it will * be null-terminated (NUL not being a legal FITS header * character), otherwise it will contain its original * complement of nkeyrec keyrecords and possibly not be * null-terminated. * * keysel int Vector of flag bits that may be used to restrict the * keyword types considered: * WCSHDR_IMGHEAD: Image header keywords. * WCSHDR_BIMGARR: Binary table image array. * WCSHDR_PIXLIST: Pixel list keywords. * If zero, there is no restriction. * * Keywords such as EQUIna or RFRQna that are common to * binary table image arrays and pixel lists (including * WCSNna and TWCSna, as explained in note 4 below) are * selected by both WCSHDR_BIMGARR and WCSHDR_PIXLIST. * Thus if inheritance via WCSHDR_ALLIMG is enabled as * discussed in note 5 and one of these shared keywords * is present, then WCSHDR_IMGHEAD and WCSHDR_PIXLIST * alone may be sufficient to cause the construction of * coordinate descriptions for binary table image arrays. * * colsel int* Pointer to an array of table column numbers used to * restrict the keywords considered by wcsbth(). * * A null pointer may be specified to indicate that there * is no restriction. Otherwise, the magnitude of * cols[0] specifies the length of the array: * cols[0] > 0: the columns are included, * cols[0] < 0: the columns are excluded. * * For the pixel list keywords TPn_ka and TCn_ka (and * TPCn_ka and TCDn_ka if WCSHDR_LONGKEY is enabled), it * is an error for one column to be selected but not the * other. This is unlike the situation with invalid * keyrecords, which are simply rejected, because the * error is not intrinsic to the header itself but * arises in the way that it is processed. * * Returned: * nreject int* Number of WCS keywords rejected for syntax errors, * illegal values, etc. Keywords not recognized as WCS * keywords are simply ignored, refer also to note 5 * below. * * nwcs int* Number of coordinate representations found. * * wcs struct wcsprm** * Pointer to an array of wcsprm structs containing up * to 27027 coordinate representations, refer to note 6 * below. * * Memory for the array is allocated by wcsbth() which * also invokes wcsini() for each struct to allocate * memory for internal arrays and initialize their * members to default values. Refer also to note 8 * below. Note that wcsset() is not invoked on these * structs. * * This allocated memory must be freed by the user, first * by invoking wcsfree() for each struct, and then by * freeing the array itself. A routine, wcsvfree(), is * provided to do this (see below). * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Invalid column selection. * 4: Fatal error returned by Flex parser. * * Notes: * 1: wcspih() determines the number of coordinate axes independently for * each alternate coordinate representation (denoted by the "a" value in * keywords like CTYPEia) from the higher of * * a: NAXIS, * b: WCSAXESa, * c: The highest axis number in any parameterized WCS keyword. The * keyvalue, as well as the keyword, must be syntactically valid * otherwise it will not be considered. * * If none of these keyword types is present, i.e. if the header only * contains auxiliary WCS keywords for a particular coordinate * representation, then no coordinate description is constructed for it. * * wcsbth() is similar except that it ignores the NAXIS keyword if given * an image header to process. * * The number of axes, which is returned as a member of the wcsprm * struct, may differ for different coordinate representations of the * same image. * * 2: wcspih() and wcsbth() enforce correct FITS "keyword = value" syntax * with regard to "= " occurring in columns 9 and 10. * * However, they do recognize free-format character (NOST 100-2.0, * Sect. 5.2.1), integer (Sect. 5.2.3), and floating-point values * (Sect. 5.2.4) for all keywords. * * 3: Where CROTAn, CDi_ja, and PCi_ja occur together in one header wcspih() * and wcsbth() treat them as described in the prologue to wcs.h. * * 4: WCS Paper I mistakenly defined the pixel list form of WCSNAMEa as * TWCSna instead of WCSNna; the 'T' is meant to substitute for the axis * number in the binary table form of the keyword - note that keywords * defined in WCS Papers II and III that are not parameterised by axis * number have identical forms for binary tables and pixel lists. * Consequently wcsbth() always treats WCSNna and TWCSna as equivalent. * * 5: wcspih() and wcsbth() interpret the "relax" argument as a vector of * flag bits to provide fine-grained control over what non-standard WCS * keywords to accept. The flag bits are subject to change in future and * should be set by using the preprocessor macros (see below) for the * purpose. * * - WCSHDR_none: Don't accept any extensions (not even those in the * errata). Treat non-conformant keywords in the same way as * non-WCS keywords in the header, i.e. simply ignore them. * * - WCSHDR_all: Accept all extensions recognized by the parser. * * - WCSHDR_reject: Reject non-standard keywords (that are not otherwise * accepted). A message will optionally be printed on stderr, as * determined by the ctrl argument, and nreject will be * incremented. * * This flag may be used to signal the presence of non-standard * keywords, otherwise they are simply passed over as though they * did not exist in the header. * * Useful for testing conformance of a FITS header to the WCS * standard. * * - WCSHDR_CROTAia: Accept CROTAia (wcspih()), * iCROTna (wcsbth()), * TCROTna (wcsbth()). * - WCSHDR_EPOCHa: Accept EPOCHa. * - WCSHDR_VELREFa: Accept VELREFa. * wcspih() always recognizes the AIPS-convention keywords, * CROTAn, EPOCH, and VELREF for the primary representation * (a = ' ') but alternates are non-standard. * * wcsbth() accepts EPOCHa and VELREFa only if WCSHDR_AUXIMG is * also enabled. * * - WCSHDR_CD00i00j: Accept CD00i00j (wcspih()). * - WCSHDR_PC00i00j: Accept PC00i00j (wcspih()). * - WCSHDR_PROJPn: Accept PROJPn (wcspih()). * These appeared in early drafts of WCS Paper I+II (before they * were split) and are equivalent to CDi_ja, PCi_ja, and PVi_ma * for the primary representation (a = ' '). PROJPn is * equivalent to PVi_ma with m = n <= 9, and is associated * exclusively with the latitude axis. * * - WCSHDR_RADECSYS: Accept RADECSYS. This appeared in early drafts of * WCS Paper I+II and was subsequently replaced by RADESYSa. * * wcsbth() accepts RADECSYS only if WCSHDR_AUXIMG is also * enabled. * * - WCSHDR_VSOURCE: Accept VSOURCEa or VSOUna (wcsbth()). This appeared * in early drafts of WCS Paper III and was subsequently dropped * in favour of ZSOURCEa and ZSOUna. * * wcsbth() accepts VSOURCEa only if WCSHDR_AUXIMG is also * enabled. * * - WCSHDR_DOBSn (wcsbth() only): Allow DOBSn, the column-specific analogue * of DATE-OBS. By an oversight this was never formally defined * in the standard. * * - WCSHDR_LONGKEY (wcsbth() only): Accept long forms of the alternate * binary table and pixel list WCS keywords, i.e. with "a" non- * blank. Specifically * # jCRPXna TCRPXna : jCRPXn jCRPna TCRPXn TCRPna CRPIXja # - TPCn_ka : - ijPCna - TPn_ka PCi_ja # - TCDn_ka : - ijCDna - TCn_ka CDi_ja # iCDLTna TCDLTna : iCDLTn iCDEna TCDLTn TCDEna CDELTia # iCUNIna TCUNIna : iCUNIn iCUNna TCUNIn TCUNna CUNITia # iCTYPna TCTYPna : iCTYPn iCTYna TCTYPn TCTYna CTYPEia # iCRVLna TCRVLna : iCRVLn iCRVna TCRVLn TCRVna CRVALia # iPVn_ma TPVn_ma : - iVn_ma - TVn_ma PVi_ma # iPSn_ma TPSn_ma : - iSn_ma - TSn_ma PSi_ma * * where the primary and standard alternate forms together with * the image-header equivalent are shown rightwards of the colon. * * The long form of these keywords could be described as quasi- * standard. TPCn_ka, iPVn_ma, and TPVn_ma appeared by mistake * in the examples in WCS Paper II and subsequently these and * also TCDn_ka, iPSn_ma and TPSn_ma were legitimized by the * errata to the WCS papers. * * Strictly speaking, the other long forms are non-standard and * in fact have never appeared in any draft of the WCS papers nor * in the errata. However, as natural extensions of the primary * form they are unlikely to be written with any other intention. * Thus it should be safe to accept them provided, of course, * that the resulting keyword does not exceed the 8-character * limit. * * If WCSHDR_CNAMn is enabled then also accept * # iCNAMna TCNAMna : --- iCNAna --- TCNAna CNAMEia # iCRDEna TCRDEna : --- iCRDna --- TCRDna CRDERia # iCSYEna TCSYEna : --- iCSYna --- TCSYna CSYERia * * Note that CNAMEia, CRDERia, CSYERia, and their variants are * not used by WCSLIB but are stored in the wcsprm struct as * auxiliary information. * * - WCSHDR_CNAMn (wcsbth() only): Accept iCNAMn, iCRDEn, iCSYEn, TCNAMn, * TCRDEn, and TCSYEn, i.e. with "a" blank. While non-standard, * these are the obvious analogues of iCTYPn, TCTYPn, etc. * * - WCSHDR_AUXIMG (wcsbth() only): Allow the image-header form of an * auxiliary WCS keyword with representation-wide scope to * provide a default value for all images. This default may be * overridden by the column-specific form of the keyword. * * For example, a keyword like EQUINOXa would apply to all image * arrays in a binary table, or all pixel list columns with * alternate representation "a" unless overridden by EQUIna. * * Specifically the keywords are: * # LATPOLEa for LATPna # LONPOLEa for LONPna # RESTFREQ for RFRQna # RESTFRQa for RFRQna # RESTWAVa for RWAVna * * whose keyvalues are actually used by WCSLIB, and also keywords * that provide auxiliary information that is simply stored in * the wcsprm struct: * # EPOCH - ... (No column-specific form.) # EPOCHa - ... Only if WCSHDR_EPOCHa is set. # EQUINOXa for EQUIna # RADESYSa for RADEna # RADECSYS for RADEna ... Only if WCSHDR_RADECSYS is set. # SPECSYSa for SPECna # SSYSOBSa for SOBSna # SSYSSRCa for SSRCna # VELOSYSa for VSYSna # VELANGLa for VANGna # VELREF - ... (No column-specific form.) # VELREFa - ... Only if WCSHDR_VELREFa is set. # VSOURCEa for VSOUna ... Only if WCSHDR_VSOURCE is set. # WCSNAMEa for WCSNna ... Or TWCSna (see below). # ZSOURCEa for ZSOUna * # DATE-AVG for DAVGn # DATE-OBS for DOBSn # MJD-AVG for MJDAn # MJD-OBS for MJDOBn # OBSGEO-X for OBSGXn # OBSGEO-Y for OBSGYn # OBSGEO-Z for OBSGZn * * where the image-header keywords on the left provide default * values for the column specific keywords on the right. * * Keywords in the last group, such as MJD-OBS, apply to all * alternate representations, so MJD-OBS would provide a default * value for all images in the header. * * This auxiliary inheritance mechanism applies to binary table * image arrays and pixel lists alike. Most of these keywords * have no default value, the exceptions being LONPOLEa and * LATPOLEa, and also RADESYSa and EQUINOXa which provide * defaults for each other. Thus the only potential difficulty * in using WCSHDR_AUXIMG is that of erroneously inheriting one * of these four keywords. * * Unlike WCSHDR_ALLIMG, the existence of one (or all) of these * auxiliary WCS image header keywords will not by itself cause a * wcsprm struct to be created for alternate representation "a". * This is because they do not provide sufficient information to * create a non-trivial coordinate representation when used in * conjunction with the default values of those keywords, such as * CTYPEia, that are parameterized by axis number. * * - WCSHDR_ALLIMG (wcsbth() only): Allow the image-header form of *all* * image header WCS keywords to provide a default value for all * image arrays in a binary table (n.b. not pixel list). This * default may be overridden by the column-specific form of the * keyword. * * For example, a keyword like CRPIXja would apply to all image * arrays in a binary table with alternate representation "a" * unless overridden by jCRPna. * * Specifically the keywords are those listed above for * WCSHDR_AUXIMG plus * # WCSAXESa for WCAXna * * which defines the coordinate dimensionality, and the following * keywords which are parameterized by axis number: * # CRPIXja for jCRPna # PCi_ja for ijPCna # CDi_ja for ijCDna # CDELTia for iCDEna # CROTAi for iCROTn # CROTAia - ... Only if WCSHDR_CROTAia is set. # CUNITia for iCUNna # CTYPEia for iCTYna # CRVALia for iCRVna # PVi_ma for iVn_ma # PSi_ma for iSn_ma * # CNAMEia for iCNAna # CRDERia for iCRDna # CSYERia for iCSYna * * where the image-header keywords on the left provide default * values for the column specific keywords on the right. * * This full inheritance mechanism only applies to binary table * image arrays, not pixel lists, because in the latter case * there is no well-defined association between coordinate axis * number and column number. * * Note that CNAMEia, CRDERia, CSYERia, and their variants are * not used by WCSLIB but are stored in the wcsprm struct as * auxiliary information. * * Note especially that at least one wcsprm struct will be * returned for each "a" found in one of the image header * keywords listed above: * * - If the image header keywords for "a" ARE NOT inherited by a * binary table, then the struct will not be associated with * any particular table column number and it is up to the user * to provide an association. * * - If the image header keywords for "a" ARE inherited by a * binary table image array, then those keywords are considered * to be "exhausted" and do not result in a separate wcsprm * struct. * * For example, to accept CD00i00j and PC00i00j and reject all other * extensions, use * = relax = WCSHDR_reject | WCSHDR_CD00i00j | WCSHDR_PC00i00j; * * The parser always treats EPOCH as subordinate to EQUINOXa if both are * present, and VSOURCEa is always subordinate to ZSOURCEa. * * Likewise, VELREF is subordinate to the formalism of WCS Paper III, see * spcaips(). * * Neither wcspih() nor wcsbth() currently recognize the AIPS-convention * keywords ALTRPIX or ALTRVAL which effectively define an alternative * representation for a spectral axis. * * 6: Depending on what flags have been set in its "relax" argument, * wcsbth() could return as many as 27027 wcsprm structs: * * - Up to 27 unattached representations derived from image header * keywords. * * - Up to 27 structs for each of up to 999 columns containing an image * arrays. * * - Up to 27 structs for a pixel list. * * Note that it is considered legitimate for a column to contain an image * array and also form part of a pixel list, and in particular that * wcsbth() does not check the TFORM keyword for a pixel list column to * check that it is scalar. * * In practice, of course, a realistic binary table header is unlikely to * contain more than a handful of images. * * In order for wcsbth() to create a wcsprm struct for a particular * coordinate representation, at least one WCS keyword that defines an * axis number must be present, either directly or by inheritance if * WCSHDR_ALLIMG is set. * * When the image header keywords for an alternate representation are * inherited by a binary table image array via WCSHDR_ALLIMG, those * keywords are considered to be "exhausted" and do not result in a * separate wcsprm struct. Otherwise they do. * * 7: Neither wcspih() nor wcsbth() check for duplicated keywords, in most * cases they accept the last encountered. * * 8: wcspih() and wcsbth() use wcsnpv() and wcsnps() (refer to the prologue * of wcs.h) to match the size of the pv[] and ps[] arrays in the wcsprm * structs to the number in the header. Consequently there are no unused * elements in the pv[] and ps[] arrays, indeed they will often be of * zero length. * * 9: The FITS WCS standard for pixel lists assumes that a pixel list * defines one and only one image, i.e. that each row of the binary table * refers to just one event, e.g. the detection of a single photon or * neutrino. * * In the absence of a formal mechanism for identifying the columns * containing pixel coordinates (as opposed to pixel values or ancillary * data recorded at the time the photon or neutrino was detected), * Paper I discusses how the WCS keywords themselves may be used to * identify them. * * In practice, however, pixel lists have been used to store multiple * images. Besides not specifying how to identify columns, the pixel * list convention is also silent on the method to be used to associate * table columns with image axes. * * wcsbth() simply collects all WCS keywords for a particular coordinate * representation (i.e. the "a" value in TCTYna) into one wcsprm struct. * However, these alternates need not be associated with the same table * columns and this allows a pixel list to contain up to 27 separate * images. As usual, if one of these representations happened to contain * more than two celestial axes, for example, then an error would result * when wcsset() is invoked on it. In this case the "colsel" argument * could be used to restrict the columns used to construct the * representation so that it only contained one pair of celestial axes. * * * wcstab() - Tabular construction routine * --------------------------------------- * wcstab() assists in filling in the information in the wcsprm struct relating * to coordinate lookup tables. * * Tabular coordinates ('TAB') present certain difficulties in that the main * components of the lookup table - the multidimensional coordinate array plus * an index vector for each dimension - are stored in a FITS binary table * extension (BINTABLE). Information required to locate these arrays is stored * in PVi_ma and PSi_ma keywords in the image header. * * wcstab() parses the PVi_ma and PSi_ma keywords associated with each 'TAB' * axis and allocates memory in the wcsprm struct for the required number of * tabprm structs. It sets as much of the tabprm struct as can be gleaned from * the image header, and also sets up an array of wtbarr structs (described in * the prologue of wcs.h) to assist in extracting the required arrays from the * BINTABLE extension(s). * * It is then up to the user to allocate memory for, and copy arrays from the * BINTABLE extension(s) into the tabprm structs. A CFITSIO routine, * fits_read_wcstab(), has been provided for this purpose, see getwcstab.h. * wcsset() will automatically take control of this allocated memory, in * particular causing it to be free'd by wcsfree(); the user must not attempt * to free it after wcsset() has been called. * * Note that wcspih() and wcsbth() automatically invoke wcstab() on each of the * wcsprm structs that they return. * * Given and returned: * wcs struct wcsprm* * Coordinate transformation parameters (see below). * * wcstab() sets ntab, tab, nwtb and wtb, allocating * memory for the tab and wtb arrays. This allocated * memory will be free'd automatically by wcsfree(). * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Invalid tabular parameters. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * * wcsidx() - Index alternate coordinate representations * ----------------------------------------------------- * wcsidx() returns an array of 27 indices for the alternate coordinate * representations in the array of wcsprm structs returned by wcspih(). For * the array returned by wcsbth() it returns indices for the unattached * (colnum == 0) representations derived from image header keywords - use * wcsbdx() for those derived from binary table image arrays or pixel lists * keywords. * * Given: * nwcs int Number of coordinate representations in the array. * * wcs const struct wcsprm** * Pointer to an array of wcsprm structs returned by * wcspih() or wcsbth(). * * Returned: * alts int[27] Index of each alternate coordinate representation in * the array: alts[0] for the primary, alts[1] for 'A', * etc., set to -1 if not present. * * For example, if there was no 'P' representation then * = alts['P'-'A'+1] == -1; * * Otherwise, the address of its wcsprm struct would be * = wcs + alts['P'-'A'+1]; * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * * * wcsbdx() - Index alternate coordinate representions * --------------------------------------------------- * wcsbdx() returns an array of 999 x 27 indices for the alternate coordinate * representions for binary table image arrays xor pixel lists in the array of * wcsprm structs returned by wcsbth(). Use wcsidx() for the unattached * representations derived from image header keywords. * * Given: * nwcs int Number of coordinate representations in the array. * * wcs const struct wcsprm** * Pointer to an array of wcsprm structs returned by * wcsbth(). * * type int Select the type of coordinate representation: * 0: binary table image arrays, * 1: pixel lists. * * Returned: * alts short[1000][28] * Index of each alternate coordinate represention in the * array: alts[col][0] for the primary, alts[col][1] for * 'A', to alts[col][26] for 'Z', where col is the * 1-relative column number, and col == 0 is used for * unattached image headers. Set to -1 if not present. * * alts[col][27] counts the number of coordinate * representations of the chosen type for each column. * * For example, if there was no 'P' represention for * column 13 then * = alts[13]['P'-'A'+1] == -1; * * Otherwise, the address of its wcsprm struct would be * = wcs + alts[13]['P'-'A'+1]; * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * * * wcsvfree() - Free the array of wcsprm structs * --------------------------------------------- * wcsvfree() frees the memory allocated by wcspih() or wcsbth() for the array * of wcsprm structs, first invoking wcsfree() on each of the array members. * * Given and returned: * nwcs int* Number of coordinate representations found; set to 0 * on return. * * wcs struct wcsprm** * Pointer to the array of wcsprm structs; set to 0 on * return. * * Function return value: * int Status return value: * 0: Success. * 1: Null wcsprm pointer passed. * * * wcshdo() - Write out a wcsprm struct as a FITS header * ----------------------------------------------------- * wcshdo() translates a wcsprm struct into a FITS header. If the colnum * member of the struct is non-zero then a binary table image array header will * be produced. Otherwise, if the colax[] member of the struct is set non-zero * then a pixel list header will be produced. Otherwise, a primary image or * image extension header will be produced. * * If the struct was originally constructed from a header, e.g. by wcspih(), * the output header will almost certainly differ in a number of respects: * * - The output header only contains WCS-related keywords. In particular, it * does not contain syntactically-required keywords such as SIMPLE, NAXIS, * BITPIX, or END. * * - Deprecated (e.g. CROTAn) or non-standard usage will be translated to * standard (this is partially dependent on whether wcsfix() was applied). * * - Quantities will be converted to the units used internally, basically SI * with the addition of degrees. * * - Floating-point quantities may be given to a different decimal precision. * * - Elements of the PCi_ja matrix will be written if and only if they differ * from the unit matrix. Thus, if the matrix is unity then no elements * will be written. * * - Additional keywords such as WCSAXESa, CUNITia, LONPOLEa and LATPOLEa may * appear. * * - The original keycomments will be lost, although wcshdo() tries hard to * write meaningful comments. * * - Keyword order may be changed. * * Keywords can be translated between the image array, binary table, and pixel * lists forms by manipulating the colnum or colax[] members of the wcsprm * struct. * * Given: * relax int Degree of permissiveness: * 0: Recognize only FITS keywords defined by the * published WCS standard. * -1: Admit all informal extensions of the WCS * standard. * Fine-grained control of the degree of permissiveness * is also possible as explained in the notes below. * * Given and returned: * wcs struct wcsprm* * Pointer to a wcsprm struct containing coordinate * transformation parameters. Will be initialized if * necessary. * * Returned: * nkeyrec int* Number of FITS header keyrecords returned in the * "header" array. * * header char** Pointer to an array of char holding the header. * Storage for the array is allocated by wcshdo() in * blocks of 2880 bytes (32 x 80-character keyrecords) * and must be free'd by the user to avoid memory leaks. * * Each keyrecord is 80 characters long and is *NOT* * null-terminated, so the first keyrecord starts at * (*header)[0], the second at (*header)[80], etc. * * Function return value: * int Status return value (associated with wcs_errmsg[]): * 0: Success. * 1: Null wcsprm pointer passed. * 2: Memory allocation failed. * 3: Linear transformation matrix is singular. * 4: Inconsistent or unrecognized coordinate axis * types. * 5: Invalid parameter value. * 6: Invalid coordinate transformation parameters. * 7: Ill-conditioned coordinate transformation * parameters. * * For returns > 1, a detailed error message is set in * wcsprm::err if enabled, see wcserr_enable(). * * Notes: * wcshdo() interprets the "relax" argument as a vector of flag bits to * provide fine-grained control over what non-standard WCS keywords to write. * The flag bits are subject to change in future and should be set by using * the preprocessor macros (see below) for the purpose. * * - WCSHDO_none: Don't use any extensions. * * - WCSHDO_all: Write all recognized extensions, equivalent to setting each * flag bit. * * - WCSHDO_safe: Write all extensions that are considered to be safe and * recommended. * * - WCSHDO_DOBSn: Write DOBSn, the column-specific analogue of DATE-OBS for * use in binary tables and pixel lists. WCS Paper III introduced * DATE-AVG and DAVGn but by an oversight DOBSn (the obvious analogy) * was never formally defined by the standard. The alternative to * using DOBSn is to write DATE-OBS which applies to the whole table. * This usage is considered to be safe and is recommended. * * - WCSHDO_TPCn_ka: WCS Paper I defined * * - TPn_ka and TCn_ka for pixel lists * * but WCS Paper II uses TPCn_ka in one example and subsequently the * errata for the WCS papers legitimized the use of * * - TPCn_ka and TCDn_ka for pixel lists * * provided that the keyword does not exceed eight characters. This * usage is considered to be safe and is recommended because of the * non-mnemonic terseness of the shorter forms. * * - WCSHDO_PVn_ma: WCS Paper I defined * * - iVn_ma and iSn_ma for bintables and * - TVn_ma and TSn_ma for pixel lists * * but WCS Paper II uses iPVn_ma and TPVn_ma in the examples and * subsequently the errata for the WCS papers legitimized the use of * * - iPVn_ma and iPSn_ma for bintables and * - TPVn_ma and TPSn_ma for pixel lists * * provided that the keyword does not exceed eight characters. This * usage is considered to be safe and is recommended because of the * non-mnemonic terseness of the shorter forms. * * - WCSHDO_CRPXna: For historical reasons WCS Paper I defined * * - jCRPXn, iCDLTn, iCUNIn, iCTYPn, and iCRVLn for bintables and * - TCRPXn, TCDLTn, TCUNIn, TCTYPn, and TCRVLn for pixel lists * * for use without an alternate version specifier. However, because * of the eight-character keyword constraint, in order to accommodate * column numbers greater than 99 WCS Paper I also defined * * - jCRPna, iCDEna, iCUNna, iCTYna and iCRVna for bintables and * - TCRPna, TCDEna, TCUNna, TCTYna and TCRVna for pixel lists * * for use with an alternate version specifier (the "a"). Like the * PC, CD, PV, and PS keywords there is an obvious tendency to * confuse these two forms for column numbers up to 99. It is very * unlikely that any parser would reject keywords in the first set * with a non-blank alternate version specifier so this usage is * considered to be safe and is recommended. * * - WCSHDO_CNAMna: WCS Papers I and III defined * * - iCNAna, iCRDna, and iCSYna for bintables and * - TCNAna, TCRDna, and TCSYna for pixel lists * * By analogy with the above, the long forms would be * * - iCNAMna, iCRDEna, and iCSYEna for bintables and * - TCNAMna, TCRDEna, and TCSYEna for pixel lists * * Note that these keywords provide auxiliary information only, none * of them are needed to compute world coordinates. This usage is * potentially unsafe and is not recommended at this time. * * - WCSHDO_WCSNna: In light of wcsbth() note 4, write WCSNna instead of * TWCSna for pixel lists. While wcsbth() treats WCSNna and TWCSna * as equivalent, other parsers may not. Consequently, this usage * is potentially unsafe and is not recommended at this time. * * * Global variable: const char *wcshdr_errmsg[] - Status return messages * --------------------------------------------------------------------- * Error messages to match the status value returned from each function. * Use wcs_errmsg[] for status returns from wcshdo(). * *===========================================================================*/ #ifndef WCSLIB_WCSHDR #define WCSLIB_WCSHDR #include "wcs.h" #ifdef __cplusplus extern "C" { #endif #define WCSHDR_none 0x00000000 #define WCSHDR_all 0x000FFFFF #define WCSHDR_reject 0x10000000 #define WCSHDR_CROTAia 0x00000001 #define WCSHDR_EPOCHa 0x00000002 #define WCSHDR_VELREFa 0x00000004 #define WCSHDR_CD00i00j 0x00000008 #define WCSHDR_PC00i00j 0x00000010 #define WCSHDR_PROJPn 0x00000020 #define WCSHDR_RADECSYS 0x00000040 #define WCSHDR_VSOURCE 0x00000080 #define WCSHDR_DOBSn 0x00000100 #define WCSHDR_LONGKEY 0x00000200 #define WCSHDR_CNAMn 0x00000400 #define WCSHDR_AUXIMG 0x00000800 #define WCSHDR_ALLIMG 0x00001000 #define WCSHDR_IMGHEAD 0x00010000 #define WCSHDR_BIMGARR 0x00020000 #define WCSHDR_PIXLIST 0x00040000 #define WCSHDO_none 0x00 #define WCSHDO_all 0xFF #define WCSHDO_safe 0x0F #define WCSHDO_DOBSn 0x01 #define WCSHDO_TPCn_ka 0x02 #define WCSHDO_PVn_ma 0x04 #define WCSHDO_CRPXna 0x08 #define WCSHDO_CNAMna 0x10 #define WCSHDO_WCSNna 0x20 extern const char *wcshdr_errmsg[]; enum wcshdr_errmsg_enum { WCSHDRERR_SUCCESS = 0, /* Success. */ WCSHDRERR_NULL_POINTER = 1, /* Null wcsprm pointer passed. */ WCSHDRERR_MEMORY = 2, /* Memory allocation failed. */ WCSHDRERR_BAD_COLUMN = 3, /* Invalid column selection. */ WCSHDRERR_PARSER = 4, /* Fatal error returned by Flex parser. */ WCSHDRERR_BAD_TABULAR_PARAMS = 5 /* Invalid tabular parameters. */ }; int wcspih(char *header, int nkeyrec, int relax, int ctrl, int *nreject, int *nwcs, struct wcsprm **wcs); int wcsbth(char *header, int nkeyrec, int relax, int ctrl, int keysel, int *colsel, int *nreject, int *nwcs, struct wcsprm **wcs); int wcstab(struct wcsprm *wcs); int wcsidx(int nwcs, struct wcsprm **wcs, int alts[27]); int wcsbdx(int nwcs, struct wcsprm **wcs, int type, short alts[1000][28]); int wcsvfree(int *nwcs, struct wcsprm **wcs); int wcshdo(int relax, struct wcsprm *wcs, int *nkeyrec, char **header); #ifdef __cplusplus } #endif #endif /* WCSLIB_WCSHDR */ pywcs-1.12/wcslib/C/wcslib.h0000644001153600020070000000414612310355626017754 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcslib.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the FITS World Coordinate System * (WCS) standard. * * Summary of wcslib.h * ------------------- * This header file is provided purely for convenience. Use it to include all * of the separate WCSLIB headers. * *===========================================================================*/ #ifndef WCSLIB_WCSLIB #define WCSLIB_WCSLIB #include "cel.h" #include "fitshdr.h" #include "lin.h" #include "log.h" #include "prj.h" #include "spc.h" #include "sph.h" #include "spx.h" #include "tab.h" #include "wcs.h" #include "wcserr.h" #include "wcsfix.h" #include "wcshdr.h" #include "wcsmath.h" #include "wcsprintf.h" #include "wcstrig.h" #include "wcsunits.h" #include "wcsutil.h" #endif /* WCSLIB_WCSLIB */ pywcs-1.12/wcslib/C/wcsmath.h0000644001153600020070000000405112310355626020132 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsmath.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * Summary of wcsmath.h * -------------------- * Definition of mathematical constants used by WCSLIB. * *===========================================================================*/ #ifndef WCSLIB_WCSMATH #define WCSLIB_WCSMATH #ifdef PI #undef PI #endif #ifdef D2R #undef D2R #endif #ifdef R2D #undef R2D #endif #ifdef SQRT2 #undef SQRT2 #endif #ifdef SQRT2INV #undef SQRT2INV #endif #define PI 3.141592653589793238462643 #define D2R PI/180.0 #define R2D 180.0/PI #define SQRT2 1.4142135623730950488 #define SQRT2INV 1.0/SQRT2 #ifdef UNDEFINED #undef UNDEFINED #endif #define UNDEFINED 987654321.0e99 #define undefined(value) (value == UNDEFINED) #endif /* WCSLIB_WCSMATH */ pywcs-1.12/wcslib/C/wcspih.l0000644001153600020070000006260512310355626017776 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcspih.l,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * wcspih.l is a Flex description file containing the definition of a lexical * scanner for parsing the WCS keyrecords from a FITS primary image or image * extension header. * * wcspih.l requires Flex v2.5.4 or later. Refer to wcshdr.h for a description * of the user interface and operating notes. * * Implementation notes * -------------------- * Use of the WCSAXESa keyword is not mandatory. Its default value is "the * larger of NAXIS and the largest index of these keywords [i.e. CRPIXj, PCi_j * or CDi_j, CDELTi, CTYPEi, CRVALi, and CUNITi] found in the FITS header". * Consequently the definition of WCSAXESa effectively invalidates the use of * NAXIS for determining the number of coordinate axes and forces a preliminary * pass through the header to determine the "largest index" in headers where * WCSAXESa was omitted. * * Furthermore, since the use of WCSAXESa is optional, there is no way to * determine the number of coordinate representations (the "a" value) other * than by parsing all of the WCS keywords in the header; even if WCSAXESa was * specified for some representations it cannot be known in advance whether it * was specified for all of those present in the header. * * Hence the definition of WCSAXESa forces the scanner to be implemented in two * passes. The first pass is used to determine the number of coordinate * representations (up to 27) and the number of coordinate axes in each. * Effectively WCSAXESa is ignored unless it exceeds the "largest index" in * which case the keywords for the extra axes assume their default values. The * number of PVi_ma and PSi_ma keywords in each representation is also counted * in the first pass. * * On completion of the first pass, memory is allocated for an array of the * required number of wcsprm structs and each of these is initialized * appropriately. These structs are filled in the second pass. * * The parser does not check for duplicated keywords, it accepts the last * encountered. * *===========================================================================*/ /* Options. */ %option full %option never-interactive %option noyywrap %option outfile="wcspih.c" %option prefix="wcspih" /* Indices for parameterized keywords. */ I0 [0-9] I1 [1-9] I2 [1-9][0-9] I3 [1-9][0-9]{2} I4 [1-9][0-9]{3} /* Alternate coordinate system identifier. */ ALT [ A-Z] /* Keyvalue data types. */ INTEGER [+-]?[0-9]+ FLOAT [+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)? STRING '([^']|'')*' /* Exclusive start states. */ %x CROTAi PROJPn %x CCCCCia CCi_ja CCi_ma CCCCCCCa CCCCCCCC %x VALUE %x INTEGER_VAL FLOAT_VAL STRING_VAL %x COMMENT %x DISCARD ERROR FLUSH %{ #include #include #include #include #include #include "wcs.h" #include "wcshdr.h" #include "wcsmath.h" #define INTEGER 0 #define FLOAT 1 #define STRING 2 #define YY_DECL int wcspih(char *header, int nkeyrec, int relax, int ctrl, \ int *nreject, int *nwcs, struct wcsprm **wcs) #define YY_INPUT(inbuff, count, bufsize) \ { \ if (wcspih_nkeyrec) { \ strncpy(inbuff, wcspih_hdr, 80); \ inbuff[80] = '\n'; \ wcspih_hdr += 80; \ wcspih_nkeyrec--; \ count = 81; \ } else { \ count = YY_NULL; \ } \ } /* These global variables are required by YY_INPUT. */ char *wcspih_hdr; int wcspih_nkeyrec; int wcspih_final(int alts[], double epoch[], double vsource[], int *nwcs, struct wcsprm **wcs); int wcspih_inits(int naxis, int alts[], int npv[], int nps[], int *nwcs, struct wcsprm **wcs); void wcspih_naxes(int naxis, int i, int j, char a, int alts[], int *npptr); /* Used in preempting the call to exit() by yy_fatal_error(). */ jmp_buf wcspih_abort_jmp_env; #define exit(status) longjmp(wcspih_abort_jmp_env, status) %} %% /* Keyword indices, as used in the WCS papers, e.g. PCi_ja, PVi_ma. */ char a; int i, j, m; char *cptr, *errmsg, errtxt[80], *hptr, *keep; int altlin, alts[27], ialt, idx, ipx, ix, jx, naxis, *npptr, nps[27], npv[27], pass, status, valtype, voff; double epoch[27], vsource[27]; void *vptr, *wptr; struct wcsprm *wcsp; int yylex_destroy(void); naxis = 0; for (ialt = 0; ialt < 27; ialt++) { alts[ialt] = 0; npv[ialt] = 0; nps[ialt] = 0; epoch[ialt] = UNDEFINED; vsource[ialt] = UNDEFINED; } /* Parameters used to implement YY_INPUT. */ wcspih_hdr = header; wcspih_nkeyrec = nkeyrec; /* Our handle on the input stream. */ hptr = header; keep = 0x0; *nreject = 0; /* Keyword parameters. */ i = j = m = 0; a = ' '; /* For decoding the keyvalue. */ valtype = -1; idx = -1; vptr = 0x0; /* For keywords that require special handling. */ altlin = 0; npptr = 0x0; /* The data structures produced. */ *nwcs = 0; *wcs = 0x0; pass = 1; /* Return here via longjmp() invoked by yy_fatal_error(). */ if (setjmp(wcspih_abort_jmp_env)) { return 3; } BEGIN(INITIAL); ^NAXIS" = "" "*{INTEGER} { if (pass == 1) { sscanf(yytext, "NAXIS = %d", &naxis); } if (naxis < 0) { errmsg = errtxt; sprintf(errmsg, "Negative value of NAXIS ignored: %d", naxis); naxis = 0; BEGIN(ERROR); } else { BEGIN(DISCARD); } } ^WCSAXES{ALT}=" "" "*{INTEGER} { if (pass == 1) { sscanf(yytext, "WCSAXES%c= %d", &a, &i); wcspih_naxes(naxis, i, 0, a, alts, 0); } BEGIN(FLUSH); } ^CRPIX { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->crpix); BEGIN(CCCCCia); } ^PC { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->pc); altlin = 1; BEGIN(CCi_ja); } ^CD { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->cd); altlin = 2; BEGIN(CCi_ja); } ^CDELT { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->cdelt); BEGIN(CCCCCia); } ^CROTA { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->crota); altlin = 4; BEGIN(CROTAi); } ^CUNIT { valtype = STRING; if (pass == 2) vptr = &((*wcs)->cunit); BEGIN(CCCCCia); } ^CTYPE { valtype = STRING; if (pass == 2) vptr = &((*wcs)->ctype); BEGIN(CCCCCia); } ^CRVAL { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->crval); BEGIN(CCCCCia); } ^LONPOLE { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->lonpole); BEGIN(CCCCCCCa); } ^LATPOLE { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->latpole); BEGIN(CCCCCCCa); } ^RESTFRQ { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->restfrq); BEGIN(CCCCCCCa); } ^RESTFREQ { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->restfrq); unput(' '); BEGIN(CCCCCCCa); } ^RESTWAV { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->restwav); BEGIN(CCCCCCCa); } ^PV { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->pv); npptr = npv; BEGIN(CCi_ma); } ^PROJP { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->pv); npptr = npv; BEGIN(PROJPn); } ^PS { valtype = STRING; if (pass == 2) vptr = &((*wcs)->ps); npptr = nps; BEGIN(CCi_ma); } ^CNAME { valtype = STRING; if (pass == 2) vptr = &((*wcs)->cname); BEGIN(CCCCCia); } ^CRDER { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->crder); BEGIN(CCCCCia); } ^CSYER { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->csyer); BEGIN(CCCCCia); } ^DATE-AVG { valtype = STRING; if (pass == 2) vptr = (*wcs)->dateavg; if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } ^DATE-OBS { valtype = STRING; if (pass == 2) vptr = (*wcs)->dateobs; if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } ^EPOCH{ALT}" " { sscanf(yytext, "EPOCH%c", &a); if (a == ' ' || relax & WCSHDR_EPOCHa) { valtype = FLOAT; if (pass == 2) { vptr = epoch; if (a >= 'A') { vptr = (void *)((double *)vptr + alts[a-'A'+1]); } } unput(' '); BEGIN(CCCCCCCa); } else if (relax & WCSHDR_reject) { errmsg = "EPOCH keyword may not have an alternate version code"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } ^EQUINOX { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->equinox); BEGIN(CCCCCCCa); } ^MJD-AVG" " { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->mjdavg); if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } ^MJD-OBS" " { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->mjdobs); if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } ^OBSGEO-X { valtype = FLOAT; if (pass == 2) vptr = (*wcs)->obsgeo; if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } ^OBSGEO-Y { valtype = FLOAT; if (pass == 2) vptr = (*wcs)->obsgeo + 1; if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } ^OBSGEO-Z { valtype = FLOAT; if (pass == 2) vptr = (*wcs)->obsgeo + 2; if (ctrl < -10) keep = wcspih_hdr - 80; BEGIN(CCCCCCCC); } ^RADESYS { valtype = STRING; if (pass == 2) vptr = (*wcs)->radesys; BEGIN(CCCCCCCa); } ^RADECSYS { if (relax & WCSHDR_RADECSYS) { valtype = STRING; if (pass == 2) vptr = (*wcs)->radesys; unput(' '); BEGIN(CCCCCCCa); } else if (relax & WCSHDR_reject) { errmsg = "RADECSYS is non-standard, use RADESYSa"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } ^SPECSYS { valtype = STRING; if (pass == 2) vptr = (*wcs)->specsys; BEGIN(CCCCCCCa); } ^SSYSOBS { valtype = STRING; if (pass == 2) vptr = (*wcs)->ssysobs; BEGIN(CCCCCCCa); } ^SSYSSRC { valtype = STRING; if (pass == 2) vptr = (*wcs)->ssyssrc; BEGIN(CCCCCCCa); } ^VELANGL { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->velangl); BEGIN(CCCCCCCa); } ^VELOSYS { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->velosys); BEGIN(CCCCCCCa); } ^VELREF{ALT}" " { sscanf(yytext, "VELREF%c", &a); if (a == ' ' || relax & WCSHDR_VELREFa) { valtype = INTEGER; if (pass == 2) vptr = &((*wcs)->velref); unput(a); BEGIN(CCCCCCCa); } else if (relax & WCSHDR_reject) { errmsg = "VELREF keyword may not have an alternate version code"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } ^VSOURCE{ALT} { sscanf(yytext, "VSOURCE%c", &a); if (relax & WCSHDR_VSOURCE) { valtype = FLOAT; if (pass == 2) { vptr = vsource; if (a >= 'A') { vptr = (void *)((double *)vptr + alts[a-'A'+1]); } } unput(' '); BEGIN(CCCCCCCa); } else if (relax & WCSHDR_reject) { errmsg = "Deprecated VSOURCEa keyword rejected"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } ^WCSNAME { valtype = STRING; if (pass == 2) vptr = (*wcs)->wcsname; BEGIN(CCCCCCCa); } ^ZSOURCE { valtype = FLOAT; if (pass == 2) vptr = &((*wcs)->zsource); BEGIN(CCCCCCCa); } ^END" "{77} { yyless(0); if (wcspih_nkeyrec) { wcspih_nkeyrec = 0; errmsg = "Keyrecords following the END keyrecord were ignored"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } ^. { BEGIN(DISCARD); } {I1}{ALT}" " | {I2}{ALT} { sscanf(yytext, "%d%c", &i, &a); idx = i - 1; BEGIN(VALUE); } {I3} { /* Invalid axis number will be caught by . */ sscanf(yytext, "%3d", &i); BEGIN(VALUE); } . { BEGIN(DISCARD); } {I1}_{I1}{ALT}" " | {I1}_{I2}{ALT}" " | {I2}_{I1}{ALT}" " | {I2}_{I2}{ALT} { sscanf(yytext, "%d_%d%c", &i, &j, &a); if (pass == 2) { wcsp = *wcs; if (a != ' ') { wcsp += alts[a-'A'+1]; } idx = (i-1)*(wcsp->naxis) + j - 1; } BEGIN(VALUE); } {I1}_{I3}{ALT} | {I3}_{I1}{ALT} | {I1}_{I4} | {I2}_{I3} | {I3}_{I2} | {I4}_{I1} { /* Invalid axis numbers will be caught by . */ sscanf(yytext, "%d_%d", &i, &j); BEGIN(VALUE); } {I0}{6} { /* This covers the defunct forms CD00i00j and PC00i00j. */ if (((relax & WCSHDR_PC00i00j) && (altlin == 1)) || ((relax & WCSHDR_CD00i00j) && (altlin == 2))) { sscanf(yytext, "%3d%3d", &i, &j); a = ' '; if (pass == 2) { idx = (i-1)*((*wcs)->naxis) + j - 1; } BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = errtxt; sprintf(errmsg, "Defunct form of %si_ja keyword", (altlin==1) ? "PC" : "CD"); BEGIN(ERROR); } else { BEGIN(DISCARD); } } . { BEGIN(DISCARD); } {I1}{ALT}" " | {I2}{ALT} { sscanf(yytext, "%d%c", &i, &a); if (a == ' ' || relax & WCSHDR_CROTAia) { idx = i - 1; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = "CROTAn keyword may not have an alternate version code"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } {I3} { sscanf(yytext, "%d", &i); a = ' '; idx = i - 1; BEGIN(VALUE); } . { BEGIN(DISCARD); } {ALT} | . { idx = -1; if (YY_START == CCCCCCCa) { sscanf(yytext, "%c", &a); } else { unput(yytext[0]); a = 0; } BEGIN(VALUE); } . { BEGIN(DISCARD); } {I1}_{I0}{ALT}" " | {I1}_{I2}{ALT}" " | {I2}_{I0}{ALT}" " | {I2}_{I2}{ALT} { sscanf(yytext, "%d_%d%c", &i, &m, &a); idx = -1; BEGIN(VALUE); } {I1}_{I3}{ALT} | {I3}_{I0}{ALT} | {I1}_{I4} | {I2}_{I3} | {I3}_{I2} | {I4}_{I0} { /* Invalid parameters will be caught by . */ sscanf(yytext, "%d_%d", &i, &m); BEGIN(VALUE); } . { BEGIN(DISCARD); } {I0}" " { if (relax & WCSHDR_PROJPn) { sscanf(yytext, "%d", &m); i = 0; a = ' '; idx = -1; BEGIN(VALUE); } else if (relax & WCSHDR_reject) { errmsg = "Defunct PROJPn keyword rejected"; BEGIN(ERROR); } else { BEGIN(DISCARD); } } . { BEGIN(DISCARD); } =" "+ { /* Do checks on i, j & m. */ if (i > 99 || j > 99 || m > 99) { if (relax & WCSHDR_reject) { errmsg = errtxt; if (i > 99 || j > 99) { sprintf(errmsg, "Axis number exceeds 99"); } else if (m > 99) { sprintf(errmsg, "Parameter number exceeds 99"); } BEGIN(ERROR); } else { /* Pretend we don't recognize it. */ BEGIN(DISCARD); } } else { if (valtype == INTEGER) { BEGIN(INTEGER_VAL); } else if (valtype == FLOAT) { BEGIN(FLOAT_VAL); } else if (valtype == STRING) { BEGIN(STRING_VAL); } else { errmsg = errtxt; sprintf(errmsg, "Internal parser ERROR, bad data type: %d", valtype); BEGIN(ERROR); } } } . { errmsg = "Invalid KEYWORD = VALUE syntax"; BEGIN(ERROR); } {INTEGER} { if (pass == 1) { wcspih_naxes(naxis, i, j, a, alts, npptr); BEGIN(FLUSH); } else { if (vptr) { /* Determine the coordinate representation. */ for (ialt = 0; ialt < *nwcs; ialt++) { /* The loop here is for keywords that apply */ /* to every alternate; these have a == 0. */ if (a >= 'A') { ialt = alts[a-'A'+1]; } wptr = vptr; if (ialt) { voff = (char *)(*wcs+ialt) - (char *)(*wcs); wptr = (void *)((char *)vptr + voff); } /* Apply keyword parameterization. */ if (idx >= 0) { wptr = *((int **)wptr) + idx; } /* Read the keyvalue. */ sscanf(yytext, "%d", (int *)wptr); if (a) break; } BEGIN(COMMENT); } else { errmsg = "Internal parser ERROR, null int pointer"; BEGIN(ERROR); } } } . { errmsg = "An integer value was expected"; BEGIN(ERROR); } {FLOAT} { if (pass == 1) { wcspih_naxes(naxis, i, j, a, alts, npptr); BEGIN(FLUSH); } else { if (vptr) { /* Determine the coordinate representation. */ for (ialt = 0; ialt < *nwcs; ialt++) { /* The loop here is for keywords like MJD-OBS that */ /* apply to every alternate; these have a == 0. */ if (a >= 'A') { ialt = alts[a-'A'+1]; } wptr = vptr; if (ialt) { voff = (char *)(*wcs+ialt) - (char *)(*wcs); wptr = (void *)((char *)vptr + voff); } /* Apply keyword parameterization. */ if (idx >= 0) { wptr = *((double **)wptr) + idx; } else if (npptr == npv) { ipx = (*wcs+ialt)->npv++; (*wcs+ialt)->pv[ipx].i = i; (*wcs+ialt)->pv[ipx].m = m; wptr = &((*wcs+ialt)->pv[ipx].value); } /* Read the keyvalue. */ sscanf(yytext, "%lf", (double *)wptr); /* Flag the presence of PCi_ja, or CDi_ja and/or CROTAia. */ if (altlin) { (*wcs+ialt)->altlin |= altlin; altlin = 0; } if (a) break; } BEGIN(COMMENT); } else { errmsg = "Internal parser ERROR, null float pointer"; BEGIN(ERROR); } } } . { errmsg = "A floating-point value was expected"; BEGIN(ERROR); } {STRING} { if (pass == 1) { wcspih_naxes(naxis, i, j, a, alts, npptr); BEGIN(FLUSH); } else { if (vptr) { /* Determine the coordinate representation. */ for (ialt = 0; ialt < *nwcs; ialt++) { /* The loop here is for keywords like DATE-OBS that */ /* apply to every alternate; these have a == 0. */ if (a >= 'A') { ialt = alts[a-'A'+1]; } wptr = vptr; if (ialt) { voff = (char *)(*wcs+ialt) - (char *)(*wcs); wptr = (void *)((char *)vptr + voff); } /* Apply keyword parameterization. */ if (idx >= 0) { wptr = *((char (**)[72])wptr) + idx; } else if (npptr == nps) { ipx = (*wcs+ialt)->nps++; (*wcs+ialt)->ps[ipx].i = i; (*wcs+ialt)->ps[ipx].m = m; wptr = (*wcs+ialt)->ps[ipx].value; } /* Read the keyvalue. */ cptr = (char *)wptr; strcpy(cptr, yytext+1); /* Squeeze out repeated quotes. */ ix = 0; for (jx = 0; jx < 72; jx++) { if (ix < jx) { cptr[ix] = cptr[jx]; } if (cptr[jx] == '\0') { if (ix) cptr[ix-1] = '\0'; break; } else if (cptr[jx] == '\'' && cptr[jx+1] == '\'') { jx++; } ix++; } if (a) break; } BEGIN(COMMENT); } else { errmsg = "Internal parser ERROR, null string pointer"; BEGIN(ERROR); } } } . { errmsg = "A string value was expected"; BEGIN(ERROR); } " "*\/.* | " "* { BEGIN(FLUSH); } . { errmsg = "Malformed keycomment"; BEGIN(ERROR); } .* { if (pass == 2) { if (ctrl < 0) { /* Preserve discards. */ keep = wcspih_hdr - 80; } else if (ctrl > 2) { fprintf(stderr, "%.80s\n Discarded.\n", wcspih_hdr-80); } } BEGIN(FLUSH); } .* { (*nreject)++; if (pass == 2) { if (ctrl%10 == -1) { /* Preserve rejects. */ keep = wcspih_hdr - 80; } if (abs(ctrl%10) > 1) { fprintf(stderr, "%.80s\n%4d: %s.\n", wcspih_hdr-80, *nreject, errmsg); } } BEGIN(FLUSH); } .*\n { if (pass == 2 && keep) { if (hptr < keep) { strncpy(hptr, keep, 80); } hptr += 80; } i = j = m = 0; a = ' '; valtype = -1; keep = 0x0; altlin = 0; npptr = 0x0; BEGIN(INITIAL); } <> { /* End-of-input. */ if (pass == 1) { if ((status = wcspih_inits(naxis, alts, npv, nps, nwcs, wcs)) || *nwcs == 0) { yylex_destroy(); return status; } if (abs(ctrl%10) > 2) { if (*nwcs == 1) { fprintf(stderr, "Found one coordinate representation.\n"); } else { fprintf(stderr, "Found %d coordinate representations.\n", *nwcs); } } wcspih_hdr = header; wcspih_nkeyrec = nkeyrec; *nreject = 0; pass = 2; i = j = m = 0; a = ' '; valtype = -1; yyrestart(yyin); } else { yylex_destroy(); if (ctrl < 0) { *hptr = '\0'; } else if (ctrl == 1) { fprintf(stderr, "%d WCS keyrecords were rejected.\n", *nreject); } return wcspih_final(alts, epoch, vsource, nwcs, wcs); } } %% /*---------------------------------------------------------------------------- * Determine the number of coordinate representations (up to 27) and the * number of coordinate axes in each, and count the number of PVi_ma and * PSi_ma keywords in each representation. *---------------------------------------------------------------------------*/ void wcspih_naxes(int naxis, int i, int j, char a, int alts[], int *npptr) { /* On the first pass alts[] is used to determine the number of axes */ /* for each of the 27 possible alternate coordinate descriptions. */ int ialt, *ip; if (a == 0) { return; } ialt = 0; if (a != ' ') { ialt = a - 'A' + 1; } ip = alts + ialt; if (*ip < naxis) { *ip = naxis; } /* i or j can be greater than naxis. */ if (*ip < i) { *ip = i; } if (*ip < j) { *ip = j; } if (npptr) { npptr[ialt]++; } } /*---------------------------------------------------------------------------- * Allocate memory for an array of the required number of wcsprm structs and * initialize each of them. *---------------------------------------------------------------------------*/ int wcspih_inits( int naxis, int alts[], int npv[], int nps[], int *nwcs, struct wcsprm **wcs) { int ialt, npsmax, npvmax, status = 0; struct wcsprm *wcsp; /* Find the number of coordinate descriptions. */ *nwcs = 0; for (ialt = 0; ialt < 27; ialt++) { if (alts[ialt]) (*nwcs)++; } if (!(*nwcs) && naxis) { /* NAXIS is non-zero but there were no WCS keywords with an alternate version code; create a default WCS with blank alternate version. */ wcspih_naxes(naxis, 0, 0, ' ', alts, 0x0); *nwcs = 1; } if (*nwcs) { /* Allocate memory for the required number of wcsprm structs. */ if (!(*wcs = calloc(*nwcs, sizeof(struct wcsprm)))) { return 2; } /* Record the current values of NPVMAX and NPSMAX. */ npvmax = wcsnpv(-1); npsmax = wcsnps(-1); /* Initialize each wcsprm struct. */ wcsp = *wcs; *nwcs = 0; for (ialt = 0; ialt < 27; ialt++) { if (alts[ialt]) { wcsp->flag = -1; wcsnpv(npv[ialt]); wcsnps(nps[ialt]); if ((status = wcsini(1, alts[ialt], wcsp))) { wcsvfree(nwcs, wcs); break; } /* Record the alternate version code. */ if (ialt) { wcsp->alt[0] = 'A' + ialt - 1; } /* On the second pass alts[] indexes the array of wcsprm structs. */ alts[ialt] = (*nwcs)++; wcsp++; } } /* Restore the original values of NPVMAX and NPSMAX. */ wcsnpv(npvmax); wcsnps(npsmax); } return status; } /*---------------------------------------------------------------------------- * Interpret special keywords encountered for each coordinate representation. *---------------------------------------------------------------------------*/ int wcspih_final( int alts[], double epoch[], double vsource[], int *nwcs, struct wcsprm **wcs) { int ialt, status; double beta, c = 299792458.0; for (ialt = 0; ialt < *nwcs; ialt++) { /* Check for EPOCH overriding EQUINOXa. */ if (undefined((*wcs+ialt)->equinox) && !undefined(epoch[ialt])) { /* Set EQUINOXa. */ (*wcs+ialt)->equinox = epoch[ialt]; } /* Check for VSOURCEa overriding ZSOURCEa. */ if (undefined((*wcs+ialt)->zsource) && !undefined(vsource[ialt])) { /* Convert relativistic Doppler velocity to redshift. */ beta = vsource[ialt]/c; (*wcs+ialt)->zsource = (1.0+beta)/sqrt(1.0 - beta*beta) - 1.0; } /* Interpret -TAB header keywords. */ if ((status = wcstab(*wcs+ialt))) { wcsvfree(nwcs, wcs); return status; } } return 0; } pywcs-1.12/wcslib/C/wcsprintf.c0000644001153600020070000000655412310355626020510 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsprintf.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include "wcsprintf.h" static FILE *wcsprintf_file = 0x0; static char *wcsprintf_buff = 0x0; static char *wcsprintf_bufp = 0x0; static size_t wcsprintf_size = 0; /*--------------------------------------------------------------------------*/ int wcsprintf_set(FILE *wcsout) { if (wcsout != 0x0) { /* Output to file. */ wcsprintf_file = wcsout; if (wcsprintf_buff != 0x0) { /* Release the buffer. */ free(wcsprintf_buff); wcsprintf_buff = 0x0; } } else { /* Output to buffer. */ if (wcsprintf_buff == 0x0) { /* Allocate a buffer. */ wcsprintf_buff = malloc(1024); if (wcsprintf_buff == NULL) { return 1; } wcsprintf_size = 1024; } /* Reset pointer to the start of the buffer. */ wcsprintf_bufp = wcsprintf_buff; *wcsprintf_bufp = '\0'; } return 0; } /*--------------------------------------------------------------------------*/ const char *wcsprintf_buf(void) { return wcsprintf_buff; } /*--------------------------------------------------------------------------*/ int wcsprintf(const char *format, ...) { int nbytes; size_t used; va_list arg_list; if (wcsprintf_buff == 0x0 && wcsprintf_file == 0x0) { /* Send output to stdout if wcsprintf_set() hasn't been called. */ wcsprintf_file = stdout; } va_start(arg_list, format); if (wcsprintf_file) { /* Output to file. */ nbytes = vfprintf(wcsprintf_file, format, arg_list); } else { /* Output to buffer. */ used = wcsprintf_bufp - wcsprintf_buff; if (wcsprintf_size - used < 128) { /* Expand the buffer. */ wcsprintf_size += 1024; wcsprintf_buff = realloc(wcsprintf_buff, wcsprintf_size); if (wcsprintf_buff == NULL) { return 1; } wcsprintf_bufp = wcsprintf_buff + used; } nbytes = vsprintf(wcsprintf_bufp, format, arg_list); wcsprintf_bufp += nbytes; } va_end(arg_list); return nbytes; } pywcs-1.12/wcslib/C/wcsprintf.h0000644001153600020070000001217312310355626020507 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsprintf.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the FITS World Coordinate System * (WCS) standard. * * Summary of the wcsprintf routines * --------------------------------- * These routines allow diagnostic output from celprt(), linprt(), prjprt(), * spcprt(), tabprt(), wcsprt(), and wcserr_prt() to be redirected to a file or * captured in a string buffer. Those routines all use wcsprintf() for output. * * * wcsprintf() - Print function used by WCSLIB diagnostic routines * --------------------------------------------------------------- * wcsprintf() is used by the celprt(), linprt(), prjprt(), spcprt(), tabprt(), * wcsprt(), and wcserr_prt() routines. Its output may be redirected to a file * or string buffer via wcsprintf_set(). By default output goes to stdout. * * Given: * format char* Format string, passed to one of the printf(3) family * of stdio library functions. * * ... mixed Argument list matching format, as per printf(3). * * Function return value: * int Number of bytes written. * * * wcsprintf_set() - Set output disposition for wcsprintf() * -------------------------------------------------------- * wcsprintf_set() sets the output disposition for wcsprintf() which is used by * the celprt(), linprt(), prjprt(), spcprt(), tabprt(), wcsprt(), and * wcserr_prt() routines. * * Output goes to stdout by default if wcsprintf_set() has not been called. * * Given: * wcsout FILE* Pointer to an output stream that has been opened for * writing, e.g. by the fopen() stdio library function, * or one of the predefined stdio output streams - stdout * and stderr. If zero (NULL), output is written to an * internally-allocated string buffer, the address of * which may be obtained by wcsprintf_buf(). * * Function return value: * int Status return value: * 0: Success. * * * wcsprintf_buf() - Get the address of the internal string buffer * --------------------------------------------------------------- * wcsprintf_buf() returns the address of the internal string buffer created * when wcsprintf_set() is invoked with its FILE* argument set to zero. * * Function return value: * const char * * Address of the internal string buffer. The user may * free this buffer by calling wcsprintf_set() with a * valid FILE*, e.g. stdout. The free() stdlib library * function must NOT be invoked on this const pointer. * * * WCSPRINTF_PTR() macro - Print addresses in a consistent way * ----------------------------------------------------------- * WCSPRINTF_PTR() is a preprocessor macro used to print addresses in a * consistent way. * * On some systems the "%p" format descriptor renders a NULL pointer as the * string "0x0". On others, however, it produces "0" or even "(nil)". On * some systems a non-zero address is prefixed with "0x", on others, not. * * The WCSPRINTF_PTR() macro ensures that a NULL pointer is always rendered as * "0x0" and that non-zero addresses are prefixed with "0x" thus providing * consistency, for example, for comparing the output of test programs. * *===========================================================================*/ #ifndef WCSLIB_WCSPRINTF #define WCSLIB_WCSPRINTF #ifdef __cplusplus extern "C" { #endif #define WCSPRINTF_PTR(str1, ptr, str2) \ if (ptr) { \ wcsprintf("%s%#lx%s", (str1), (unsigned long)(ptr), (str2)); \ } else { \ wcsprintf("%s0x0%s", (str1), (str2)); \ } int wcsprintf_set(FILE *wcsout); int wcsprintf(const char *format, ...); const char *wcsprintf_buf(void); #ifdef __cplusplus } #endif #endif /* WCSLIB_WCSPRINTF */ pywcs-1.12/wcslib/C/wcstrig.c0000644001153600020070000001055612310355626020150 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcstrig.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include "wcsmath.h" #include "wcstrig.h" double cosd(angle) double angle; { int i; if (fmod(angle,90.0) == 0.0) { i = abs((int)floor(angle/90.0 + 0.5))%4; switch (i) { case 0: return 1.0; case 1: return 0.0; case 2: return -1.0; case 3: return 0.0; } } return cos(angle*D2R); } /*--------------------------------------------------------------------------*/ double sind(angle) double angle; { int i; if (fmod(angle,90.0) == 0.0) { i = abs((int)floor(angle/90.0 - 0.5))%4; switch (i) { case 0: return 1.0; case 1: return 0.0; case 2: return -1.0; case 3: return 0.0; } } return sin(angle*D2R); } /*--------------------------------------------------------------------------*/ void sincosd(double angle, double *s, double *c) { int i; if (fmod(angle,90.0) == 0.0) { i = abs((int)floor(angle/90.0 + 0.5))%4; switch (i) { case 0: *s = 0.0; *c = 1.0; return; case 1: *s = (angle > 0.0) ? 1.0 : -1.0; *c = 0.0; return; case 2: *s = 0.0; *c = -1.0; return; case 3: *s = (angle > 0.0) ? -1.0 : 1.0; *c = 0.0; return; } } #ifdef HAVE_SINCOS sincos(angle*D2R, s, c); #else *s = sin(angle*D2R); *c = cos(angle*D2R); #endif return; } /*--------------------------------------------------------------------------*/ double tand(angle) double angle; { double resid; resid = fmod(angle,360.0); if (resid == 0.0 || fabs(resid) == 180.0) { return 0.0; } else if (resid == 45.0 || resid == 225.0) { return 1.0; } else if (resid == -135.0 || resid == -315.0) { return -1.0; } return tan(angle*D2R); } /*--------------------------------------------------------------------------*/ double acosd(v) double v; { if (v >= 1.0) { if (v-1.0 < WCSTRIG_TOL) return 0.0; } else if (v == 0.0) { return 90.0; } else if (v <= -1.0) { if (v+1.0 > -WCSTRIG_TOL) return 180.0; } return acos(v)*R2D; } /*--------------------------------------------------------------------------*/ double asind(v) double v; { if (v <= -1.0) { if (v+1.0 > -WCSTRIG_TOL) return -90.0; } else if (v == 0.0) { return 0.0; } else if (v >= 1.0) { if (v-1.0 < WCSTRIG_TOL) return 90.0; } return asin(v)*R2D; } /*--------------------------------------------------------------------------*/ double atand(v) double v; { if (v == -1.0) { return -45.0; } else if (v == 0.0) { return 0.0; } else if (v == 1.0) { return 45.0; } return atan(v)*R2D; } /*--------------------------------------------------------------------------*/ double atan2d(y, x) double x, y; { if (y == 0.0) { if (x >= 0.0) { return 0.0; } else if (x < 0.0) { return 180.0; } } else if (x == 0.0) { if (y > 0.0) { return 90.0; } else if (y < 0.0) { return -90.0; } } return atan2(y,x)*R2D; } pywcs-1.12/wcslib/C/wcstrig.h0000644001153600020070000001425312310355626020153 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcstrig.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * Summary of the wcstrig routines * ------------------------------- * When dealing with celestial coordinate systems and spherical projections * (some moreso than others) it is often desirable to use an angular measure * that provides an exact representation of the latitude of the north or south * pole. The WCSLIB routines use the following trigonometric functions that * take or return angles in degrees: * * - cosd() * - sind() * - tand() * - acosd() * - asind() * - atand() * - atan2d() * - sincosd() * * These "trigd" routines are expected to handle angles that are a multiple of * 90 degrees returning an exact result. Some C implementations provide these * as part of a system library and in such cases it may (or may not!) be * preferable to use them. WCSLIB provides wrappers on the standard trig * functions based on radian measure, adding tests for multiples of 90 degrees. * * However, wcstrig.h also provides the choice of using preprocessor macro * implementations of the trigd functions that don't test for multiples of * 90 degrees (compile with -DWCSTRIG_MACRO). These are typically 20% faster * but may lead to problems near the poles. * * * cosd() - Cosine of an angle in degrees * -------------------------------------- * cosd() returns the cosine of an angle given in degrees. * * Given: * angle double [deg]. * * Function return value: * double Cosine of the angle. * * * sind() - Sine of an angle in degrees * ------------------------------------ * sind() returns the sine of an angle given in degrees. * * Given: * angle double [deg]. * * Function return value: * double Sine of the angle. * * * sincosd() - Sine and cosine of an angle in degrees * -------------------------------------------------- * sincosd() returns the sine and cosine of an angle given in degrees. * * Given: * angle double [deg]. * * Returned: * sin *double Sine of the angle. * * cos *double Cosine of the angle. * * Function return value: * void * * * tand() - Tangent of an angle in degrees * --------------------------------------- * tand() returns the tangent of an angle given in degrees. * * Given: * angle double [deg]. * * Function return value: * double Tangent of the angle. * * * acosd() - Inverse cosine, returning angle in degrees * ---------------------------------------------------- * acosd() returns the inverse cosine in degrees. * * Given: * x double in the range [-1,1]. * * Function return value: * double Inverse cosine of x [deg]. * * * asind() - Inverse sine, returning angle in degrees * -------------------------------------------------- * asind() returns the inverse sine in degrees. * * Given: * y double in the range [-1,1]. * * Function return value: * double Inverse sine of y [deg]. * * * atand() - Inverse tangent, returning angle in degrees * ----------------------------------------------------- * atand() returns the inverse tangent in degrees. * * Given: * s double * * Function return value: * double Inverse tangent of s [deg]. * * * atan2d() - Polar angle of (x,y), in degrees * ------------------------------------------- * atan2d() returns the polar angle, beta, in degrees, of polar coordinates * (rho,beta) corresponding Cartesian coordinates (x,y). It is equivalent to * the arg(x,y) function of WCS Paper II, though with transposed arguments. * * Given: * y double Cartesian y-coordinate. * * x double Cartesian x-coordinate. * * Function return value: * double Polar angle of (x,y) [deg]. * *===========================================================================*/ #ifndef WCSLIB_WCSTRIG #define WCSLIB_WCSTRIG #include #include "wcsconfig.h" #ifdef HAVE_SINCOS void sincos(double angle, double *sin, double *cos); #endif #ifdef __cplusplus extern "C" { #endif #ifdef WCSTRIG_MACRO /* Macro implementation of the trigd functions. */ #include "wcsmath.h" #define cosd(X) cos((X)*D2R) #define sind(X) sin((X)*D2R) #define tand(X) tan((X)*D2R) #define acosd(X) acos(X)*R2D #define asind(X) asin(X)*R2D #define atand(X) atan(X)*R2D #define atan2d(Y,X) atan2(Y,X)*R2D #ifdef HAVE_SINCOS #define sincosd(X,S,C) sincos((X)*D2R,(S),(C)) #else #define sincosd(X,S,C) *(S) = sin((X)*D2R); *(C) = cos((X)*D2R); #endif #else /* Use WCSLIB wrappers or native trigd functions. */ double cosd(double angle); double sind(double angle); void sincosd(double angle, double *sin, double *cos); double tand(double angle); double acosd(double x); double asind(double y); double atand(double s); double atan2d(double y, double x); /* Domain tolerance for asin() and acos() functions. */ #define WCSTRIG_TOL 1e-10 #endif /* WCSTRIG_MACRO */ #ifdef __cplusplus } #endif #endif /* WCSLIB_WCSTRIG */ pywcs-1.12/wcslib/C/wcsulex.l0000644001153600020070000004443512310355626020174 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsulex.l,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * wcsulex.l is a Flex description file containing the definition of a * recursive, multi-buffered lexical scanner that parses FITS units * specifications. * * It requires Flex v2.5.4 or later. * * Refer to wcsunits.h for a description of the user interface and operating * notes. * *===========================================================================*/ /* Options. */ %option full %option never-interactive %option noyywrap %option outfile="wcsulex.c" %option prefix="wcsulex" /* Exponents. */ INTEGER [+-]?[1-9][0-9]* FRAC {INTEGER}"/"[1-9][0-9]* FLOAT [+-]?([0-9]+\.?[0-9]*|\.[0-9]+) /* Metric prefixes. */ SUB3 [munpfazy] SUBPREFIX [dc]|{SUB3} SUP3 [kMGTPEZY] SUPPREFIX da|h|{SUP3} PREFIX {SUBPREFIX}|{SUPPREFIX} /* Basic and derived SI units. */ BASIC m|s|g|rad|sr|K|A|mol|cd DERIVED Hz|J|W|V|N|Pa|C|[Oo]hm|S|F|Wb|T|H|lm|lx SI_UNIT {BASIC}|{DERIVED} /* Additional recognized units: all metric prefixes allowed. */ ADD_ALL eV|Jy|R|G|barn /* Additional recognized units: only super-metric prefixes allowed. */ ADD_SUP a|yr|pc|bit|[bB]yte /* Additional recognized units: only sub-metric prefixes allowed. */ ADD_SUB mag /* Additional recognized units for which NO metric prefixes are allowed. */ GENERAL deg|arcmin|arcsec|mas|d|h|min|erg|Ry|u|D ASTRO [Aa]ngstrom|AU|lyr|beam|solRad|solMass|solLum|Sun DEVICE adu|bin|chan|count|ct|photon|ph|pixel|pix|voxel ADD_NONE {GENERAL}|{ASTRO}|{DEVICE} /* All additional recognized units. */ ADD_UNIT {ADD_ALL}|{ADD_SUP}|{ADD_SUB}|{ADD_NONE} /* Exclusive start states. */ %x PAREN PREFIX UNITS EXPON FLUSH %{ /* To get the prototype for fileno() from stdio.h when gcc is invoked with * -std=c89 (same as -ansi) or -std=c99 since we do not define YY_INPUT. */ #define _POSIX_SOURCE 1 #include #include #include #include #include "wcserr.h" #include "wcsmath.h" #include "wcsunits.h" #define YY_DECL int wcsulexe(const char unitstr[], int *func, double *scale, \ double units[], struct wcserr **err) /* Used in preempting the call to exit() by yy_fatal_error(). */ jmp_buf wcsulex_abort_jmp_env; #define exit(status) longjmp(wcsulex_abort_jmp_env, status) %} %% static const char *function = "wcsulexe"; int bracket = 0; int operator = 0; int paren = 0; int status = 0; int func_r, i, j; double dexp, expon, factor, factor_r, types[WCSUNITS_NTYPE]; YY_BUFFER_STATE buf; void add(double *factor, double types[], double *expon, double *scale, double units[]); int yylex_destroy(void); *func = 0; for (i = 0; i < WCSUNITS_NTYPE; i++) { units[i] = 0.0; types[i] = 0.0; } expon = 1.0; factor = 1.0; *scale = 1.0; yy_scan_string(unitstr); /* Return here via longjmp() invoked by yy_fatal_error(). */ if (setjmp(wcsulex_abort_jmp_env)) { return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), "Internal units parser error parsing '%s'", unitstr); } BEGIN(INITIAL); #ifdef DEBUG fprintf(stderr, "\n%s ->\n", unitstr); #endif ^" "+ { /* Pretend initial whitespace doesn't exist. */ yy_set_bol(1); } ^"[" { if (bracket++) { BEGIN(FLUSH); } else { yy_set_bol(1); } } ^10[0-9] { status = wcserr_set(WCSERR_SET(UNITSERR_BAD_NUM_MULTIPLIER), "Invalid exponent in '%s'", unitstr); BEGIN(FLUSH); } ^10 { factor = 10.0; BEGIN(EXPON); } ^log" "*"(" { *func = 1; unput('('); BEGIN(PAREN); } ^ln" "*"(" { *func = 2; unput('('); BEGIN(PAREN); } ^exp" "*"(" { *func = 3; unput('('); BEGIN(PAREN); } ^[*.] { /* Leading binary multiply. */ status = wcserr_set(WCSERR_SET(UNITSERR_DANGLING_BINOP), "Dangling binary operator in '%s'", unitstr); BEGIN(FLUSH); } " "+ /* Discard whitespace in INITIAL context. */ sqrt" "*"(" { expon /= 2.0; unput('('); BEGIN(PAREN); } "(" { /* Gather terms in parentheses. */ yyless(0); BEGIN(PAREN); } [*.] { if (operator++) { BEGIN(FLUSH); } } ^1"/" | "/" { if (operator++) { BEGIN(FLUSH); } else { expon *= -1.0; } } {SI_UNIT}|{ADD_UNIT} { operator = 0; yyless(0); BEGIN(UNITS); } {PREFIX}({SI_UNIT}|{ADD_ALL}) | {SUPPREFIX}{ADD_SUP} | {SUBPREFIX}{ADD_SUB} { operator = 0; yyless(0); BEGIN(PREFIX); } "]" { bracket = !bracket; BEGIN(FLUSH); } . { status = wcserr_set(WCSERR_SET(UNITSERR_BAD_INITIAL_SYMBOL), "Invalid symbol in INITIAL context in '%s'", unitstr); BEGIN(FLUSH); } "(" { paren++; operator = 0; yymore(); } ")" { paren--; if (paren) { /* Not balanced yet. */ yymore(); } else { /* Balanced; strip off the outer parentheses and recurse. */ yytext[yyleng-1] = '\0'; buf = YY_CURRENT_BUFFER; status = wcsulexe(yytext+1, &func_r, &factor_r, types, err); yy_switch_to_buffer(buf); if (func_r) { status = wcserr_set(WCSERR_SET(UNITSERR_FUNCTION_CONTEXT), "Function in invalid context in '%s'", unitstr); } if (status) { BEGIN(FLUSH); } else { factor *= factor_r; BEGIN(EXPON); } } } [^()]+ { yymore(); } d { factor = 1e-1; BEGIN(UNITS); } c { factor = 1e-2; BEGIN(UNITS); } m { factor = 1e-3; BEGIN(UNITS); } u { factor = 1e-6; BEGIN(UNITS); } n { factor = 1e-9; BEGIN(UNITS); } p { factor = 1e-12; BEGIN(UNITS); } f { factor = 1e-15; BEGIN(UNITS); } a { factor = 1e-18; BEGIN(UNITS); } z { factor = 1e-21; BEGIN(UNITS); } y { factor = 1e-24; BEGIN(UNITS); } da { factor = 1e+1; BEGIN(UNITS); } h { factor = 1e+2; BEGIN(UNITS); } k { factor = 1e+3; BEGIN(UNITS); } M { factor = 1e+6; BEGIN(UNITS); } G { factor = 1e+9; BEGIN(UNITS); } T { factor = 1e+12; BEGIN(UNITS); } P { factor = 1e+15; BEGIN(UNITS); } E { factor = 1e+18; BEGIN(UNITS); } Z { factor = 1e+21; BEGIN(UNITS); } Y { factor = 1e+24; BEGIN(UNITS); } . { /* Internal parser error. */ status = wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), "Internal units parser error parsing '%s'", unitstr); BEGIN(FLUSH); } A { /* Ampere. */ types[WCSUNITS_CHARGE] += 1.0; types[WCSUNITS_TIME] -= 1.0; BEGIN(EXPON); } a|yr { /* Year (annum). */ factor *= 31557600.0; types[WCSUNITS_TIME] += 1.0; BEGIN(EXPON); } adu { /* Analogue-to-digital converter units. */ types[WCSUNITS_COUNT] += 1.0; BEGIN(EXPON); } [Aa]ngstrom { /* Angstrom. */ factor *= 1e-10; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } arcmin { /* Minute of arc. */ factor /= 60.0; types[WCSUNITS_PLANE_ANGLE] += 1.0; BEGIN(EXPON); } arcsec { /* Second of arc. */ factor /= 3600.0; types[WCSUNITS_PLANE_ANGLE] += 1.0; BEGIN(EXPON); } AU { /* Astronomical unit. */ factor *= 1.49598e+11; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } barn { /* Barn. */ factor *= 1e-28; types[WCSUNITS_LENGTH] += 2.0; BEGIN(EXPON); } beam { /* Beam, as in Jy/beam. */ types[WCSUNITS_BEAM] += 1.0; BEGIN(EXPON); } bin { /* Bin (e.g. histogram). */ types[WCSUNITS_BIN] += 1.0; BEGIN(EXPON); } bit { /* Bit. */ types[WCSUNITS_BIT] += 1.0; BEGIN(EXPON); } [bB]yte { /* Byte. */ factor *= 8.0; types[WCSUNITS_BIT] += 1.0; BEGIN(EXPON); } C { /* Coulomb. */ types[WCSUNITS_CHARGE] += 1.0; BEGIN(EXPON); } cd { /* Candela. */ types[WCSUNITS_LUMINTEN] += 1.0; BEGIN(EXPON); } chan { /* Channel. */ types[WCSUNITS_BIN] += 1.0; BEGIN(EXPON); } count|ct { /* Count. */ types[WCSUNITS_COUNT] += 1.0; BEGIN(EXPON); } D { /* Debye. */ factor *= 1e-29 / 3.0; types[WCSUNITS_CHARGE] += 1.0; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } d { /* Day. */ factor *= 86400.0; types[WCSUNITS_TIME] += 1.0; BEGIN(EXPON); } deg { /* Degree. */ types[WCSUNITS_PLANE_ANGLE] += 1.0; BEGIN(EXPON); } erg { /* Erg. */ factor *= 1e-7; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } eV { /* Electron volt. */ factor *= 1.6021765e-19; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } F { /* Farad. */ types[WCSUNITS_MASS] -= 1.0; types[WCSUNITS_LENGTH] -= 2.0; types[WCSUNITS_TIME] += 3.0; types[WCSUNITS_CHARGE] += 2.0; BEGIN(EXPON); } G { /* Gauss. */ factor *= 1e-4; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_TIME] += 1.0; types[WCSUNITS_CHARGE] -= 1.0; BEGIN(EXPON); } g { /* Gram. */ factor *= 1e-3; types[WCSUNITS_MASS] += 1.0; BEGIN(EXPON); } H { /* Henry. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] += 2.0; types[WCSUNITS_CHARGE] -= 2.0; BEGIN(EXPON); } h { /* Hour. */ factor *= 3600.0; types[WCSUNITS_TIME] += 1.0; BEGIN(EXPON); } Hz { /* Hertz. */ types[WCSUNITS_TIME] -= 1.0; BEGIN(EXPON); } J { /* Joule. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } Jy { /* Jansky. */ factor *= 1e-26; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } K { /* Kelvin. */ types[WCSUNITS_TEMPERATURE] += 1.0; BEGIN(EXPON); } lm { /* Lumen. */ types[WCSUNITS_LUMINTEN] += 1.0; types[WCSUNITS_SOLID_ANGLE] += 1.0; BEGIN(EXPON); } lx { /* Lux. */ types[WCSUNITS_LUMINTEN] += 1.0; types[WCSUNITS_SOLID_ANGLE] += 1.0; types[WCSUNITS_LENGTH] -= 2.0; BEGIN(EXPON); } lyr { /* Light year. */ factor *= 2.99792458e8 * 31557600.0; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } m { /* Metre. */ types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } mag { /* Stellar magnitude. */ types[WCSUNITS_MAGNITUDE] += 1.0; BEGIN(EXPON); } mas { /* Milli-arcsec. */ factor /= 3600e+3; types[WCSUNITS_PLANE_ANGLE] += 1.0; BEGIN(EXPON); } min { /* Minute. */ factor *= 60.0; types[WCSUNITS_TIME] += 1.0; BEGIN(EXPON); } mol { /* Mole. */ types[WCSUNITS_MOLE] += 1.0; BEGIN(EXPON); } N { /* Newton. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 1.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } [Oo]hm { /* Ohm. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 1.0; types[WCSUNITS_CHARGE] -= 2.0; BEGIN(EXPON); } Pa { /* Pascal. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] -= 1.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } pc { /* Parsec. */ factor *= 3.0857e16; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } photon|ph { /* Photon. */ types[WCSUNITS_COUNT] += 1.0; BEGIN(EXPON); } pixel|pix { /* Pixel. */ types[WCSUNITS_PIXEL] += 1.0; BEGIN(EXPON); } R { /* Rayleigh. */ factor *= 1e10 / (4.0 * PI); types[WCSUNITS_LENGTH] -= 2.0; types[WCSUNITS_TIME] -= 1.0; types[WCSUNITS_SOLID_ANGLE] -= 1.0; BEGIN(EXPON); } rad { /* Radian. */ factor *= 180.0 / PI; types[WCSUNITS_PLANE_ANGLE] += 1.0; BEGIN(EXPON); } Ry { /* Rydberg. */ factor *= 13.605692 * 1.6021765e-19; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 2.0; BEGIN(EXPON); } S { /* Siemen. */ types[WCSUNITS_MASS] -= 1.0; types[WCSUNITS_LENGTH] -= 2.0; types[WCSUNITS_TIME] += 1.0; types[WCSUNITS_CHARGE] += 2.0; BEGIN(EXPON); } s { /* Second. */ types[WCSUNITS_TIME] += 1.0; BEGIN(EXPON); } solLum { /* Solar luminosity. */ factor *= 3.8268e26; types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 3.0; BEGIN(EXPON); } solMass { /* Solar mass. */ factor *= 1.9891e30; types[WCSUNITS_MASS] += 1.0; BEGIN(EXPON); } solRad { /* Solar radius. */ factor *= 6.9599e8; types[WCSUNITS_LENGTH] += 1.0; BEGIN(EXPON); } sr { /* Steradian. */ types[WCSUNITS_SOLID_ANGLE] += 1.0; BEGIN(EXPON); } Sun { /* Sun (with respect to). */ types[WCSUNITS_SOLRATIO] += 1.0; BEGIN(EXPON); } T { /* Tesla. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_TIME] += 1.0; types[WCSUNITS_CHARGE] -= 1.0; BEGIN(EXPON); } u { /* Unified atomic mass unit. */ factor *= 1.6605387e-27; types[WCSUNITS_MASS] += 1.0; BEGIN(EXPON); } V { /* Volt. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 1.0; types[WCSUNITS_TIME] -= 2.0; types[WCSUNITS_CHARGE] -= 1.0; BEGIN(EXPON); } voxel { /* Voxel. */ types[WCSUNITS_VOXEL] += 1.0; BEGIN(EXPON); } W { /* Watt. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] -= 3.0; BEGIN(EXPON); } Wb { /* Weber. */ types[WCSUNITS_MASS] += 1.0; types[WCSUNITS_LENGTH] += 2.0; types[WCSUNITS_TIME] += 1.0; types[WCSUNITS_CHARGE] -= 1.0; BEGIN(EXPON); } . { /* Internal parser error. */ status = wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), "Internal units parser error parsing '%s'", unitstr); BEGIN(FLUSH); } " "*("**"|^) { /* Exponentiation. */ if (operator++) { BEGIN(FLUSH); } } " "*{INTEGER} { sscanf(yytext, " %d", &i); expon *= (double)i; add(&factor, types, &expon, scale, units); operator = 0; BEGIN(INITIAL); } " "*"("" "*{INTEGER}" "*")" { sscanf(yytext, " (%d)", &i); expon *= (double)i; add(&factor, types, &expon, scale, units); operator = 0; BEGIN(INITIAL); } " "*"("" "*{FRAC}" "*")" { sscanf(yytext, " (%d/%d)", &i, &j); expon *= (double)i / (double)j; add(&factor, types, &expon, scale, units); operator = 0; BEGIN(INITIAL); } " "*"("" "*{FLOAT}" "*")" { sscanf(yytext, " (%lf)", &dexp); expon *= dexp; add(&factor, types, &expon, scale, units); operator = 0; BEGIN(INITIAL); } " "*[.*]" "* { /* Multiply. */ if (operator++) { BEGIN(FLUSH); } else { add(&factor, types, &expon, scale, units); BEGIN(INITIAL); } } " "*"(" { /* Multiply. */ if (operator) { BEGIN(FLUSH); } else { add(&factor, types, &expon, scale, units); unput('('); BEGIN(INITIAL); } } " "+ { /* Multiply. */ if (operator) { BEGIN(FLUSH); } else { add(&factor, types, &expon, scale, units); BEGIN(INITIAL); } } " "*"/"" "* { /* Divide. */ if (operator++) { BEGIN(FLUSH); } else { add(&factor, types, &expon, scale, units); expon = -1.0; BEGIN(INITIAL); } } " "*"]" { add(&factor, types, &expon, scale, units); bracket = !bracket; BEGIN(FLUSH); } . { status = wcserr_set(WCSERR_SET(UNITSERR_BAD_EXPON_SYMBOL), "Invalid symbol in EXPON context in '%s'", unitstr); BEGIN(FLUSH); } .* { /* Discard any remaining input. */ } <> { /* End-of-string. */ if (YY_START == EXPON) { add(&factor, types, &expon, scale, units); } yylex_destroy(); if (bracket) { status = wcserr_set(WCSERR_SET(UNITSERR_UNBAL_BRACKET), "Unbalanced bracket in '%s'", unitstr); } else if (paren) { status = wcserr_set(WCSERR_SET(UNITSERR_UNBAL_PAREN), "Unbalanced parenthesis in '%s'", unitstr); } else if (operator == 1) { status = wcserr_set(WCSERR_SET(UNITSERR_DANGLING_BINOP), "Dangling binary operator in '%s'", unitstr); } else if (operator) { status = wcserr_set(WCSERR_SET(UNITSERR_CONSEC_BINOPS), "Consecutive binary operators in '%s'", unitstr); #ifdef DEBUG } else { fprintf(stderr, "EOS\n"); #endif } if (status) { for (i = 0; i < WCSUNITS_NTYPE; i++) { units[i] = 0.0; *scale = 0.0; } } return status; } %% /*---------------------------------------------------------------------------- * Accumulate a term in a units specification and reset work variables. *---------------------------------------------------------------------------*/ void add( double *factor, double types[], double *expon, double *scale, double units[]) { int i; *scale *= pow(*factor, *expon); for (i = 0; i < WCSUNITS_NTYPE; i++) { units[i] += *expon * types[i]; types[i] = 0.0; } *expon = 1.0; *factor = 1.0; return; } pywcs-1.12/wcslib/C/wcsunits.c0000644001153600020070000001306312310355626020341 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsunits.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include "wcsunits.h" /* Map status return value to message. */ const char *wcsunits_errmsg[] = { "Success", "Invalid numeric multiplier", "Dangling binary operator", "Invalid symbol in INITIAL context", "Function in invalid context", "Invalid symbol in EXPON context", "Unbalanced bracket", "Unbalanced parenthesis", "Consecutive binary operators", "Internal parser error", "Non-conformant unit specifications", "Non-conformant functions", "Potentially unsafe translation"}; /* Unit types. */ const char *wcsunits_types[] = { "plane angle", "solid angle", "charge", "mole", "temperature", "luminous intensity", "mass", "length", "time", "beam", "bin", "bit", "count", "stellar magnitude", "pixel", "solar ratio", "voxel"}; const char *wcsunits_units[] = { "degree", "steradian", "Coulomb", "mole", "Kelvin", "candela", "kilogram", "metre", "second", "", "", "", "", "", "", "", ""}; const char *wcsunits_funcs[] = { "none", "log", "ln", "exp"}; /*--------------------------------------------------------------------------*/ int wcsunits( const char have[], const char want[], double *scale, double *offset, double *power) { return wcsunitse( have, want, scale, offset, power, 0x0); } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int wcsunitse( const char have[], const char want[], double *scale, double *offset, double *power, struct wcserr **err) { static const char *function = "wcsunitse"; int func1, func2, i, status; double scale1, scale2, units1[WCSUNITS_NTYPE], units2[WCSUNITS_NTYPE]; if ((status = wcsulexe(have, &func1, &scale1, units1, err))) { return status; } if ((status = wcsulexe(want, &func2, &scale2, units2, err))) { return status; } /* Check conformance. */ for (i = 0; i < WCSUNITS_NTYPE; i++) { if (units1[i] != units2[i]) { return wcserr_set(WCSERR_SET(UNITSERR_BAD_UNIT_SPEC), "Mismatched units type '%s': have '%s', want '%s'", wcsunits_types[i], have, want); } } *scale = 0.0; *offset = 0.0; *power = 1.0; switch (func1) { case 0: /* No function. */ if (func2) { return wcserr_set(WCSERR_SET(UNITSERR_BAD_FUNCS), "Mismatched unit functions: have '%s' (%s), want '%s' (%s)", have, wcsunits_funcs[func1], want, wcsunits_funcs[func2]); } *scale = scale1 / scale2; break; case 1: /* log(). */ if (func2 == 1) { /* log(). */ *scale = 1.0; *offset = log10(scale1 / scale2); } else if (func2 == 2) { /* ln(). */ *scale = log(10.0); *offset = log(scale1 / scale2); } else { return wcserr_set(WCSERR_SET(UNITSERR_BAD_FUNCS), "Mismatched unit functions: have '%s' (%s), want '%s' (%s)", have, wcsunits_funcs[func1], want, wcsunits_funcs[func2]); } break; case 2: /* ln(). */ if (func2 == 1) { /* log(). */ *scale = 1.0 / log(10.0); *offset = log(scale1 / scale2); } else if (func2 == 2) { /* ln(). */ *scale = 1.0; *offset = log(scale1 / scale2); } else { return wcserr_set(WCSERR_SET(UNITSERR_BAD_FUNCS), "Mismatched unit functions: have '%s' (%s), want '%s' (%s)", have, wcsunits_funcs[func1], want, wcsunits_funcs[func2]); } break; case 3: /* exp(). */ if (func2 != 3) { return wcserr_set(WCSERR_SET(UNITSERR_BAD_FUNCS), "Mismatched unit functions: have '%s' (%s), want '%s' (%s)", have, wcsunits_funcs[func1], want, wcsunits_funcs[func2]); } *scale = 1.0; *power = scale1 / scale2; break; default: /* Internal parser error. */ return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), "Internal units parser error"); } return 0; } /*--------------------------------------------------------------------------*/ int wcsutrn(int ctrl, char unitstr[]) { return wcsutrne(ctrl, unitstr, 0x0); } /*--------------------------------------------------------------------------*/ int wcsulex(const char unitstr[], int *func, double *scale, double units[]) { return wcsulexe(unitstr, func, scale, units, 0x0); } pywcs-1.12/wcslib/C/wcsunits.h0000644001153600020070000004114612310355626020351 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsunits.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * WCSLIB 4.10 - C routines that implement the FITS World Coordinate System * (WCS) standard. Refer to * * "Representations of world coordinates in FITS", * Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (Paper I) * * The Flexible Image Transport System (FITS), a data format widely used in * astronomy for data interchange and archive, is described in * * "Definition of The Flexible Image Transport System (FITS)", * Hanisch, R.J., Farris, A., Greisen, E.W., et al. 2001, A&A, 376, 359 * * which formalizes NOST 100-2.0, a document produced by the NASA/Science * Office of Standards and Technology, see http://fits.gsfc.nasa.gov. * * Refer to the README file provided with WCSLIB for an overview of the * library. * * * Summary of the wcsunits routines * -------------------------------- * Routines in this suite deal with units specifications and conversions: * * - wcsunitse(): given two unit specifications, derive the conversion from * one to the other. * * - wcsutrne(): translates certain commonly used but non-standard unit * strings. It is intended to be called before wcsulexe() which only * handles standard FITS units specifications. * * - wcsulexe(): parses a standard FITS units specification of arbitrary * complexity, deriving the conversion to canonical units. * * * wcsunitse() - FITS units specification conversion * ------------------------------------------------- * wcsunitse() derives the conversion from one system of units to another. * * A deprecated form of this function, wcsunits(), lacks the wcserr** * parameter. * * Given: * have const char [] * FITS units specification to convert from (null- * terminated), with or without surrounding square * brackets (for inline specifications); text following * the closing bracket is ignored. * * want const char [] * FITS units specification to convert to (null- * terminated), with or without surrounding square * brackets (for inline specifications); text following * the closing bracket is ignored. * * Returned: * scale, * offset, * power double* Convert units using * = pow(scale*value + offset, power); * * Normally offset is zero except for log() or ln() * conversions, e.g. "log(MHz)" to "ln(Hz)". Likewise, * power is normally unity except for exp() conversions, * e.g. "exp(ms)" to "exp(/Hz)". Thus conversions * ordinarily consist of * = value *= scale; * * err struct wcserr ** * If enabled, for function return values > 1, this * struct will contain a detailed error message, see * wcserr_enable(). May be NULL if an error message is * not desired. * * Function return value: * int Status return value: * 0: Success. * 1-9: Status return from wcsulexe(). * 10: Non-conformant unit specifications. * 11: Non-conformant functions. * * scale is zeroed on return if an error occurs. * * * wcsutrne() - Translation of non-standard unit specifications * ------------------------------------------------------------ * wcsutrne() translates certain commonly used but non-standard unit strings, * e.g. "DEG", "MHZ", "KELVIN", that are not recognized by wcsulexe(), refer to * the notes below for a full list. Compounds are also recognized, e.g. * "JY/BEAM" and "KM/SEC/SEC". Extraneous embedded blanks are removed. * * A deprecated form of this function, wcsutrn(), lacks the wcserr** parameter. * * Given: * ctrl int Although "S" is commonly used to represent seconds, * its translation to "s" is potentially unsafe since the * standard recognizes "S" formally as Siemens, however * rarely that may be used. The same applies to "H" for * hours (Henry), and "D" for days (Debye). This * bit-flag controls what to do in such cases: * 1: Translate "S" to "s". * 2: Translate "H" to "h". * 4: Translate "D" to "d". * Thus ctrl == 0 doesn't do any unsafe translations, * whereas ctrl == 7 does all of them. * * Given and returned: * unitstr char [] Null-terminated character array containing the units * specification to be translated. * * Inline units specifications in the a FITS header * keycomment are also handled. If the first non-blank * character in unitstr is '[' then the unit string is * delimited by its matching ']'. Blanks preceding '[' * will be stripped off, but text following the closing * bracket will be preserved without modification. * * err struct wcserr ** * If enabled, for function return values > 1, this * struct will contain a detailed error message, see * wcserr_enable(). May be NULL if an error message is * not desired. * * Function return value: * int Status return value: * -1: No change was made, other than stripping blanks * (not an error). * 0: Success. * 9: Internal parser error. * 12: Potentially unsafe translation, whether applied * or not (see notes). * * Notes: * Translation of non-standard unit specifications: apart from leading and * trailing blanks, a case-sensitive match is required for the aliases listed * below, in particular the only recognized aliases with metric prefixes are * "KM", "KHZ", "MHZ", and "GHZ". Potentially unsafe translations of "D", * "H", and "S", shown in parentheses, are optional. * = Unit Recognized aliases = ---- ------------------------------------------------------------- = Angstrom angstrom = arcmin arcmins, ARCMIN, ARCMINS = arcsec arcsecs, ARCSEC, ARCSECS = beam BEAM = byte Byte = d day, days, (D), DAY, DAYS = deg degree, degrees, DEG, DEGREE, DEGREES = GHz GHZ = h hr, (H), HR = Hz hz, HZ = kHz KHZ = Jy JY = K kelvin, kelvins, Kelvin, Kelvins, KELVIN, KELVINS = km KM = m metre, meter, metres, meters, M, METRE, METER, METRES, METERS = min MIN = MHz MHZ = Ohm ohm = Pa pascal, pascals, Pascal, Pascals, PASCAL, PASCALS = pixel pixels, PIXEL, PIXELS = rad radian, radians, RAD, RADIAN, RADIANS = s sec, second, seconds, (S), SEC, SECOND, SECONDS = V volt, volts, Volt, Volts, VOLT, VOLTS = yr year, years, YR, YEAR, YEARS * * The aliases "angstrom", "ohm", and "Byte" for (Angstrom, Ohm, and byte) * are recognized by wcsulexe() itself as an unofficial extension of the * standard, but they are converted to the standard form here. * * * wcsulexe() - FITS units specification parser * -------------------------------------------- * wcsulexe() parses a standard FITS units specification of arbitrary * complexity, deriving the scale factor required to convert to canonical * units - basically SI with degrees and "dimensionless" additions such as * byte, pixel and count. * * A deprecated form of this function, wcsulex(), lacks the wcserr** parameter. * * Given: * unitstr const char [] * Null-terminated character array containing the units * specification, with or without surrounding square * brackets (for inline specifications); text following * the closing bracket is ignored. * * Returned: * func int* Special function type, see note 4: * 0: None * 1: log() ...base 10 * 2: ln() ...base e * 3: exp() * * scale double* Scale factor for the unit specification; multiply a * value expressed in the given units by this factor to * convert it to canonical units. * * units double[WCSUNITS_NTYPE] * A units specification is decomposed into powers of 16 * fundamental unit types: angle, mass, length, time, * count, pixel, etc. Preprocessor macro WCSUNITS_NTYPE * is defined to dimension this vector, and others such * WCSUNITS_PLANE_ANGLE, WCSUNITS_LENGTH, etc. to access * its elements. * * Corresponding character strings, wcsunits_types[] and * wcsunits_units[], are predefined to describe each * quantity and its canonical units. * * err struct wcserr ** * If enabled, for function return values > 1, this * struct will contain a detailed error message, see * wcserr_enable(). May be NULL if an error message is * not desired. * * Function return value: * int Status return value: * 0: Success. * 1: Invalid numeric multiplier. * 2: Dangling binary operator. * 3: Invalid symbol in INITIAL context. * 4: Function in invalid context. * 5: Invalid symbol in EXPON context. * 6: Unbalanced bracket. * 7: Unbalanced parenthesis. * 8: Consecutive binary operators. * 9: Internal parser error. * * scale and units[] are zeroed on return if an error * occurs. * * Notes: * 1: wcsulexe() is permissive in accepting whitespace in all contexts in a * units specification where it does not create ambiguity (e.g. not * between a metric prefix and a basic unit string), including in strings * like "log (m ** 2)" which is formally disallowed. * * 2: Supported extensions: * - "angstrom" (OGIP usage) is allowed in addition to "Angstrom". * - "ohm" (OGIP usage) is allowed in addition to "Ohm". * - "Byte" (common usage) is allowed in addition to "byte". * * 3: Table 6 of WCS Paper I lists eleven units for which metric prefixes are * allowed. However, in this implementation only prefixes greater than * unity are allowed for "a" (annum), "yr" (year), "pc" (parsec), "bit", * and "byte", and only prefixes less than unity are allowed for "mag" * (stellar magnitude). * * Metric prefix "P" (peta) is specifically forbidden for "a" (annum) to * avoid confusion with "Pa" (Pascal, not peta-annum). Note that metric * prefixes are specifically disallowed for "h" (hour) and "d" (day) so * that "ph" (photons) cannot be interpreted as pico-hours, nor "cd" * (candela) as centi-days. * * 4: Function types log(), ln() and exp() may only occur at the start of the * units specification. The scale and units[] returned for these refers * to the string inside the function "argument", e.g. to "MHz" in log(MHz) * for which a scale of 1e6 will be returned. * * * Global variable: const char *wcsunits_errmsg[] - Status return messages * ----------------------------------------------------------------------- * Error messages to match the status value returned from each function. * * * Global variable: const char *wcsunits_types[] - Names of physical quantities * ---------------------------------------------------------------------------- * Names for physical quantities to match the units vector returned by * wcsulexe(): * - 0: plane angle * - 1: solid angle * - 2: charge * - 3: mole * - 4: temperature * - 5: luminous intensity * - 6: mass * - 7: length * - 8: time * - 9: beam * - 10: bin * - 11: bit * - 12: count * - 13: stellar magnitude * - 14: pixel * - 15: solar ratio * - 16: voxel * * * Global variable: const char *wcsunits_units[] - Names of units * -------------------------------------------------------------- * Names for the units (SI) to match the units vector returned by wcsulexe(): * - 0: degree * - 1: steradian * - 2: Coulomb * - 3: mole * - 4: Kelvin * - 5: candela * - 6: kilogram * - 7: metre * - 8: second * * The remainder are dimensionless. *===========================================================================*/ #ifndef WCSLIB_WCSUNITS #define WCSLIB_WCSUNITS #include "wcserr.h" #ifdef __cplusplus extern "C" { #endif extern const char *wcsunits_errmsg[]; enum wcsunits_errmsg_enum { UNITSERR_SUCCESS = 0, /* Success. */ UNITSERR_BAD_NUM_MULTIPLIER = 1, /* Invalid numeric multiplier. */ UNITSERR_DANGLING_BINOP = 2, /* Dangling binary operator. */ UNITSERR_BAD_INITIAL_SYMBOL = 3, /* Invalid symbol in INITIAL context. */ UNITSERR_FUNCTION_CONTEXT = 4, /* Function in invalid context. */ UNITSERR_BAD_EXPON_SYMBOL = 5, /* Invalid symbol in EXPON context. */ UNITSERR_UNBAL_BRACKET = 6, /* Unbalanced bracket. */ UNITSERR_UNBAL_PAREN = 7, /* Unbalanced parenthesis. */ UNITSERR_CONSEC_BINOPS = 8, /* Consecutive binary operators. */ UNITSERR_PARSER_ERROR = 9, /* Internal parser error. */ UNITSERR_BAD_UNIT_SPEC = 10, /* Non-conformant unit specifications. */ UNITSERR_BAD_FUNCS = 11, /* Non-conformant functions. */ UNITSERR_UNSAFE_TRANS = 12 /* Potentially unsafe translation. */ }; extern const char *wcsunits_types[]; extern const char *wcsunits_units[]; #define WCSUNITS_PLANE_ANGLE 0 #define WCSUNITS_SOLID_ANGLE 1 #define WCSUNITS_CHARGE 2 #define WCSUNITS_MOLE 3 #define WCSUNITS_TEMPERATURE 4 #define WCSUNITS_LUMINTEN 5 #define WCSUNITS_MASS 6 #define WCSUNITS_LENGTH 7 #define WCSUNITS_TIME 8 #define WCSUNITS_BEAM 9 #define WCSUNITS_BIN 10 #define WCSUNITS_BIT 11 #define WCSUNITS_COUNT 12 #define WCSUNITS_MAGNITUDE 13 #define WCSUNITS_PIXEL 14 #define WCSUNITS_SOLRATIO 15 #define WCSUNITS_VOXEL 16 #define WCSUNITS_NTYPE 17 int wcsunitse(const char have[], const char want[], double *scale, double *offset, double *power, struct wcserr **err); int wcsutrne(int ctrl, char unitstr[], struct wcserr **err); int wcsulexe(const char unitstr[], int *func, double *scale, double units[], struct wcserr **err); /* Deprecated. */ int wcsunits(const char have[], const char want[], double *scale, double *offset, double *power); int wcsutrn(int ctrl, char unitstr[]); int wcsulex(const char unitstr[], int *func, double *scale, double units[]); #ifdef __cplusplus } #endif #endif /* WCSLIB_WCSUNITS */ pywcs-1.12/wcslib/C/wcsutil.c0000644001153600020070000001020212310355626020144 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsutil.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include "wcsutil.h" /*--------------------------------------------------------------------------*/ void wcsutil_blank_fill(int n, char c[]) { int k; for (k = strlen(c); k < n; k++) { c[k] = ' '; } return; } /*--------------------------------------------------------------------------*/ void wcsutil_null_fill(int n, char c[]) { int j, k; if (n <= 0) return; /* Null-fill the string. */ *(c+n-1) = '\0'; for (j = 0; j < n; j++) { if (c[j] == '\0') { for (k = j+1; k < n; k++) { c[k] = '\0'; } break; } } for (k = j-1; k > 0; k--) { if (c[k] != ' ') break; c[k] = '\0'; } return; } /*--------------------------------------------------------------------------*/ int wcsutil_allEq(int nvec, int nelem, const double *first) { double v0; const double *vp; if (nvec <= 0 || nelem <= 0) return 0; v0 = *first; for (vp = first+nelem; vp < first + nvec*nelem; vp += nelem) { if (*vp != v0) return 0; } return 1; } /*--------------------------------------------------------------------------*/ void wcsutil_setAll(int nvec, int nelem, double *first) { double v0, *vp; if (nvec <= 0 || nelem <= 0) return; v0 = *first; for (vp = first+nelem; vp < first + nvec*nelem; vp += nelem) { *vp = v0; } } /*--------------------------------------------------------------------------*/ void wcsutil_setAli(int nvec, int nelem, int *first) { int v0, *vp; if (nvec <= 0 || nelem <= 0) return; v0 = *first; for (vp = first+nelem; vp < first + nvec*nelem; vp += nelem) { *vp = v0; } } /*--------------------------------------------------------------------------*/ void wcsutil_setBit(int nelem, const int *sel, int bits, int *array) { int *arrp; if (bits == 0 || nelem <= 0) return; if (sel == 0x0) { /* All elements selected. */ for (arrp = array; arrp < array + nelem; arrp++) { *arrp |= bits; } } else { /* Some elements selected. */ for (arrp = array; arrp < array + nelem; arrp++) { if (*(sel++)) *arrp |= bits; } } } /*--------------------------------------------------------------------------*/ char *wcsutil_fptr2str(int (*func)(), char hext[]) { unsigned char *p = (unsigned char *)(&func); char *t = hext; int i, *(ip[2]), j[2], le = 1, gotone = 0; /* Test for little-endian addresses. */ ip[0] = j; ip[1] = j + 1; if ((unsigned char *)ip[0] < (unsigned char *)ip[1]) { /* Little-endian, reverse it. */ p += sizeof(func) - 1; le = -1; } sprintf(t, "0x0"); t += 2; for (i = 0; i < sizeof(func); i++) { /* Skip leading zeroes. */ if (*p) gotone = 1; if (gotone) { sprintf(t, "%02x", *p); t += 2; } p += le; } return hext; } pywcs-1.12/wcslib/C/wcsutil.h0000644001153600020070000001702512310355626020163 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsutil.h,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * Summary of the wcsutil routines * ------------------------------- * Simple utility functions for internal use only by WCSLIB. They are * documented here solely as an aid to understanding the code. They are not * intended for external use - the API may change without notice! * * * wcsutil_blank_fill() - Fill a character string with blanks * ---------------------------------------------------------- * INTERNAL USE ONLY. * * wcsutil_blank_fill() pads a character string with blanks starting with the * terminating NULL character. * * Used by the Fortran wrapper functions in translating C character strings * into Fortran CHARACTER variables. * * Given: * n int Length of the character array, c[]. * * Given and returned: * c char[] The character string. It will not be null-terminated * on return. * * Function return value: * void * * * wcsutil_null_fill() - Fill a character string with NULLs * -------------------------------------------------------- * INTERNAL USE ONLY. * * wcsutil_null_fill() strips off trailing blanks and pads the character array * holding the string with NULL characters. * * Used mainly to make character strings intelligible in the GNU debugger which * prints the rubbish following the terminating NULL, obscuring the valid part * of the string. * * Given: * n int Number of characters. * * Given and returned: * c char[] The character string. * * Function return value: * void * * * wcsutil_allEq() - Test for equality of a particular vector element * ------------------------------------------------------------------ * INTERNAL USE ONLY. * * wcsutil_allEq() tests for equality of a particular element in a set of * vectors. * * Given: * nvec int The number of vectors. * * nelem int The length of each vector. * * first const double* * Pointer to the first element to test in the array. * The elements tested for equality are * = *first == *(first + nelem) = == *(first + nelem*2) = : = == *(first + nelem*(nvec-1)); * * The array might be dimensioned as * = double v[nvec][nelem]; * * Function return value: * int Status return value: * 0: Not all equal. * 1: All equal. * * * wcsutil_setAll() - Set a particular vector element * -------------------------------------------------- * INTERNAL USE ONLY. * * wcsutil_setAll() sets the value of a particular element in a set of vectors. * * Given: * nvec int The number of vectors. * * nelem int The length of each vector. * * Given and returned: * first double* Pointer to the first element in the array, the value * of which is used to set the others * = *(first + nelem) = *first; = *(first + nelem*2) = *first; = : = *(first + nelem*(nvec-1)) = *first; * * The array might be dimensioned as * = double v[nvec][nelem]; * * Function return value: * void * * * wcsutil_setAli() - Set a particular vector element * -------------------------------------------------- * INTERNAL USE ONLY. * * wcsutil_setAli() sets the value of a particular element in a set of vectors. * * Given: * nvec int The number of vectors. * * nelem int The length of each vector. * * Given and returned: * first int* Pointer to the first element in the array, the value * of which is used to set the others * = *(first + nelem) = *first; = *(first + nelem*2) = *first; = : = *(first + nelem*(nvec-1)) = *first; * * The array might be dimensioned as * = int v[nvec][nelem]; * * Function return value: * void * * * wcsutil_setBit() - Set bits in selected elements of an array * ------------------------------------------------------------ * INTERNAL USE ONLY. * * wcsutil_setBit() sets bits in selected elements of an array. * * Given: * nelem int Number of elements in the array. * * sel const int* * Address of a selection array of length nelem. May * be specified as the null pointer in which case all * elements are selected. * * bits int Bit mask. * * Given and returned: * array int* Address of the array of length nelem. * * Function return value: * void * * * wcsutil_fptr2str() - Translate pointer-to-function to string * ------------------------------------------------------------ * INTERNAL USE ONLY. * * wcsutil_fptr2str() translates a pointer-to-function to hexadecimal string * representation for output. It is used by the various routines that print * the contents of WCSLIB structs. Note that it is not strictly legal to * type-pun a function pointer to void*. * * See stackoverflow.com/questions/2741683/how-to-format-a-function-pointer * * Given: * fptr int (*)() Pointer to function. * * Returned: * hext char[] Null-terminated string. Should be at least 19 bytes * in size to accomodate a 64-bit address (16 bytes in * hex), plus the leading "0x" and trailing '\0'. * * Function return value: * char * The address of hext. * *===========================================================================*/ #ifndef WCSLIB_WCSUTIL #define WCSLIB_WCSUTIL void wcsutil_blank_fill(int n, char c[]); void wcsutil_null_fill (int n, char c[]); int wcsutil_allEq (int nvec, int nelem, const double *first); void wcsutil_setAll(int nvec, int nelem, double *first); void wcsutil_setAli(int nvec, int nelem, int *first); void wcsutil_setBit(int nelem, const int *sel, int bits, int *array); char *wcsutil_fptr2str(int (*func)(), char hext[]); #endif /* WCSLIB_WCSUTIL */ pywcs-1.12/wcslib/C/wcsutrn.l0000644001153600020070000001506512310355626020204 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsutrn.l,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *============================================================================= * * wcsutrn.l is a Flex description file containing the definition of a lexical * scanner that translates non-standard FITS units specifications. * * It requires Flex v2.5.4 or later. * * Refer to wcsunits.h for a description of the user interface and operating * notes. * *===========================================================================*/ /* Options. */ %option full %option never-interactive %option noyywrap %option outfile="wcsutrn.c" %option prefix="wcsutrn" /* Exclusive start states. */ %x NEXT FLUSH %{ /* To get the prototype for fileno() from stdio.h when gcc is invoked with * -std=c89 (same as -ansi) or -std=c99 since we do not define YY_INPUT. */ #define _POSIX_SOURCE 1 #include #include #include #include #include "wcserr.h" #include "wcsunits.h" #define YY_DECL int wcsutrne(int ctrl, char unitstr[], struct wcserr **err) /* Used in preempting the call to exit() by yy_fatal_error(). */ jmp_buf wcsutrn_abort_jmp_env; #define exit(status) longjmp(wcsutrn_abort_jmp_env, status) %} %% static const char *function = "wcsutrne"; char orig[80], subs[80]; int bracket = 0; int unsafe = 0; int status = -1; YY_BUFFER_STATE inbuff; int yylex_destroy(void); *orig = '\0'; *subs = '\0'; inbuff = yy_scan_string(unitstr); *unitstr = '\0'; /* Return here via longjmp() invoked by yy_fatal_error(). */ if (setjmp(wcsutrn_abort_jmp_env)) { return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), "Internal units translator error parsing '%s'", unitstr); } BEGIN(INITIAL); #ifdef DEBUG fprintf(stderr, "\n%s ->\n", unitstr); #endif ^" "*"[" { /* Looks like a keycomment. */ strcat(unitstr, "["); bracket = 1; } " "+ /* Discard leading whitespace. */ [^A-Za-z] { /* Non-alphabetic character. */ strcat(unitstr, yytext); if (bracket && *yytext == ']') { BEGIN(FLUSH); } } angstrom { strcpy(orig, yytext); strcpy(subs, "Angstrom"); BEGIN(NEXT); } arcmins|ARCMINS? { strcpy(orig, yytext); strcpy(subs, "arcmin"); BEGIN(NEXT); } arcsecs|ARCSECS? { strcpy(orig, yytext); strcpy(subs, "arcsec"); BEGIN(NEXT); } BEAM { strcpy(orig, yytext); strcpy(subs, "beam"); BEGIN(NEXT); } Byte { strcpy(orig, yytext); strcpy(subs, "byte"); BEGIN(NEXT); } days?|DAYS? { strcpy(orig, yytext); strcpy(subs, "d"); BEGIN(NEXT); } D { unsafe = 1; strcpy(orig, yytext); strcpy(subs, (ctrl & 4) ? "d" : "D"); BEGIN(NEXT); } degrees?|DEG|DEGREES? { strcpy(orig, yytext); strcpy(subs, "deg"); BEGIN(NEXT); } GHZ { strcpy(orig, yytext); strcpy(subs, "GHz"); BEGIN(NEXT); } hr|HR { strcpy(orig, yytext); strcpy(subs, "h"); BEGIN(NEXT); } H { unsafe = 1; strcpy(orig, yytext); strcpy(subs, (ctrl & 2) ? "h" : "H"); BEGIN(NEXT); } hz|HZ { strcpy(orig, yytext); strcpy(subs, "Hz"); BEGIN(NEXT); } KHZ { strcpy(orig, yytext); strcpy(subs, "kHz"); BEGIN(NEXT); } JY { strcpy(orig, yytext); strcpy(subs, "Jy"); BEGIN(NEXT); } [kK]elvins?|KELVINS? { strcpy(orig, yytext); strcpy(subs, "K"); BEGIN(NEXT); } KM { strcpy(orig, yytext); strcpy(subs, "km"); BEGIN(NEXT); } metres?|meters?|M|METRES?|METERS? { strcpy(orig, yytext); strcpy(subs, "m"); BEGIN(NEXT); } MIN { strcpy(orig, yytext); strcpy(subs, "min"); BEGIN(NEXT); } MHZ { strcpy(orig, yytext); strcpy(subs, "MHz"); BEGIN(NEXT); } Ohm { strcpy(orig, yytext); strcpy(subs, "ohm"); BEGIN(NEXT); } [pP]ascals?|PASCALS? { strcpy(orig, yytext); strcpy(subs, "Pa"); BEGIN(NEXT); } pixels|PIXELS? { strcpy(orig, yytext); strcpy(subs, "pixel"); BEGIN(NEXT); } radians?|RAD|RADIANS? { strcpy(orig, yytext); strcpy(subs, "rad"); BEGIN(NEXT); } sec|seconds?|SEC|SECONDS? { strcpy(orig, yytext); strcpy(subs, "s"); BEGIN(NEXT); } S { unsafe = 1; strcpy(orig, yytext); strcpy(subs, (ctrl & 1) ? "s" : "S"); BEGIN(NEXT); } [vV]olts?|VOLTS? { strcpy(orig, yytext); strcpy(subs, "V"); BEGIN(NEXT); } years?|YR|YEARS? { strcpy(orig, yytext); strcpy(subs, "yr"); BEGIN(NEXT); } [A-Za-z]+ { /* Not a recognized alias. */ strcpy(orig, yytext); strcpy(subs, orig); BEGIN(NEXT); } [A-Za-z]+ { /* Reject the alias match. */ strcat(orig, yytext); strcpy(subs, orig); } " "+[^A-Za-z] { /* Discard separating whitespace. */ unput(yytext[yyleng-1]); } " "+[A-Za-z] { /* Compress separating whitespace. */ strcat(unitstr, subs); strcat(unitstr, " "); if (strcmp(orig, subs)) status = 0; unput(yytext[yyleng-1]); *subs = '\0'; BEGIN(INITIAL); } . { /* Copy anything else unchanged. */ strcat(unitstr, subs); if (strcmp(orig, subs)) status = 0; unput(*yytext); *subs = '\0'; BEGIN(INITIAL); } .* { /* Copy out remaining input. */ strcat(unitstr, yytext); } <> { /* End-of-string. */ if (*subs) { strcat(unitstr, subs); if (strcmp(orig, subs)) status = 0; } yylex_destroy(); if (unsafe) { return wcserr_set(WCSERR_SET(UNITSERR_UNSAFE_TRANS), "Unsafe unit translation in '%s'", unitstr); } return status; } %% pywcs-1.12/wcslib/CHANGES0000644001153600020070000020427412310355626017135 0ustar cslocumSTSCI\science00000000000000WCSLIB version 4.10 (2012/02/06) -------------------------------- * C library - datfix() and spcfix() now return informative messages when dates and AIPS-convention spectral axes are translated (changes contributed by Michael Droettboom). spcaips() now returns an error status for invalid values of VELREF. - wcssub() has been augmented with the ability to add new axes onto a wcsprm struct. WCSLIB version 4.9 (2012/01/24) ------------------------------- * C library - Fixes to wcsfixi() for collecting the messages properly in the info array (from Michael Droettboom). - Handle certain malformed date strings more gracefully in datfix(). - Make informative messages printed by wcserr_prt() a bit more informative. WCSLIB version 4.8.4 (2011/12/05) --------------------------------- * C library - Fixed the pseudo-random number generator in twcstab.c - gcc 4.6 with '-O2' baulked at testing for signed integer overflow. * Installation - In configure.ac, the Fortran compiler's libraries must be added to the link list when checking for the PGPLOT libraries since gcc is driving the linker. Likewise in C/GNUmakefile when linking test programs that use PGPLOT. - Use 'make CHECK=nopgplot check' to run only the non-graphical tests (even if PGPLOT is available). - After compiling and running the tests, 'make check' now summarizes the non-graphical test results and stops if any failed. WCSLIB version 4.8.3 (2011/11/17) --------------------------------- * C library - Minor generalization of the wcserr diagnostics to allow the return of informative messages which are associated with negative status values. wcserr_prt() will now recognize and print them as such. Added wcserr_clear() to reset (clear) a wcserr struct. - Modified unitfix() to return an informative message if a units alias is applied, and wcsfixi() to allow such messages to be propagated through the info array (from Michael Droettboom). - Modified twcsfix.c to use wcserr diagnostics, in particular to report units alias translations. * Fortran wrappers - In wcsfix_(), interpret *naxis == 0 as meaning naxis == 0x0, thus causing cylfix() to be skipped. - Modified twcsfix.f to reflect changes made to twcsfix.c. WCSLIB version 4.8.2 (2011/10/04) --------------------------------- * Installation - Changes for Debian package generation contributed by Ole Streicher: - Corrections to 'configure' reported by 'lintian'. - Generate man pages for the utility programs and install them. WCSLIB version 4.8.1 (2011/09/19) --------------------------------- * Installation - Set SONAME in the sharable library in accordance with tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html (reported by Ole Streicher, Debian package maintainer). The sharable library will again be installed with full release number and with a symbolic link from SONAME pointing to it. If defined, SHRLN will point to SONAME. WCSLIB version 4.8 (2011/08/15) ------------------------------- * C library - New error diagnostics mechanism contributed by Michael Droettboom: Most functions that return a numeric status (error) code now also write a detailed error message to a wcserr struct attached to the passed-in *prm struct. See wcserr.h for more information. Functions that didn't have a *prm struct as an argument have no direct way to return an error message. Therefore, these functions now have duplicate versions with the suffix "e" that take an additional "struct wcserr *" parameter. These functions are: spcspx() -> spcspxe() spctrn() -> spctrne() spctyp() -> spctype() spcxps() -> spcxpse() wcsulex() -> wcsulexe() wcsunits() -> wcsunitse() wcsutrn() -> wcsutrne() A new function wcsfixi() was added which is identical to wcsfix() but in addition stores all of the detailed textual messages about the fixes that were performed. - In wcssub(), ensure that wcstab->m_tab has been initialized before trying to free it on status return 12 or 13 (reported by Hans Terlow). - Bug fixes: - In sphx2s() and sphs2x() for the case where |eul[1]| = 180.0. - For parsing AIPS-convention VELREF in wcsbth(). - In spcaips() for translating AIPS-convention CTYPEia without Doppler frame. - Non-graphical test programs now simply report "PASS" if they satisfy the reporting tolerance for closure residuals, etc. Their full output is reported otherwise. Run 'make MODE=interactive check' to revert to the previous behaviour of reporting the full output for tests that succeed. - Eliminated compiler warnings about type-punning of pointer-to- function. * Fortran wrappers Extensive modifications to track the new error handling mechanism in the C library. * Installation - configure now prefers gfortran over g77 if available. - Don't rely on "." being in the PATH if config.status needs to be run in the pgsbox and utils makefile (reported by Peter Teuben). WCSLIB version 4.7 (2011/02/07) ------------------------------- * C library - Bug fix in celset() for interpreting LATPOLEa when LONPOLEa = phi0. Crept in at version 4.4. - Fixed the bounds test on y in hpxx2s() (HEALPix projection) for unconventional values of H and K. In hpxx2s() and hpxs2x(), corrected the offset of the southern polar half-facets for even K. In hpxs2x(), put the phi = 180 meridian in the expected place. - Bug fixes in tabx2s() and tabs2x() for default indexes (reported by David Berry). In tabs2x(), if no solution is found then do minor extrapolation past the ends of each row (1-D case only). Sped up tabs2x() by about 50%. - New functions wcsprintf(), wcsprintf_set(), and wcsprintf_buf(), declared in wcsprintf.h, provide control over the disposition of output from celprt(), linprt(), prjprt(), spcprt(), tabprt(), and wcsprt() routines. Prompted by Michael Droettboom, with an initial implementation. * Fortran wrappers - In the various test programs, used EQUIVALENCEs to ensure that the CEL, LIN, PRJ, etc. arrays are aligned on a DOUBLE PRECISION boundary. * PGSBOX - Bug fix for the case where NG1 == 0 and GRID1(0) < 0, and likewise for NG2 and GRID2. * Utilities - In wcsware, added a '-w' option to convert world coordinates obtained from stdin to pixel coordinates using wcss2p(). Allow multiple sets of input coordinates with the '-x' and '-w' options and report the value of the intermediate world coordinates. * User manual - Fixed list formatting for function return values < 0 or > 9. - New section for wcsprintf() and related routines. * Installation - Changes prompted by Sébastien Fabbro for the Gentoo Linux package: a) autoconf updates, b) respect LDFLAGS when building the shared library, c) install documentation, d) recognise DESTDIR for doing a staged installation. - As of this release, the minor WCSLIB version number (second field) will be incremented if and only if a change is made that affects the library itself, not the documentation or utilities. The version number on the installed libraries and header files will omit the patch number (third field). WCSLIB version 4.6.3 (2010/11/24) --------------------------------- * C library - Bug fix in wcsbth() for handling the inheritance of image header keywords (uncovered by valgrind, reported by Jim Lewis). WCSLIB version 4.6.2 (2010/11/22) --------------------------------- * C library - Fixed a memory leak in wcsbth.l (reported by Jim Lewis). WCSLIB version 4.6.1 (2010/11/18) --------------------------------- * Fortran wrappers - Fixed typos in cel_f.c, celget[cdi] -> celgt[cdi]. WCSLIB version 4.6 (2010/11/16) ------------------------------- * C library - In wcsulex.l and wcsutrn.l, stdlib.h must be included explicitly before the redefinition of exit() - most versions of flex do include it upfront but some don't (reported by Peter Williams). * Fortran wrappers - Changes intended to avert nuisance compiler warnings that could potentially obscure warnings indicative of a genuine problem: - To stop messages about unused variables when the relevant compiler option is set, e.g. 'g77 -Wunused', the various *_ERRMSG arrays defined in the Fortran include files and (formerly) initialized therein via DATA statements, e.g. PRJ_ERRMSG in prj.inc, have now been placed into COMMON blocks with names such as PRJ_DATA, and are initialized via DATA statements in BLOCK DATA subprograms defined in separate files, e.g. prj_data.f. - To stop messages about subroutines being invoked with inconsistent argument lists if the relevant compiler option is not set, e.g. 'g77 -Wno-globals', the C wrapper functions that take 'void *' arguments now have separate forms for INTEGER, DOUBLE PRECISION, and CHARACTER arguments that simply invoke the generic function. Application code must be modified to take advantage of this. * User manual - In the section on the Fortran wrappers in the manual, warn about the need for the INTEGER array holding a data structure to be aligned on a DOUBLE PRECISION boundary. WCSLIB version 4.5.6 (2010/10/28) --------------------------------- * Installation - Fixed the search for CFITSIO and PGPLOT library and include directories. WCSLIB version 4.5.5 (2010/10/14) --------------------------------- * Installation - Build the PGSBOX sharable library. WCSLIB version 4.5.4 (2010/09/28) --------------------------------- * C library - In wcshdo(), according to the FITS standard, "Letters in the exponential form ('E' or 'D') shall be upper case" (reported by Michael Droettboom). WCSLIB version 4.5.3 (2010/09/23) --------------------------------- * Utilities - Various improvements to wcsgrid: correct the scaling set via cpgwnad(); label angles other than RA,Dec in decimal degrees; draw the projection boundary for projections other than zenithals. WCSLIB version 4.5.2 (2010/09/23) --------------------------------- * C library - Fixed the translation of GLS to SFL in wcsset() and celfix() when the reference longitude is non-zero - it introduces an offset in longitude in the normal way. (This undoes part of the change applied in version 4.4.) WCSLIB version 4.5.1 (2010/08/12) --------------------------------- * C library - New utility function, sphpad(), computes the coordinates of points offset by given angular distances and position angles from a given point on the sky (complementary to sphdpa()). * Fortran wrappers - New wrapper function: - SPHPAD for sphpad(). WCSLIB version 4.5 (2010/07/16) ------------------------------- * C library - Fixed the interpretation of VELREF when translating AIPS-convention spectral types. Such translation is now handled by a new special- purpose function, spcaips(). The wcsprm struct has been augmented with an entry for velref which is filled by wcspih() and wcsbth(). Previously, selection by VELREF of the radio or optical velocity convention for type VELO was not properly handled. * Fortran wrappers - New wrapper function: - SPCAIPS for spcaips(). - Changed spc.inc, spc_f.c, wcs.inc and wcs_f.c to track VELREF changes. - Declared functions external in the include files to avoid compiler warnings about unused variables (if the particular option is set). * Utilities - Added a '-q' option to fitshdr to quit after a specified number of HDUs. WCSLIB version 4.4.4 (2009/09/14) --------------------------------- * Installation - Added more configure options for controlling the build: --disable-fortran, --disable-utils, --without-cfitsio, and --without-pgplot. WCSLIB version 4.4.3 (2009/09/03) --------------------------------- * C library - Set wave number units to "/m" in spctyp(), was "1/m" which is not strictly legal and wasn't handled by wcsulex() (reported by Hans Terlow). Also fixed a number of units specifications in the prologue of spx.h to conform with Paper I usage. - In wcsulex(), allow unit strings like "1/m" in addition to "/m", provided that the superfluous "1" is the first non-blank character in the expression, or parenthesised sub-expression. - In wcssptr(), ensure that i is always reset if given < 0. * User manual - Augmented the list of FITS WCS and related software in the manual. WCSLIB version 4.4.2 (2009/08/13) --------------------------------- * C library - In sphx2s() and sphs2x(), handle the case where |eul[1]| = 180.0 separately for speed and accuracy. This change also fixes a rare and subtle bug in cels2x() that occurs when celprm::isolat is set and the magnitude of the first latitude in the lat[] vector exceeds 90 deg (reported by Hans Terlouw). * Installation - Fix relating to creation of symlinks when installing the libraries. WCSLIB version 4.4.1 (2009/08/11) --------------------------------- * Installation - Fixes for installation of the CHANGES file and for the creation of a symbolic link for the sharable library if one already exists. WCSLIB version 4.4 (2009/08/10) ------------------------------- * C library - Creation of WCSLIB user manual from the header file prologues using a special-purpose parser, doxextr, and sed scripts to generate input for doxygen. This required minor formatting changes to all prologues plus miscellaneous changes such as naming of arguments in function prototypes. - Bug fix in wcsset() that affected handling of PROJPn (deprecated) and PVi_ma attached to the longitude (not latitude) axis. Guard against long strings when copying the projection code. In wcs_types(), allow for early Paper IV distortion codes (e.g. "RA---TAN-SIP") when parsing CTYPEia. - Use sincos() whereever possible for a ~15% speedup (patches for cel.c, prj.c and sph.c supplied by Michael Droettboom). configure checks for, and uses it automatically if available. - Fixed the translation of GLS to SFL in wcsset() and celfix() when the reference longitude and latitude are non-zero. (In the AIPS convention, this simply translates the reference point, i.e. the map as a whole, to those coordinates without creating an oblique grid.) - Bug fix in prjoff(), a utility function used by the prj routines. It forces (x,y) = (0,0) at (phi_0,theta_0) when the latter are set by PVi_[012]a attached to the longitude (not latitude) axis. Rarely used in practice. - New utility function, sphdpa(), computes the distance and position angle from a point on the sphere to a set of field points. - In sphx2s() and sphx2s(), handle a simple change in origin of longitude using a short-cut calculation for speed and accuracy. Similarly in celset(), check whether phip == phi0 when computing latp and if so use a short-cut that ensures latp == 90.0 (exactly) if lat0 == theta0. The resulting spherical rotation then becomes a simple change in origin of longitude. In particular, these changes should assist PGSBOX in drawing grid lines of +/-180 longitude, to prevent flip-flopping between one and the other. - wcsbth() & wcspih(): resolved an inconsistency between the documentation and code by renamimg WCSHDR_VSOURCEa as WCSHDR_VSOURCE. - Flex code: moved declaration of helper functions out of global scope. - Fixed the call to wcss2p() in twcshdr (in a section of code not usually exercised). * Fortran wrappers - New wrapper functions: - WCSBTH for wcsbth(), - WCSBDX for wcsbdx(), - CDFIX for cdfix(), - SPHDPA for sphdpa(). - Updated WCSLEN (in wcs.inc) and added WCS_COLAX and WCS_VELANGL to match changes to wcsprm made in v4.3 with corresponding changes to the wrapper functions. Likewise updated TABLEN (in tab.inc) for changes to tabprm, and added CEL_LATPREQ for celprm. - Struct lengths (WCSLEN, PRJLEN, etc.) are now long enough to accomodate 64-bit machines. - Updated the flag bits for the RELAX argument in wcshdr.inc to reflect changes to wcshdr.h made in v4.3. Renamed WCSHDR_VSOURCEa to WCSHDR_VSOURCE for consistency with the C library. * PGSBOX - Improved grid labelling, particularly in minimizing the number of fields required in sexagesimal labels. * Utilities - New utility program: - wcsware extracts the WCS keywords for an image from the specified FITS file, constructs wcsprm structs for each coordinate representation found, and performs a variety of operations using them. - Old utility programs (first appeared in 4.3 but were not recorded): - HPXcvt reorganises HEALPix data into a 2-D FITS image with HPX coordinate system. - wcsgrid extracts the WCS keywords for an image from the specified FITS file and uses pgsbox() to plot a 2-D coordinate graticule for each alternate representation found. - fitshdr lists headers from a FITS file specified on the command line, or else on stdin, printing them as 80-character keyrecords without trailing blanks. * Installation - New configure options, --with-pgplotinc, --with-pgplotlib, --with-cfitsioinc and --with-cfitsiolib allow additional directories to be added to the library and include file search path. - Miscellaneous fixes and improvements to the installation process. - Generate a metadata file for pkg-config. - Added 'make MODE=interactive check' to run the test programs in interactive mode rather than batch. - Merged the separate CHANGES files for C, Fortran and PGSBOX into one (this), with a new section for utilities. WCSLIB version 4.3.3 (2009/04/30) --------------------------------- * C library - fitshdr.l, wcsbth.l, and wcspih.l: use setjmp/longjmp to preempt the call to exit() which is hard-coded in function yy_fatal_error() supplied by flex. - wcspih.l: if NAXIS is non-zero but there were no WCS keywords at all in the header then create a default WCS with blank alternate version. WCSLIB version 4.3.2 (2009/03/16) --------------------------------- * C library - utils/GNUmakefile: create BINDIR if necessary prior to installing utilities. WCSLIB version 4.3.1 (2008/09/08) --------------------------------- * Installation - Top-level GNUmakefile: install header files. WCSLIB version 4.3 (2007/12/27) ------------------------------- * C library - A new general WCS header parser wcsbth() handles binary table image arrays and pixel lists as well as image array headers. Added "colax" to the wcsprm struct to record the column numbers for each axis in a pixel list. - New function wcsbdx() is the analog of wcsidx() for the array of wcsprm structs returned by wcsbth(). - New function wcshdo() writes out a wcsprm struct as a FITS header. - Changes to wcspih(): - Bug fix, check for a == 0 (indication of a keyword that applies to all alternates) in internal helper function wcspih_naxes() (reported by Craig Markwardt). - Added a new ctrl option to remove valid WCS keyrecords except for those with a more general role, namely {DATE,MJD}-{OBS,AVG} and OBSGEO-{X,Y,Z} (suggested by Jim Lewis). - Added a rule for VELANGLa. Also added "velangl" to the wcsprm struct. - Do checks on the i, k & m keyword parameters in . - Fixed the test for repeated blanks in the NAXIS and WCSAXES patterns. - Fixed three rules to allow m == 0. - Reworked the implementation notes in the prologue. - The flex scanners, fitshdr.l, wcsbth.l, wcspih.l, wcsulex.l, and wcsutrn.l, invoke yylex_destroy() before returning to avoid a 16kiB memory leak. This was reported by several people, however it may be problematic depending on the version of flex used - version 2.5.9 or later is required. If this is not available, C sources pre- generated by flex 2.5.33 will be used. - In wcs.c, don't define the signbit macro if already defined (for MacOSX). - In wcs.h, documented wtbarr namespace issues in C++. - In wcsset(), always set wcsprm.cunit[i], if possible (primarily for use by wcshdo()). - In wcsfix.c, parenthesised a boolean expression that was otherwise incorrect. - Fixed an obscure floating point rounding error in celset() that appeared with -O2 optimization in gcc v3.3.5 (Linux). - prjset() now correctly propagates the status value returned by the specific projection-setting functions (reported by Bill Pence). - Bug fix in hpxx2s(), also added bounds checking. Minor efficiencies in carx2s() and merx2s(). - In the various functions that print the contents of the structs, use the "%p" printf conversion specifier to print addresses rather than casting the pointer to int and using "#x". The latter does not work on 64-bit machines where sizeof(int) != sizeof(void*). - Reorganized the various structs to get alignment on 64-bit machines. - All header file prologues now reference the README file for an overview of the library. - Miscellaneous portability fixes for 64-bit, MacOSX, OSF compiler, etc. - Elimination of compiler warnings, e.g. parenthesised assignments used as truth values (a favourite gcc gripe!), etc. - Process flex descriptions using a newer version of flex, primarily for MacOSX. However, the processed files are now only used when flex 2.5.9 or later is not available. - Removed WCSLIB 2.x backwards-compatibility measures from lin.h, prj.h, prj.c, and sph.h. * Fortran wrappers - (No substantive changes.) * PGSBOX - Miscellaneous improvements to PGSBOX. * General - Switched licensing to LGPL 3.0. - In comment text, replaced use of the obsolete term "card" with "keyrecord" which consists of a "keyword", "keyvalue", and "keycomment". * Installation - General improvements to the installation process: autoconf-related portability improvements, particularly relating to Fortran name mangling; makefile rules for building the shared library, for processing flex descriptions; don't rely on "." being in the PATH when running tests. WCSLIB version 4.2 (2005/09/23) ------------------------------- * C library - Brought the installation process under control of GNU autoconf, the top-level makefile now builds and tests everything, and the C library has a config.h in which WCS_INT64 is set. Added an INSTALL file. - Merged the FORTRAN, C and PGSBOX READMEs into one top-level README. - Extensions for -TAB coordinate handling: in tabx2s() and tabs2x(), allow extrapolation by half a cell at either end of the index and coordinate tables; fits_read_wcstab() (in getwcstab.{h,c}) allows TDIMn to be omitted for 1-D lookup tables for which it has the form '(1,K)', i.e. describing a degenerate 2-D array; wcsprt() now prints the wtbarr structs in wcsprm. - Bug fixes for -TAB coordinate handling: in tabx2s() and tabs2x() the incorrect indexing variable, m instead of i, was used for tab->crval[]; wcsp2s() and wcss2p() returned prematurely in the tabular coordinate loop; in wcstab(), removed an extraneous assignment to wtbp->kind for index arrays. - In wcsp2s() and wcss2p(), elements of the stat[] vector that had been set were being reset incorrectly to zero. The stat[] values are now set as flag bits for each coordinate element. - Added cdfix() to the wcsfix() suite to fix erroneously omitted CDi_ja cards. - PGSBOX is now compiled into a separate object library, and is installed alongside WCSLIB. - Eliminated several instances of non-ANSI C library functions and header files and some residual K&R C usage. The Sun C compiler complained about const int definitions of initializers used in variable declarations in some of the test programs; changed these to preprocessor macros. * Fortran wrappers - Fixed handling of 64-bit integer keyvalues in keyget_(). - Fixed output formatting of 64-bit integer keyvalues in tfitshdr.f. - Fixed minor syntax errors in twcsfix.f and tpih1.f reported by the Sun Fortran compiler. - The output of each test program now identifies the source file. * PGSBOX - (No substantive changes.) WCSLIB version 4.1 (2005/08/31) ------------------------------- * C library Summary of added functionality: - -TAB coordinate axes are now fully implemented in the WCSLIB driver functions (in wcs.{h,c}); multiple -TAB axes are supported. A new function, wcstab(), which is automatically invoked by wcspih(), parses -TAB-related header cards and sets up structs for a separate routine that reads the necessary arrays from a FITS binary table extension. An implementation of this routine in CFITSIO, fits_read_wcstab(), is provided. Note however that the interface of this function is experimental, and the code itself must be considered beta-release in WCSLIB 4.1. - Units specifications, either from CNAMEia or inline comments (with brackets), of arbitrary complexity are now fully implemented via a parser, wcsulex(), and converter, wcsunits(). This is invoked automatically by wcsset(). - Translators for non-standard WCS constructs are provided. These cover date formats, units specifications, defunct celestial projection types, AIPS spectral axis types, and the repair of malformed cylindrical coordinate systems. - wcspih() now has options to remove the WCS cards it has processed from the header and a new generic FITS header parser, fitshdr(), may be used to parse the remaining non-WCS cards. In addition to the more basic types, it handles 64-bit and 'very long' (70 digit) integer keyvalues, and also continued string keyvalues. It also does keyword matching and extracts units specifications in inline comments. - -LOG coordinates are now implemented independently of spectral coordinate types. Multiple -LOG axes are supported. - New function wcssptr() translates the spectral axis in a wcsprm struct to the required type. - The README file now gives an introduction to, and complete overview of, WCSLIB. It provides a point of entry to programming with WCSLIB. Complete descriptions and usage notes for all functions are contained in the header files. - The FORTRAN wrappers and test programs are now completely up-to-date with respect to the C implementation. - All code, including the FORTRAN wrappers, PGSBOX, and all test programs, now pass 'purify' without memory leaks, uninitialized memory reads, memory access violations, or other memory faults. Change notes: - Added options to wcspih() to remove WCS cards from the input header leaving only non-WCS cards behind. Modified test programs tpih1.c and tpih2.c to use CFITSIO optionally via preprocessor macro DO_CFITSIO. - New function wcstab() in wcshdr.{h,c} parses -TAB-related header cards and sets up structs for a separate routine that reads the necessary arrays from a FITS binary table extension. New test/demo program twcstab.c using header defined in wcstab.cards. - CFITSIO implementation, fits_read_wcstab() in getwcstab.{h,c}, of a function, independent of WCSLIB, for extracting arrays from a binary table as required in constructing -TAB coordinates. - New units specification parser, wcsulex() in wcsunits.h and wcsulex.l, and converter, wcsunits() in wcsunits.{h,c}. New test/demo program tunits.c. - New parser for non-standard units specifications, wcsutrn() in wcsunits.h and wcsutrn.l, also tested by tunits.c. - New functions datfix(), unitfix() (which applies wcsutrn()), celfix(), and spcfix() join cylfix() in wcsfix.{h,c} to translate various forms of non-standard or quasi-standard FITS WCS keyvalues in a wcsprm struct. wcsfix() applies all of these in sequence. New test/demo program twcsfix.c, with wcsfix() also now invoked by tpih1.c. - New generic FITS header parser, fitshdr() in fitshdr.{h,l}. New test/demo program tfitshdr.c uses wcs.cards with extra non-WCS cards added. - -LOG coordinates are now treated as a coordinate type separate from spectral coordinates, implemented via log.{h,c} and test program tlog.c. The logarithmic functions were removed from spx.{h,c}, and spc.c. - Extensive changes to wcs.{h,c} to support multiple -TAB and -LOG coordinate axes and units conversion. Substantially changed the test program, twcs.c, to test the more general functionality. - New function wcssptr() in wcs.{h,c} translates the spectral axis in a wcsprm struct. - Added DATE-AVG to wcsprm. Also ntab, tab, nwtb, and wtb required for -TAB implementation. Define struct wtbarr. - Added a types[] member to the wcsprm struct to identify axis coordinate types using a four-digit code. - Use memset() in wcsini() to null-fill character arrays in the wcsprm struct so that they don't appear to be padded with garbage when displayed by gdb. - Do alias translation for AIPS-convention spectral types in wcsset() using spctyp(). If wcsset() finds a CTYPEia in "4-3" form with an unrecognized algorithm code it now returns an error rather than assume that it's a linear axis. wcsset() now also resets lonpole and latpole to the values actually used. - Modified spctyp() to translate AIPS-convention spectral ctypes, and modified the argument list to return the parsed spectral type and algorithm code. The return arguments will not be modified if CTYPEia is not a valid spectral type; zero-pointers may be specified for any that are not of interest. Removed the external const variables, spc_codes and spc_ncode, as their function is now fulfilled by spctyp(). - Fixed a bug in spctrn() in resolving ctypeS2 wildcarding. - Added latpreq member to the celprm struct, set by celset() to indicate how LATPOLE is used. Augmented tcel2.c to report it. - New function tabmem() in tab.{h,c} takes control of user-allocated memory. - tabini() allows K == 0 and also K[m] == 0 to initialize partially the tabprm struct (for wcstab()). It now does fine-grained bookkeeping of memory allocation for the index arrays and allocates each individually. tabprm.index[] == 0x0 is recognized as default indexing in tabset(), tabx2s() and tabs2x(). - The *prt() functions report parameters to an extra decimal place. - tabprt() prints the array index for elements of the coordinate and index vectors. - Set the 0th element in all *_errmsg arrays to "Success". - Extracted string utility functions used by WCSLIB into wcsutil.{h,c}. - Removed support for K&R C. * Fortran wrappers - The FORTRAN wrappers and test programs are now completely up-to-date with respect to the C implementation. - New include files, wrappers, and test programs: fitshdr.inc, fitshdr_f.c, getwcstab.inc, getwcstab_f.c, log.inc, log_f.c, sph.inc, tab.inc, tab_f.c, tfitshdr.f, tlog.f, ttab1.f, ttab2.f, ttab3.f, tunits.f, twcsfix.f, twcstab.f, wcsfix.inc, wcsfix_f.c, wcsunits.inc, wcsunits_f.c. - Updates to reflect changes to the C library and test programs: cel.inc, cel_f.c, prj.inc, spc.inc, spc_f.c, spx.inc, spx_f.c, tlin.f, tpih1.f, tpih2.f, tprj1.f, tprj2.f, tspc.f, tsph.f, tspx.f, twcs.f, twcsmix.f, twcssub.f, wcs.inc, wcs_f.c, wcshdr.inc, wcshdr_f.c. - Added *_ERRMSG arrays containing status messages to all include files. - Removed support for K&R C. * PGSBOX - Fixed a subtle though benign memory fault identified by 'purify'. - Reset LATPOLE in the COE example in cpgtest.f when drawing the second (native) grid because it will have been set to a non-default value by wcsset() when the first grid was drawn; set wcs.flag to -1 before wcsinit() and call wcsfree() at the end. Similarly for pgtest.f. WCSLIB version 4.0 (2005/02/07) ------------------------------- * C library - Implemented tabular coordinates (-TAB). New files: tab.h and tab.c, and test programs ttab[123].c. These have not been incorporated into the higher-level (wcs.h) functions at this stage. - New spectral functions: spchek() checks a spectral algorithm code for legitimacy; from the spectral keywords given, spcspx() derives the corresponding CRVALi and CDELTi keywords for the underlying P-, and X-type spectral coordinates; spcxps() does the opposite; spctrn() combines spcspx() and spcxps() to translate one set of spectral keywords into another, e.g. 'FREQ' -> 'ZOPT-F2W'. - Implemented the HEALPix (HPX) projection in the prj functions. - Added a new function, wcsidx(), to return an array that indexes the alternate coordinate descriptions found by wcspih() (suggested by Bill Pence, NASA/Goddard). Modified tpih1.c to exercise it. - In wcsp2s() and wcss2p(), check that nelem equals or exceeds wcs.naxis; emphasised this in the usage notes for these functions in tab.h (suggested by Bill Pence, NASA/Goddard). - Moved the macros used for UNDEFINED values and the corresponding macro test function, undefined(), to wcsmath.h for general use. Previously, UNDEFINED values were only used internally, but they are now visible in some of the structs, particularly values of undefined auxiliary header cards in the wcsprm struct. - Remove const from the double args in the specx() prototype in spx.h to match the definition in spx.c (reported by Bryan Irby, NASA/Goddard). - Fixed the interaction between the FLAVOUR and PGPLOTLIB definitions in the C and FORTRAN Makefiles by introducing a separate variable, DO_PLOTS, to control whether to exercise test programs that require PGPLOT (reported by Bill Pence, NASA/Goddard). * Fortran wrappers - New wrapper defined in wcshdr_f.c: wcsidx_(). Modified test program tpih1.f to use it. * PGSBOX - (No substantive changes.) * General - Changed the copyright notice in all library routines from LGPL to GPL as recommended by the FSF (http://www.gnu.org/licenses/why-not- lgpl.html). * Installation - General improvements to the installation process: fixed the interaction between the FLAVOUR and PGPLOTLIB definitions in the Makefile by introducing a separate variable, DO_PLOTS, to control whether to exercise test programs that require PGPLOT (reported by Bill Pence, NASA/Goddard). Added an "install" target to the Makefile. WCSLIB version 3.6 (2004/08/25) ------------------------------- * C library - New service routine, wcssub() extracts the coordinate description for a subimage from a wcsprm struct. wcscopy() is now implemented as a preprocessor macro that invokes wcssub(). New test program, twcssub.c, tests wcssub(). - In wcspih(): 1) Fixed handling of string-valued keywords where the inline comment contains a single-quote character ('). 2) Fixed the address arithmetic for EPOCH and VELREF. 3) Translate VSOURCEa into ZSOURCEa if required. 4) Recognize SSYSSRCa. 5) Support free-format string keyvalues, as well as integer and floating-point keyvalues; documented this in the prologue of wcshdr.h. 6) Allow header cards without inline comments. 7) Fixed function prototyping in wcspih.l (i.e. ANSI and non-ANSI forms were potentially mixed). 8) Catch an unhandled newline character on the END card that was echoed to stdout. 9) In error messages, print "ERROR" (uppercase) - POSIX standard. - Modified wcs.cards to explain and test free-format keyvalues, and also augmented the inline comment on illegal WCS cards that are to be rejected, and WCS-like cards to be discarded. Added a header card with no inline comment. - Removed vsource from the wcsprm struct and added ssyssrc. - In wcsini(), fixed a problem with memory management for wcs.pv when NPVMAX is zero; likewise for wcs.ps and NPSMAX. - In wcsprt(), don't print auxiliary coordinate system information in arrays with zero address. - In wcss2p(), status == 9 (one or more invalid world coordinates) was not returned appropriately. - Renamed twcs1.c to twcs.c, and twcs2.c to twcsmix.c. - "Error status/code/number" is now referred to consistently as the "status return value". - Some vestiges of K&R C were removed: preprocessor definition of const, and K&R function prototypes. * Fortran wrappers - New wrapper defined in wcs_f.c: wcssub_(). New test program, twcssub.f. - Renamed twcs1.f to twcs.f, and twcs2.f to twcsmix.f. * PGSBOX - (No substantive changes.) * Installation - Worked over the C, FORTRAN, and PGSBOX makefiles, in particular to make them all consistent. WCSLIB version 3.5 (2004/06/28) ------------------------------- * C library - WCSLIB now provides a function, wcspih() implemented as a Flex description, that parses a FITS image header, either that of a primary HDU or an image extension. Given a character array containing the header it identifies and reads all WCS cards for the primary coordinate description and up to 26 alternate descriptions and returns this information as an array of wcsprm structs. A service routine, wcsvfree(), is provided to free the memory allocated by wcspih(). The relevant header file for these functions is wcshdr.h. Test programs, tpih1 and tpih2, are provided to verify wcspih. The first simply prints the contents of the structs using wcsprt(). The second uses cpgsbox() to draw coordinate graticules. A FITS WCS test header has been developed to provide input to these test programs. It is implemented as a list of card images, wcs.cards, one card per line, together with a program, tofits, that compiles these into a valid FITS file. tpih1 uses its own code to read this, whereas tpih2 uses the fits_hdr2str() function from CFITSIO. - Removed twcsprt, tpih exercises wcsprt() much more thoroughly than twcsprt ever did. Modified twcs1 to print the size of the various structs as twcsprt used to. - Although they are not used in any coordinate calculations, the wcsprm struct now provides data members for storing all of the auxiliary FITS WCS header cards defined in Papers I, II, and III, such as WCSNAMEa, EQUINOXa, and CNAMEia. Members are also provided for storing the alternate descriptor code (the "a" in CTYPEia), and the binary table column number. These are supported by the high level WCSLIB routines, wcsini(), wcscopy(), wcsfree(), and wcsprt(). Refer to wcs.h for details. - The number of PVi_ma cards for which wcsini() allocates memory is now set by a global variable, NPVMAX (previously a C-preprocessor macro). This defaults to 64 but may be changed by a new function, wcsnpv(). The wcsprm struct contains a new member, npvmax, that records the value of this number at the time the struct was initialized. This is in addition to npv which records the actual number of cards that were encountered. Similarly, NPSMAX (default 8) is used for the number of PSi_ma cards, and it may be changed via wcsnps(). The axis number, i, in the pvcard struct used for storing PVi_ma cards may now be set to 0 to indicate the latitude axis. - calloc() is now used in place of malloc() in allocating memory for arrays, and inclusion of malloc.h has been replaced with stdlib.h for all platforms. wcsfree() checks that wcs.flag != -1 before testing wcs.m_flag when freeing memory allocated by wcsini() in case the struct is uninitialized. Similarly for linfree(). - In prj.h, renamed C-preprocessor macros INI, PRT, SET, X2S and S2X to PRJINI, PRJPRT, PRJSET, PRJX2S and PRJS2X to reduce the likelihood of namespace clashes. Similarly in spc.h. Also, in prj.c, changed the name of helper routine offset() to prjoff() to reduce the likelihood of global namespace conflicts. - In line with bonx2s() and bons2x(), bonset() now recognizes the equatorial case of Bonne's projection as Sanson-Flamsteed, mainly so that the auxiliary information in the prjprm struct more accurately reflects the truth. Modified tcel2 to exercise this by using an equatorial Bonne projection in place of the Hammer-Aitov. - zpns2x() used prj.w[0] for bounds checking, though this had not been set by zpnset() for polynomials of degree N < 3. Consequently, bounds checking for N < 3 was unreliable (reported by David Berry, STARLINK). - Changed some variable names in tscs2x(), cscx2s(), cscs2x(), qscx2s(), and qscs2x() to match Paper II, and likewise changed some inequality tests in qscs2x() without changing the results. - Minor tidying up of output formatting in prjprt(). - Added the alternate version code to FITS WCS keywords mentioned in comments, e.g. CTYPEi changed to CTYPEia. * Fortran wrappers - New wrappers defined in wcshdr_f.c: wcspih_() and wcsvfree_(), and also a new service function, wcsvcopy_(). New test programs, TPIH1 and TPIH2, being analogues of tpih1 and tpih2. Removed TWCSPRT. - In wcs_f.c, new wrappers wcsnpv_() and wcsnps_(); modified wcsput_() and wcsget_() to handle new members of the wcsprm struct. Also modified wcsput_() to null-fill all char[] members of the wcsprm struct, and likewise wcsget_() to blank-fill them. - Modified wcs.inc to support changes to the wcsprm struct. * PGSBOX - In PGSBOX, increased the dimension of the WORLD and XY vectors from 2 to 9 to accomodate higher-dimensional coordinate representations of up to 9 elements. Similarly for pgwcsl(). The assumption (presently) is that the first two world, and pixel, coordinate elements are the relevant ones; the others are all set to zero when pgwcsl() initializes and otherwise ignored. Assigned some variables in DATA to stop compiler messages about uninitialized variables. - Generalized the Makefile, bringing it into line with the WCSLIB Makefile, and adding separate targets for compiling and running the test programs. The default target now simply compiles pgsbox.c and cpgsbox.c. A separate target compiles pgwcsl.c and inserts it into ../C/libwcs.a. WCSLIB version 3.4 (2004/02/11) ------------------------------- * C library - In aitx2s(), apply the boundary condition 0.5 <= Z^2 <= 1 given after Eq. (109) in WCS Paper II to detect outlying pixels. - Fixed several special-case bugs in celset(): 1) For theta_0 = 90, in substituting the default value for phi_p (LONPOLE), a) for the special case when delta_0 = 90, celset() provided the wrong value (180 instead of 0), b) celset() neglected to add phi_0 (normally 0). 2) For theta_0 != 90, a) for the special case when delta_0 = -90, celset() incorrectly computed delta_p (as theta_0 instead of -theta_0), b) for the special case when delta_p = +90 (or -90), celset() neglected to subtract (or add) phi_0 (normally 0). 3) For |delta_0| = 90, celset() incorrectly allowed the particular, invalid, value of phi_p (LONPOLE) that put the other pole at the fiducial point. 4) For theta_0 = 0, delta_0 = 0 LATPOLE determines delta_p completely. For LATPOLE > 90 celset() now sets delta_p to 90, and for LATPOLE < -90 it sets it to -90. - Additional refinements in celset(): 1) cel->ref[2] is normalized in the range [-180,180]. 2) Account for rounding error in the computation of delta_p. - sphx2s() and sphs2x() incorrectly handled the "change in the origin of longitude" special case that arises when delta_p = -90, in the even more restrictive case where |theta| = 90 also; it applied Eq. (3) instead of Eq. (4) of Paper II. - Added a new test program, tcel2.c, to exercise celset() more thoroughly. Renamed the original tcel.c to tcel1.c and modified the Makefile to suit. * Fortran wrappers - (No changes.) * PGSBOX - (No substantive changes.) WCSLIB version 3.3 (2003/10/21) ------------------------------- * C library - In celset(), the default value for phi_p (LONPOLE) is phi_p = phi_0 + ((delta_0 < theta_0) ? 180.0 : 0.0) Previously phi_0 (which is normally zero) was not added (reported by David Berry, STARLINK). - wcsprt() and linprt() now check that the structs have been initialized. - In wcsini(), when the wcsprm flag is -1 also set the linprm flag to -1 to force initialization of the memory managed by linset(). - wcsset() now explicitly initializes the celprm and spcprm structs via celini() and spcini(). - Fixed syntax errors in the macro definitions of linrev_errmsg and linfwd_errmsg. - In Makefile, added the -ansi option to gcc to force it to behave like a strict ANSI C compiler, specifically in setting the __STDC__ preprocessor macro. * Fortran wrappers - (No changes.) * PGSBOX - PGSBOX now recognizes status returns -1, -2, and -3 from NLFUNC for opcodes +2 and +1 which cause it to accept the returned (x,y) coordinates but not consider them as one end of a crossing segment for labelling world coordinate 1, 2, or both. - PGSBOX now takes care not to lose vertical tick marks (and hence labels) at the left or right edge of the frame. Likewise for horizontal tick marks at the top or bottom edge of the frame. - Tightened up the test in PGSBOX for cycles in angle to catch the case where the coordinate value spans a full 360 degrees. - PGSBOX will no longer accept frame crossings that are too oblique; floating point rounding errors may cause grid lines that should otherwise track along the frame to weave down it from side-to-side resulting in spurious crossing points. - Fixed a bug in pgwcsl_() for processing simple linear coordinates. - pgwcsl_() now returns error -2 if the latitude is outside -90 to +90 for opcodes +2 and +1. - Amended the translation of status return codes from WCSLIB in pgwcsl_(). - Provided a header file for pgwcsl_() (mainly for C++ usage). - Added extra test plots to PGTEST and cpgtest. - Added extra functionality to the Makefile. WCSLIB version 3.2 (2003/09/09) ------------------------------- * C library - Added the facility of setting the flag member of a wcsprm struct to -1 before calling wcsini() for the first time in order to initialize memory management. Likewise for linprm and linini(). - Renamed wcscpy() to wcscopy() to avoid a conflict with the Posix "wide character string" function of the same name (wchar.h). In particular, this is used by the GNU C++ string class. - The higher level functions (wcs, cel, spc) no longer return prematurely if some of the input coordinate values are invalid. - All functions now test whether a null pointer for the particular struct (wcsprm, celprm, etc.) has been passed to them. - Function return codes have been rationalized into a consistent set within each of the wcs, cel, lin, prj, spc, and spx suites of functions. Error messages to match these error codes are now encoded in a single character array, e.g. wcs_errmsg and prj_errmsg, instead of a separate array for each function. Macro definitions for the older character arrays (e.g. wcsini_errmsg) have been provided for backward compatibility. - Declared prj_stat as extern in prj.h. * Fortran wrappers - (No changes.) * PGSBOX - Added an ENTRY point, PGLBOX, that provides a simplified interface to PGSBOX for linear axes without having to specify an NLFUNC or the associated parameters. WCSLIB version 3.1 (2003/04/29) ------------------------------- * C library - Added "global" and "divergent" prjprm struct informational members to record whether the projection is capable of mapping the whole sphere, and whether it is divergent in latitude. - Function cylfix() provided to fix WCS FITS header cards for malformed cylindrical projections (c.f. Paper II, Sect. 7.3.4). - Added support for CUNITi cards to wcsprm (but not currently implemented). - Added macro implementations of the trigd functions to wcstrig.h, enabled if WCSTRIG_MACRO is defined. - Improved printing of the WCSLIB structs. - Added macro definitions for the lengths of the WCSLIB structs measured in sizeof(int) units (mainly for the FORTRAN wrappers). * Fortran wrappers - FORTRAN is now supported via a set of wrappers on the C library. Refer to the README file. * PGSBOX WCSLIB version 3.0 beta release (2003/04/01) -------------------------------------------- * C library - Fully vectorized function interfaces (C preprocessor macros are available to implement the scalar interfaces of the proj.c, sph.c, and lin.c routines from WCSLIB 2.x). - Implementation of Paper II, Sect. 2.5: User-specified (phi0, theta0). - Implementation of Paper III (excluding "-TAB"). - Memory management is now implemented in the upper-level (wcs.c) routines. - New extensible design should accomodate Paper IV (and any other) without further change to the function interfaces. * PGSBOX - Added a C wrapper function, cpgsbox(), and C test/demo program, cpgtest, that duplicates PGTEST and serves as a C coding template. - Added calendar date axes. - Sped up the max/min search - if only tickmarks are required there is no need to search the interior of the image. - Return margin widths in CACHE(,NC). - Fixed a buglet that caused ticks at the frame edges to be skipped. - Return error 3 if CACHE overflows. - Adapted PGWCSL for WCSLIB 3.x - it is now a C function (for interfacing to WCSLIB) with a FORTRAN-like interface (for PGSBOX). WCSLIB version 2.9 (2002/04/03) ------------------------------- * C library - Fixed a bug with alias translation in wcsset(). - Added a conditional compilation directive to lin.c for Apple's MacOS X. * Fortran library - Fixed CUBEFACE handling in WCSSET. WCSLIB version 2.8 (2001/11/16) ------------------------------- * C library - Added support for the SZP projection with szpset(), szpfwd() and szprev(), and generalized AZP with support for the tilt parameter, gamma. - Added phi0 to the prjprm struct, this is set by the projection initialization routines along with theta0. - Fixed a problem in wcsmix() caused by numerical imprecision that could cause it not to recognize when convergence was reached; break out of the loop early if a discontinuity is detected. - Clarified the usage of vspan in the prologue to wcsmix(). - Fixed comments relating to LATPOLE in the prologue to cel.c and tcel.c, and replaced references to LONGPOLE with LONPOLE. - Augmented the error reports in twcs2. - Modified projex() in tproj1 and prjplt() in tproj2 to make use of the information stored in the prjprm struct. * Fortran library - Added support for the SZP projection with SZPSET, SZPFWD and SZPREV, and generalized AZP with support for the tilt parameter, gamma. - Changed the call sequence to PRJSET to return PHI0 along with THETA0. - Fixed a problem in WCSMIX caused by numerical imprecision that could cause it not to recognize when convergence was reached; break out of the loop early if a discontinuity is detected. - Clarified the usage of VSPAN in the prologue to WCSMIX. - Fixed comments relating to LATPOLE in the prologue to CEL and TCEL, and replaced references to LONGPOLE with LONPOLE. - Augmented the error reports in TWCS2. - Modified PROJEX in TPROJ1 and PRJPLT in TPROJ2 to use the generic driver routines PRJSET, PRJFWD and PRJREV. PRJPLT also now uses the projection type encoded in PRJ(11). WCSLIB version 2.7 (2001/02/19) ------------------------------- * C library - Added generic driver routines prjset(), prjfwd() and prjrev(). These invoke specific projection routines via the pointer-to- function elements, prjfwd and prjrev, transferred to the prjprm struct from celprm. - Added code (3-letter projection code) and theta0 (reference latitude) elements to prjprm. - The projection code for the Sanson-Flamsteed projection is now SFL. The upper-level routines, wcsset(), wcsfwd(), and wcsrev(), recognize GLS as an alias for this. - wcsset() now recognizes 'xyLN/xyLT' axis pairs. - Two bugs in the translation from NCP to SIN in wcsfwd() and wcsrev() were fixed: (1) the projection parameter was computed incorrectly and (2) they did not honour prj->flag set to -1 to disable strict bounds checking. - A bug in wcsmix() was fixed - it was relying on the wcsprm struct to have been initialized beforehand. - The test programs now use the cpgplot interface to PGPLOT, the old tpgc.c and tpgf.f wrappers have been removed. * Fortran library - Added generic driver routines PRJSET, PRJFWD and PRJREV. These are keyed to specific projection routines via the value of PRJ(11) which now differs for each projection. - The projection code for the Sanson-Flamsteed projection is now SFL. The upper-level routines, WCSSET, WCSFWD, and WCSREV, recognize GLS as an alias for this. - WCSSET now recognizes 'xyLN/xyLT' axis pairs. - A bug in the translation from NCP to SIN in WCSFWD and WCSREV was fixed; they did not honour PRJ(11) set to -1 to disable strict bounds checking. - A bug in WCSMIX was fixed - it was relying on the WCS array to have been initialized beforehand. WCSLIB version 2.6 (2000/05/10) ------------------------------- * C library - Check for invalid (x,y) in zearev(). - In wcsmath.h, guard against prior definition of PI and other preprocessor variables. * Fortran library - Check for invalid (X,Y) in ZEAREV. - Declare COSD and SIND in WCSFWD and WCSREV, reported by Clive Page (cgp@star.le.ac.uk). WCSLIB version 2.5 (1999/12/14) ------------------------------- * C library - Added copyright notice to header files and prefixed include guard names with "WCSLIB_". - Fixed cube face handling in wcsfwd() and wcsrev() (reported by Doug Mink, CfA). Allow more general face layout in the inverse quadcube projections. - Fixed the problem in wcsmix() where it failed to find a valid solution when the solution point lay at a native pole of a projection in which the pole is represented as a finite interval. However, wcsmix() will only ever return one solution even when two or more valid solutions may exist. - wcsmix() now accepts viter in the range 5 - 10, the specified value will be pushed up or down into this range if necessary. - The projection routines for AZP, TAN, SIN, ZPN, and COP now return error 2 if (phi,theta) correspond to the overlapped (far) side of the projection. This strict bounds checking can be switched off by setting prj->flag to -1 (rather than 0) when the projections are initialized. - The upper level routines, wcsset(), wcsfwd(), wcsrev(), and wcsmix(), now recognize the NCP projection and convert it to the equivalent SIN projection. The lower level routines do not recognize NCP. - Extracted definitions of mathematical constants (PI etc.) from proj.h into wcsmath.h in order to avoid conflicts with their definition in math.h in some systems (such as Linux). - Describe the two alternate representations of the quadcube projections (i.e. faces laid out or stacked) in the prologue of wcs.c. * Fortran library - Fixed cube face handling in WCSFWD and WCSREV, reported by Doug Mink (dmink@cfa.harvard.edu). Allow more general face layout in the inverse quadcube projections. - Fixed the problem in WCSMIX where it failed to find a valid solution when the solution point lay at a native pole of a projection in which the pole is represented as a finite interval. However, WCSMIX will only ever return one solution even when two or more valid solutions may exist. - WCSMIX now accepts VITER in the range 5 - 10, the specified value will be pushed up or down into this range if necessary. - The projection routines for AZP, TAN, SIN, ZPN, and COP now return error 2 if (phi,theta) correspond to the overlapped (far) side of the projection. This strict bounds checking can be switched off by setting PRJ(11) to -1 (rather than 0) when the projections are initialized. - The upper level routines, WCSSET, WCSFWD, WCSREV, and WCSMIX, now recognize the NCP projection and convert it to the equivalent SIN projection. The lower level routines do not recognize NCP. - Describe the two alternate representations of the quadcube projections (i.e. faces laid out or stacked) in the prologue of wcs.f. WCSLIB version 2.4 (1996/09/23) ------------------------------- * C library - In sinrev(), cscrev(), qscrev(), and tscrev(), return error 2 if (x,y) do not lie within the perimeter of the projection. In sinrev(), stop the computation of phi for the "synthesis" projection being applied to the pure "orthographic" case (reported by David Berry, STARLINK). - (Internal change) Renamed variables l <-> m in the quadcube projections to accord with standard usage (and revised WCS draft paper). * Fortran library - In SINREV, CSCREV, QSCREV, and TSCREV, return error 2 if (X,Y) do not lie within the perimeter of the projection. In SINREV, stop the computation of PHI for the "synthesis" projection being applied to the pure "orthographic" case. Reported by David Berry (dsb@ast.man.ac.uk). - (Internal change) Renamed variables L <-> M in the quadcube projections to accord with standard usage (and revised WCS draft paper). - (Internal change) Stopped PRJ(11) doing double service in any projection. It is now set and tested for a specific magic value rather than simply being non-zero. WCSLIB version 2.3 (1996/06/24) ------------------------------- * C library - Fixed two bugs in zpnset(). The first led to an incorrect determination of the degree of the polynomial and would mainly have affected the efficiency of zpnrev(). The second affected the determination of the boundary of the projection but would only have been significant for projections with a point of inflection between 9 and 10 degrees of the pole. Reported by David Berry, STARLINK. - Replaced usage of alloca() in lin.c with malloc() and free() for portability as suggested by Klaus Banse, ESO (kbanse@eso.org). - Allow for C implementations that provide their own versions of cosd(), sind(), tand(), acosd(), asind(), atand(), and atan2d(). From Klaus Banse, ESO (kbanse@eso.org). - Implemented the CUBEFACE axis for quadcube projections. - Made all function prototypes const-correct. - Adapted the header files to C++ usage. - Added a new test program, twcs1, to verify closure of wcsfwd() and wcsrev(). The old twcs test program is now called twcs2. - Added external arrays of error messages indexed by function return value. For example, extern const char *wcsmix_errmsg[] for wcsmix(). Messages for the many proj.c functions are in prjfwd_errmsg[], etc. * Fortran library - Implemented the CUBEFACE axis for quadcube projections. - Added a new test program, TWCS1, to verify closure of WCSFWD and WCSREV. The old TWCS test program is now called TWCS2. WCSLIB version 2.2 (1996/01/18) ------------------------------- * C library - Amended the projection equations for the conics (COP, COD, COE, COO) and Bonne's projection (BON) to correctly handle southern hemisphere projections with PROJP1 < 0 (reported by Lindsay Davis, NOAO). Revised tproj1 and tproj2 to test such cases. * Fortran library - Amended the projection equations for the conics (COP, COD, COE, COO) and Bonne's projection (BON) to correctly handle southern hemisphere projections with PROJP1 < 0 (reported by Lindsay Davis, NOAO). Revised TPROJ1 and TPROJ2 to test such cases. - Increased the dimension of the WCS array from WCS(0:2) to WCS(0:3) to allow for future handling of the CUBEFACE keyword - WCS(3) will store an index to the CUBEFACE axis. This affects the call sequences of WCSSET, WCSFWD, WCSREV, and WCSMIX. WCSLIB version 2.1 (1995/11/17) ------------------------------- * C library The main change of interest to programmers is that of changed argument lists for wcsfwd() and wcsrev() as described below. - The WCS linear transformations are now implemented in WCSLIB, complete with matrix inverter. The new files are lin.c, lin.h, and test program tlin.c. - Given either the celestial longitude or latitude plus an element of the pixel coordinate a new routine, wcsmix(), solves for the remaining elements by iterating on the unknown celestial coordinate element using wcsfwd(). - The high level driver routines wcsfwd(), wcsrev(), and wcsmix() now apply the full WCS algorithm chain (except for pixel regularization table), including parsing the CTYPEn header cards and computing non- celestial elements of the world coordinate. This required a change to their argument lists which now more closely reflect the sequence of algorithms applied. A new routine, wcsset(), parses the CTYPEn. - The high level driver routines of WCSLIB 1.0 are available as intermediate level drivers celset(), celfwd(), and celrev(), but note that their argument lists have been extended to return native coordinates. The related struct is now called celprm instead of wcsprm. - The reference point for conic projections is now at the midpoint of the standard parallels. The FITS header cards PROJP1 and PROJP2 now give the half-sum (midpoint) and half-difference of the latitudes of the standard parallels; previously they gave the latitudes of the standard parallels themselves. The change is reflected in this release of WCSLIB. - A bug in celset() (formerly wcsset()) that misapplied WCS draft equations 7 has been fixed (thanks to Rick Ebert IPAC/JPL and Lindsey Davis, NOAO for reporting this). This affected the computation of Euler angles for the celestial coordinate transformation for those projections that have their reference point away from the native pole. In investigating this a deficiency with the formalism was discovered that led to the introduction of a LATPOLE FITS header card which may be used to disambiguate where CRVAL1, CRVAL2, and LONGPOLE do not uniquely determine the latitude of the native pole. The celprm struct (formerly wcsprm) has been extended to accomodate LATPOLE. - Default values of LONGPOLE and LATPOLE are now supported and their use is recommended where appropriate. - Numerical precision was being lost near the native poles in the SIN, AIR, and QSC projections and this has been recovered (reported by Lindsey Davis, NOAO). Floating underflows in CSC are now avoided. - Numerical precision was also lost in certain circumstances in the spherical coordinate transformation routines and this has been fixed. - The test programs have been enhanced in various ways and the library has been validated on an SGI machine using both 32-bit and 64-bit compilers. * Fortran library The main change of interest to programmers is that of changed call sequences for WCSFWD and WCSREV as described below. - The WCS linear transformations are now implemented in WCSLIB, complete with matrix inverter. The new files are lin.f and test program tlin.f. - Given either the celestial longitude or latitude plus an element of the pixel coordinate a new routine, WCSMIX, solves for the remaining elements by iterating on the unknown celestial coordinate element using WCSFWD. - The high level driver routines WCSFWD, WCSREV, and WCSMIX now apply the full WCS algorithm chain (except for pixel regularization table), including parsing the CTYPEn header cards and computing non- celestial elements of the world coordinate. This required a change to their call sequences which now more closely reflect the sequence of algorithms applied. A new routine, WCSSET, parses the CTYPEn. - The high level driver routines of WCSLIB 1.0 are available as intermediate level drivers CELSET, CELFWD, and CELREV, but note that their call sequences have been extended to return native coordinates. The related parameter array is now called CEL instead of WCS. - The reference point for conic projections is now at the midpoint of the standard parallels. The FITS header cards PROJP1 and PROJP2 now give the half-sum (midpoint) and half-difference of the latitudes of the standard parallels; previously they gave the latitudes of the standard parallels themselves. The change is reflected in this release of WCSLIB. - A bug in CELSET (formerly WCSSET) that misapplied WCS draft equations 7 has been fixed (thanks to Rick Ebert IPAC/JPL and Lindsey Davis, NOAO for reporting this). This affected the computation of Euler angles for the celestial coordinate transformation for those projections that have their reference point away from the native pole. In investigating this a deficiency with the formalism was discovered that led to the introduction of a LATPOLE FITS header card which may be used to disambiguate where CRVAL1, CRVAL2, and LONGPOLE do not uniquely determine the latitude of the native pole. The CEL parameter array (formerly WCS) has been extended to accomodate LATPOLE as CEL(4), and the flag variable is now CEL(5) (formerly WCS(4)). - Default values of LONGPOLE and LATPOLE are now supported and their use is recommended where appropriate. - Numerical precision was being lost near the native poles in the SIN, AIR, and QSC projections and this has been recovered (reported by Lindsey Davis, NOAO). Floating underflows in CSC are now avoided. - Numerical precision was also lost in certain circumstances in the spherical coordinate transformation routines and this has been fixed. - The test programs have been enhanced in various ways and the library has been validated on an SGI machine using both 32-bit and 64-bit compilers. WCSLIB version 1.0 (1995/01/31) ------------------------------- * C library Initial release. * Fortran library Initial release. ------------------------------------------------------------------------ $Id: CHANGES,v 4.10 2012/02/05 23:41:45 cal103 Exp $ pywcs-1.12/wcslib/config/0000755001153600020070000000000012310355732017374 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/config/config.guess0000755001153600020070000012675512310355626021736 0ustar cslocumSTSCI\science00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011 Free Software Foundation, Inc. timestamp='2011-10-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo hexagon-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: pywcs-1.12/wcslib/config/config.sub0000755001153600020070000010503412310355626021364 0ustar cslocumSTSCI\science00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011 Free Software Foundation, Inc. timestamp='2011-09-09' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: pywcs-1.12/wcslib/config/elisp-comp0000755001153600020070000000405612310355626021401 0ustar cslocumSTSCI\science00000000000000#!/bin/sh # Copyright (C) 1995, 2000, 2003 Free Software Foundation, Inc. # Franc,ois Pinard , 1995. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This script byte-compiles all `.el' files which are part of its # arguments, using GNU Emacs, and put the resulting `.elc' files into # the current directory, so disregarding the original directories used # in `.el' arguments. # # This script manages in such a way that all Emacs LISP files to # be compiled are made visible between themselves, in the event # they require or load-library one another. if test $# = 0; then echo 1>&2 "No files given to $0" exit 1 fi if test -z "$EMACS" || test "$EMACS" = "t"; then # Value of "t" means we are running in a shell under Emacs. # Just assume Emacs is called "emacs". EMACS=emacs fi tempdir=elc.$$ # Cleanup the temporary directory on exit. trap 'status=$?; rm -rf "$tempdir" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 mkdir $tempdir cp "$@" $tempdir ( cd $tempdir echo "(setq load-path (cons nil load-path))" > script $EMACS -batch -q -l script -f batch-byte-compile *.el || exit $? mv *.elc .. ) || exit $? (exit 0); exit pywcs-1.12/wcslib/config/install-sh0000755001153600020070000002017412310355626021406 0ustar cslocumSTSCI\science00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2003-09-24.23 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename= transform_arg= instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= usage="Usage: $0 [OPTION]... SRCFILE DSTFILE or: $0 -d DIR1 DIR2... In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. In the second, create the directory path DIR. Options: -b=TRANSFORMBASENAME -c copy source (using $cpprog) instead of moving (using $mvprog). -d create directories instead of installing files. -g GROUP $chgrp installed files to GROUP. -m MODE $chmod installed files to MODE. -o USER $chown installed files to USER. -s strip installed files (using $stripprog). -t=TRANSFORM --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) if test -z "$src"; then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if test -z "$src"; then echo "$0: no input file specified." >&2 exit 1 fi # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then instcmd=: chmodcmd= else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst"; then echo "$0: no destination specified." >&2 exit 1 fi # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift test -d "$pathcomp" || $mkdirprog "$pathcomp" pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $instcmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else # If we're going to rename the final executable, determine the name now. if test -z "$transformarg"; then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename \ | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename. test -z "$dstfile" && dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now remove or move aside any old file at destination location. We # try this two ways since rm can't unlink itself on some systems and # the destination file might be busy for other reasons. In this case, # the final cleanup might fail but the new file should still install # successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" fi && # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: pywcs-1.12/wcslib/config/mdate-sh0000755001153600020070000001013012310355626021021 0ustar cslocumSTSCI\science00000000000000#!/bin/sh # Get modification time of a file or directory and pretty-print it. # Copyright (C) 1995, 1996, 1997, 2003 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME save_arg1="$1" # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # A `ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named `Jan', or `Feb', etc. However, it's unlikely that `/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set - x`$ls_command /` # Find which argument is the month. month= command= until test $month do shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done # Get the extended ls output of the file or directory. set - x`eval "$ls_command \"\$save_arg1\""` # Remove all preceding arguments eval $command # Get the month. Next argument is day, followed by the year or time. case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac day=$2 # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year pywcs-1.12/wcslib/config/missing0000755001153600020070000002466612310355626021013 0ustar cslocumSTSCI\science00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2003-09-02.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: pywcs-1.12/wcslib/config/mkinstalldirs0000755001153600020070000000530012310355626022202 0ustar cslocumSTSCI\science00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. scriptversion=2003-09-26.19 errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. " # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit 0 ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./-- && rmdir ./-- fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./-- "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: pywcs-1.12/wcslib/config/move-if-change0000755001153600020070000000037312310355626022114 0ustar cslocumSTSCI\science00000000000000#!/bin/sh # Like mv $1 $2, but if the files are the same, just delete $1. # Status is 0 if $2 is changed, 1 otherwise. if test -r $2; then if cmp -s $1 $2; then echo $2 is unchanged rm -f $1 else mv -f $1 $2 fi else mv -f $1 $2 fi pywcs-1.12/wcslib/configure0000755001153600020070000130406012310355626020044 0ustar cslocumSTSCI\science00000000000000#! /bin/sh # From configure.ac Revision: 4.10 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for WCSLIB 4.10. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='WCSLIB' PACKAGE_TARNAME='wcslib-4.10' PACKAGE_VERSION='4.10' PACKAGE_STRING='WCSLIB 4.10' PACKAGE_BUGREPORT='mcalabre@atnf.csiro.au' ac_unique_file="C/wcs.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias LIBVER build build_cpu build_vendor build_os ARCH FLEX CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP GREP EGREP LIBOBJS F77 FFLAGS ac_ct_F77 FLIBS RANLIB SHRLIB SONAME SHRFLAGS SHRLD SHRSFX SHRLN LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA XMKMF CFITSIOINC CFITSIOLIB GETWCSTAB PGPLOTINC PGPLOTLIB SUBDIRS TSTDIRS INSTDIR LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP F77 FFLAGS XMKMF' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures WCSLIB 4.10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/wcslib-4.10] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of WCSLIB 4.10:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-fortran=ARG Fortran compiler to use --disable-fortran don't build the Fortran wrappers or PGSBOX --disable-largefile omit support for large files --disable-utils don't build the WCS utilities Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --without-cfitsio eschew CFITSIO --with-cfitsiolib=DIR directory containing cfitsio library --with-cfitsioinc=DIR directory containing cfitsio header files --without-pgplot eschew PGPLOT --with-pgplotlib=DIR directory containing pgplot library --with-pgplotinc=DIR directory containing pgplot header files --with-x use the X Window System Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags XMKMF Path to xmkmf, Makefile generator for X Window System Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF WCSLIB configure 4.10 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by WCSLIB $as_me 4.10, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >>confdefs.h <<_ACEOF #define WCSLIB_VERSION $PACKAGE_VERSION _ACEOF # Library version number, same as package version. LIBVER="$PACKAGE_VERSION" ac_aux_dir= for ac_dir in config "$srcdir"/config; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&5 echo "$as_me: error: cannot find install-sh or install.sh in config \"$srcdir\"/config" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Get the system type. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6; } if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac ARCH="${build_cpu}-$build_os" # Look for Flex. # Extract the first word of "flex", so it can be a program name with args. set dummy flex; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_FLEX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$FLEX"; then ac_cv_prog_FLEX="$FLEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_FLEX="flex" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FLEX=$ac_cv_prog_FLEX if test -n "$FLEX"; then { echo "$as_me:$LINENO: result: $FLEX" >&5 echo "${ECHO_T}$FLEX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$FLEX" = xflex ; then # Version 2.5.9 or later is required. V=`flex --version | awk '{print $NF}'` W=`echo $V | awk -F. '{if ((($1*100 + $2)*100 + $3) < 20509) print "no"}'` if test "x$W" != x ; then { echo "$as_me:$LINENO: Flex version $V is too old, ignored." >&5 echo "$as_me: Flex version $V is too old, ignored." >&6;} FLEX= else { echo "$as_me:$LINENO: Using Flex version $V." >&5 echo "$as_me: Using Flex version $V." >&6;} fi fi if test "x$FLEX" = x ; then { echo "$as_me:$LINENO: WARNING: Flex version 2.5.9 or later does not appear to be available, will use pre-generated sources." >&5 echo "$as_me: WARNING: Flex version 2.5.9 or later does not appear to be available, will use pre-generated sources." >&2;} fi # Look for an ANSI C compiler. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ac_cv_prog_cc_stdc in no) ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; *) { echo "$as_me:$LINENO: checking for $CC option to accept ISO C99" >&5 echo $ECHO_N "checking for $CC option to accept ISO C99... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c99+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -c99 -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c99=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c99" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 else { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 else ac_cv_prog_cc_stdc=no fi fi ;; esac { echo "$as_me:$LINENO: checking for $CC option to accept ISO Standard C" >&5 echo $ECHO_N "checking for $CC option to accept ISO Standard C... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi case $ac_cv_prog_cc_stdc in no) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; '') { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; *) { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6; } ;; esac { echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f -r conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f -r conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef size_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6; } if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi if test "x$ac_cv_prog_cc_stdc" = xno -o \ "x$ac_cv_c_const" = xno -o \ "x$ac_cv_type_size_t" = xno; then { { echo "$as_me:$LINENO: error: ------------------------------------------------------- An ANSI standard C library is required to build WCSLIB. ERROR: WCSLIB configuration failure. -------------------------------------------------------" >&5 echo "$as_me: error: ------------------------------------------------------- An ANSI standard C library is required to build WCSLIB. ERROR: WCSLIB configuration failure. -------------------------------------------------------" >&2;} { (exit 1); exit 1; }; } fi # Check for data types (suggested by autoscan - off_t is only required by # fitshdr). { echo "$as_me:$LINENO: checking for off_t" >&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6; } if test "${ac_cv_type_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef off_t ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_off_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 echo "${ECHO_T}$ac_cv_type_off_t" >&6; } if test $ac_cv_type_off_t = yes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi { echo "$as_me:$LINENO: checking for int8_t" >&5 echo $ECHO_N "checking for int8_t... $ECHO_C" >&6; } if test "${ac_cv_c_int8_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_int8_t=no for ac_type in 'int8_t' 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(0 < ($ac_type) (((($ac_type) 1 << (8 - 2)) - 1) * 2 + 1))]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(($ac_type) (((($ac_type) 1 << (8 - 2)) - 1) * 2 + 1) < ($ac_type) (((($ac_type) 1 << (8 - 2)) - 1) * 2 + 2))]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 case $ac_type in int8_t) ac_cv_c_int8_t=yes ;; *) ac_cv_c_int8_t=$ac_type ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_int8_t" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_int8_t" >&5 echo "${ECHO_T}$ac_cv_c_int8_t" >&6; } case $ac_cv_c_int8_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int8_t $ac_cv_c_int8_t _ACEOF ;; esac { echo "$as_me:$LINENO: checking for int16_t" >&5 echo $ECHO_N "checking for int16_t... $ECHO_C" >&6; } if test "${ac_cv_c_int16_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_int16_t=no for ac_type in 'int16_t' 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(0 < ($ac_type) (((($ac_type) 1 << (16 - 2)) - 1) * 2 + 1))]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(($ac_type) (((($ac_type) 1 << (16 - 2)) - 1) * 2 + 1) < ($ac_type) (((($ac_type) 1 << (16 - 2)) - 1) * 2 + 2))]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 case $ac_type in int16_t) ac_cv_c_int16_t=yes ;; *) ac_cv_c_int16_t=$ac_type ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_int16_t" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_int16_t" >&5 echo "${ECHO_T}$ac_cv_c_int16_t" >&6; } case $ac_cv_c_int16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int16_t $ac_cv_c_int16_t _ACEOF ;; esac { echo "$as_me:$LINENO: checking for int32_t" >&5 echo $ECHO_N "checking for int32_t... $ECHO_C" >&6; } if test "${ac_cv_c_int32_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_int32_t=no for ac_type in 'int32_t' 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(0 < ($ac_type) (((($ac_type) 1 << (32 - 2)) - 1) * 2 + 1))]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(($ac_type) (((($ac_type) 1 << (32 - 2)) - 1) * 2 + 1) < ($ac_type) (((($ac_type) 1 << (32 - 2)) - 1) * 2 + 2))]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 case $ac_type in int32_t) ac_cv_c_int32_t=yes ;; *) ac_cv_c_int32_t=$ac_type ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_int32_t" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_int32_t" >&5 echo "${ECHO_T}$ac_cv_c_int32_t" >&6; } case $ac_cv_c_int32_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int32_t $ac_cv_c_int32_t _ACEOF ;; esac { echo "$as_me:$LINENO: checking for uint8_t" >&5 echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6; } if test "${ac_cv_c_uint8_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_uint8_t=no for ac_type in 'uint8_t' 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(($ac_type) -1 >> (8 - 1) == 1)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then case $ac_type in uint8_t) ac_cv_c_uint8_t=yes ;; *) ac_cv_c_uint8_t=$ac_type ;; esac else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_uint8_t" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_uint8_t" >&5 echo "${ECHO_T}$ac_cv_c_uint8_t" >&6; } case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) cat >>confdefs.h <<\_ACEOF #define _UINT8_T 1 _ACEOF cat >>confdefs.h <<_ACEOF #define uint8_t $ac_cv_c_uint8_t _ACEOF ;; esac { echo "$as_me:$LINENO: checking for uint16_t" >&5 echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6; } if test "${ac_cv_c_uint16_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_uint16_t=no for ac_type in 'uint16_t' 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(($ac_type) -1 >> (16 - 1) == 1)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then case $ac_type in uint16_t) ac_cv_c_uint16_t=yes ;; *) ac_cv_c_uint16_t=$ac_type ;; esac else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_uint16_t" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_uint16_t" >&5 echo "${ECHO_T}$ac_cv_c_uint16_t" >&6; } case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define uint16_t $ac_cv_c_uint16_t _ACEOF ;; esac { echo "$as_me:$LINENO: checking for uint32_t" >&5 echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6; } if test "${ac_cv_c_uint32_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_uint32_t=no for ac_type in 'uint32_t' 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(($ac_type) -1 >> (32 - 1) == 1)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then case $ac_type in uint32_t) ac_cv_c_uint32_t=yes ;; *) ac_cv_c_uint32_t=$ac_type ;; esac else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_uint32_t" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_uint32_t" >&5 echo "${ECHO_T}$ac_cv_c_uint32_t" >&6; } case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) cat >>confdefs.h <<\_ACEOF #define _UINT32_T 1 _ACEOF cat >>confdefs.h <<_ACEOF #define uint32_t $ac_cv_c_uint32_t _ACEOF ;; esac # Check for ANSI C headers. { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f -r conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f -r conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi for ac_header in ctype.h errno.h limits.h math.h setjmp.h stdarg.h stdio.h \ stdlib.h string.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------- ## ## Report this to mcalabre@atnf.csiro.au ## ## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_header_stdc" = xno; then { { echo "$as_me:$LINENO: error: ------------------------------------------------------------------- An ANSI standard C library is required to build WCSLIB. One of the ANSI C header files it requires is missing or unusable. ERROR: WCSLIB configuration failure. -------------------------------------------------------------------" >&5 echo "$as_me: error: ------------------------------------------------------------------- An ANSI standard C library is required to build WCSLIB. One of the ANSI C header files it requires is missing or unusable. ERROR: WCSLIB configuration failure. -------------------------------------------------------------------" >&2;} { (exit 1); exit 1; }; } fi # Checks for ANSI C library functions (suggested by autoscan - fseeko and # stat are only required by fitshdr). { echo "$as_me:$LINENO: checking for floor in -lm" >&5 echo $ECHO_N "checking for floor in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_floor+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char floor (); int main () { return floor (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_floor=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_floor=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_floor" >&5 echo "${ECHO_T}$ac_cv_lib_m_floor" >&6; } if test $ac_cv_lib_m_floor = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { echo "$as_me:$LINENO: checking for _LARGEFILE_SOURCE value needed for large files" >&5 echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_largefile_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_sys_largefile_source=no; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include int main () { return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_sys_largefile_source=1; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_source" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -f -r conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then cat >>confdefs.h <<\_ACEOF #define HAVE_FSEEKO 1 _ACEOF fi for ac_header in stdlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------- ## ## Report this to mcalabre@atnf.csiro.au ## ## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5 echo $ECHO_N "checking for GNU libc compatible malloc... $ECHO_C" >&6; } if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_malloc_0_nonnull=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_malloc_0_nonnull=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5 echo "${ECHO_T}$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_MALLOC 1 _ACEOF else cat >>confdefs.h <<\_ACEOF #define HAVE_MALLOC 0 _ACEOF case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac cat >>confdefs.h <<\_ACEOF #define malloc rpl_malloc _ACEOF fi for ac_header in stdlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------- ## ## Report this to mcalabre@atnf.csiro.au ## ## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { echo "$as_me:$LINENO: checking for GNU libc compatible realloc" >&5 echo $ECHO_N "checking for GNU libc compatible realloc... $ECHO_C" >&6; } if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_realloc_0_nonnull=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *realloc (); #endif int main () { return ! realloc (0, 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_realloc_0_nonnull=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_realloc_0_nonnull" >&5 echo "${ECHO_T}$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_REALLOC 1 _ACEOF else cat >>confdefs.h <<\_ACEOF #define HAVE_REALLOC 0 _ACEOF case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac cat >>confdefs.h <<\_ACEOF #define realloc rpl_realloc _ACEOF fi { echo "$as_me:$LINENO: checking for function prototypes" >&5 echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6; } if test "$ac_cv_prog_cc_c89" != no; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } cat >>confdefs.h <<\_ACEOF #define PROTOTYPES 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define __PROTOTYPES 1 _ACEOF else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi { echo "$as_me:$LINENO: checking whether setvbuf arguments are reversed" >&5 echo $ECHO_N "checking whether setvbuf arguments are reversed... $ECHO_C" >&6; } if test "${ac_cv_func_setvbuf_reversed+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_func_setvbuf_reversed=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include # ifdef PROTOTYPES int (setvbuf) (FILE *, int, char *, size_t); # endif int main () { char buf; return setvbuf (stdout, _IOLBF, &buf, 1); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include # ifdef PROTOTYPES int (setvbuf) (FILE *, int, char *, size_t); # endif int main () { char buf; return setvbuf (stdout, &buf, _IOLBF, 1); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then # It compiles and links either way, so it must not be declared # with a prototype and most likely this is a K&R C compiler. # Try running it. if test "$cross_compiling" = yes; then : # Assume setvbuf is not reversed when cross-compiling. else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* This call has the arguments reversed. A reversed system may check and see that the address of buf is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */ char buf; if (setvbuf (stdout, _IOLBF, &buf, 1) != 0) return 1; putchar ('\r'); return 0; /* Non-reversed systems SEGV here. */ ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_setvbuf_reversed=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi ac_cv_func_setvbuf_reversed=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_setvbuf_reversed" >&5 echo "${ECHO_T}$ac_cv_func_setvbuf_reversed" >&6; } if test $ac_cv_func_setvbuf_reversed = yes; then cat >>confdefs.h <<\_ACEOF #define SETVBUF_REVERSED 1 _ACEOF fi { echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5 echo $ECHO_N "checking whether lstat dereferences a symlink specified with a trailing slash... $ECHO_C" >&6; } if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then if test "$cross_compiling" = yes; then ac_cv_func_lstat_dereferences_slashed_symlink=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; /* Linux will dereference the symlink and fail. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_lstat_dereferences_slashed_symlink=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even # have an lstat function. ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file fi { echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 echo "${ECHO_T}$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && cat >>confdefs.h <<_ACEOF #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 _ACEOF if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi { echo "$as_me:$LINENO: checking whether stat accepts an empty string" >&5 echo $ECHO_N "checking whether stat accepts an empty string... $ECHO_C" >&6; } if test "${ac_cv_func_stat_empty_string_bug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_stat_empty_string_bug=yes else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; return stat ("", &sbuf) == 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_stat_empty_string_bug=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_stat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_func_stat_empty_string_bug" >&5 echo "${ECHO_T}$ac_cv_func_stat_empty_string_bug" >&6; } if test $ac_cv_func_stat_empty_string_bug = yes; then case " $LIBOBJS " in *" stat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define HAVE_STAT_EMPTY_STRING_BUG 1 _ACEOF fi for ac_func in vprintf do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF { echo "$as_me:$LINENO: checking for _doprnt" >&5 echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6; } if test "${ac_cv_func__doprnt+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define _doprnt to an innocuous variant, in case declares _doprnt. For example, HP-UX 11i declares gettimeofday. */ #define _doprnt innocuous__doprnt /* System header to define __stub macros and hopefully few prototypes, which can conflict with char _doprnt (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef _doprnt /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char _doprnt (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub__doprnt || defined __stub____doprnt choke me #endif int main () { return _doprnt (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func__doprnt=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func__doprnt=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 echo "${ECHO_T}$ac_cv_func__doprnt" >&6; } if test $ac_cv_func__doprnt = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_DOPRNT 1 _ACEOF fi fi done for ac_func in floor memset pow sqrt strchr strstr do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # System libraries that may be required by WCSLIB itself. # SunOS, extra maths functions. { echo "$as_me:$LINENO: checking for cosd in -lsunmath" >&5 echo $ECHO_N "checking for cosd in -lsunmath... $ECHO_C" >&6; } if test "${ac_cv_lib_sunmath_cosd+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsunmath $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cosd (); int main () { return cosd (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_sunmath_cosd=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_sunmath_cosd=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_sunmath_cosd" >&5 echo "${ECHO_T}$ac_cv_lib_sunmath_cosd" >&6; } if test $ac_cv_lib_sunmath_cosd = yes; then LIBS="-lsunmath $LIBS" fi # See if we can find sincos(). for ac_func in sincos do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_var'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Check the size and availability of integer data types. { echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6; } if test "${ac_cv_type_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef int ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6; } # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6; } if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') if test "$ac_cv_type_int" = yes; then { { echo "$as_me:$LINENO: error: cannot compute sizeof (int) See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } else ac_cv_sizeof_int=0 fi ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef int ac__type_sizeof_; static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (((long int) (sizeof (ac__type_sizeof_))) < 0) { long int i = longval (); if (i != ((long int) (sizeof (ac__type_sizeof_)))) return 1; fprintf (f, "%ld\n", i); } else { unsigned long int i = ulongval (); if (i != ((long int) (sizeof (ac__type_sizeof_)))) return 1; fprintf (f, "%lu\n", i); } return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) if test "$ac_cv_type_int" = yes; then { { echo "$as_me:$LINENO: error: cannot compute sizeof (int) See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } else ac_cv_sizeof_int=0 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.val fi { echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF { echo "$as_me:$LINENO: checking for long int" >&5 echo $ECHO_N "checking for long int... $ECHO_C" >&6; } if test "${ac_cv_type_long_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long int ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_long_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_int=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_long_int" >&5 echo "${ECHO_T}$ac_cv_type_long_int" >&6; } # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { echo "$as_me:$LINENO: checking size of long int" >&5 echo $ECHO_N "checking size of long int... $ECHO_C" >&6; } if test "${ac_cv_sizeof_long_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_int=$ac_lo;; '') if test "$ac_cv_type_long_int" = yes; then { { echo "$as_me:$LINENO: error: cannot compute sizeof (long int) See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long int) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } else ac_cv_sizeof_long_int=0 fi ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long int ac__type_sizeof_; static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (((long int) (sizeof (ac__type_sizeof_))) < 0) { long int i = longval (); if (i != ((long int) (sizeof (ac__type_sizeof_)))) return 1; fprintf (f, "%ld\n", i); } else { unsigned long int i = ulongval (); if (i != ((long int) (sizeof (ac__type_sizeof_)))) return 1; fprintf (f, "%lu\n", i); } return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) if test "$ac_cv_type_long_int" = yes; then { { echo "$as_me:$LINENO: error: cannot compute sizeof (long int) See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long int) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } else ac_cv_sizeof_long_int=0 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.val fi { echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_INT $ac_cv_sizeof_long_int _ACEOF { echo "$as_me:$LINENO: checking for long long int" >&5 echo $ECHO_N "checking for long long int... $ECHO_C" >&6; } if test "${ac_cv_type_long_long_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long long int ac__type_new_; int main () { if ((ac__type_new_ *) 0) return 0; if (sizeof (ac__type_new_)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_type_long_long_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long_int=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_type_long_long_int" >&5 echo "${ECHO_T}$ac_cv_type_long_long_int" >&6; } # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { echo "$as_me:$LINENO: checking size of long long int" >&5 echo $ECHO_N "checking size of long long int... $ECHO_C" >&6; } if test "${ac_cv_sizeof_long_long_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long long int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long long int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long long int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long long int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long long int ac__type_sizeof_; int main () { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_long_int=$ac_lo;; '') if test "$ac_cv_type_long_long_int" = yes; then { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long int) See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long int) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } else ac_cv_sizeof_long_long_int=0 fi ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default typedef long long int ac__type_sizeof_; static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (((long int) (sizeof (ac__type_sizeof_))) < 0) { long int i = longval (); if (i != ((long int) (sizeof (ac__type_sizeof_)))) return 1; fprintf (f, "%ld\n", i); } else { unsigned long int i = ulongval (); if (i != ((long int) (sizeof (ac__type_sizeof_)))) return 1; fprintf (f, "%lu\n", i); } return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long_long_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) if test "$ac_cv_type_long_long_int" = yes; then { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long int) See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long int) See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } else ac_cv_sizeof_long_long_int=0 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.val fi { echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_long_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG_INT $ac_cv_sizeof_long_long_int _ACEOF # 64-bit integer data type; use long long int preferentially since that # accords with "%lld" formatting used in fitshdr.l, e.g. # int size_t long int long long int # --- ------ -------- ------------- # gcc x86: 32 32 32 64 # gcc x86_64: 32 64 64 64 if test "x$ac_cv_sizeof_long_long_int" = x8; then cat >>confdefs.h <<\_ACEOF #define WCSLIB_INT64 long long int _ACEOF elif test "x$ac_cv_sizeof_long_int" = x8; then cat >>confdefs.h <<\_ACEOF #define WCSLIB_INT64 long int _ACEOF elif test "x$ac_cv_sizeof_int" = x8; then cat >>confdefs.h <<\_ACEOF #define WCSLIB_INT64 int _ACEOF fi # Does printf() have the z modifier for size_t type? Important for 64-bit. { echo "$as_me:$LINENO: checking for printf z format modifier for size_t type" >&5 echo $ECHO_N "checking for printf z format modifier for size_t type... $ECHO_C" >&6; } if test "$cross_compiling" = yes; then cat >>confdefs.h <<\_ACEOF #define MODZ "" _ACEOF { echo "$as_me:$LINENO: result: assumed not" >&5 echo "${ECHO_T}assumed not" >&6; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { char buf[64]; if (sprintf(buf, "%zu", (size_t)1) != 1) return 1; else if (strcmp(buf, "1")) return 2; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cat >>confdefs.h <<\_ACEOF #define MODZ "z" _ACEOF { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) cat >>confdefs.h <<\_ACEOF #define MODZ "" _ACEOF { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi # Starting values, may be augmented later. SUBDIRS="C" TSTDIRS="C" INSTDIR="C" # Ways of specifying the Fortran compiler, in order of precedence: # configure --enable-fortran= # F77= configure ...bash # # Ways of disabling Fortran: # configure --disable-fortran # configure --enable-fortran=no # F77=no configure ...bash # Check whether --enable-fortran was given. if test "${enable_fortran+set}" = set; then enableval=$enable_fortran; fi # Check whether --enable-fortran was given. if test "${enable_fortran+set}" = set; then enableval=$enable_fortran; fi if test "x$enable_fortran" != x -a "x$enable_fortran" != xyes ; then F77="$enable_fortran" fi if test "x$F77" = xno ; then F77= { echo "$as_me:$LINENO: WARNING: Compilation of Fortran wrappers and PGSBOX disabled" >&5 echo "$as_me: WARNING: Compilation of Fortran wrappers and PGSBOX disabled" >&2;} else if test "x$F77" = x ; then # Look for a Fortran compiler. ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g77 f77 ifort xlf frt pgf77 fl32 af77 fort77 f90 \ xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then { echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in gfortran g77 f77 ifort xlf frt pgf77 fl32 af77 fort77 f90 \ xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= { echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi if test "x$F77" = x; then { echo "$as_me:$LINENO: WARNING: ------------------------------------------------------------------ Fortran compiler not found, will skip Fortran wrappers and PGSBOX. ------------------------------------------------------------------" >&5 echo "$as_me: WARNING: ------------------------------------------------------------------ Fortran compiler not found, will skip Fortran wrappers and PGSBOX. ------------------------------------------------------------------" >&2;} # Best guess at Fortran name mangling for use if a compiler does ever # become available. cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name ## _ _ACEOF else if test "x$ac_cv_f77_compiler_gnu" = xyes ; then if test "x$F77" = xg77 -o "x$F77" = xf77 ; then # Not recognized by gfortran. FFLAGS="$FFLAGS -Wno-globals" fi fi { echo "$as_me:$LINENO: checking whether $F77 accepts -I" >&5 echo $ECHO_N "checking whether $F77 accepts -I... $ECHO_C" >&6; } ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu FFLAGS_save=$FFLAGS FFLAGS=-I. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then FFLAGS="$FFLAGS_save -I."; { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 FFLAGS="$FFLAGS_save"; { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Libraries required by the Fortran compiler itself (sets FLIBS). # Required by utilities and test programs written in C that link to # Fortran object modules such as pgsbox. ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { echo "$as_me:$LINENO: checking how to get verbose linking output from $F77" >&5 echo $ECHO_N "checking how to get verbose linking output from $F77... $ECHO_C" >&6; } if test "${ac_cv_prog_f77_v+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_f77_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" eval "set x $ac_link" shift echo "$as_me:$LINENO: $*" >&5 ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -f -r conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { echo "$as_me:$LINENO: WARNING: cannot determine how to obtain linking information from $F77" >&5 echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { echo "$as_me:$LINENO: WARNING: compilation failed" >&5 echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_prog_f77_v" >&5 echo "${ECHO_T}$ac_cv_prog_f77_v" >&6; } { echo "$as_me:$LINENO: checking for Fortran 77 libraries of $F77" >&5 echo $ECHO_N "checking for Fortran 77 libraries of $F77... $ECHO_C" >&6; } if test "${ac_cv_f77_libs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" eval "set x $ac_link" shift echo "$as_me:$LINENO: $*" >&5 ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -f -r conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_f77_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_f77_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_f77_v_output=`echo $ac_f77_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -LANG:=* | -LIST:* | -LNO:*) ;; -lkernel32) test x"$CYGWIN" != xyes && ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `echo $ac_arg | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`echo $ac_f77_v_output | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { echo "$as_me:$LINENO: result: $ac_cv_f77_libs" >&5 echo "${ECHO_T}$ac_cv_f77_libs" >&6; } FLIBS="$ac_cv_f77_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # F77 name mangling (defines the F77_FUNC preprocessor macro). ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { echo "$as_me:$LINENO: checking for dummy main to link with Fortran 77 libraries" >&5 echo $ECHO_N "checking for dummy main to link with Fortran 77 libraries... $ECHO_C" >&6; } if test "${ac_cv_f77_dummy_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_f77_dm_save_LIBS=$LIBS LIBS="$LIBS $FLIBS" ac_fortran_dm_var=F77_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_fortran_dummy_main=none else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_fortran_dummy_main=$ac_func; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_cv_f77_dummy_main=$ac_cv_fortran_dummy_main rm -f -r conftest* LIBS=$ac_f77_dm_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_f77_dummy_main" >&5 echo "${ECHO_T}$ac_cv_f77_dummy_main" >&6; } F77_DUMMY_MAIN=$ac_cv_f77_dummy_main if test "$F77_DUMMY_MAIN" != unknown; then if test $F77_DUMMY_MAIN != none; then cat >>confdefs.h <<_ACEOF #define F77_DUMMY_MAIN $F77_DUMMY_MAIN _ACEOF if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then cat >>confdefs.h <<\_ACEOF #define FC_DUMMY_MAIN_EQ_F77 1 _ACEOF fi fi else { { echo "$as_me:$LINENO: error: linking to Fortran libraries from C fails See \`config.log' for more details." >&5 echo "$as_me: error: linking to Fortran libraries from C fails See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu { echo "$as_me:$LINENO: checking for Fortran 77 name-mangling scheme" >&5 echo $ECHO_N "checking for Fortran 77 name-mangling scheme... $ECHO_C" >&6; } if test "${ac_cv_f77_mangling+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_success=yes; break 2 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_success_extra=yes; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_f77_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore" fi else ac_cv_f77_mangling="unknown" fi else ac_cv_f77_mangling="unknown" fi LIBS=$ac_save_LIBS rm -f -r cfortran_test* conftest* else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compile a simple Fortran program See \`config.log' for more details." >&5 echo "$as_me: error: cannot compile a simple Fortran program See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_f77_mangling" >&5 echo "${ECHO_T}$ac_cv_f77_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in "lower case, no underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name _ACEOF ;; "lower case, no underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name ## _ _ACEOF ;; "lower case, underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name ## _ _ACEOF ;; "lower case, underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name ## __ _ACEOF ;; "upper case, no underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME _ACEOF ;; "upper case, no underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME ## _ _ACEOF ;; "upper case, underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME ## _ _ACEOF ;; "upper case, underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME ## __ _ACEOF ;; *) { echo "$as_me:$LINENO: WARNING: unknown Fortran name-mangling scheme" >&5 echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu SUBDIRS="C Fortran" TSTDIRS="C Fortran" INSTDIR="Fortran" fi fi # System-dependent system libraries (for building the sharable library). #----------------------------------------------------------------------- # Darwin (contains stubs for long double). as_ac_Lib=`echo "ac_cv_lib_SystemStubs_printf\$LDBLStub" | $as_tr_sh` { echo "$as_me:$LINENO: checking for printf\$LDBLStub in -lSystemStubs" >&5 echo $ECHO_N "checking for printf\$LDBLStub in -lSystemStubs... $ECHO_C" >&6; } if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSystemStubs $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char printf\$LDBLStub (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return printf\$LDBLStub (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi ac_res=`eval echo '${'$as_ac_Lib'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Lib'}'` = yes; then LIBS="$LIBS -lSystemStubs" fi # Library and installation utilities. #------------------------------------ # Static library generation. if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Shared library generation. if test "x$ac_cv_c_compiler_gnu" = xyes ; then SHVER=`echo "$LIBVER" | sed -e 's/\..*$//'` # Note that -fPIC is on by default for Macs, this just makes it obvious. SHRFLAGS="-fPIC" SHRLD="\$(CC) \$(SHRFLAGS)" case "$build_os" in darwin*) SHRLIB="libwcs.$LIBVER.dylib" SONAME="libwcs.$SHVER.dylib" SHRLD="$SHRLD -dynamiclib -single_module" SHRLD="$SHRLD -compatibility_version $SHVER -current_version $LIBVER" SHRLN= case "$build_cpu" in powerpc*) # Switch off -fPIC (not applicable for PowerPC Macs). CFLAGS="$CFLAGS -mdynamic-no-pic" ;; esac ;; *) # Covers Linux and Solaris at least. SHRLIB="libwcs.so.$LIBVER" SONAME="libwcs.so.$SHVER" SHRLD="$SHRLD -shared -Wl,-h\$(SONAME) -lm" SHRLN="libwcs.so" ;; esac else SHRLIB= SONAME= SHRFLAGS= SHRLD= SHRSFX= SHRLN= fi # Installation utilities. { echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6; } fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: End of primary configuration. " >&5 echo "$as_me: End of primary configuration. " >&6;} # The following are required to build utilities and test programs. # ---------------------------------------------------------------- { echo "$as_me:$LINENO: Looking for libraries etc. for utilities and test suite..." >&5 echo "$as_me: Looking for libraries etc. for utilities and test suite..." >&6;} # Check for other quasi-standard header files. for ac_header in unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------- ## ## Report this to mcalabre@atnf.csiro.au ## ## ------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Large file support. { echo "$as_me:$LINENO: checking for _LARGEFILE_SOURCE value needed for large files" >&5 echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_largefile_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_sys_largefile_source=no; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_sys_largefile_source=1; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_source" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -f -r conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then cat >>confdefs.h <<\_ACEOF #define HAVE_FSEEKO 1 _ACEOF fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_largefile_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_largefile_CC=' -n32'; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_file_offset_bits+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_file_offset_bits=no; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_file_offset_bits=64; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -f -r conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6; } if test "${ac_cv_sys_large_files+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_large_files=no; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_sys_large_files=1; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 echo "${ECHO_T}$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -f -r conftest* fi fi # Extra places to look for third-party libraries and header files. LIBDIRS= # Check whether --with-cfitsio was given. if test "${with_cfitsio+set}" = set; then withval=$with_cfitsio; fi if test "x$with_cfitsio" = xno ; then { echo "$as_me:$LINENO: WARNING: CFITSIO disabled" >&5 echo "$as_me: WARNING: CFITSIO disabled" >&2;} else # Check whether --with-cfitsiolib was given. if test "${with_cfitsiolib+set}" = set; then withval=$with_cfitsiolib; fi if test "x$with_cfitsiolib" != x ; then LIBDIRS="$LIBDIRS $with_cfitsiolib" fi # Check whether --with-cfitsioinc was given. if test "${with_cfitsioinc+set}" = set; then withval=$with_cfitsioinc; fi if test "x$with_cfitsioinc" != x ; then CFITSIO_INCDIRS="$with_cfitsioinc" fi CFITSIO_INCDIRS="$CFITSIO_INCDIRS \ /usr/local/cfitsio/include \ /local/cfitsio/include" LIBDIRS="$LIBDIRS \ /usr/local/cfitsio/lib \ /local/cfitsio/lib" fi # Check whether --with-pgplot was given. if test "${with_pgplot+set}" = set; then withval=$with_pgplot; fi if test "x$with_pgplot" = xno ; then { echo "$as_me:$LINENO: WARNING: PGPLOT disabled" >&5 echo "$as_me: WARNING: PGPLOT disabled" >&2;} else # Check whether --with-pgplotlib was given. if test "${with_pgplotlib+set}" = set; then withval=$with_pgplotlib; fi if test "x$with_pgplotlib" != x ; then LIBDIRS="$LIBDIRS $with_pgplotlib" fi # Check whether --with-pgplotinc was given. if test "${with_pgplotinc+set}" = set; then withval=$with_pgplotinc; fi if test "x$with_pgplotinc" != x ; then PGPLOT_INCDIRS="$with_pgplotinc" fi PGPLOT_INCDIRS="$PGPLOT_INCDIRS \ /usr/local/pgplot/include \ /local/pgplot/include" LIBDIRS="$LIBDIRS \ /usr/local/pgplot/lib \ /local/pgplot/lib" fi if test "x$with_cfitsio" != xno -o \ "x$with_pgplot" != xno ; then LIBDIRS="$LIBDIRS \ /usr/local/lib \ /local/lib \ /opt/local/lib \ /opt/SUNWspro/lib \ /sw/lib" for LIBDIR in $LIBDIRS ; do as_ac_File=`echo "ac_cv_file_$LIBDIR" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $LIBDIR" >&5 echo $ECHO_N "checking for $LIBDIR... $ECHO_C" >&6; } if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test "$cross_compiling" = yes && { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} { (exit 1); exit 1; }; } if test -r "$LIBDIR"; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" fi fi ac_res=`eval echo '${'$as_ac_File'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_File'}'` = yes; then LDFLAGS="$LDFLAGS -L$LIBDIR" else continue fi done # Generic include directories. INCDIRS="/usr/local/include \ /local/include \ /opt/local/include \ /sw/include \ /local \ /usr/include" # CFITSIO. if test "x$with_cfitsio" != xno ; then # Search for CFITSIO. for INCDIR in $CFITSIO_INCDIRS $INCDIRS ; do as_ac_File=`echo "ac_cv_file_$INCDIR/cfitsio/fitsio.h" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $INCDIR/cfitsio/fitsio.h" >&5 echo $ECHO_N "checking for $INCDIR/cfitsio/fitsio.h... $ECHO_C" >&6; } if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test "$cross_compiling" = yes && { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} { (exit 1); exit 1; }; } if test -r "$INCDIR/cfitsio/fitsio.h"; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" fi fi ac_res=`eval echo '${'$as_ac_File'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_File'}'` = yes; then CFITSIOINC="-I$INCDIR/cfitsio"; break fi as_ac_File=`echo "ac_cv_file_$INCDIR/fitsio.h" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $INCDIR/fitsio.h" >&5 echo $ECHO_N "checking for $INCDIR/fitsio.h... $ECHO_C" >&6; } if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test "$cross_compiling" = yes && { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} { (exit 1); exit 1; }; } if test -r "$INCDIR/fitsio.h"; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" fi fi ac_res=`eval echo '${'$as_ac_File'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_File'}'` = yes; then CFITSIOINC="-I$INCDIR"; break fi done { echo "$as_me:$LINENO: checking for recv in -lsocket" >&5 echo $ECHO_N "checking for recv in -lsocket... $ECHO_C" >&6; } if test "${ac_cv_lib_socket_recv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char recv (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return recv (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_socket_recv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_recv=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_socket_recv" >&5 echo "${ECHO_T}$ac_cv_lib_socket_recv" >&6; } if test $ac_cv_lib_socket_recv = yes; then CFITSIOLIB="-lsocket" fi { echo "$as_me:$LINENO: checking for ffopen in -lcfitsio" >&5 echo $ECHO_N "checking for ffopen in -lcfitsio... $ECHO_C" >&6; } if test "${ac_cv_lib_cfitsio_ffopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcfitsio $CFITSIOLIB $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ffopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return ffopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_cfitsio_ffopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_cfitsio_ffopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_cfitsio_ffopen" >&5 echo "${ECHO_T}$ac_cv_lib_cfitsio_ffopen" >&6; } if test $ac_cv_lib_cfitsio_ffopen = yes; then CFITSIOLIB="-lcfitsio $CFITSIOLIB" fi if test "x$CFITSIOINC" = x -o "x$CFITSIOLIB" = x; then { echo "$as_me:$LINENO: WARNING: CFITSIO not found, skipping CFITSIO-dependent tests." >&5 echo "$as_me: WARNING: CFITSIO not found, skipping CFITSIO-dependent tests." >&2;} else { echo "$as_me:$LINENO: CFITSIO appears to be available." >&5 echo "$as_me: CFITSIO appears to be available." >&6;} cat >>confdefs.h <<\_ACEOF #define HAVE_CFITSIO 1 _ACEOF # Check for fits_read_wcstab, present in CFITSIO 3.004beta and later. { echo "$as_me:$LINENO: checking for fits_read_wcstab in -lcfitsio" >&5 echo $ECHO_N "checking for fits_read_wcstab in -lcfitsio... $ECHO_C" >&6; } if test "${ac_cv_lib_cfitsio_fits_read_wcstab+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcfitsio $CFITSIOLIB $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char fits_read_wcstab (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return fits_read_wcstab (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_cfitsio_fits_read_wcstab=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_cfitsio_fits_read_wcstab=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_cfitsio_fits_read_wcstab" >&5 echo "${ECHO_T}$ac_cv_lib_cfitsio_fits_read_wcstab" >&6; } if test $ac_cv_lib_cfitsio_fits_read_wcstab = yes; then GETWCSTAB= else GETWCSTAB=getwcstab.o fi if test "x$GETWCSTAB" != x ; then { echo "$as_me:$LINENO: WARNING: fits_read_wcstab not found in CFITSIO, will use getwcstab.c to compile test programs." >&5 echo "$as_me: WARNING: fits_read_wcstab not found in CFITSIO, will use getwcstab.c to compile test programs." >&2;} fi fi fi # PGPLOT. if test "x$F77" != x -a "x$with_pgplot" != xno ; then # Search for PGPLOT. for INCDIR in $PGPLOT_INCDIRS $INCDIRS ; do as_ac_File=`echo "ac_cv_file_$INCDIR/pgplot/cpgplot.h" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $INCDIR/pgplot/cpgplot.h" >&5 echo $ECHO_N "checking for $INCDIR/pgplot/cpgplot.h... $ECHO_C" >&6; } if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test "$cross_compiling" = yes && { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} { (exit 1); exit 1; }; } if test -r "$INCDIR/pgplot/cpgplot.h"; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" fi fi ac_res=`eval echo '${'$as_ac_File'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_File'}'` = yes; then PGPLOTINC="-I$INCDIR/pgplot"; break fi as_ac_File=`echo "ac_cv_file_$INCDIR/cpgplot.h" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $INCDIR/cpgplot.h" >&5 echo $ECHO_N "checking for $INCDIR/cpgplot.h... $ECHO_C" >&6; } if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test "$cross_compiling" = yes && { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} { (exit 1); exit 1; }; } if test -r "$INCDIR/cpgplot.h"; then eval "$as_ac_File=yes" else eval "$as_ac_File=no" fi fi ac_res=`eval echo '${'$as_ac_File'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_File'}'` = yes; then PGPLOTINC="-I$INCDIR"; break fi done # FLIBS (found above via AC_F77_LIBRARY_LDFLAGS) only helps if PGPLOT was # built using the same Fortran compiler that we are using here. # PGPLOT compiled by the SUN Fortran compiler but linked with something # else. { echo "$as_me:$LINENO: checking for iand_ in -lM77" >&5 echo $ECHO_N "checking for iand_ in -lM77... $ECHO_C" >&6; } if test "${ac_cv_lib_M77_iand_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lM77 $PGPLOTLIB $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char iand_ (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return iand_ (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_M77_iand_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_M77_iand_=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_M77_iand_" >&5 echo "${ECHO_T}$ac_cv_lib_M77_iand_" >&6; } if test $ac_cv_lib_M77_iand_ = yes; then PGPLOTLIB="-lM77 $PGPLOTLIB" fi { echo "$as_me:$LINENO: checking for f77_init in -lF77" >&5 echo $ECHO_N "checking for f77_init in -lF77... $ECHO_C" >&6; } if test "${ac_cv_lib_F77_f77_init+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lF77 $PGPLOTLIB $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char f77_init (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return f77_init (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_F77_f77_init=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_F77_f77_init=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_F77_f77_init" >&5 echo "${ECHO_T}$ac_cv_lib_F77_f77_init" >&6; } if test $ac_cv_lib_F77_f77_init = yes; then PGPLOTLIB="-lF77 $PGPLOTLIB" fi if test "x$F77" != xg77; then # For PGPLOT compiled with g77 but linked with something else. { echo "$as_me:$LINENO: checking for main in -lfrtbegin" >&5 echo $ECHO_N "checking for main in -lfrtbegin... $ECHO_C" >&6; } if test "${ac_cv_lib_frtbegin_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfrtbegin $PGPLOTLIB $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_frtbegin_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_frtbegin_main=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_frtbegin_main" >&5 echo "${ECHO_T}$ac_cv_lib_frtbegin_main" >&6; } if test $ac_cv_lib_frtbegin_main = yes; then PGPLOTLIB="-lfrtbegin $PGPLOTLIB" fi { echo "$as_me:$LINENO: checking for gerror_ in -lg2c" >&5 echo $ECHO_N "checking for gerror_ in -lg2c... $ECHO_C" >&6; } if test "${ac_cv_lib_g2c_gerror_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lg2c $PGPLOTLIB $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gerror_ (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return gerror_ (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_g2c_gerror_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_g2c_gerror_=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_g2c_gerror_" >&5 echo "${ECHO_T}$ac_cv_lib_g2c_gerror_" >&6; } if test $ac_cv_lib_g2c_gerror_ = yes; then PGPLOTLIB="-lg2c $PGPLOTLIB" fi fi if test "x$F77" != xgfortran; then # For PGPLOT compiled with gfortran but linked with something else. # Note that if gfortran itself is driving the linker it can be harmful # to add -lgfortran to the link list without also adding -lgfortranbegin. # Doing so stops gfortran from adding -lgfortranbegin which is needed to # resolve "main". { echo "$as_me:$LINENO: checking for _gfortran_abort in -lgfortran" >&5 echo $ECHO_N "checking for _gfortran_abort in -lgfortran... $ECHO_C" >&6; } if test "${ac_cv_lib_gfortran__gfortran_abort+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgfortran $PGPLOTLIB $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char _gfortran_abort (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return _gfortran_abort (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_gfortran__gfortran_abort=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_gfortran__gfortran_abort=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_gfortran__gfortran_abort" >&5 echo "${ECHO_T}$ac_cv_lib_gfortran__gfortran_abort" >&6; } if test $ac_cv_lib_gfortran__gfortran_abort = yes; then PGPLOTLIB="-lgfortran $PGPLOTLIB" fi fi # Search for X11 includes and libraries. { echo "$as_me:$LINENO: checking for X" >&5 echo $ECHO_N "checking for X... $ECHO_C" >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) { { echo "$as_me:$LINENO: error: Cannot use X directory names containing '" >&5 echo "$as_me: error: Cannot use X directory names containing '" >&2;} { (exit 1); exit 1; }; };; #( *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /lib) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # We can compile using X headers with no special include directory. ac_x_includes= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { XrmInitialize () ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS=$ac_save_LIBS for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { echo "$as_me:$LINENO: result: $have_x" >&5 echo "${ECHO_T}$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5 echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6; } fi if test "x$no_x" = x; then if test "x$ac_x_libraries" != x ; then # Not needed for systems that keep the X11 libraries in /usr/lib. LDFLAGS="$LDFLAGS -L$ac_x_libraries" fi PGPLOTLIB="-lX11 $PGPLOTLIB" fi # It is possible that other libraries may be required depending on what # graphics drivers were installed with PGPLOT. { echo "$as_me:$LINENO: checking for deflate in -lz" >&5 echo $ECHO_N "checking for deflate in -lz... $ECHO_C" >&6; } if test "${ac_cv_lib_z_deflate+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $PGPLOTLIB $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char deflate (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return deflate (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_z_deflate=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_deflate=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_z_deflate" >&5 echo "${ECHO_T}$ac_cv_lib_z_deflate" >&6; } if test $ac_cv_lib_z_deflate = yes; then PGPLOTLIB="-lz $PGPLOTLIB" fi { echo "$as_me:$LINENO: checking for png_error in -lpng" >&5 echo $ECHO_N "checking for png_error in -lpng... $ECHO_C" >&6; } if test "${ac_cv_lib_png_png_error+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpng $PGPLOTLIB $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char png_error (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return png_error (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_png_png_error=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_png_png_error=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_png_png_error" >&5 echo "${ECHO_T}$ac_cv_lib_png_png_error" >&6; } if test $ac_cv_lib_png_png_error = yes; then PGPLOTLIB="-lpng $PGPLOTLIB" fi { echo "$as_me:$LINENO: checking for pgbeg_ in -lpgplot" >&5 echo $ECHO_N "checking for pgbeg_ in -lpgplot... $ECHO_C" >&6; } if test "${ac_cv_lib_pgplot_pgbeg_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpgplot $PGPLOTLIB $FLIBS $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pgbeg_ (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return pgbeg_ (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_pgplot_pgbeg_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pgplot_pgbeg_=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_pgplot_pgbeg_" >&5 echo "${ECHO_T}$ac_cv_lib_pgplot_pgbeg_" >&6; } if test $ac_cv_lib_pgplot_pgbeg_ = yes; then PGPLOTLIB="-lpgplot $PGPLOTLIB" fi { echo "$as_me:$LINENO: checking for cpgbeg in -lcpgplot" >&5 echo $ECHO_N "checking for cpgbeg in -lcpgplot... $ECHO_C" >&6; } if test "${ac_cv_lib_cpgplot_cpgbeg+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcpgplot $PGPLOTLIB $FLIBS $LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cpgbeg (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return cpgbeg (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_cpgplot_cpgbeg=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_cpgplot_cpgbeg=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_cpgplot_cpgbeg" >&5 echo "${ECHO_T}$ac_cv_lib_cpgplot_cpgbeg" >&6; } if test $ac_cv_lib_cpgplot_cpgbeg = yes; then PGPLOTLIB="-lcpgplot $PGPLOTLIB" else PGPLOTLIB= fi # Only need the PGPLOT include file to build PGSBOX. if test "x$PGPLOTINC" != x; then SUBDIRS="$SUBDIRS pgsbox" INSTDIR="pgsbox" fi # Also need the PGPLOT library to build pgtest and cpgtest. if test "x$PGPLOTLIB" = x; then { echo "$as_me:$LINENO: WARNING: PGPLOT not found, skipping PGPLOT-dependent tests." >&5 echo "$as_me: WARNING: PGPLOT not found, skipping PGPLOT-dependent tests." >&2;} else { echo "$as_me:$LINENO: PGPLOT appears to be available." >&5 echo "$as_me: PGPLOT appears to be available." >&6;} TSTDIRS="$TSTDIRS pgsbox" fi fi fi # Utilities are compiled last since they need the libraries. # Ways of disabling them: # configure --disable-utils # configure --enable-utils=no # Check whether --enable-utils was given. if test "${enable_utils+set}" = set; then enableval=$enable_utils; fi if test "x$enable_utils" != xno ; then SUBDIRS="$SUBDIRS utils" INSTDIR="$INSTDIR utils" else { echo "$as_me:$LINENO: WARNING: Compilation of WCS utilities disabled" >&5 echo "$as_me: WARNING: Compilation of WCS utilities disabled" >&2;} fi { echo "$as_me:$LINENO: End of auxiliary configuration. " >&5 echo "$as_me: End of auxiliary configuration. " >&6;} # Do it. { echo "$as_me:$LINENO: Configuring files..." >&5 echo "$as_me: Configuring files..." >&6;} ac_config_files="$ac_config_files makedefs wcslib.pc" ac_config_headers="$ac_config_headers wcsconfig.h wcsconfig_f77.h wcsconfig_tests.h wcsconfig_utils.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by WCSLIB $as_me 4.10, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ WCSLIB config.status 4.10 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "makedefs") CONFIG_FILES="$CONFIG_FILES makedefs" ;; "wcslib.pc") CONFIG_FILES="$CONFIG_FILES wcslib.pc" ;; "wcsconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig.h" ;; "wcsconfig_f77.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig_f77.h" ;; "wcsconfig_tests.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig_tests.h" ;; "wcsconfig_utils.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig_utils.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim LIBVER!$LIBVER$ac_delim build!$build$ac_delim build_cpu!$build_cpu$ac_delim build_vendor!$build_vendor$ac_delim build_os!$build_os$ac_delim ARCH!$ARCH$ac_delim FLEX!$FLEX$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim LIBOBJS!$LIBOBJS$ac_delim F77!$F77$ac_delim FFLAGS!$FFLAGS$ac_delim ac_ct_F77!$ac_ct_F77$ac_delim FLIBS!$FLIBS$ac_delim RANLIB!$RANLIB$ac_delim SHRLIB!$SHRLIB$ac_delim SONAME!$SONAME$ac_delim SHRFLAGS!$SHRFLAGS$ac_delim SHRLD!$SHRLD$ac_delim SHRSFX!$SHRSFX$ac_delim SHRLN!$SHRLN$ac_delim LN_S!$LN_S$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim XMKMF!$XMKMF$ac_delim CFITSIOINC!$CFITSIOINC$ac_delim CFITSIOLIB!$CFITSIOLIB$ac_delim GETWCSTAB!$GETWCSTAB$ac_delim PGPLOTINC!$PGPLOTINC$ac_delim PGPLOTLIB!$PGPLOTLIB$ac_delim SUBDIRS!$SUBDIRS$ac_delim TSTDIRS!$TSTDIRS$ac_delim INSTDIR!$INSTDIR$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 80; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :H) # # CONFIG_HEADER # _ACEOF # Transform confdefs.h into a sed script `conftest.defines', that # substitutes the proper values into config.h.in to produce config.h. rm -f conftest.defines conftest.tail # First, append a space to every undef/define line, to ease matching. echo 's/$/ /' >conftest.defines # Then, protect against being on the right side of a sed subst, or in # an unquoted here document, in config.status. If some macros were # called several times there might be several #defines for the same # symbol, which is useless. But do not sort them, since the last # AC_DEFINE must be honored. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* # These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where # NAME is the cpp macro being defined, VALUE is the value it is being given. # PARAMS is the parameter list in the macro definition--in most cases, it's # just an empty string. ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' ac_dB='\\)[ (].*,\\1define\\2' ac_dC=' ' ac_dD=' ,' uniq confdefs.h | sed -n ' t rset :rset s/^[ ]*#[ ]*define[ ][ ]*// t ok d :ok s/[\\&,]/\\&/g s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p ' >>conftest.defines # Remove the space that was appended to ease matching. # Then replace #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. # (The regexp can be short, since the line contains either #define or #undef.) echo 's/ $// s,^[ #]*u.*,/* & */,' >>conftest.defines # Break up conftest.defines: ac_max_sed_lines=50 # First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" # Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" # Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" # et cetera. ac_in='$ac_file_inputs' ac_out='"$tmp/out1"' ac_nxt='"$tmp/out2"' while : do # Write a here document: cat >>$CONFIG_STATUS <<_ACEOF # First, check the format of the line: cat >"\$tmp/defines.sed" <<\\CEOF /^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def /^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def b :def _ACEOF sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail grep . conftest.tail >/dev/null || break rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines conftest.tail echo "ac_result=$ac_in" >>$CONFIG_STATUS cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then echo "/* $configure_input */" >"$tmp/config.h" cat "$ac_result" >>"$tmp/config.h" if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else rm -f $ac_file mv "$tmp/config.h" $ac_file fi else echo "/* $configure_input */" cat "$ac_result" fi rm -f "$tmp/out12" ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi pywcs-1.12/wcslib/configure.ac0000644001153600020070000004032212310355626020420 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # Process this file with autoconf-2.53 or later to produce a configure script. #----------------------------------------------------------------------------- # N.B. it is necessary to run autoconf on a Mac in order for configure to # locate the X11 dylibs for PGPLOT. Use autoconf-2.61 in MacOSX 10.6.2 or # later to avoid spurious messages about deleting conftest.dSYM when # configuring in MacOSX 10.6. # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: configure.ac,v 4.10 2012/02/05 23:41:45 cal103 Exp $ #----------------------------------------------------------------------------- AC_INIT([WCSLIB], [4.10], [mcalabre@atnf.csiro.au], [wcslib-4.10]) AC_PREREQ([2.53]) AC_REVISION([$Revision: 4.10 $]) AC_SUBST([PACKAGE_VERSION]) AC_DEFINE_UNQUOTED([WCSLIB_VERSION], [$PACKAGE_VERSION], [Define wcslib version]) # Library version number, same as package version. LIBVER="$PACKAGE_VERSION" AC_SUBST([LIBVER]) AC_CONFIG_SRCDIR([C/wcs.h]) AC_CONFIG_AUX_DIR([config]) # Get the system type. AC_CANONICAL_BUILD ARCH="${build_cpu}-$build_os" AC_SUBST([ARCH]) # Look for Flex. AC_CHECK_PROG([FLEX], [flex], [flex], [], [], []) if test "x$FLEX" = xflex ; then # Version 2.5.9 or later is required. V=`flex --version | awk '{print $NF}'` W=`echo $V | awk -F. '{if ((($1*100 + $2)*100 + $3) < 20509) print "no"}'` if test "x$W" != x ; then AC_MSG_NOTICE([Flex version $V is too old, ignored.]) FLEX= else AC_MSG_NOTICE([Using Flex version $V.]) fi fi if test "x$FLEX" = x ; then AC_MSG_WARN([Flex version 2.5.9 or later does not appear to be available, will use pre-generated sources.]) fi # Look for an ANSI C compiler. AC_PROG_CPP AC_PROG_CC AC_PROG_CC_STDC AC_C_CONST AC_TYPE_SIZE_T if test "x$ac_cv_prog_cc_stdc" = xno -o \ "x$ac_cv_c_const" = xno -o \ "x$ac_cv_type_size_t" = xno; then AC_MSG_ERROR([ ------------------------------------------------------- An ANSI standard C library is required to build WCSLIB. ERROR: WCSLIB configuration failure. -------------------------------------------------------], [1]) fi # Check for data types (suggested by autoscan - off_t is only required by # fitshdr). AC_TYPE_OFF_T AC_TYPE_INT8_T AC_TYPE_INT16_T AC_TYPE_INT32_T AC_TYPE_UINT8_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T # Check for ANSI C headers. AC_HEADER_STDC AC_CHECK_HEADERS([ctype.h errno.h limits.h math.h setjmp.h stdarg.h stdio.h \ stdlib.h string.h]) if test "x$ac_cv_header_stdc" = xno; then AC_MSG_ERROR([ ------------------------------------------------------------------- An ANSI standard C library is required to build WCSLIB. One of the ANSI C header files it requires is missing or unusable. ERROR: WCSLIB configuration failure. -------------------------------------------------------------------], [1]) fi # Checks for ANSI C library functions (suggested by autoscan - fseeko and # stat are only required by fitshdr). AC_CHECK_LIB([m], [floor]) AC_FUNC_FSEEKO AC_FUNC_MALLOC AC_FUNC_REALLOC AC_FUNC_SETVBUF_REVERSED AC_FUNC_STAT AC_FUNC_VPRINTF AC_CHECK_FUNCS([floor memset pow sqrt strchr strstr]) # System libraries that may be required by WCSLIB itself. # SunOS, extra maths functions. AC_CHECK_LIB([sunmath], [cosd], [LIBS="-lsunmath $LIBS"], [], []) # See if we can find sincos(). AC_CHECK_FUNCS([sincos]) # Check the size and availability of integer data types. AC_CHECK_SIZEOF([int]) AC_CHECK_SIZEOF([long int]) AC_CHECK_SIZEOF([long long int]) # 64-bit integer data type; use long long int preferentially since that # accords with "%lld" formatting used in fitshdr.l, e.g. # int size_t long int long long int # --- ------ -------- ------------- # gcc x86: 32 32 32 64 # gcc x86_64: 32 64 64 64 if test "x$ac_cv_sizeof_long_long_int" = x8; then AC_DEFINE([WCSLIB_INT64], [long long int], [64-bit integer data type.]) elif test "x$ac_cv_sizeof_long_int" = x8; then AC_DEFINE([WCSLIB_INT64], [long int], [64-bit integer data type.]) elif test "x$ac_cv_sizeof_int" = x8; then AC_DEFINE([WCSLIB_INT64], [int], [64-bit integer data type.]) fi # Does printf() have the z modifier for size_t type? Important for 64-bit. AC_MSG_CHECKING([for printf z format modifier for size_t type]) AC_RUN_IFELSE( [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[char buf[64]; if (sprintf(buf, "%zu", (size_t)1) != 1) return 1; else if (strcmp(buf, "1")) return 2;]])], AC_DEFINE([MODZ], ["z"], [printf format modifier for size_t type.]) AC_MSG_RESULT(yes), AC_DEFINE([MODZ], [""], [printf format modifier for size_t type.]) AC_MSG_RESULT(no), AC_DEFINE([MODZ], [""], [printf format modifier for size_t type.]) AC_MSG_RESULT(assumed not) ) # Starting values, may be augmented later. SUBDIRS="C" TSTDIRS="C" INSTDIR="C" # Ways of specifying the Fortran compiler, in order of precedence: # configure --enable-fortran= # F77= configure ...bash # # Ways of disabling Fortran: # configure --disable-fortran # configure --enable-fortran=no # F77=no configure ...bash AC_ARG_ENABLE([fortran], [AS_HELP_STRING([--enable-fortran=ARG], [Fortran compiler to use])], []) AC_ARG_ENABLE([fortran], [AS_HELP_STRING([--disable-fortran], [don't build the Fortran wrappers or PGSBOX])], []) if test "x$enable_fortran" != x -a "x$enable_fortran" != xyes ; then F77="$enable_fortran" fi if test "x$F77" = xno ; then F77= AC_MSG_WARN([Compilation of Fortran wrappers and PGSBOX disabled]) else if test "x$F77" = x ; then # Look for a Fortran compiler. AC_PROG_F77([gfortran g77 f77 ifort xlf frt pgf77 fl32 af77 fort77 f90 \ xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95]) fi if test "x$F77" = x; then AC_MSG_WARN([ ------------------------------------------------------------------ Fortran compiler not found, will skip Fortran wrappers and PGSBOX. ------------------------------------------------------------------]) # Best guess at Fortran name mangling for use if a compiler does ever # become available. AC_DEFINE([F77_FUNC(name,NAME)], [name ## _]) else if test "x$ac_cv_f77_compiler_gnu" = xyes ; then if test "x$F77" = xg77 -o "x$F77" = xf77 ; then # Not recognized by gfortran. FFLAGS="$FFLAGS -Wno-globals" fi fi AC_MSG_CHECKING(whether $F77 accepts -I) AC_LANG_PUSH(Fortran 77) FFLAGS_save=$FFLAGS FFLAGS=-I. AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], []), [FFLAGS="$FFLAGS_save -I."; AC_MSG_RESULT(yes)], [FFLAGS="$FFLAGS_save"; AC_MSG_RESULT(no)]) AC_LANG_POP() # Libraries required by the Fortran compiler itself (sets FLIBS). # Required by utilities and test programs written in C that link to # Fortran object modules such as pgsbox. AC_F77_LIBRARY_LDFLAGS # F77 name mangling (defines the F77_FUNC preprocessor macro). AC_F77_WRAPPERS SUBDIRS="C Fortran" TSTDIRS="C Fortran" INSTDIR="Fortran" fi fi # System-dependent system libraries (for building the sharable library). #----------------------------------------------------------------------- # Darwin (contains stubs for long double). AC_CHECK_LIB([SystemStubs], [printf\$LDBLStub], [LIBS="$LIBS -lSystemStubs"], [], []) # Library and installation utilities. #------------------------------------ # Static library generation. AC_PROG_RANLIB # Shared library generation. if test "x$ac_cv_c_compiler_gnu" = xyes ; then SHVER=`echo "$LIBVER" | sed -e 's/\..*$//'` # Note that -fPIC is on by default for Macs, this just makes it obvious. SHRFLAGS="-fPIC" SHRLD="\$(CC) \$(SHRFLAGS)" case "$build_os" in darwin*) SHRLIB="libwcs.$LIBVER.dylib" SONAME="libwcs.$SHVER.dylib" SHRLD="$SHRLD -dynamiclib -single_module" SHRLD="$SHRLD -compatibility_version $SHVER -current_version $LIBVER" SHRLN= case "$build_cpu" in powerpc*) # Switch off -fPIC (not applicable for PowerPC Macs). CFLAGS="$CFLAGS -mdynamic-no-pic" ;; esac ;; *) # Covers Linux and Solaris at least. SHRLIB="libwcs.so.$LIBVER" SONAME="libwcs.so.$SHVER" SHRLD="$SHRLD -shared -Wl,-h\$(SONAME) -lm" SHRLN="libwcs.so" ;; esac else SHRLIB= SONAME= SHRFLAGS= SHRLD= SHRSFX= SHRLN= fi AC_SUBST([SHRLIB]) AC_SUBST([SONAME]) AC_SUBST([SHRFLAGS]) AC_SUBST([SHRLD]) AC_SUBST([SHRSFX]) AC_SUBST([SHRLN]) # Installation utilities. AC_PROG_LN_S AC_PROG_INSTALL AC_MSG_NOTICE([End of primary configuration. ]) # The following are required to build utilities and test programs. # ---------------------------------------------------------------- AC_MSG_NOTICE([Looking for libraries etc. for utilities and test suite...]) # Check for other quasi-standard header files. AC_CHECK_HEADERS([unistd.h]) # Large file support. AC_FUNC_FSEEKO AC_SYS_LARGEFILE # Extra places to look for third-party libraries and header files. LIBDIRS= AC_ARG_WITH([cfitsio], [AS_HELP_STRING([--without-cfitsio], [eschew CFITSIO])], []) if test "x$with_cfitsio" = xno ; then AC_MSG_WARN([CFITSIO disabled]) else AC_ARG_WITH([cfitsiolib], [AS_HELP_STRING([--with-cfitsiolib=DIR], [directory containing cfitsio library])], []) if test "x$with_cfitsiolib" != x ; then LIBDIRS="$LIBDIRS $with_cfitsiolib" fi AC_ARG_WITH([cfitsioinc], [AS_HELP_STRING([--with-cfitsioinc=DIR], [directory containing cfitsio header files])], []) if test "x$with_cfitsioinc" != x ; then CFITSIO_INCDIRS="$with_cfitsioinc" fi CFITSIO_INCDIRS="$CFITSIO_INCDIRS \ /usr/local/cfitsio/include \ /local/cfitsio/include" LIBDIRS="$LIBDIRS \ /usr/local/cfitsio/lib \ /local/cfitsio/lib" fi AC_ARG_WITH([pgplot], [AS_HELP_STRING([--without-pgplot], [eschew PGPLOT])], []) if test "x$with_pgplot" = xno ; then AC_MSG_WARN([PGPLOT disabled]) else AC_ARG_WITH([pgplotlib], [AS_HELP_STRING([--with-pgplotlib=DIR], [directory containing pgplot library])], []) if test "x$with_pgplotlib" != x ; then LIBDIRS="$LIBDIRS $with_pgplotlib" fi AC_ARG_WITH([pgplotinc], [AS_HELP_STRING([--with-pgplotinc=DIR], [directory containing pgplot header files])], []) if test "x$with_pgplotinc" != x ; then PGPLOT_INCDIRS="$with_pgplotinc" fi PGPLOT_INCDIRS="$PGPLOT_INCDIRS \ /usr/local/pgplot/include \ /local/pgplot/include" LIBDIRS="$LIBDIRS \ /usr/local/pgplot/lib \ /local/pgplot/lib" fi if test "x$with_cfitsio" != xno -o \ "x$with_pgplot" != xno ; then LIBDIRS="$LIBDIRS \ /usr/local/lib \ /local/lib \ /opt/local/lib \ /opt/SUNWspro/lib \ /sw/lib" for LIBDIR in $LIBDIRS ; do AC_CHECK_FILE([$LIBDIR], [LDFLAGS="$LDFLAGS -L$LIBDIR"], [continue]) done # Generic include directories. INCDIRS="/usr/local/include \ /local/include \ /opt/local/include \ /sw/include \ /local \ /usr/include" # CFITSIO. if test "x$with_cfitsio" != xno ; then # Search for CFITSIO. for INCDIR in $CFITSIO_INCDIRS $INCDIRS ; do AC_CHECK_FILE([$INCDIR/cfitsio/fitsio.h], [CFITSIOINC="-I$INCDIR/cfitsio"; break]) AC_CHECK_FILE([$INCDIR/fitsio.h], [CFITSIOINC="-I$INCDIR"; break]) done AC_CHECK_LIB([socket], [recv], [CFITSIOLIB="-lsocket"], [], [$LIBS]) AC_CHECK_LIB([cfitsio], [ffopen], [CFITSIOLIB="-lcfitsio $CFITSIOLIB"], [], [$CFITSIOLIB $LIBS]) if test "x$CFITSIOINC" = x -o "x$CFITSIOLIB" = x; then AC_MSG_WARN([CFITSIO not found, skipping CFITSIO-dependent tests.]) else AC_MSG_NOTICE([CFITSIO appears to be available.]) AC_DEFINE([HAVE_CFITSIO], [1], [Define to 1 if CFITSIO is available.]) # Check for fits_read_wcstab, present in CFITSIO 3.004beta and later. AC_CHECK_LIB([cfitsio], [fits_read_wcstab], [GETWCSTAB=], [GETWCSTAB=getwcstab.o], [$CFITSIOLIB $LIBS]) if test "x$GETWCSTAB" != x ; then AC_MSG_WARN([fits_read_wcstab not found in CFITSIO, will use getwcstab.c to compile test programs.]) fi fi fi # PGPLOT. if test "x$F77" != x -a "x$with_pgplot" != xno ; then # Search for PGPLOT. for INCDIR in $PGPLOT_INCDIRS $INCDIRS ; do AC_CHECK_FILE([$INCDIR/pgplot/cpgplot.h], [PGPLOTINC="-I$INCDIR/pgplot"; break]) AC_CHECK_FILE([$INCDIR/cpgplot.h], [PGPLOTINC="-I$INCDIR"; break]) done # FLIBS (found above via AC_F77_LIBRARY_LDFLAGS) only helps if PGPLOT was # built using the same Fortran compiler that we are using here. # PGPLOT compiled by the SUN Fortran compiler but linked with something # else. AC_CHECK_LIB([M77], [iand_], [PGPLOTLIB="-lM77 $PGPLOTLIB"], [], [$PGPLOTLIB $LIBS]) AC_CHECK_LIB([F77], [f77_init], [PGPLOTLIB="-lF77 $PGPLOTLIB"], [], [$PGPLOTLIB $LIBS]) if test "x$F77" != xg77; then # For PGPLOT compiled with g77 but linked with something else. AC_CHECK_LIB([frtbegin], [main], [PGPLOTLIB="-lfrtbegin $PGPLOTLIB"], [], [$PGPLOTLIB $LIBS]) AC_CHECK_LIB([g2c], [gerror_], [PGPLOTLIB="-lg2c $PGPLOTLIB"], [], [$PGPLOTLIB $LIBS]) fi if test "x$F77" != xgfortran; then # For PGPLOT compiled with gfortran but linked with something else. # Note that if gfortran itself is driving the linker it can be harmful # to add -lgfortran to the link list without also adding -lgfortranbegin. # Doing so stops gfortran from adding -lgfortranbegin which is needed to # resolve "main". AC_CHECK_LIB([gfortran], [_gfortran_abort], [PGPLOTLIB="-lgfortran $PGPLOTLIB"], [], [$PGPLOTLIB $LIBS]) fi # Search for X11 includes and libraries. AC_PATH_X if test "x$no_x" = x; then if test "x$ac_x_libraries" != x ; then # Not needed for systems that keep the X11 libraries in /usr/lib. LDFLAGS="$LDFLAGS -L$ac_x_libraries" fi PGPLOTLIB="-lX11 $PGPLOTLIB" fi # It is possible that other libraries may be required depending on what # graphics drivers were installed with PGPLOT. AC_CHECK_LIB([z], [deflate], [PGPLOTLIB="-lz $PGPLOTLIB"], [], [$PGPLOTLIB $LIBS]) AC_CHECK_LIB([png], [png_error], [PGPLOTLIB="-lpng $PGPLOTLIB"], [], [$PGPLOTLIB $LIBS]) AC_CHECK_LIB([pgplot], [pgbeg_], [PGPLOTLIB="-lpgplot $PGPLOTLIB"], [], [$PGPLOTLIB $FLIBS $LIBS]) AC_CHECK_LIB([cpgplot], [cpgbeg], [PGPLOTLIB="-lcpgplot $PGPLOTLIB"], [PGPLOTLIB=], [$PGPLOTLIB $FLIBS $LIBS]) # Only need the PGPLOT include file to build PGSBOX. if test "x$PGPLOTINC" != x; then SUBDIRS="$SUBDIRS pgsbox" INSTDIR="pgsbox" fi # Also need the PGPLOT library to build pgtest and cpgtest. if test "x$PGPLOTLIB" = x; then AC_MSG_WARN([PGPLOT not found, skipping PGPLOT-dependent tests.]) else AC_MSG_NOTICE([PGPLOT appears to be available.]) TSTDIRS="$TSTDIRS pgsbox" fi fi fi # Utilities are compiled last since they need the libraries. # Ways of disabling them: # configure --disable-utils # configure --enable-utils=no AC_ARG_ENABLE([utils], [AS_HELP_STRING([--disable-utils], [don't build the WCS utilities])], []) if test "x$enable_utils" != xno ; then SUBDIRS="$SUBDIRS utils" INSTDIR="$INSTDIR utils" else AC_MSG_WARN([Compilation of WCS utilities disabled]) fi AC_SUBST([CFITSIOINC]) AC_SUBST([CFITSIOLIB]) AC_SUBST([GETWCSTAB]) AC_SUBST([PGPLOTINC]) AC_SUBST([PGPLOTLIB]) AC_SUBST([SUBDIRS]) AC_SUBST([TSTDIRS]) AC_SUBST([INSTDIR]) AC_MSG_NOTICE([End of auxiliary configuration. ]) # Do it. AC_MSG_NOTICE([Configuring files...]) AC_CONFIG_FILES([makedefs wcslib.pc]) AC_CONFIG_HEADERS([wcsconfig.h wcsconfig_f77.h wcsconfig_tests.h wcsconfig_utils.h]) AC_OUTPUT pywcs-1.12/wcslib/COPYING0000644001153600020070000010451312310355626017170 0ustar cslocumSTSCI\science00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . pywcs-1.12/wcslib/COPYING.LESSER0000644001153600020070000001672512310355626020173 0ustar cslocumSTSCI\science00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. pywcs-1.12/wcslib/doxygen/0000755001153600020070000000000012310355732017604 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/doxygen/Bonne.gif0000644001153600020070000002221412310355626021337 0ustar cslocumSTSCI\science00000000000000GIF87a ëòÿÿÿÿÿffÿÿff3™3, ëþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ ¢@,„È™±˜,-‡Œ‚€Ø¬:‰‚èÐhÝ Ž##Ëìš5åìBÜ °Ï*ÜxÔ[¸>n¿¯`r{kotZ xyƒ{‚j} tp}†ˆ šš‹Id–He–o››Q“žAD ¡o¶·¶[¥>G¥¤™š ‰ªP°I » d·m˶½Mb¾ ­˜‡ÄƱÉÍ€c¢B³ÙàÜÃoÊÚ3èÜŹ£Zбä¾Áå×— ïí9dá“Ç,‚!6S~Aß>~»´Á†Õ®yG†-88þ†] 1 ã!Q‰eT¬æ0Ü%súq›ПÌs—èÄ‚ÍæÃ”,ViÑWšN˜1÷JˆÃÎ,¡[H>2ÍÁS 0VBFN°I’ª=k*2ÞS6a#étkP±u* ÏO£@p—Q´Z,™´%uñ­ëÖ„SWvl‘«‹GÞ¼H[@z à/öXMÙK‰qÞ4é°0% 3©êts¹F›;;ù,¨ž§ ¹ùœ;kjt»ì–÷P+aÙLÛ©%²m—qQª2…áĹR­yr§¯>pþ¾HŽsÌÎt@È?,>Aq’éÅNXæÇ‘•H#¬ÐO¥ú‘ìóØÙHAŠ%Š£¨Ù—¸ ! ŽR|›Ç MårTè‹ÃYf‰Œ¾…Ò*az¢K¤š,ü •ùƒ_F½FŽ’ta\ŠÂŽ"gV$&1 '€àBœ³\FÞ:‰d`òÁðÒ;Qg DŒÎÄ…†Ã2v-7ׄâ–ãÅw.J´DH‡Ð„Ž›þ@QΙÎ>âc åáY‘“LÂvÀØ‘ðé¹RNW{XëüpÍôn8Ô gjÔÎ2À‰t8݉<#ªÓÈùTuzBØØ¤Lb¢*NdÓ M‰“&ÊnšñÉß„òù½?ÖOq¡Tfj ŠK¢S§T(‚D¿ú%,Š$j1ˆQÑ0õ­šhb¼ ¶÷!¢¥(Kê©—¬*“µŒÅ$èFL¢˜JQ$MôFÁDj/}_±´We:9j<ÄQ•ªLƒYJh½ˆ;™þ"™z*½ $"2¸Oà…˜ |(XýÍ0¤ÒVFâH÷Â:̪YÛ‰Ìd¿0”É‘eqJõ¶Ø\‚àSxáÄWs¹1ÑœÄnúʼkͦŎX!:¦ë…á¯_ë\ôX VϽÕ漺87$|œ:þÕæÌ7„O]Ç8.(æ$3ãSÉt”wÇ3zàgSoþcS¹¿þ#T#zòöëט ð—©1}ÙíhÑþ@´˜¹Ñ4˜¦Œ±‚¢ðÕ\ËJ[º‚Æä„„:GÅiÉèjV6àR¿˜ ¸Ä¾p 蕌†h?î¢Sµ4(Œ×A›Í_"x ÇY;Kf‹ˆK+*Áê‹ E±'ýæ»W0VÑ‘›9” X9x&†¶¬§vË\GÿH›x 7:ünGtjQÆþ‹KÛ˜Ê|él£bÝ3­mº7Qv$±¥¥„‰kû ¬¾ýfÖ!j wcý5qIÏÜÀžYþØÈx‰›É¥.°L]k«ËqµTï”æOÙ†0ãNLJÛÃ;²Z;\ a¿Þ û²Ë‹e7iŠeœ}@rždÂd¼¼yt;'Æç…BEbgè¼é*ê+O]D©B™WÖ´o6p‹Âm.8B¢Úž„'6—ÍRÔÖ¿†"‰™·ört%뤛Êų‹Ã0Ú~×'–êD§iÄǃïÁ£ž'7vhü³Ít²ëÉR ö°v¨§ªm«HœóŽMÕ¯:¡pn˵÷hÏY¥­ã‰†Å±Il¿s]Ý# !äÆžÈW7g.ž®§ÎµSýZ"½bÓ·bR«k„Ǫ“švþwúÖÃss}h¼s DúõŸ‰þÐPÝ7ð4½Ç,ð4~z¢2Cæ4#õp•‡ Ž—)—2môW~+1}­†uqQ{ý÷p…asû°3iå5'‡€ÁQä'‚ï =h‚`4dGhÕ#!"Èi’]ˆãÃ:ÁórfâB}0 ±Qm]70«pH¶Ppw5‚qZuƒç'84<¾·;fATCè¦{ua&~$„r€?~®’d#”&FÕqÃQO+"ƒƒcVnE&S¶%z¨Ó=JAó¿Ò)¬¶Uj'@nÒ=G¸f(†£¶z–áq A"‡h1s‰—þ .•h†$ZX_Ó5Uá‚Td˜XkEѧQ„ÇñD+ñˆ2äi²¨Ò‘± –žp}S4¢Ø8/ˆ`Æg0C‰3Ά1[öX©‚g\vSÃædSº²‹¼XgåY|óg.×f}“Ñ6À'LƧ ´\ÍÓ3É0Cý&é·#\9 •P€6F€1A'‰D„+„h‰üa]Ž }Ñ7íè9¢ -ñU³Ð&Ð’Š÷ Y6V’~;Ø8éÃ" "`wÆ16•32÷{q8Z3D1tKs'w“©ZìEŠß’‘ë ˆW‡s"‘3ív+šþ(”ŽA”¯è+´ãbyÕ~Z|ôÈspØ¡ÑÑPkž£xys“¹Õ-*u‘â“â•b3zD§sk ‰VõhÊ@W´Xµ¸h88„Ž%(ë´ƒÿlL7-|gtðЕ]ù•r²“~Ø“¢ÇiôfO2Œ¬á.!L/÷–þ7*øq=z9j/CpW™‰9\'eº/̦‚ÙŽs`R†iHC–þe–ç?Æoj>+ñEä4ÕG——É" ›‘i7ž©=’%‰ˆL¦yŒ†”šAtBbÙ)•u)Àk4·—²ùb†‚.m9k}ö÷oÕç"ÝXU‘y‚Á÷ur*G4‚“‘Ò´‚þ &4ʨwuÔ£f¡99jøTðg0çD`ذ%ŽX`}‘™‹Ùœo8JÎET ád—u?÷ž¸ów½@UafÑÙ!vÉšØ5þGka?e‡Ö¸l²Y„Öa0ˆKøø–‘á¡ÀezðIkÑÐ'ŰŒö±¡ed øùŠtsñ ¢þ>3Ä™­)ª\ìT†gy¡U;ŒbÉ´¶œöB <š >Úz‹7;Bšj6ÇHóq[â6ã)¢…ù£ãy-÷p,š$é[ñáoØe‚!Òok†T¡´¶+=JŸËfŸS™ yEBhÊ™'DCe·*£„Ó$”æYþÚ…•h¢™›ÉGM¸«áTœös¡øžèi1¦‡P¦ìCC:HŠ{ІÛq§"úbìâ™@Ó›yUë#sôò†ðFx„ðFŸw…‚Z¨†„:#¬ÚŠj±J•ptŽ #ꄵºV·àM¼º3š~$¬Ãš03i¬ªe7V§A wª~ cô­ˆz.s¤‹hª/‘Uf2–"”¦YÞ9BðöQB’`(`’Ù¡ë÷EõŸ`ÚV­ñzï}‰¶)Ø÷™Ô³Pù:‹€ F=óâ{x–«µ¹M‘r~Ž·g‡IžÔd0Wnë¦ô^iûGà ̡,Ïë÷·™i>ÄESÍ< oRC;—Ö‹Š÷ì5D“vŒ(Í»ÜÍIÄ-3OÀÔÒË=C«[(‹a…Zç© £p&Ð’Ò«¬‰Ï¼ñÈÃ"Öÿ‹ÙeM©‹ }´Û:|}¢‚ÃõÉTÉnè¿ÆbrDxÝqª˜‹ã"  mš€­¹#ɸÙn°¤œWá5²O1¼„—=Sõ˜o™6h5ÚÍd .Z€d ¯Šv×þÍÂqâ±ÞkÖÊt½;¼-)d`‚–ÃR‚ßû÷„¨—eW»e‘§¤¤jÅç½Ú¤È}¤û!dŸåˆ‘šÜ8P'¼1übÄû-Lm\Ñ»óõ±ävD(Zæ=¾BÍÇü/ìý8gWµƒ²ßXƒɱ ísZŠZ¥Á]h#+7½í4Û[4¨Ñã‚äÛ-F¨é1äãæÀ0»0zm;¡GÉáÐãúÑ9€«^áHäßãR%FÎhg)^a¹àhðä9¡Üd»Úuùi -L>Ü2ƒ,„öCwúåzäA^h CÓëÙÁ«öœä÷Ûæ-^"/.þR>™&è(D@äÛOz¾Ñ94²ûrœ‹ñ5íÞMr%âçWÞýÂ5±‡ê ÀT*Ì“¾']¶¯4|-yN±L,@ ËÅ!U~c\¥ŽÚ±(‰øxÄÈר*c¯®ž# ¾LXiµ.C„qÕ¼70LÝÆ†Äé.!]i¨UP;ì{J&ÿmêdxÒaQÃ>ÛîeL9%Z¤ Ú‘=î½½RÖ'…ËйEËËjÞû‚rƼ¤ò$ûPþÎÎ EË=#`Ýf 44<úê$FÅ4ë©Rí!Lâ'¡…y6az‹¼£):üMÅõ2^+Xm»”CàV• JÞ!’âh4¯£¼7sþ±‰r¡qø®gÈZóÙAÀƒJò#dòÁÞ_bÄ1ò7ç”; ¡7TÁó ðP÷Ã"G–å1 +³,ðn#·!¨9:¼Ts1­aìPì®ìòÿ‡/B}¸T*sá?üèÖ³ó[WE"uöÔ¥®tY÷F!.ˆ:¦\BEU]î¾/›øYM§3NÕÜ™ó!pñ^?jA¨ê‚Ô•ÁÝnw9Ã8típ´â'JÉÝ.ëùœ•¯Ä3È•¯ë|2¿EKaõ£6“?O-€s©·LŸ¢ï4ÁQ¯/Ó óôMi±õe‚©·ŸªrÞä°!SB’ÐEý%ê3þÃß9O ™§ĵü½¦P=HæEÞÝw¤Ù•ÆÅ‰ò ј8¤„Ø1ï:H@Ìe 8IJµy‹š–5Di !U!6¶Ö`ÎeèÁÌ‹3ìü;] T)xŒÙpŒ$“:î®XÊF µìЕUKÒôe:EŒ˜ y¦6iFO©£ä’‚µgBŠ'Ž¥ç?bXøÉŸXØÖ“þ>¯tiè_Ê'aßå÷(šp6‚`›ñ…Çej`¦õ‘ žbZÃúˆ ©‚fQv¨}ÂI Õ‘(<|×Xh³1e’Î4â=–«¥j9©bNf’Ê Ø^Ù²\Qž‘™É™›œbRÛÚSŽf+®/™tÛ‰:ìʹQ•p® ½Æ*Ÿ—Öò®Œ2ª »|`Md;òåÀ×úkÒ™¼x«·µ|ƒµÀèôáœq@U†“ÿ„Yñ<•ªåÐ5ï¤6È’D¦ý½Ùš€§+²PÛ–È¡ ”fV'S£ÌŸöfM7[(,š,±ÎxtÅÚ ÓK™Ž¨h‹øƒþíÒJ~ä4›(Û;Œƒ[„´miÁуÉ4÷5b£² áK*.Á7tùŽå +Ñ=ò>÷>}Á’óRujh‹c¹rBÃw–á.²T±­Q³ ãC¤"+È–Ká¶Ç}æU¥‰X"Ëú²ðC'ž‘ƒo¶d€ ÊJÑk¤‚c`Í>N‚ŠÏ)|œIìΗ€€üüæÓGûjŒpU‰Ä,‹ÇXÏ”£,™`¾õµl‚˜ðÖD£ø0…Í ùâ3þœïXîAŠ÷­z­ì{ª€*SàÜEOøƒÿ`°â!€Kƒj¢"¦( (RÚé@’ •ˆ7þúë¤ JlÐyE³œéhö¿!­ˆé€Ý ¯p¶ðìMU[B“xÃòál†¨áš‚C8I-N¸K ‹~DÌ}eáxËš%#«ØÇ}I“"ÔbÅ*ôŒèkX™ûV%ˆ.ê­o¡D6zÐ< öFº#XªŽòzîX ‰ˆôõ9ÁŒiB š[kwµ¬„¨‚4IœjN‘ ²Œó@`¸ .T\1m„¤Z0Xg܉U»7©G÷xÒZ ¤Ì+ý羃±^† ]+YùJÆ‘'s…Zþ˜VèÉÛØI´ I^¦I»…`*ˆ‚=ºE&¼DG Y( hÓ^iþ!bÙLÚÅ3`Jª¦OÒ‚Ñu Ýô&'ÑV$ú  0ƒ8—c"3s×l¥ ©²FŒ ðžFƒçq¬Ù ž$B½Í`Ìy2#²z5 Æg"¸°%0Tb™C&óŠŠ.1Pñ„BF5:B«Ër1¬gH1侊.㟠²½†ƒÀ‡ykØLÑ8@xÞ4.4Í…&Æ¿%á;°ÙåPƒç¿„3t9´ééÄÅ8w†à>žFOÁؾMñ‘-oq3wZUú0nøôxr8V²b`0ÜâÙÁ ØÏ)).¥llˆ N³Sv±ÒYÊ@ZX󘕤Å[þ cµå°I®kË;ÁøÊ7¾–q°§\’HB™ÀD‹PK ‰ÓÚ‹‚aü)èØ:U_¥óX‰Pf½H`Œ‡‰—W¼ç‘ö½¶7„%®HcN?G‰¾TGT÷Dç¼GˆÔ­®UUV@\§³âÙÓyEË ðŠ·0O0kb·Öåz•®…ò˜ó\‹DèA ÞS=9ûPÑen ]ã¯.]ößGµêÍÕSˆ‘wN¾:œ¥úáÿ)´J•Ãf Ú]Ú*¸ ìpž’®s׫Wp[À^ꢳmEÆB•ûJHu‹Íˆ¯¾{‹ßê8[èo‚Ø!Ü8oëŒÈþž0Ad‰.Ù'M–1T¬©£:À®aÌ è•1´º³>vÓ‹†W£àÍpTce¶êocÖ®­?FŒ¾b’ž9‹ì ¾3žóLÒñÈÕ•8‘ê¢0ÂA£§†]šÚ\ÁŠ3nŽ^Zš"/Qý"Ï„nnR«4[‡¬T¢\¶ïƒ…ÙùèÃÍ{®ò|SíaeÅR®Žd¯÷)k¸tu®Rtì°s '¹µ f°™5\b‹ôWÇ ±¼V×ë=mzÓ‡á´átíøZ "EQ_ž‰¡*ïò÷ õ6ðx,§Ôr·âš mnSkp[Æ× Œá-BK2æ ÁtD¯â,g}ŸÇ›šþâ(/O»É ؤä”-ú ÑlìÏÍT ‹ßÔUÌ‘poÅ-^ÜÙ*µ»T×™£bDïä,Ö²¬,Ýí8l&ÑÝÆ”Ó™’ ÒœnÐP@á6Þ£f½8™å>w»q•6ènÌ¿À¦ÂS KÖ)ÚrìÊ÷ÓàðPëé&»ŠédЧªb?³*)ÄÎw±Ç™>ŒW¤<æ°¯]Õév;SíýŪÛM²˜Ž¶ôr‡À7¸.ÿº:!õLø–®ûðˆw’]ßþ5sVúßa¶Á¼‘(ªßD˜F WÒ‹©Ô@S ›Ú Ÿá‡¤Ãõ:Ažg±| UÿইöáŠZEXÛx¸ó Ò¤( ásþ¯9»åª÷LõxEÅŠbÎ]êYÍ”ðº{âÝVσcnôô©_ý:Ï¢Ç!£®­ü‹n¾Ž³Ì7ž®™oÎJ¢’E`3Ç~`ý¦sNâ ]S?ÕusWÿ¢Õö`gGXƒ8rBZèMV_P'dO‰&rJÀ}ö¢|x)¥t·lã‘I8Vÿ÷=ä2 ¨·£R¡¶JU,B ä‡N*x°Æi(3XZänå„:ø<ÍöG^T8C`D§"…Ε, ¸„X6Mv6j« UW×}/s5ƒ‚!¸‚Ég+$Ó|³E†bè/{T†€|µ‚$þèf„¾ó€Ñ”‚[BBÿg/Ö‚…yø_{øHâ燂3x©O/Py”`83„ËSnå×W,åS‰"†7¯á!øó,d°iÞõ)ùWeG¶|wñ,EÄP| ¤XŠØh³àE•O‹ñ+o³Jj5l|Ò Ë¢ °E. Õ01Á‹Äæ‹Q`5?.f.ª7,ÃfK®Ó‰ÕcBº2£†„ªdÒxe!t o‡Ts·j13k&ȉØÓ3¨pJwŽc ‹˜ŽÞ¶Xý'ž‡(ãF-¶z-6Œ—wˆãG÷€AÐHnþø_ó‹ö2f_–%‚ãjÛÓJàäL^Ì4‘iƒÔ%7þ OÒõVß÷ phU! ‹¢¨èe’Þ¶@FŒaL‚dóè¨_[V‚êRT#Fˆ‡8RÜÆ XŽ+‘s²ö Ç}#Œ÷RR©”eÕ”ˆoññv‘_ bç÷‘ÀXWÉ5äÈ”`YXѸ<™‚q–qR$‘cóào]£I93Ý6—' ÜüØ'À(r|É k‰yGD¿urZ#—†)^v´ØÔp‘”T'’’¹[RdÄ1&€™™ù_ÐÀ,Šé--• F›Q„£U#f?–¤S¬Ùš¶Š¿H"åc›c'-±a›%åU].¼BÚœˆþ˜+•RxpuèuYiÝ2‡‚x õ1oÒ –k? ;ߣu¸ ßB“Çö‡kÂc3!¿9žúVžDHyp Ç…rWRve‡ÿ“)ØeŸäù?ŠIŸEô™`upH¹šO3Ÿ—7$GÚ”E” Rù?Ù“‘·YÐI"£†ZŸ zø©¡ É7‡A©#Z5ôy¢4ª2vi‡@ö=_ø–ï)<‹É~X£5Š 9š!r‘IèIø[C¤Bú¤ø Fª£IJ·â£vhtú¤P¥r¡‹º¸ßC ¦Fä¤\š¦7 ?ššÔ˜eZ¤+g¡jš¦ŠŸéA ¹r}0¥ÐcBu¨ý@_ºŽbŠ£7ª gJ§‚Ú¨óú C9Ú§E´rŽz©~À¦•ÊDa£ô±¥˜ª¡#¥ú¨ø£¥&*ª* ú§{: ªª²Ú­* _Êb³š«ô@¨ rÑOº¬#óè&¬Æz¬Èš¬Êº¬ÌÚ¬ú–;pywcs-1.12/wcslib/doxygen/cel.sed0000644001153600020070000000076612310355626021057 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} /^\*/s| celprm| #celprm|g s|PVi_\([0-4]\)a|PVi_\1a|g s|UNDEFINED|&|g s|delta_p|@f$\\delta_{\\mathrm p}@f$|g s|phi_0|@f$\\phi_0@f$|g s|phi_p|@f$\\phi_{\\mathrm p}@f$|g s|theta_0|@f$\\theta_0@f$|g s|theta_p|@f$\\theta_{\\mathrm p}@f$|g s|(lng,lat)|@f$(\\alpha,\\delta)@f$|g s|(phi,theta)|@f$(\\phi,\\theta)@f$|g s|(x,y)|@f$(x,y)@f$|g s|X-|@f$X@f$-|g s|Z-|@f$Z@f$-|g s|Z'-|@f$Z'@f$-|g s|+/-|@f$\\pm@f$|g s|\([1-9][0-9]*\) degrees|@f$\1^\\circ@f$|g pywcs-1.12/wcslib/doxygen/cel_extras.dox0000644001153600020070000000150312310355626022452 0ustar cslocumSTSCI\science00000000000000/** @def CELLEN * @brief Size of the #celprm struct in @a int units. * * Size of the #celprm struct in @a int units, used by the Fortran wrappers. */ /** @def celini_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #cel_errmsg directly now * instead. */ /** @def celprt_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #cel_errmsg directly now * instead. */ /** @def celset_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #cel_errmsg directly now * instead. */ /** @def celx2s_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #cel_errmsg directly now * instead. */ /** @def cels2x_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #cel_errmsg directly now * instead. */ pywcs-1.12/wcslib/doxygen/doxextr.l0000644001153600020070000004251412310355626021466 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: doxextr.l,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *============================================================================= * * doxextr.l is a Flex description file containing a lexical scanner definition * used to extract comments from the prologue of WCSLIB header files and * produce mark-up for doxygen. It relies on strict formatting of comments * in the header file. * * Header sections are: * - SUMMARY: Introduced by '* Summary of the {NAME} ' * where {NAME} is the name of the header file without .h suffix. * * - FUNCTION: Introduced by '* {NAME}() - ' * where {NAME} is the name of the function. * * - STRUCTURE: Introduced by '* {NAME} struct - ' or '* {NAME} union - ' * where {NAME} is the name of the struct or union. * * - DEFINE: Introduced by '* {NAME} define - ' or '* {NAME}() macro - ' * where {NAME} is the name of the preprocessor definition. * * - VARIABLE: Introduced by '* Global variable: {NAME} - ' * where {NAME} is the name of a global variable. * * It requires Flex v2.5.4 or later. * *===========================================================================*/ /* Options. */ /* %option full */ %option never-interactive %option nounput %option noyywrap %option outfile="doxextr.c" %option prefix="doxextr" /* Indentation levels. */ I " " IT {I}{5} ID {I}{10} /* Patterns. */ NAME [a-zA-Z_][a-zA-Z_0-9]* /* Optional whitespace. */ WS0 " "* /* Required whitespace. */ WS1 " "+ /* Sequence of non-whitespace characters. */ NWS [^ ]+ /* Hyphen. */ DASH {WS1}-{WS1} /* Exclusive start states. */ %x PROLOG BODY %x DEFINE FUNCTION STRUCTURE SUMMARY VARIABLE %x DEFMARK FILEMARK FNMARK STRUCTMARK UNIONMARK VARMARK %x BRIEF NOTES PARAM RETURN STRUCTVAR TABLEROW %x FLUSH PRINTE PRINTF %{ #include #include #include #define TABLE 1 #define VERBATIM 2 %} %% const int id = 24; char *(func[128]), listype[8], *(proto[128]), name[32], *param, text[128]; int ifunc, ilist, indent, listndt[8], lmore, nfunc, pass1, pcont, plist, section, special, subsection, td; void listitem(int indent, char listype[8], int listndt[8], int *ilist); void endlist(int isItem, int indent, char listype[8], int listndt[8], int *ilist); void endspecial(int *special); void printe(const char *text, const char *name); ilist = 0; listndt[0] = -1; listype[0] = '-'; lmore = 0; *name = '\0'; nfunc = 0; pass1 = 1; pcont = 0; plist = 0; section = PROLOG; special = 0; subsection = 0; td = 0; BEGIN(PROLOG); \n {} ^\/ | ^{WS1} | ^\*=+ { /* Copyright notice. */ BEGIN(FLUSH); } <*>^\*{WS0}\n\*{WS0}\n { /* Consecutive blank lines denoting the end of a section. */ if (pass1) { BEGIN(FLUSH); } else if (section != BODY) { if (section != PROLOG) { endlist(0, 0, listype, listndt, &ilist); endspecial(&special); printf("*/\n"); section = PROLOG; } BEGIN(PROLOG); } } <*>^\*=+\*\/ { /* End of prologue. */ if (pass1) { section = BODY; BEGIN(FLUSH); } else { if (section != PROLOG) { endlist(0, 0, listype, listndt, &ilist); endspecial(&special); printf("*/\n"); } return 0; } } <*>{WS0}-+\n { /* Discard underlining. */ } <*>^\*{WS0}\n { if (!pass1) { endspecial(&special); lmore = yyleng; yymore(); } } <*>^\*" " { /* First-level prologue indentation. */ if (pass1) { BEGIN(FLUSH); } else { endspecial(&special); lmore = yyleng; yymore(); } } <*>^-/\n { /* Horizontal rule. */ if (!pass1) { printf("*
\n"); } BEGIN(FLUSH); } <*>^#{WS0} { /* HTML table. */ if (pass1) { BEGIN(FLUSH); } else { if (special != TABLE) { endspecial(&special); printf("*
\n"); special = TABLE; } printf("* \n"); printf("*%s", yytext+lmore+1); td = 0; BEGIN(TABLEROW); } } <*>^=/\n | <*>^=" ".* { /* Verbatim text (code). */ if (!pass1) { if (special != VERBATIM) { endspecial(&special); printf("* @code\n"); special = VERBATIM; } printf(" %s\n", yytext+lmore+1); } BEGIN(FLUSH); } "Summary of the"{WS1} | "Summary of"{WS1} { /* The next token will be the file name. */ section = SUMMARY; BEGIN(FILEMARK); } {NAME}"()"{DASH} { /* Description of a function API. */ section = FUNCTION; subsection = 0; yyless(lmore); BEGIN(FNMARK); } {NAME}{WS1}struct{DASH} { /* Description of structure members. */ section = STRUCTURE; subsection = 0; yyless(lmore); BEGIN(STRUCTMARK); } {NAME}{WS1}union{DASH} { /* Description of union members. */ section = STRUCTURE; subsection = 0; yyless(lmore); BEGIN(UNIONMARK); } Global" "variable:" ".*{DASH} { /* Description of global variable. */ section = VARIABLE; yyless(lmore+17); BEGIN(VARMARK); } {NAME}("()")*{WS1}(define|macro){DASH} { /* Description of preprocessor definition. */ section = DEFINE; yyless(lmore); BEGIN(DEFMARK); } . { BEGIN(FLUSH); } {NAME} { printf("/** @file %s.h\n*\n", yytext); BEGIN(FLUSH); } [A-Z].{1,50}: { /* Sub-section header. */ endlist(0, 0, listype, listndt, &ilist); printf("*\n* %*s @n\n", yyleng-(lmore+1), yytext+lmore); BEGIN(FLUSH); } {WS1}"- " | {WS1}/{NWS}:\[^:] { /* Unnumbered list item. */ lmore -= 2; indent = yyleng - lmore; if (yytext[yyleng-2] == '-') { /* The two-character pattern was matched. */ indent -= 2; } endlist(1, indent, listype, listndt, &ilist); if (lmore) printf("*\n"); if (indent > listndt[ilist]) { ilist++; listndt[ilist] = indent; listype[ilist] = 'U'; printf("%-*s<%cL>\n", indent, "*", listype[ilist]); } printf("%-*s
  • ", indent, "*"); BEGIN(PRINTE); } {WS1} { lmore -= 2; indent = yyleng - lmore; endlist(0, indent, listype, listndt, &ilist); yymore(); BEGIN(PRINTE); } . { endlist(0, 0, listype, listndt, &ilist); yymore(); BEGIN(PRINTE); } {NAME} { strcpy(name, yytext); for (ifunc = 0; ifunc < nfunc; ifunc++) { if (strcmp(yytext, func[ifunc]) == 0) { printf("\n/** @fn %s\n*\n", proto[ifunc]); break; } } if (ifunc == nfunc) { printf("\n/** @fn %s\n*\n", yytext); } } "()"{DASH} { BEGIN(BRIEF); } Given: { printf("*\n"); subsection = PARAM; param = "in"; BEGIN(FLUSH); } "Given and returned:" { printf("*\n"); subsection = PARAM; param = "in,out"; BEGIN(FLUSH); } Returned: { printf("*\n"); subsection = PARAM; param = "out"; BEGIN(FLUSH); } "Function return value:" { printf("*\n"); subsection = RETURN; BEGIN(FLUSH); } "Notes:" { printf("*\n* @b Notes: @n\n"); subsection = NOTES; ilist = 0; BEGIN(FLUSH); } {I} { if (!subsection || subsection == NOTES) { /* Lists in the function prologue or notes section. */ lmore = yyleng; yymore(); } if (subsection) BEGIN(subsection); } . { yymore(); BEGIN(PRINTE); } [a-zA-Z].{17}" ".* | "..."" "{7}.{8}" ".* { if (pcont) { printf("%s\n%-*s", strtok(yytext, " "), id, "*"); pcont = 0; } else { sprintf(text, "* @param[%s] %s ", param, strtok(yytext, " ")); printf("%-24s", text); } printe(yytext+20, name); plist = 0; BEGIN(FLUSH); } ({NAME},)+{WS0} { if (pcont) { printf("%s", yytext); } else { printf("* @param[%s] %s", param, yytext); pcont = 1; } plist = 0; BEGIN(FLUSH); } {NAME}(,{NAME})? { if (pcont) { pcont = 0; } else { printf("* @param[%s] ", param); } printf("%s\n", yytext); plist = 0; BEGIN(FLUSH); } {IT}[a-z].* { pcont = 0; printe(yytext+20, name); BEGIN(FLUSH); } {IT}[a-z].{6}" ".* { /* Function return type. */ printf("* @return "); printe(yytext+20, name); plist = 0; BEGIN(FLUSH); } {IT}[a-z].* { /* Function return type. */ printf("* @return\n"); plist = 0; BEGIN(FLUSH); } {ID}" "[-1].*:{WS1}.* { /* Status return value, less than 0 or greater than 9. */ if (lmore > 2) printf("* @n\n"); printf("%-*s- ", id, "*"); printe(yytext+(id-3), name); plist = 1; BEGIN(FLUSH); } {ID}" ".*:{WS1}.* { /* List of parameter or status return values. */ if (lmore > 2) printf("* @n\n"); printf("%-*s- ", id, "*"); printe(yytext+(id-2), name); plist = 1; BEGIN(FLUSH); } {ID}" ".* { /* List of parameter or status return values. */ if (lmore > 2) printf("* @n\n"); printf("* "); printe(yytext, name); BEGIN(FLUSH); } {ID}.* { /* List of parameter or status return values. */ if (plist) { printf("%-*s.\n", id, "*"); plist = 0; } else if (lmore > 2) { printf("* @n\n"); } printf("* "); printe(yytext, name); BEGIN(FLUSH); } {WS0}-" " | {WS0}[1-9a-z]:" " { /* List item. */ lmore -= 4; indent = yyleng - lmore; if (yytext[yyleng-2] == '-') { /* The two-character pattern was matched. */ indent -= 2; } else { /* The three-character pattern was matched. */ indent -= 3; } endlist(1, indent, listype, listndt, &ilist); if (lmore) printf("*\n"); listitem(indent, listype, listndt, &ilist); BEGIN(PRINTE); } {WS1} { lmore -= 4; indent = yyleng - lmore; endlist(0, indent, listype, listndt, &ilist); yymore(); BEGIN(PRINTE); } . { endlist(0, 4, listype, listndt, &ilist); yymore(); BEGIN(PRINTE); } {NAME} { strcpy(name, yytext); printf("\n/** @struct %s\n*\n", yytext); } {WS1}struct{DASH} { BEGIN(BRIEF); } {NAME} { strcpy(name, yytext); printf("\n/** @union %s\n*\n", yytext); } {WS1}union{DASH} { BEGIN(BRIEF); } {I}(char|int|long|double|struct{WS1}{NAME}|union) { endlist(0, 0, listype, listndt, &ilist); printf("*/\n"); printf("\n/** @var %s", yytext+lmore+2); BEGIN(STRUCTVAR); } {I}{I}{WS0}-" " | {I}{I}{WS0}[0-9a-z]:" " { /* Start of list. */ lmore -= 2; indent = yyleng - lmore; if (yytext[yyleng-2] == '-') { /* The two-character pattern was matched. */ indent -= 2; } else { /* The three-character pattern was matched. */ indent -= 3; } endlist(1, indent, listype, listndt, &ilist); if (lmore) printf("*\n"); listitem(indent, listype, listndt, &ilist); BEGIN(PRINTE); } {WS1} { lmore -= 2; indent = yyleng - lmore; endlist(0, indent, listype, listndt, &ilist); yymore(); BEGIN(PRINTE); } . { endlist(0, 0, listype, listndt, &ilist); yymore(); BEGIN(PRINTE); } (\*{WS1}|{WS1}\*?) { printf("%s", yytext); } {NAME}, { printf("%s::%s\n*\n* (See next ...)\n", name, yytext); BEGIN(FLUSH); } {NAME} { printf("%s::%s\n*\n", name, yytext); BEGIN(FLUSH); } "(*"{NAME}")" { printf("(*%s::%s\n*\n", name, yytext+2); BEGIN(FLUSH); } .*{DASH} { printf("\n/** @var %.*s\n*\n", yyleng-3, yytext); BEGIN(BRIEF); } . { yymore(); BEGIN(PRINTE); } {NAME} { strcpy(name, yytext); printf("\n/** @def %s\n*\n", yytext); } ("()")*{WS1}(define|macro){DASH} { BEGIN(BRIEF); } . { yymore(); BEGIN(PRINTE); } . { if (!td) { printf("
  • %s", yytext); td = 0; } \n { if (td) printf("\n"); td = 0; printf("* \n"); yyless(0); BEGIN(FLUSH); } ^(void|int|double){WS1}{NAME}{WS0}\([^)]* { proto[nfunc] = malloc((yyleng+2)*sizeof(char)); sprintf(proto[nfunc], "%s)", yytext); func[nfunc] = malloc(16*sizeof(char)); strtok(yytext, " "); strcpy(func[nfunc], strtok(0x0, " (")); nfunc++; BEGIN(FLUSH); } ^. { BEGIN(FLUSH); } \n {} .* { printf("* @brief %s.\n*\n", yytext); BEGIN(FLUSH); } .* { printe(yytext, name); BEGIN(FLUSH); } .* { printf("%s\n", yytext); BEGIN(FLUSH); } .*\n { /* Throw away the rest of the line and begin the next cycle. */ lmore = 0; BEGIN(section); } <> { if (pass1) { lmore = 0; *name = '\0'; pass1 = 0; section = PROLOG; subsection = 0; BEGIN(PROLOG); rewind(yyin); yyrestart(yyin); } else { printf("*/\n"); return 0; } } %% /*---------------------------------------------------------------------------- * Output a list item, starting a new list if necessary. *---------------------------------------------------------------------------*/ void listitem( int indent, char listype[8], int listndt[8], int *ilist) { if (indent > listndt[*ilist]) { (*ilist)++; listndt[*ilist] = indent; if (yytext[yyleng-2] == '-') { listype[*ilist] = 'U'; } else { listype[*ilist] = 'O'; } if (yytext[yyleng-3] == 'a') { printf("%-*s\n", indent, "*"); } else { printf("%-*s<%cL>\n", indent, "*", listype[*ilist]); } } printf("%-*s
  • ", indent, "*"); } /*---------------------------------------------------------------------------- * Finish any lists. *---------------------------------------------------------------------------*/ void endlist( int isItem, int indent, char listype[8], int listndt[8], int *ilist) { /* Plain text at the same level of indentation as an item tag signals */ /* end-of-list. */ while (*ilist && (indent < listndt[*ilist] || (indent == listndt[*ilist] && !isItem))) { printf("%-*s\n", listndt[*ilist], "*", listype[*ilist]); (*ilist)--; } } /*---------------------------------------------------------------------------- * Finish tables or code sections. *---------------------------------------------------------------------------*/ void endspecial( int *special) { if (*special) { if (*special == TABLE) { printf("*
  • "); td = 1; } printf("%s", yytext); } " "{2,} { printf("

    \n"); } else if (*special == VERBATIM) { printf("* @endcode\n"); } *special = 0; } } /*---------------------------------------------------------------------------- * Print text with name escaped by '%' to prevent a document reference. *---------------------------------------------------------------------------*/ void printe(const char *text, const char *name) { char *cp; int len; if ((len = strlen(name))) { while ((cp = strstr(text, name))) { if (cp > text && (*(cp-1) == '_' || ('a' <= *(cp-1) && *(cp-1) <= 'z') || ('A' <= *(cp-1) && *(cp-1) <= 'Z'))) { /* Not a match. */ printf("%.*s", cp-text+len, text); } else { if (*(cp+len) == ':' && *(cp+len+1) == ':') { // Allow references to struct members. printf("%.*s", cp-text+len, text); } else { // Disallow a reference and use bold font. printf("%.*s@b %%%s", cp-text, text, name); } } text = cp + len; } } printf("%s\n", text); } /*--------------------------------------------------------------------------*/ int main(int argc, char *argv[]) { /* Check inputs. */ if (argc != 2) { fprintf(stderr, "Usage: doxextr
    \n"); return 1; } /* Check accessibility of the input file. */ if (access(argv[1], R_OK) == -1) { perror(argv[1]); return 1; } if ((yyin = fopen(argv[1], "r")) == NULL) { perror(argv[1]); return 1; } /* Set line buffering in case stdout is redirected to a file, otherwise * stdout and stderr messages will be jumbled (stderr is unbuffered). */ setvbuf(stdout, NULL, _IOLBF, 0); return yylex(); } pywcs-1.12/wcslib/doxygen/doxextr.sed0000644001153600020070000000340312310355626022000 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} s|("given")|(given)|g s|("returned")|(returned)|g s|(Given)|(Given)|g s|(Given & returned)|(Given \& returned)|g s|(Returned)|(Returned)|g /^\*/s|"|\"|g # All standard. s|BITPIX|&|g s|CDELTia|CDELTia|g s|CNAMEia|CNAMEia|g s|\([^_]\)COMMENT|\1COMMENT|g s|CRDERia|CRDERia|g s|CRPIXja|CRPIXja|g s|CRVALia|CRVALia|g s|CSYERia|CSYERia|g s|CTYPEia|CTYPEia|g s|CUNITia|CUNITia|g s|DATE-AVG|&|g s|DATE-OBS|&|g s|END|&|g s|EQUINOXa|EQUINOXa|g s|EXTLEV|&|g s|EXTNAME|&|g s|EXTVER|&|g s|HISTORY|&|g s|LATPOLEa|LATPOLEa|g s|LONPOLEa|LONPOLEa|g s|MJD-AVG|&|g s|MJD-OBS|&|g s|NAXIS|&|g s|OBSGEO-[XYZ]|&|g s|RADESYSa|RADESYSa|g s|RESTFRQa|RESTFRQa|g s|RESTWAVa|RESTWAVa|g s|SIMPLE|&|g s|SPECSYSa|SPECSYSa|g s|SSYSOBSa|SSYSOBSa|g s|SSYSSRCa|SSYSSRCa|g s|TTYPEn|TTYPEn|g s|VELOSYSa|VELOSYSa|g s|WCSAXESa|WCSAXESa|g s|WCSNAMEa|WCSNAMEa|g s|VELANGLa|VELANGLa|g s|ZSOURCEa|ZSOURCEa|g s|PCi_ja|PCi_ja|g s|CDi_ja|CDi_ja|g s|PSi_ma|PSi_ma|g s|PVi_ma|PVi_ma|g s|PLEASE NOTE:|&|g # To prevent " -> " above. s||
      |g s|-||g pywcs-1.12/wcslib/doxygen/Doxyfile0000644001153600020070000014427512310355626021331 0ustar cslocumSTSCI\science00000000000000# Doxyfile 1.5.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a 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 (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "WCSLIB 4.10" # 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 = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # 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 # 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 cause performance problems for the file system. CREATE_SUBDIRS = 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. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, # Italian, Japanese, Japanese-en (Japanese with English messages), Korean, # Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, # Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) 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. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) 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. REPEAT_BRIEF = NO # 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" "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. 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. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then 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. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then 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. STRIP_FROM_PATH = # 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 include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # 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. 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 # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_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 behaviour. # 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 behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. 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. 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. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" 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:". # You can put \n's in the value part of an alias to insert newlines. 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. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # 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); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # 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. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) 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. SUBGROUPING = YES #--------------------------------------------------------------------------- # 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 and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # 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. EXTRACT_LOCAL_CLASSES = NO # This flag is only useful for Objective-C code. When 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 (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) 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. 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 (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. 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 (the default) these blocks will be appended to the # function's detailed documentation block. 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 (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) 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. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = 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 default), 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. SORT_BY_SCOPE_NAME = 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. 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. 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. 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. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of 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 initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. 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. SHOW_USED_FILES = NO # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # 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 , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED 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. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = YES # 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) WARN_FORMAT = "$file:$line: $text" # 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 stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be 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. INPUT = . ../C # If the value of the INPUT tag contains directories, you can use the # FILE_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 the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # 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. EXCLUDE = getwcstab.h wcsutil.h ../C/wcslib.h # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. 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 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 = # 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. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = . # 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. 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 # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # 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 also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # 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 documentstion. REFERENCES_LINK_SOURCE = 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 http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) 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. 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. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. 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. If left blank `html' will be used as the default path. 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). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. 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 the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, 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. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, 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. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, 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. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag 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 (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # 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. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = latexsym # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = wcslib.tag # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a caller dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected # functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that a graph may be further truncated if the graph's # image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH # and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), # the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO pywcs-1.12/wcslib/doxygen/fitshdr.sed0000644001153600020070000000043012310355626021743 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} /^\*/s| fitskey| #fitskey|g s|CONTINUE|&|g s|END|&|g s|ABCD.*89-_|&|g s|"= "|''= ''|g s|'='|'='|g s|'/'|'/'|g s|'&'|'\&'|g s|(')|(')|g pywcs-1.12/wcslib/doxygen/fitshdr_extras.dox0000644001153600020070000000306612310355626023360 0ustar cslocumSTSCI\science00000000000000/** @def FITSHDR_KEYWORD * @brief Flag bit indicating illegal keyword syntax. * * Bit mask for the status flag bit-vector returned by fitshdr() indicating * illegal keyword syntax. */ /** @def FITSHDR_KEYVALUE * @brief Flag bit indicating illegal keyvalue syntax. * * Bit mask for the status flag bit-vector returned by fitshdr() indicating * illegal keyvalue syntax. */ /** @def FITSHDR_COMMENT * @brief Flag bit indicating illegal keycomment syntax. * * Bit mask for the status flag bit-vector returned by fitshdr() indicating * illegal keycomment syntax. */ /** @def FITSHDR_KEYREC * @brief Flag bit indicating illegal keyrecord. * * Bit mask for the status flag bit-vector returned by fitshdr() indicating * an illegal keyrecord, e.g. an END keyrecord with trailing text. */ /** @def FITSHDR_CARD * @brief Deprecated. * * @deprecated Added for backwards compatibility, use FITSHDR_KEYREC * instead. */ /** @def FITSHDR_TRAILER * @brief Flag bit indicating keyrecord following a valid END keyrecord. * * Bit mask for the status flag bit-vector returned by fitshdr() indicating * a keyrecord following a valid END keyrecord. */ /** @typedef int64 * @brief 64-bit signed integer data type. * * 64-bit signed integer data type defined via preprocessor macro WCSLIB_INT64 * which may be defined in wcsconfig.h. For example * * @code * #define WCSLIB_INT64 long long int * @endcode * * This is typedef'd in fitshdr.h as * * @code * #ifdef WCSLIB_INT64 * typedef WCSLIB_INT64 int64; * #else * typedef int int64[3]; * #endif * @endcode * * See fitskey::type. */ pywcs-1.12/wcslib/doxygen/getwcstab.sed0000644001153600020070000000015012310355626022262 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} /^\*/s| wtbarr| #wtbarr|g /^\*/s| #wtbarr_s| wtbarr_s|g s|'TAB'|'TAB'|g pywcs-1.12/wcslib/doxygen/GNUmakefile0000644001153600020070000000443112310355626021662 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # GNU makefile for building the documentation for WCSLIB 4.10 # # Summary of the main targets # --------------------------- # build: Invoke 'doxygen' etc. to compile the documentation. # clean: Delete rubbish files. # cleaner (distclean or realclean): clean, and also delete intermediate # files. # cleanest: cleaner, and also delete the generated documentation. # # Notes: # 1) If you need to make changes then preferably modify ../makedefs.in # instead and re-run configure. # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: GNUmakefile,v 4.10 2012/02/05 23:41:45 cal103 Exp $ #----------------------------------------------------------------------------- # Get configure settings. include ../makedefs DOXHDRS := $(notdir $(wildcard ../C/*.h)) DOXMARX := $(DOXHDRS:.h=.dox) EXTRADOX := mainpage.dox $(wildcard *_extras.dox) # Pattern rules #-------------- %.dox : ../C/%.h doxextr doxextr.sed %.sed Doxyfile -@ echo '' @ if [ -f $*.sed ] ; then \ echo "doxextr $< | sed -f $*.sed | sed -f doxextr.sed > $@" ; \ ./doxextr $< | sed -f $*.sed | sed -f doxextr.sed > $@ ; \ else \ echo "doxextr $< | sed -f doxextr.sed > $@" ; \ ./doxextr $< | sed -f doxextr.sed > $@ ; \ fi %.c : %.l -@ echo '' -@ $(RM) $@ $(FLEX) $(FLFLAGS) -t $< | sed -e 's/^[ ]*#/#/' > $@ % : %.c -@ echo '' $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< # Don't fret if there's no specific sed script. %.sed : ; # Static rules #------------- .PHONY : all clean cleaner cleanest distclean html pdf realclean build : doxextr html pdf html : ../html/index.html pdf : ../wcslib.pdf ../wcslib.pdf : latex/refman.tex $(MAKE) -C latex refman.pdf -@ $(RM) $@ mv latex/refman.pdf $@ ../html/index.html latex/refman.tex : doxextr wcslib.h -@ echo '' doxygen wcslib.h : $(DOXMARX) $(EXTRADOX) @ cat ../C/wcslib.h *.dox > $@ clean : - $(RM) core cleaner distclean realclean : clean - $(RM) doxextr wcslib.h - $(RM) $(DOXMARX) - $(RM) wcslib.tag - $(RM) -r ./latex cleanest : cleaner - $(RM) -r ../html ../wcslib.pdf GNUmakefile : ../makedefs ; ../makedefs : ../makedefs.in cd .. && ./config.status pywcs-1.12/wcslib/doxygen/lin.sed0000644001153600020070000000005112310355626021061 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} /^\*/s| linprm| #linprm|g pywcs-1.12/wcslib/doxygen/lin_extras.dox0000644001153600020070000000343512310355626022477 0ustar cslocumSTSCI\science00000000000000/** @def LINLEN * @brief Size of the #linprm struct in @a int units. * * Size of the #linprm struct in @a int units, used by the Fortran wrappers. */ /** @def linini_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #lin_errmsg directly now * instead. */ /** @def lincpy_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #lin_errmsg directly now * instead. */ /** @def linfree_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #lin_errmsg directly now * instead. */ /** @def linprt_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #lin_errmsg directly now * instead. */ /** @def linset_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #lin_errmsg directly now * instead. */ /** @def linp2x_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #lin_errmsg directly now * instead. */ /** @def linx2p_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #lin_errmsg directly now * instead. */ /** @fn matinv(int n, const double mat[], double inv[]) * * @brief Matrix inversion. * * @b %matinv() performs matrix inversion using LU-triangular factorization * with scaled partial pivoting. * * @param[in] n Order of the matrix (\f$n \times n\f$). * * @param[in] mat Matrix to be inverted, stored as mat[\f$i n + j\f$] * where \f$i\f$ and \f$j\f$ are the row and column * indices respectively. * * @param[out] inv Inverse of mat with the same storage convention. * * @return Status return value: * - 0: Success. * - 2: Memory allocation failed. * - 3: Singular matrix. */ pywcs-1.12/wcslib/doxygen/mainpage.dox0000644001153600020070000013202612310355626022107 0ustar cslocumSTSCI\science00000000000000/** @mainpage WCSLIB 4.10 and PGSBOX 4.10 @image html Bonne.gif "Bonne's projection" @section contents Contents - @subpage intro - @subpage software - @subpage overview - @subpage structs - @subpage memory - @subpage diagnostics - @subpage vector - @subpage threads - @subpage testing - @subpage fortran - @subpage pgsbox @section copyright Copyright @verbatim WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA @endverbatim */ /** @page intro Introduction WCSLIB is a C library, supplied with a full set of Fortran wrappers, that implements the "World Coordinate System" (WCS) standard in FITS (Flexible Image Transport System). It also includes a @ref software "PGPLOT"-based routine, @ref pgsbox "PGSBOX", for drawing general curvilinear coordinate graticules and a number of utility programs. The FITS data format is widely used within the international astronomical community, from the radio to gamma-ray regimes, for data interchange and archive, and also increasingly as an online format. It is described in - "Definition of The Flexible Image Transport System (FITS)", FITS Standard, Version 3.0, 2008 July 10. available from the FITS Support Office at http://fits.gsfc.nasa.gov. The FITS WCS standard is described in - "Representations of world coordinates in FITS" (Paper I), Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061-1075 - "Representations of celestial coordinates in FITS" (Paper II), Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077-1122 - "Representations of spectral coordinates in FITS" (Paper III), Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. 2006, A&A, 446, 747 - "Mapping on the HEALPix Grid" (HPX), Calabretta, M.R., & Roukema, B.F. 2007, MNRAS, 381, 865 Reprints of all published papers may be obtained from NASA's Astrophysics Data System (ADS), http://adsabs.harvard.edu/. Reprints of Papers I, II (+HPX) and III are available from http://www.atnf.csiro.au/~mcalabre/. This site also includes errata and supplementary material for Papers I, II and III. Additional information on all aspects of FITS and its various software implementations may be found at the FITS Support Office http://fits.gsfc.nasa.gov. */ /** @page software FITS-WCS and related software Several implementations of the FITS WCS standards are available: - The @ref overview "WCSLIB" software distribution (i.e. this library) may be obtained from http://www.atnf.csiro.au/~mcalabre/WCS/. The remainder of this manual describes its use. - @b wcstools, developed by Doug Mink, may be obtained from http://tdc-www.harvard.edu/software/wcstools/. - @b AST, developed by David Berry within the U.K. Starlink project, http://www.starlink.ac.uk/ast/ and now supported by JAC, Hawaii http://starlink.jach.hawaii.edu/starlink/. @n@n A useful utility for experimenting with FITS WCS descriptions (similar to @a wcsgrid) is also provided; go to the above site and then look at the section entitled "FITS-WCS Plotting Demo". - @b SolarSoft, http://sohowww.nascom.nasa.gov/solarsoft/, primarily an IDL-based system for analysis of Solar physics data, contains a module written by Bill Thompson oriented towards Solar coordinate systems, including spectral, http://sohowww.nascom.nasa.gov/solarsoft/gen/idl/wcs/. - The IDL Astronomy Library, http://idlastro.gsfc.nasa.gov/, contains an independent implementation of FITS-WCS in IDL by Rick Balsano, Wayne Landsman and others. See http://idlastro.gsfc.nasa.gov/contents.html#C5. Python wrappers to @ref overview "WCSLIB" are provided by - The Kapteyn Package http://www.astro.rug.nl/software/kapteyn/ by Hans Terlouw and Martin Vogelaar. - pywcs, http://stsdas.stsci.edu/astrolib/pywcs/ by Michael Droettboom. Java is supported via - CADC/CCDA Java Native Interface (JNI) bindings to @ref overview "WCSLIB" 4.2 http://www.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/cadc/source/ by Patrick Dowler. Recommended WCS-aware FITS image viewers: - Bill Joye's DS9, http://hea-www.harvard.edu/RD/ds9/, and - Fv by Pan Chai, http://heasarc.gsfc.nasa.gov/ftools/fv/. both handle 2-D images. Currently (2012/01/24) I know of no image viewers that handle 1-D spectra properly nor multi-dimensional data, not even multi-dimensional data with only two non-degenerate image axes (please inform me if you know otherwise). Pre-built @ref overview "WCSLIB" packages are available, generally a little behind the main release (this list will probably be out-of-date by the time you read it, best do a web search): - Fedora (RPM), https://admin.fedoraproject.org/pkgdb/packages/name/wcslib. - Fresh Ports (RPM), http://www.freshports.org/astro/wcslib/. - Gentoo, http://packages.gentoo.org/package/sci-astronomy/wcslib. - RPM (general) http://v2.www.rpmseek.com/cat/Libraries.html?hl=com&cx=591:W. Bill Pence's general FITS IO library, CFITSIO is available from http://heasarc.gsfc.nasa.gov/fitsio/. It is used optionally by some of the high-level WCSLIB test programs and is required by two of the utility programs. PGPLOT, Tim Pearson's Fortran plotting package on which @ref pgsbox "PGSBOX" is based, also used by some of the WCSLIB self-test suite and a utility program, is available from http://astro.caltech.edu/~tjp/pgplot/. */ /** @page overview Overview of WCSLIB WCSLIB is documented in the prologues of its header files which provide a detailed description of the purpose of each function and its interface (this material is, of course, used to generate the doxygen manual). Here we explain how the library as a whole is structured. We will normally refer to WCSLIB 'routines', meaning C functions or Fortran 'subroutines', though the latter are actually wrappers implemented in C. WCSLIB is layered software, each layer depends only on those beneath; understanding WCSLIB first means understanding its stratigraphy. There are essentially three levels, though some intermediate levels exist within these: - The top layer consists of routines that provide the connection between FITS files and the high-level WCSLIB data structures, the main function being to parse a FITS header, extract WCS information, and copy it into a wcsprm struct. The lexical parsers among these are implemented as Flex descriptions (source files with .l suffix) and the C code generated from these by Flex is included in the source distribution. - wcshdr.h,c -- Routines for constructing wcsprm data structures from information in a FITS header and conversely for writing a wcsprm struct out as a FITS header. - wcspih.l -- Flex implementation of wcspih(), a lexical parser for WCS "keyrecords" in an image header. A @b @e keyrecord (formerly called "card image") consists of a @b @e keyword, its value - the @b @e keyvalue - and an optional comment, the @b @e keycomment. - wcsbth.l -- Flex implementation of wcsbth() which parses binary table image array and pixel list headers in addition to image array headers. - getwcstab.h,c -- Implementation of a -TAB binary table reader in @ref software "CFITSIO". . @n A generic FITS header parser is also provided to handle non-WCS keyrecords that are ignored by wcspih(): - fitshdr.h,l -- Generic FITS header parser (not WCS-specific). . @n The philosophy adopted for dealing with non-standard WCS usage is to translate it at this level so that the middle- and low-level routines need only deal with standard constructs: - wcsfix.h,c -- Translator for non-standard FITS WCS constructs (uses wcsutrne()). - wcsutrn.l -- Lexical translator for non-standard units specifications. . @n As a concrete example, within this layer the @c CTYPEia keyvalues would be extracted from a FITS header and copied into the @a ctype[] array within a wcsprm struct. None of the header keyrecords are interpreted. - The middle layer analyses the WCS information obtained from the FITS header by the top-level routines, identifying the separate steps of the WCS algorithm chain for each of the coordinate axes in the image. It constructs the various data structures on which the low-level routines are based and invokes them in the correct sequence. Thus the wcsprm struct is essentially the glue that binds together the low-level routines into a complete coordinate description. - wcs.h,c -- Driver routines for the low-level routines. - wcsunits.h,c -- Unit conversions (uses wcsulexe()). - wcsulex.l -- Lexical parser for units specifications. . @n To continue the above example, within this layer the @a ctype[] keyvalues in a wcsprm struct are analysed to determine the nature of the coordinate axes in the image. - Applications programmers who use the top- and middle-level routines generally need know nothing about the low-level routines. These are essentially mathematical in nature and largely independent of FITS itself. The mathematical formulae and algorithms cited in the WCS Papers, for example the spherical projection equations of Paper II and the lookup-table methods of Paper III, are implemented by the routines in this layer, some of which serve to aggregate others: - cel.h,c -- Celestial coordinate transformations, combines prj.h,c and sph.h,c. - spc.h,c -- Spectral coordinate transformations, combines transformations from spx.h,c. . @n The remainder of the routines in this level are independent of everything other than the grass-roots mathematical functions: - lin.h,c -- Linear transformation matrix. - log.h,c -- Logarithmic coordinates. - prj.h,c -- Spherical projection equations. - sph.h,c -- Spherical coordinate transformations. - spx.h,c -- Basic spectral transformations. - tab.h,c -- Coordinate lookup tables. . @n As the routines within this layer are quite generic, some, principally the implementation of the spherical projection equations, have been used in other packages (AST, wcstools) that provide their own implementations of the functionality of the top and middle-level routines. - At the grass-roots level there are a number of mathematical and utility routines. @n@n When dealing with celestial coordinate systems it is often desirable to use an angular measure that provides an exact representation of the latitude of the north or south pole. The WCSLIB routines use the following trigonometric functions that take or return angles in degrees: - cosd(), sind(), sincosd(), tand(), acosd(), asind(), atand(), atan2d() . @n These "trigd" routines are expected to handle angles that are a multiple of @f$90^\circ@f$ returning an exact result. Some C implementations provide these as part of a system library and in such cases it may (or may not!) be preferable to use them. wcstrig.c provides wrappers on the standard trig functions based on radian measure, adding tests for multiples of @f$90^\circ@f$. @n@n However, wcstrig.h also provides the choice of using preprocessor macro implementations of the trigd functions that don't test for multiples of @f$90^\circ@f$ (compile with @c -DWCSTRIG_MACRO). These are typically 20% faster but may lead to problems near the poles. - wcsmath.h -- Defines mathematical and other constants. - wcstrig.h,c -- Various implementations of trigd functions. - wcsutil.h,c -- Simple utility functions for string manipulation, etc. used by WCSLIB. Complementary to the C library, a set of wrappers are provided that allow all WCSLIB C functions to be called by Fortran programs, see below. Plotting of coordinate graticules is one of the more important requirements of a world coordinate system. WCSLIB provides a @ref software "PGPLOT"-based subroutine, @ref pgsbox "PGSBOX" (Fortran), which handles general curvilinear coordinates via a user-supplied function - @c PGWCSL provides the interface to WCSLIB. A C wrapper, @a cpgsbox(), is also provided, see below. Several utility programs are distributed with WCSLIB: - @a wcsgrid extracts the WCS keywords for an image from the specified FITS file and uses @a cpgsbox() to plot a 2-D coordinate graticule for it. It requires WCSLIB, @ref pgsbox "PGSBOX" and @ref software "CFITSIO". - @a wcsware extracts the WCS keywords for an image from the specified FITS file and constructs wcsprm structs for each coordinate representation found. The structs may then be printed or used to transform pixel coordinates to world coordinates. It requires WCSLIB and @ref software "CFITSIO". - @a HPXcvt reorganises HEALPix data into a 2-D FITS image with HPX coordinate system. The input data may be stored in a FITS file as a primary image or image extension, or as a binary table extension. Both NESTED and RING pixel indices are supported. It uses @ref software "CFITSIO". - @a fitshdr lists headers from a FITS file specified on the command line, or else on stdin, printing them as 80-character keyrecords without trailing blanks. It is independent of WCSLIB. */ /** @page structs WCSLIB data structures The WCSLIB routines are based on data structures specific to them: wcsprm for the wcs.h,c routines, celprm for cel.h,c, and likewise spcprm, linprm, prjprm and tabprm, with struct definitions contained in the corresponding header files: wcs.h, cel.h, etc. The structs store the parameters that define a coordinate transformation and also intermediate values derived from those parameters. As a high-level object, the wcsprm struct contains linprm, tabprm, spcprm, and celprm structs, and in turn the celprm struct contains a prjprm struct. Hence the wcsprm struct contains everything needed for a complete coordinate description. Applications programmers who use the top- and middle-level routines generally only need to pass wcsprm structs from one routine that fills them to another that uses them. However, since these structs are fundamental to WCSLIB it is worthwhile knowing something about the way they work. Three basic operations apply to all WCSLIB structs: - Initialize. Each struct has a specific initialization routine, e.g. wcsini(), celini(), spcini(), etc. These allocate memory (if required) and set all struct members to default values. - Fill in the required values. Each struct has members whose values must be provided. For example, for wcsprm these values correspond to FITS WCS header keyvalues as are provided by the top-level header parsing routine, wcspih(). - Compute intermediate values. Specific setup routines, e.g. wcsset(), celset(), spcset(), etc., compute intermediate values from the values provided. In particular, wcsset() analyses the FITS WCS keyvalues provided, fills the required values in the lower-level structs contained in wcsprm, and invokes the setup routine for each of them. Each struct contains a @a flag member that records its setup state. This is cleared by the initialization routine and checked by the routines that use the struct; they will invoke the setup routine automatically if necessary, hence it need not be invoked specifically by the application programmer. However, if any of the required values in a struct are changed then either the setup routine must be invoked on it, or else the @a flag must be zeroed to signal that the struct needs to be reset. The initialization routine may be invoked repeatedly on a struct if it is desired to reuse it. However, the @a flag member of structs that contain allocated memory (wcsprm, linprm and tabprm) must be set to -1 before the first initialization to initialize memory management, but not subsequently or else memory leaks will result. Each struct has one or more service routines: to do deep copies from one to another, to print its contents, and to free allocated memory. Refer to the header files for a detailed description. */ /** @page memory Memory management The initialization routines for certain of the WCSLIB data structures allocate memory for some of their members: - wcsini() optionally allocates memory for the @a crpix, @a pc, @a cdelt, @a crval, @a cunit, @a ctype, @a pv, @a ps, @a cd, @a crota, @a colax, @a cname, @a crder, and @a csyer arrays in the wcsprm struct (using linini() for certain of these). Note that wcsini() does not allocate memory for the @a tab array - refer to the usage notes for wcstab() in wcshdr.h. If the @a pc matrix is not unity, wcsset() (via linset()) also allocates memory for the @a piximg and @a imgpix arrays. - linini(): optionally allocates memory for the @a crpix, @a pc, and @a cdelt arrays in the linprm struct. If the @a pc matrix is not unity, linset() also allocates memory for the @a piximg and @a imgpix arrays. Typically these would be used by wcsini() and wcsset(). - tabini(): optionally allocates memory for the @a K, @a map, @a crval, @a index, and @a coord arrays (including the arrays referenced by @a index[]) in the tabprm struct. tabmem() takes control of any of these arrays that may have been allocated by the user, specifically in that tabfree() will then free it. tabset() also allocates memory for the @a sense, @a p0, @a delta and @a extrema arrays. The caller may load data into these arrays but must not modify the struct members (i.e. the pointers) themselves or else memory leaks will result. wcsini() maintains a record of memory it has allocated and this is used by wcsfree() which wcsini() uses to free any memory that it may have allocated on a previous invokation. Thus it is not necessary for the caller to invoke wcsfree() separately if wcsini() is invoked repeatedly on the same wcsprm struct. Likewise, wcsset() deallocates memory that it may have allocated on a previous invokation. The same comments apply to linini(), linfree(), and linset() and to tabini(), tabfree(), and tabset(). A memory leak will result if a wcsprm, linprm or tabprm struct goes out of scope before the memory has been @a free'd, either by the relevant routine, wcsfree(), linfree() or tabfree(), or otherwise. Likewise, if one of these structs itself has been @a malloc'd and the allocated memory is not @a free'd when the memory for the struct is @a free'd. A leak may also arise if the caller interferes with the array pointers in the "private" part of these structs. Beware of making a shallow copy of a wcsprm, linprm or tabprm struct by assignment; any changes made to allocated memory in one would be reflected in the other, and if the memory allocated for one was @a free'd the other would reference unallocated memory. Use the relevant routine instead to make a deep copy: wcssub(), lincpy() or tabcpy(). */ /** @page diagnostics Diagnostic output All @ref overview "WCSLIB" functions return a status value, each of which is associated with a fixed error message which may be used for diagnostic output. For example @verbatim int status; struct wcsprm wcs; ... if ((status = wcsset(&wcs)) { fprintf(stderr, "ERROR %d from wcsset(): %s.\n", status, wcs_errmsg[status]); return status; } @endverbatim This might produce output like @verbatim ERROR 5 from wcsset(): Invalid parameter value. @endverbatim The error messages are provided as global variables with names of the form @a cel_errmsg, @a prj_errmsg, etc. by including the relevant header file. As of version 4.8, courtesy of Michael Droettboom @ref software "(pywcs)", WCSLIB has a second error messaging system which provides more detailed information about errors, including the function, source file, and line number where the error occurred. For example, @verbatim struct wcsprm wcs; /* Enable wcserr and send messages to stderr. */ wcserr_enable(1); wcsprintf_set(stderr); ... if (wcsset(&wcs) { wcsperr(&wcs); return wcs.err->status; } @endverbatim In this example, if an error was generated in one of the prjset() functions, wcsperr() would print an error traceback starting with wcsset(), then celset(), and finally the particular projection-setting function that generated the error. For each of them it would print the status return value, function name, source file, line number, and an error message which may be more specific and informative than the general error messages reported in the first example. For example, in response to a deliberately generated error, the @c twcs test program, which tests wcserr among other things, produces a traceback similar to this: @verbatim ERROR 5 in wcsset() at line 1564 of file wcs.c: Invalid parameter value. ERROR 2 in celset() at line 196 of file cel.c: Invalid projection parameters. ERROR 2 in bonset() at line 5727 of file prj.c: Invalid parameters for Bonne's projection. @endverbatim Each of the @ref structs "structs" in @ref overview "WCSLIB" includes a pointer, called @a err, to a wcserr struct. When an error occurs, a struct is allocated and error information stored in it. The wcserr pointers and the @ref memory "memory" allocated for them are managed by the routines that manage the various structs such as wcsini() and wcsfree(). wcserr messaging is an opt-in system enabled via wcserr_enable(), as in the example above. If enabled, when an error occurs it is the user's responsibility to free the memory allocated for the error message using wcsfree(), celfree(), prjfree(), etc. Failure to do so before the struct goes out of scope will result in memory leaks (if execution continues beyond the error). */ /** @page vector Vector API WCSLIB's API is vector-oriented. At the least, this allows the function call overhead to be amortised by spreading it over multiple coordinate transformations. However, vector computations may provide an opportunity for caching intermediate calculations and this can produce much more significant efficiencies. For example, many of the spherical projection equations are partially or fully separable in the mathematical sense, i.e. @f$ (x,y) = f(\phi) g(\theta) @f$, so if @f$ \theta @f$ was invariant for a set of coordinate transformations then @f$ g(\theta) @f$ would only need to be computed once. Depending on the circumstances, this may well lead to speedups of a factor of two or more. WCSLIB has two different categories of vector API: - Certain steps in the WCS algorithm chain operate on coordinate vectors as a whole rather than particular elements of it. For example, the linear transformation takes one or more pixel coordinate vectors, multiples by the transformation matrix, and returns whole intermediate world coordinate vectors. @n The routines that implement these steps, wcsp2s(), wcss2p(), linp2x(), linx2p(), tabx2s(), and tabs2x(), accept and return two-dimensional arrays, i.e. a number of coordinate vectors. Because WCSLIB permits these arrays to contain unused elements, three parameters are needed to describe them: - @a naxis: the number of coordinate elements, as per the FITS @c NAXIS or @c WCSAXES keyvalues, - @a ncoord: the number of coordinate vectors, - @a nelem: the total number of elements in each vector, unused as well as used. Clearly, @a nelem must equal or exceed @a naxis. (Note that when @a ncoord is unity, @a nelem is irrelevant and so is ignored. It may be set to 0.) . @a ncoord and @a nelem are specified as function arguments while @a naxis is provided as a member of the wcsprm (or linprm) struct. @n For example, wcss2p() accepts an array of world coordinate vectors, world[ncoord][nelem]. In the following example, @a naxis = 4, @a ncoord = 5, and @a nelem = 7: @verbatim s1 x1 y1 t1 u u u s2 x2 y2 t2 u u u s3 x3 y3 t3 u u u s4 x4 y4 t4 u u u s5 x5 y5 t5 u u u @endverbatim where @a u indicates unused array elements, and the array is laid out in memory as @verbatim s1 x1 y1 t1 u u u s2 x2 y2 ... @endverbatim @b Note that the stat[] vector returned by routines in this category is of length @a ncoord, as are the intermediate phi[] and theta[] vectors returned by wcsp2s() and wcss2p(). @n @b Note also that the function prototypes for routines in this category have to declare these two-dimensional arrays as one-dimensional vectors in order to avoid warnings from the C compiler about declaration of "incomplete types". This was considered preferable to declaring them as simple pointers-to-double which gives no indication that storage is associated with them. - Other steps in the WCS algorithm chain typically operate only on a part of the coordinate vector. For example, a spectral transformation operates on only one element of an intermediate world coordinate that may also contain celestial coordinate elements. In the above example, spcx2s() might operate only on the @a s (spectral) coordinate elements. @n Routines like spcx2s() and celx2s() that implement these steps accept and return one-dimensional vectors in which the coordinate element of interest is specified via a starting address, a length, and a stride. To continue the previous example, the starting address for the spectral elements is @a s1, the length is 5, and the stride is 7. @section lengths Vector lengths Routines such as spcx2s() and celx2s() accept and return either one coordinate vector, or a pair of coordinate vectors (one-dimensional C arrays). As explained above, the coordinate elements of interest are usually embedded in a two-dimensional array and must be selected by specifying a starting point, length and stride through the array. For routines such as spcx2s() that operate on a single element of each coordinate vector these parameters have a straightforward interpretation. However, for routines such as celx2s() that operate on a pair of elements in each coordinate vector, WCSLIB allows these parameters to be specified independently for each input vector, thereby providing a much more general interpretation than strictly needed to traverse an array. This is best described by illustration. The following diagram describes the situation for cels2x(), as a specific example, with nlng = 5, and nlat = 3: @verbatim lng[0] lng[1] lng[2] lng[3] lng[4] ------ ------ ------ ------ ------ lat[0] | x,y[0] x,y[1] x,y[2] x,y[3] x,y[4] lat[1] | x,y[5] x,y[6] x,y[7] x,y[8] x,y[9] lat[2] | x,y[10] x,y[11] x,y[12] x,y[13] x,y[14] @endverbatim In this case, while only 5 longitude elements and 3 latitude elements are specified, the world-to-pixel routine would calculate nlng * nlat = 15 (x,y) coordinate pairs. It is the responsibility of the caller to ensure that sufficient space has been allocated in all of the output arrays, in this case phi[], theta[], x[], y[] and stat[]. Vector computation will often be required where neither @a lng nor @a lat is constant. This is accomplished by setting @a nlat = 0 which is interpreted to mean nlat = nlng but only the matrix diagonal is to be computed. Thus, for nlng = 3 and nlat = 0 only three (x,y) coordinate pairs are computed: @verbatim lng[0] lng[1] lng[2] ------ ------ ------ lat[0] | x,y[0] lat[1] | x,y[1] lat[2] | x,y[2] @endverbatim Note how this differs from nlng = 3, nlat = 1: @verbatim lng[0] lng[1] lng[2] ------ ------ ------ lat[0] | x,y[0] x,y[1] x,y[2] @endverbatim The situation for celx2s() is similar; the x-coordinate (like @a lng) varies fastest. Similar comments can be made for all routines that accept arguments specifying vector length(s) and stride(s). (tabx2s() and tabs2x() do not fall into this category because the @c -TAB algorithm is fully N-dimensional so there is no way to know in advance how many coordinate elements may be involved.) The reason that WCSLIB allows this generality is related to the aforementioned opportunities that vector computations may provide for caching intermediate calculations and the significant efficiencies that can result. The high-level routines, wcsp2s() and wcss2p(), look for opportunities to collapse a set of coordinate transformations where one of the coordinate elements is invariant, and the low-level routines take advantage of such to cache intermediate calculations. @section strides Vector strides As explained above, the vector stride arguments allow the caller to specify that successive elements of a vector are not contiguous in memory. This applies equally to vectors given to, or returned from a function. As a further example consider the following two arrangements in memory of the elements of four (x,y) coordinate pairs together with an @a s coordinate element (e.g. spectral): - x1 x2 x3 x4 y1 y2 y3 y4 s1 s2 s3 s4 @n the address of x[] is @a x1, its stride is 1, and length 4, @n the address of y[] is @a y1, its stride is 1, and length 4, @n the address of s[] is @a s1, its stride is 1, and length 4. - x1 y1 s1 x2 y2 s2 x3 y3 s3 x4 y4 s4 @n the address of x[] is @a x1, its stride is 3, and length 4, @n the address of y[] is @a y1, its stride is 3, and length 4, @n the address of s[] is @a s1, its stride is 3, and length 4. For routines such as cels2x(), each of the pair of input vectors is assumed to have the same stride. Each of the output vectors also has the same stride, though it may differ from the input stride. For example, for cels2x() the input lng[] and lat[] vectors each have vector stride @a sll, while the x[] and y[] output vectors have stride @a sxy. However, the intermediate phi[] and theta[] arrays each have unit stride, as does the stat[] vector. If the vector length is 1 then the stride is irrelevant and so ignored. It may be set to 0. */ /** @page threads Thread-safety With the following exceptions WCSLIB 4.10 is thread-safe: - The C code generated by Flex is not re-entrant. Flex does have the capacity for producing re-entrant scanners but they have a different API. This may be handled by a compile-time option in future but in the meantime calls to the header parsers should be serialized via a mutex. - The low-level functions wcsnpv() and wcsnps() are not thread-safe but within the library itself they are only used by the Flex scanners wcspih() and wcsbth(). They would rarely need to be used by application programmers. - Diagnostic functions that print the contents of the various structs, namely celprt(), linprt(), prjprt(), spcprt(), tabprt(), wcsprt(), and wcsperr() use printf() which is thread-safe by the POSIX requirement on @c stdio. However, this is only at the function level. Where multiple threads invoke these functions simultaneously their output is likely to be interleaved. - wcserr_enable() sets a static variable and so is not thread-safe. However, this facility is not intended to be used dynamically. If detailed error messages are required, enable wcserr when execution starts and don't change it. */ /** @page testing Example code, testing and verification WCSLIB has an extensive test suite that also provides programming templates as well as demonstrations. Test programs, with names that indicate the main WCSLIB routine under test, reside in @c ./{C,Fortran}/test and each contains a brief description of its purpose. The high- and middle-level test programs are more instructive for applications programming, while the low-level tests are vital for verifying the integrity of the mathematical routines. - High level: @n @a twcstab provides an example of high-level applications programming using WCSLIB and @ref software "CFITSIO". It constructs an input FITS test file, specifically for testing TAB coordinates, partly using @c wcstab.keyrec, and then extracts the coordinate description from it following the steps outlined in wcshdr.h. @n@n @a tpih1 and @a tpih2 verify wcspih(). The first prints the contents of the structs returned by wcspih() using wcsprt() and the second uses @a cpgsbox() to draw coordinate graticules. Input for these comes from a FITS WCS test header implemented as a list of keyrecords, @c wcs.keyrec, one keyrecord per line, together with a program, @a tofits, that compiles these into a valid FITS file. @n@n @a tfitshdr also uses @c wcs.keyrec to test the generic FITS header parsing routine. @n@n @a twcsfix sets up a wcsprm struct containing various non-standard constructs and then invokes wcsfix() to translate them all to standard usage. - Middle level: @n @a twcs tests closure of wcss2p() and wcsp2s() for a number of selected projections. @a twcsmix verifies wcsmix() on the @f$1^\circ@f$ grid of celestial longitude and latitude for a number of selected projections. It plots a test grid for each projection and indicates the location of successful and failed solutions. @a twcssub tests the extraction of a coordinate description for a subimage from a wcsprm struct by wcssub(). @n@n @a tunits tests wcsutrne(), wcsunitse() and wcsulexe(), the units specification translator, converter and parser, either interactively or using a list of units specifications contained in units_test. - Low level: @n @a tlin, @a tlog, @a tprj1, @a tsph, @a tspc, @a tspc, and ttab1 test "closure" of the respective routines. Closure tests apply the forward and reverse transformations in sequence and compare the result with the original value. Ideally, the result should agree exactly, but because of floating point rounding errors there is usually a small discrepancy so it is only required to agree within a "closure tolerance". @n@n @a tprj1 tests for closure separately for longitude and latitude except at the poles where it only tests for closure in latitude. Note that closure in longitude does not deal with angular displacements on the sky. This is appropriate for many projections such as the cylindricals where circumpolar parallels are projected at the same length as the equator. On the other hand, @a tsph does test for closure in angular displacement. @n@n The tolerance for reporting closure discrepancies is set at @f$10^{-10}@f$ degree for most projections; this is slightly less than 3 microarcsec. The worst case closure figure is reported for each projection and this is usually better than the reporting tolerance by several orders of magnitude. @a tprj1 and @a tsph test closure at all points on the @f$1^\circ@f$ grid of native longitude and latitude and to within @f$5^\circ@f$ of any latitude of divergence for those projections that cannot represent the full sphere. Closure is also tested at a sequence of points close to the reference point (@a tprj1) or pole (@a tsph). @n@n Closure has been verified at all test points for SUN workstations. However, non-closure may be observed for other machines near native latitude @f$-90^\circ@f$ for the zenithal, cylindrical and conic equal area projections (ZEA, CEA and COE), and near divergent latitudes of projections such as the azimuthal perspective and stereographic projections (AZP and STG). Rounding errors may also carry points between faces of the quad-cube projections (CSC, QSC, and TSC). Although such excursions may produce long lists of non-closure points, this is not necessarily indicative of a fundamental problem. @n@n Note that the inverse of the COBE quad-qube projection (CSC) is a polynomial approximation and its closure tolerance is intrinsically poor. @n@n Although tests for closure help to verify the internal consistency of the routines they do not verify them in an absolute sense. This is partly addressed by @a tcel1, @a tcel2, @a tprj2, @a ttab2 and @a ttab3 which plot graticules for visual inspection of scaling, orientation, and other macroscopic characteristics of the projections. */ /** @page fortran WCSLIB Fortran wrappers The Fortran subdirectory contains wrappers, written in C, that allow Fortran programs to use WCSLIB. A prerequisite for using the wrappers is an understanding of the usage of the associated C routines, in particular the data structures they are based on. The principle difficulty in creating the wrappers was the need to manage these C structs from within Fortran, particularly as they contain pointers to allocated memory, pointers to C functions, and other structs that themselves contain similar entities. To this end, routines have been provided to set and retrieve values of the various structs, for example @c WCSPUT and @c WCSGET for the wcsprm struct, and @c CELPUT and @c CELGET for the celprm struct. These must be used in conjunction with wrappers on the routines provided to manage the structs in C, for example @c WCSINI, @c WCSSUB, @c WCSCOPY, @c WCSFREE, and @c WCSPRT which wrap wcsini(), wcssub(), wcscopy(), wcsfree(), and wcsprt(). The various @c *PUT and @c *GET routines are based on codes defined in Fortran include files (*.inc), if your Fortran compiler does not support the @c INCLUDE statement then you will need to include these manually wherever necessary. Codes are defined as parameters with names like @c WCS_CRPIX which refers to wcsprm::crpix (if your Fortran compiler does not support long symbolic names then you will need to rename these). The include files also contain parameters, such as @c WCSLEN, that define the length of an @c INTEGER array that must be declared to hold the struct. This length may differ for different platforms depending on how the C compiler aligns data within the structs. A test program for the C library, @a twcs, prints the size of the struct in sizeof(int) units and the values in the Fortran include files must equal or exceed these. On some platforms, such as Suns, it is important that the start of the @c INTEGER array be aligned on a @c DOUBLE @c PRECISION boundary, otherwise a @c BUS error may result. This may be achieved via an @c EQUIVALENCE with a @c DOUBLE @c PRECISION variable, or by sequencing variables in a @c COMMON block so that the @c INTEGER array follows immediately after a @c DOUBLE @c PRECISION variable. The @c *PUT routines set only one element of an array at a time; the final one or two integer arguments of these routines specify 1-relative array indices (N.B. not 0-relative as in C). The one exception is the prjprm::pv array. The @c *PUT routines also reset the @a flag element to signal that the struct needs to be reinitialized. Therefore, if you wanted to set wcsprm::flag itself to -1 prior to the first call to @c WCSINI, for example, then that @c WCSPUT must be the last one before the call. The @c *GET routines retrieve whole arrays at a time and expect array arguments of the appropriate length where necessary. Note that they do not initialize the structs. A basic coding fragment is @verbatim INTEGER LNGIDX, STATUS CHARACTER CTYPE1*72 INCLUDE 'wcs.inc' * WCSLEN is defined as a parameter in wcs.inc. INTEGER WCS(WCSLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (WCS, DUMMY) * Allocate memory and set default values for 2 axes. STATUS = WCSPUT (WCS, WCS_FLAG, -1, 0, 0) STATUS = WCSINI (2, WCS) * Set CRPIX1, and CRPIX2; WCS_CRPIX is defined in wcs.inc. STATUS = WCSPUT (WCS, WCS_CRPIX, 512D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRPIX, 512D0, 2, 0) * Set PC1_2 to 5.0 (I = 1, J = 2). STATUS = WCSPUT (WCS, WCS_PC, 5D0, 1, 2) * Set CTYPE1 to 'RA---SIN'; N.B. must be given as CHARACTER*72. CTYPE1 = 'RA---SIN' STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE1, 1, 0) * Set PV1_3 to -1.0 (I = 1, M = 3). STATUS = WCSPUT (WCS, WCS_PV, -1D0, 1, 3) etc. * Initialize. STATUS = WCSSET (WCS) IF (STATUS.NE.0) THEN CALL FLUSH(6) STATUS = WCSPERR(WCS, CHAR(0)) ENDIF * Find the "longitude" axis. STATUS = WCSGET (WCS, WCS_LNG, LNGIDX) * Free memory. STATUS = WCSFREE (WCS) @endverbatim Refer to the various Fortran test programs for further programming examples. In particular, @a twcs and @a twcsmix show how to retrieve elements of the celprm and prjprm structs contained within the wcsprm struct. Note that the data type of the third argument to the @c *PUT and @c *GET routines differs depending on the data type of the corresponding C struct member, be it @a int, @a double, or @a char[]. It is essential that the Fortran data type match that of the C struct for @a int and @a double types, and be a @c CHARACTER variable of the correct length for @a char[] types. Compilers (e.g. g77) may warn of inconsistent usage of this argument but this can (usually) be safely ignored. If these warnings become annoying, type-specific variants are provided for each of the @c *PUT routines, @c *PTI, @c *PTD, and @c *PTC for @a int, @a double, or @a char[] and likewise @c *GTI, @c *GTD, and @c *GTC for the @c *GET routines. When calling wrappers for C functions that print to @a stdout, such as @c WCSPRT, and @c WCSPERR, or that may print to @a stderr, such as @c WCSPIH, @c WCSBTH, @c WCSULEXE, or @c WCSUTRNE, it may be necessary to flush the Fortran I/O buffers beforehand so that the output appears in the correct order. The wrappers for these functions do call @c fflush(NULL), but depending on the particular system, this may not succeed in flushing the Fortran I/O buffers. Most Fortran compilers provide the non-standard intrinsic @c FLUSH(), which is called with unit number 6 to flush @a stdout (as in the example above), and unit 0 for @a stderr. A basic assumption made by the wrappers is that an @c INTEGER variable is no less than half the size of a @c DOUBLE @c PRECISION. */ /** @page pgsbox PGSBOX @c PGSBOX, which is provided as a separate part of WCSLIB, is a @ref software "PGPLOT" routine (PGPLOT being a Fortran graphics library) that draws and labels curvilinear coordinate grids. Example @c PGSBOX grids can be seen at http://www.atnf.csiro.au/~mcalabre/WCS/PGSBOX/index.html. The prologue to pgsbox.f contains usage instructions. pgtest.f and cpgtest.c serve as test and demonstration programs in Fortran and C and also as well- documented examples of usage. @c PGSBOX requires a separate routine, @c EXTERNAL @c NLFUNC, to define the coordinate transformation. Fortran subroutine @c PGCRFN (pgcrfn.f) is provided to define separable pairs of non-linear coordinate systems. Linear, logarithmic and power-law axis types are currently defined; further types may be added as required. A C function, @a pgwcsl_(), with Fortran-like interface defines an @c NLFUNC that interfaces to WCSLIB 4.x for @c PGSBOX to draw celestial coordinate grids. @ref software "PGPLOT" is implemented as a Fortran library with a set of C wrapper routines that are generated by a software tool. However, @c PGSBOX has a more complicated interface than any of the standard PGPLOT routines, especially in having an @c EXTERNAL function in its argument list. Consequently, @c PGSBOX is implemented in Fortran but with a hand-coded C wrapper, @a cpgsbox(). As an example, in this suite the C test/demo program, @a cpgtest, calls the C wrapper, @a cpgsbox(), passing it a pointer to @a pgwcsl_(). In turn, @a cpgsbox() calls @c PGSBOX, which invokes @a pgwcsl_() as an @c EXTERNAL subroutine. In this sequence, a complicated C struct defined by @a cpgtest is passed through @c PGSBOX to @a pgwcsl_() as an @c INTEGER array. While there are no formal standards for calling Fortran from C, there are some fairly well established conventions. Nevertheless, it's possible that you may need to modify the code if you use a combination of Fortran and C compilers with linkage conventions that differ from that of the GNU compilers, gcc and g77. */ /* Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: mainpage.dox,v 4.10 2012/02/05 23:41:45 cal103 Exp $ */ pywcs-1.12/wcslib/doxygen/prj.sed0000644001153600020070000000272012310355626021077 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} s|PVi_\([0-4]\)a|PVi_\1a|g s| prjprm| #prjprm|g s|???set()|&|g s|???x2s()|&|g s|???s2x()|&|g s|AIR|&|g s|AIT|&|g s|ARC|&|g s|AZP|&|g s|BON|&|g s|CAR|&|g s|CEA|&|g s|COD|&|g s|COE|&|g s|COO|&|g s|COP|&|g s|CSC|&|g s|CYP|&|g s|HPX|&|g s|MER|&|g s|MOL|&|g s|PAR|&|g s|PCO|&|g s|QSC|&|g s|SFL|&|g s|SIN|&|g s|STG|&|g s|SZP|&|g s|TAN|&|g s|TSC|&|g s|ZEA|&|g s|ZPN|&|g s| i | i |g s|carree|car\ée|g s|\[-90,90\]|@f$[-90^\\circ,90^\\circ]@f$|g s|\[-180,180\]|@f$[-180^\\circ,180^\\circ]@f$|g s|180/pi|@f$180^\\circ/\\pi@f$|g s|\([1-9][0-9]*\) degrees|@f$\1^\\circ@f$|g s| 1 degree | @f$1^\\circ@f$ degree |g s| 1E-10 degree | @f$0^\\circ.0000000001@f$ |g s| phi\([ .]\)| @f$\\phi@f$\1|g s| phi, | @f$\\phi@f$, |g s| theta\([ .]\)| @f$\\theta@f$\1|g s| theta, | @f$\\theta@f$, |g s|phi_0|@f$\\phi_0@f$|g s|theta_0|@f$\\theta_0@f$|g s|(phi,theta)|@f$(\\phi,\\theta)@f$|g s|(x,y)|@f$(x,y)@f$|g s| x, | @f$x@f$,|g s| x\([ .]\)| @f$x@f$\1|g s| y, | @f$y@f$,|g s| y\([ .]\)| @f$y@f$\1|g pywcs-1.12/wcslib/doxygen/prj_extras.dox0000644001153600020070000007616412310355626022521 0ustar cslocumSTSCI\science00000000000000/** @fn int azpset(struct prjprm *prj) * * @brief Set up a #prjprm struct for * the zenithal/azimuthal perspective (AZP) * projection. * * @b %azpset() sets up a #prjprm struct for * a zenithal/azimuthal perspective (AZP) * projection. * * See prjset() for a description of the API. */ /** @fn int azpx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * zenithal/azimuthal perspective (AZP) * projection. * * @b %azpx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a zenithal/azimuthal perspective (AZP) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int azps2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * zenithal/azimuthal perspective (AZP) * projection. * * @b %azps2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a zenithal/azimuthal perspective (AZP) * projection. * * See prjs2x() for a description of the API. */ /** @fn int szpset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * slant zenithal perspective (SZP) * projection. * * @b %szpset() sets up a #prjprm struct for * a slant zenithal perspective (SZP) * projection. * * See prjset() for a description of the API. */ /** @fn int szpx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * slant zenithal perspective (SZP) * projection. * * @b %szpx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a slant zenithal perspective (SZP) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int szps2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * slant zenithal perspective (SZP) * projection. * * @b %szps2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a slant zenithal perspective (SZP) * projection. * * See prjs2x() for a description of the API. */ /** @fn int tanset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * gnomonic (TAN) * projection. * * @b %tanset() sets up a #prjprm struct for * a gnomonic (TAN) * projection. * * See prjset() for a description of the API. */ /** @fn int tanx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * gnomonic (TAN) * projection. * * @b %tanx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a gnomonic (TAN) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int tans2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * gnomonic (TAN) * projection. * * @b %tans2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a gnomonic (TAN) * projection. * * See prjs2x() for a description of the API. */ /** @fn int stgset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * stereographic (STG) * projection. * * @b %stgset() sets up a #prjprm struct for * a stereographic (STG) * projection. * * See prjset() for a description of the API. */ /** @fn int stgx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * stereographic (STG) * projection. * * @b %stgx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a stereographic (STG) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int stgs2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * stereographic (STG) * projection. * * @b %stgs2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a stereographic (STG) * projection. * * See prjs2x() for a description of the API. */ /** @fn int sinset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * orthographic/synthesis (SIN) * projection. * * @b %stgset() sets up a #prjprm struct for * an orthographic/synthesis (SIN) * projection. * * See prjset() for a description of the API. */ /** @fn int sinx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * orthographic/synthesis (SIN) * projection. * * @b %sinx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * an orthographic/synthesis (SIN) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int sins2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * orthographic/synthesis (SIN) * projection. * * @b %sins2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * an orthographic/synthesis (SIN) * projection. * * See prjs2x() for a description of the API. */ /** @fn int arcset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * zenithal/azimuthal equidistant (ARC) * projection. * * @b %arcset() sets up a #prjprm struct for * a zenithal/azimuthal equidistant (ARC) * projection. * * See prjset() for a description of the API. */ /** @fn int arcx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * zenithal/azimuthal equidistant (ARC) * projection. * * @b %arcx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a zenithal/azimuthal equidistant (ARC) * projection to native spherical * coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int arcs2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * zenithal/azimuthal equidistant (ARC) * projection. * * @b %arcs2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a zenithal/azimuthal equidistant (ARC) * projection. * * See prjs2x() for a description of the API. */ /** @fn int zpnset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * zenithal/azimuthal polynomial (ZPN) * projection. * * @b %zpnset() sets up a #prjprm struct for * a zenithal/azimuthal polynomial (ZPN) * projection. * * See prjset() for a description of the API. */ /** @fn int zpnx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * zenithal/azimuthal polynomial (ZPN) * projection. * * @b %zpnx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a zenithal/azimuthal polynomial (ZPN) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int zpns2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * zenithal/azimuthal polynomial (ZPN) * projection. * * @b %zpns2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a zenithal/azimuthal polynomial (ZPN) * projection. * * See prjs2x() for a description of the API. */ /** @fn int zeaset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * zenithal/azimuthal equal area (ZEA) * projection. * * @b %zeaset() sets up a #prjprm struct for * a zenithal/azimuthal equal area (ZEA) * projection. * * See prjset() for a description of the API. */ /** @fn int zeax2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * zenithal/azimuthal equal area (ZEA) * projection. * * @b %zeax2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a zenithal/azimuthal equal area (ZEA) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int zeas2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * zenithal/azimuthal equal area (ZEA) * projection. * * @b %zeas2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a zenithal/azimuthal equal area (ZEA) * projection. * * See prjs2x() for a description of the API. */ /** @fn int airset(struct prjprm *prj) * * @brief Set up a #prjprm struct for * Airy's (AIR) * projection. * * @b %airset() sets up a #prjprm struct for * an Airy (AIR) * projection. * * See prjset() for a description of the API. */ /** @fn int airx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for * Airy's (AIR) * projection. * * @b %airx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * an Airy (AIR) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int airs2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for * Airy's (AIR) * projection. * * @b %airs2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * an Airy (AIR) * projection. * * See prjs2x() for a description of the API. */ /** @fn int cypset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * cylindrical perspective (CYP) * projection. * * @b %cypset() sets up a #prjprm struct for * a cylindrical perspective (CYP) * projection. * * See prjset() for a description of the API. */ /** @fn int cypx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * cylindrical perspective (CYP) * projection. * * @b %cypx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a cylindrical perspective (CYP) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int cyps2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * cylindrical perspective (CYP) * projection. * * @b %cyps2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a cylindrical perspective (CYP) * projection. * * See prjs2x() for a description of the API. */ /** @fn int ceaset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * cylindrical equal area (CEA) * projection. * * @b %ceaset() sets up a #prjprm struct for * a cylindrical equal area (CEA) * projection. * * See prjset() for a description of the API. */ /** @fn int ceax2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * cylindrical equal area (CEA) * projection. * * @b %ceax2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a cylindrical equal area (CEA) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int ceas2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * cylindrical equal area (CEA) * projection. * * @b %ceas2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a cylindrical equal area (CEA) * projection. * * See prjs2x() for a description of the API. */ /** @fn int carset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * plate carrée (CAR) * projection. * * @b %carset() sets up a #prjprm struct for * a plate carrée (CAR) * projection. * * See prjset() for a description of the API. */ /** @fn int carx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * plate carrée (CAR) * projection. * * @b %carx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a plate carrée (CAR) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int cars2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * plate carrée (CAR) * projection. * * @b %cars2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a plate carrée (CAR) * projection. * * See prjs2x() for a description of the API. */ /** @fn int merset(struct prjprm *prj) * * @brief Set up a #prjprm struct for * Mercator's (MER) * projection. * * @b %merset() sets up a #prjprm struct for * a Mercator (MER) * projection. * * See prjset() for a description of the API. */ /** @fn int merx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for * Mercator's (MER) * projection. * * @b %merx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a Mercator (MER) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int mers2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for * Mercator's (MER) * projection. * * @b %mers2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a Mercator (MER) * projection. * * See prjs2x() for a description of the API. */ /** @fn int sflset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * Sanson-Flamsteed (SFL) * projection. * * @b %sflset() sets up a #prjprm struct for * a Sanson-Flamsteed (SFL) * projection. * * See prjset() for a description of the API. */ /** @fn int sflx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * Sanson-Flamsteed (SFL) * projection. * * @b %sflx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a Sanson-Flamsteed (SFL) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int sfls2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * Sanson-Flamsteed (SFL) * projection. * * @b %sfls2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a Sanson-Flamsteed (SFL) * projection. * * See prjs2x() for a description of the API. */ /** @fn int parset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * parabolic (PAR) * projection. * * @b %parset() sets up a #prjprm struct for * a parabolic (PAR) * projection. * * See prjset() for a description of the API. */ /** @fn int parx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * parabolic (PAR) * projection. * * @b %parx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a parabolic (PAR) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int pars2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * parabolic (PAR) * projection. * * @b %pars2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a parabolic (PAR) * projection. * * See prjs2x() for a description of the API. */ /** @fn int molset(struct prjprm *prj) * * @brief Set up a #prjprm struct for * Mollweide's (MOL) * projection. * * @b %molset() sets up a #prjprm struct for * a Mollweide (MOL) * projection. * * See prjset() for a description of the API. */ /** @fn int molx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for * Mollweide's (MOL) * projection. * * @b %molx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a Mollweide (MOL) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int mols2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for * Mollweide's (MOL) * projection. * * @b %mols2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a Mollweide (MOL) * projection. * * See prjs2x() for a description of the API. */ /** @fn int aitset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * Hammer-Aitoff (AIT) * projection. * * @b %aitset() sets up a #prjprm struct for * a Hammer-Aitoff (AIT) * projection. * * See prjset() for a description of the API. */ /** @fn int aitx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * Hammer-Aitoff (AIT) * projection. * * @b %aitx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a Hammer-Aitoff (AIT) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int aits2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * Hammer-Aitoff (AIT) * projection. * * @b %aits2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a Hammer-Aitoff (AIT) * projection. * * See prjs2x() for a description of the API. */ /** @fn int copset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * conic perspective (COP) * projection. * * @b %copset() sets up a #prjprm struct for * a conic perspective (COP) * projection. * * See prjset() for a description of the API. */ /** @fn int copx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * conic perspective (COP) * projection. * * @b %copx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a conic perspective (COP) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int cops2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * conic perspective (COP) * projection. * * @b %cops2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a conic perspective (COP) * projection. * * See prjs2x() for a description of the API. */ /** @fn int coeset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * conic equal area (COE) * projection. * * @b %coeset() sets up a #prjprm struct for * a conic equal area (COE) * projection. * * See prjset() for a description of the API. */ /** @fn int coex2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * conic equal area (COE) * projection. * * @b %coex2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a conic equal area (COE) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int coes2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * conic equal area (COE) * projection. * * @b %coes2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a conic equal area (COE) * projection. * * See prjs2x() for a description of the API. */ /** @fn int codset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * conic equidistant (COD) * projection. * * @b %codset() sets up a #prjprm struct for * a conic equidistant (COD) * projection. * * See prjset() for a description of the API. */ /** @fn int codx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * conic equidistant (COD) * projection. * * @b %codx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a conic equidistant (COD) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int cods2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * conic equidistant (COD) * projection. * * @b %cods2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a conic equidistant (COD) * projection. * * See prjs2x() for a description of the API. */ /** @fn int cooset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * conic orthomorphic (COO) * projection. * * @b %cooset() sets up a #prjprm struct for * a conic orthomorphic (COO) * projection. * * See prjset() for a description of the API. */ /** @fn int coox2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * conic orthomorphic (COO) * projection. * * @b %coox2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a conic orthomorphic (COO) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int coos2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * conic orthomorphic (COO) * projection. * * @b %coos2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a conic orthomorphic (COO) * projection. * * See prjs2x() for a description of the API. */ /** @fn int bonset(struct prjprm *prj) * * @brief Set up a #prjprm struct for * Bonne's (BON) * projection. * * @b %bonset() sets up a #prjprm struct for * a Bonne (BON) * projection. * * See prjset() for a description of the API. */ /** @fn int bonx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for * Bonne's (BON) * projection. * * @b %bonx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a Bonne (BON) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int bons2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for * Bonne's (BON) * projection. * * @b %bons2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a Bonne (BON) * projection. * * See prjs2x() for a description of the API. */ /** @fn int pcoset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * polyconic (PCO) * projection. * * @b %pcoset() sets up a #prjprm struct for * a polyconic (PCO) * projection. * * See prjset() for a description of the API. */ /** @fn int pcox2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * polyconic (PCO) * projection. * * @b %pcox2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a polyconic (PCO) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int pcos2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * polyconic (PCO) * projection. * * @b %pcos2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a polyconic (PCO) * projection. * * See prjs2x() for a description of the API. */ /** @fn int tscset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * tangential spherical cube (TSC) * projection. * * @b %tscset() sets up a #prjprm struct for * a tangential spherical cube (TSC) * projection. * * See prjset() for a description of the API. */ /** @fn int tscx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * tangential spherical cube (TSC) * projection. * * @b %tscx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a tangential spherical cube (TSC) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int tscs2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * tangential spherical cube (TSC) * projection. * * @b %tscs2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a tangential spherical cube (TSC) * projection. * * See prjs2x() for a description of the API. */ /** @fn int cscset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * COBE spherical cube (CSC) * projection. * * @b %cscset() sets up a #prjprm struct for * a COBE spherical cube (CSC) * projection. * * See prjset() for a description of the API. */ /** @fn int cscx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * COBE spherical cube (CSC) * projection. * * @b %cscx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a COBE spherical cube (CSC) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int cscs2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * COBE spherical cube (CSC) * projection. * * @b %cscs2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a COBE spherical cube (CSC) * projection. * * See prjs2x() for a description of the API. */ /** @fn int qscset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * quadrilateralized spherical cube (QSC) * projection. * * @b %qscset() sets up a #prjprm struct for * a quadrilateralized spherical cube (QSC) * projection. * * See prjset() for a description of the API. */ /** @fn int qscx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * quadrilateralized spherical cube (QSC) * projection. * * @b %qscx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a quadrilateralized spherical cube (QSC) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int qscs2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * quadrilateralized spherical cube (QSC) * projection. * * @b %qscs2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a quadrilateralized spherical cube (QSC) * projection. * * See prjs2x() for a description of the API. */ /** @fn int hpxset(struct prjprm *prj) * * @brief Set up a #prjprm struct for the * HEALPix (HPX) * projection. * * @b %hpxset() sets up a #prjprm struct for * a HEALPix (HPX) * projection. * * See prjset() for a description of the API. */ /** @fn int hpxx2s(PRJX2S_ARGS) * * @brief Cartesian-to-spherical transformation for the * HEALPix (HPX) * projection. * * @b %hpxx2s() deprojects Cartesian \f$(x,y)\f$ coordinates in the plane of * a HEALPix (HPX) * projection to native spherical coordinates \f$(\phi,\theta)\f$. * * See prjx2s() for a description of the API. */ /** @fn int hpxs2x(PRJS2X_ARGS) * * @brief Spherical-to-Cartesian transformation for the * HEALPix (HPX) * projection. * * @b %hpxs2x() projects native spherical coordinates \f$(\phi,\theta)\f$ to * Cartesian \f$(x,y)\f$ coordinates in the plane of * a HEALPix (HPX) * projection. * * See prjs2x() for a description of the API. */ /** @var const int ZENITHAL * @brief Identifier for zenithal/azimuthal projections. * * Identifier for zenithal/azimuthal projections, see prjprm::category. */ /** @var const int CYLINDRICAL * @brief Identifier for cylindrical projections. * * Identifier for cylindrical projections, see prjprm::category. */ /** @var const int PSEUDOCYLINDRICAL * @brief Identifier for pseudocylindrical projections. * * Identifier for pseudocylindrical projections, see prjprm::category. */ /** @var const int CONVENTIONAL * @brief Identifier for conventional projections. * * Identifier for conventional projections, see prjprm::category. */ /** @var const int CONIC * @brief Identifier for conic projections. * * Identifier for conic projections, see prjprm::category. */ /** @var const int POLYCONIC * @brief Identifier for polyconic projections. * * Identifier for polyconic projections, see prjprm::category. */ /** @var const int QUADCUBE * @brief Identifier for quadcube projections. * * Identifier for quadcube projections, see prjprm::category. */ /** @var const int HEALPIX * @brief Identifier for the HEALPix projection. * * Identifier for the HEALPix projection, see prjprm::category. */ /** @var const char prj_categories[9][32] * @brief Projection categories. * * Names of the projection categories, all in lower-case except for "HEALPix". * * Provided for information only, not used by the projection routines. */ /** @var const int prj_ncode * @brief The number of recognized three-letter projection codes. * * The number of recognized three-letter projection codes (currently 27), * see #prj_codes. */ /** @var const char prj_codes[27][4] * @brief Recognized three-letter projection codes. * * List of all recognized three-letter projection codes (currently 27), e.g. * SIN, TAN, etc. */ /** @def PVN * @brief Total number of projection parameters. * * The total number of projection parameters numbered 0 to PVN-1. */ /** @def PRJX2S_ARGS * @brief For use in declaring deprojection function prototypes. * * Preprocessor macro used for declaring deprojection function prototypes. */ /** @def PRJS2X_ARGS * @brief For use in declaring projection function prototypes. * * Preprocessor macro used for declaring projection function prototypes. */ /** @def PRJLEN * @brief Size of the #prjprm struct in @a int units. * * Size of the #prjprm struct in @a int units, used by the Fortran wrappers. */ /** @def prjini_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #prj_errmsg directly now * instead. */ /** @def prjprt_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #prj_errmsg directly now * instead. */ /** @def prjset_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #prj_errmsg directly now * instead. */ /** @def prjx2s_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #prj_errmsg directly now * instead. */ /** @def prjs2x_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #prj_errmsg directly now * instead. */ pywcs-1.12/wcslib/doxygen/README0000644001153600020070000000272412310355626020473 0ustar cslocumSTSCI\science00000000000000Overview of generation of the WCSLIB manual using doxygen --------------------------------------------------------- Documentation is extracted from the C header files using a flex scanner, doxextr (see ./doxextr.l). doxextr relies on strict adherence to a set of formatting rules in order to minimize the amount of doxygen markup required in the C source files. doxextr extracts information from the header files and applies doxygen markup to it. This is passed through a generic sed filter, doxexr.sed, and possibly also a specific sed filter, e.g. prj.sed for prj.h, which applies additional doxygen markup, mainly for fonts and formulae. The makefile rule that drives this process writes the output to a set of files with names of the form *.dox, e.g. prj.dox. Additional doxygen markup may also be provided via files in this directory with names of the form *_extras.dox, e.g. prj_extras.dox. These are maintained manually. Similarly, the main page and explanatory sections of the manual are maintained in mainpage.dox. The makefile rule concatenates ../C/wcslib.h and all of the .dox files in this directory onto ./wcslib.h for input to doxygen which is told via its configuration file, Doxyfile, to ignore ../C/wcslib.h. This subterfuge is necessary to avoid spurious file references in the generated latex manual. Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: README,v 4.10 2012/02/05 23:41:45 cal103 Exp $ pywcs-1.12/wcslib/doxygen/spc.sed0000644001153600020070000000236612310355626021077 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} s|CTYPEn|CTYPEn|g s|VELREF|&|g s|'AFRQ'|'AFRQ'|g s|'AWAV'|'AWAV'|g s|'BETA'|'BETA'|g s|'ENER'|'ENER'|g s|'FREQ'|'FREQ'|g s|'FELO'|'FELO'|g s|'VELO'|'VELO'|g s|'VOPT'|'VOPT'|g s|'VRAD'|'VRAD'|g s|'WAVE'|'WAVE'|g s|'WAVN'|'WAVN'|g s|'ZOPT'|'ZOPT'|g s|'VELO-F2V'|&|g s|'ZOPT-F2W'|&|g s|'VRAD-V2F'|&|g s|'VOPT-V2W'|&|g s|'ZOPT-V2W'|&|g s|'BETA-W2V'|&|g s|'LOG'|'LOG'|g s|'TAB'|'TAB'|g s|'GRA'|'GRA'|g s|'GRI'|'GRI'|g s|X -> P -> S|@f$X\\leadsto P\\rightarrow S@f$|g s|S -> P -> X|@f$S\\rightarrow P\\leadsto X@f$|g s| \([PSX]\)\([ -.:]\)| @f$\1@f$\2|g s| S | @f$S@f$ |g s| G, | @f$G@f$, |g s| m, | @f$m@f$, |g s|alpha|@f$\\alpha@f$|g s|n_r|@f$n_r@f$|g s|n'_r|@f$n'_r@f$|g s|epsilon|@f$\\epsilon@f$|g s|theta|@f$\\theta@f$|g s|lambda_r|@f$\\lambda_r@f$|g s|dn/dlambda|@f$dn/d\\lambda@f$|g s|dX/dS|@f$dX/dS@f$|g s|dS/dX|@f$dS/dX@f$|g s|restreq%3 != 0|\\code & \\endcode|g pywcs-1.12/wcslib/doxygen/spc_extras.dox0000644001153600020070000000150112310355626022472 0ustar cslocumSTSCI\science00000000000000/** @def SPCLEN * @brief Size of the spcprm struct in @a int units. * * Size of the spcprm struct in @a int units, used by the Fortran wrappers. */ /** @def spcini_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #spc_errmsg directly now * instead. */ /** @def spcprt_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #spc_errmsg directly now * instead. */ /** @def spcset_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #spc_errmsg directly now * instead. */ /** @def spcx2s_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #spc_errmsg directly now * instead. */ /** @def spcs2x_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #spc_errmsg directly now * instead. */ pywcs-1.12/wcslib/doxygen/sph.sed0000644001153600020070000000066112310355626021100 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} s|dist and pa|dist and pa| s|lng and lat|lng and lat| s|phi and theta|phi and theta| s|\([1-9][0-9]*\) degrees|@f$\1^\\circ@f$|g s|(lng0,+90-epsilon)|@f$(\\alpha_0,+90^\\circ-\\epsilon)@f$| s|(lng0,-90+epsilon)|@f$(\\alpha_0,-90^\\circ+\\epsilon)@f$| s| 0 or | @f$0^\\circ@f$ or | s| epsilon| @f$\\epsilon@f$|g s|cos(|@f$cos@f$(|g s|sin(|@f$sin@f$(|g pywcs-1.12/wcslib/doxygen/spx.sed0000644001153600020070000000105312310355626021114 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} s|AFRQ|&|g s|AWAV|&|g s|BETA|&|g s|ENER|&|g s|FREQ|&|g s|VELO|&|g s|VOPT|&|g s|VRAD|&|g s|WAVE|&|g s|WAVN|&|g s|ZOPT|&|g s|velotype)|velotype)|g s|(wavetype|(wavetype|g s|= 1 / 2\*pi|@f$= 1 / 2 \\pi@f$|g s|= 2\*pi|@f$= 2 \\pi@f$|g s|= c,|@f$= c@f$,|g s|= 1/c|@f$= 1/c@f$|g s|= h,|@f$= h@f$,|g s|= 1/h|@f$= 1/h@f$|g s|= v/c|@f$\\beta = v/c@f$|g pywcs-1.12/wcslib/doxygen/spx_extras.dox0000644001153600020070000001171412310355626022526 0ustar cslocumSTSCI\science00000000000000/** @fn int afrqfreq(SPX_ARGS) * @brief Convert angular frequency to frequency (vector). * * @b %afrqfreq() converts angular frequency to frequency. * * See freqafrq() for a description of the API. */ /** @fn int freqener(SPX_ARGS) * @brief Convert frequency to photon energy (vector). * * @b %freqener() converts frequency to photon energy. * * See freqafrq() for a description of the API. */ /** @fn int enerfreq(SPX_ARGS) * @brief Convert photon energy to frequency (vector). * * @b %enerfreq() converts photon energy to frequency. * * See freqafrq() for a description of the API. */ /** @fn int freqwavn(SPX_ARGS) * @brief Convert frequency to wave number (vector). * * @b %freqwavn() converts frequency to wave number. * * See freqafrq() for a description of the API. */ /** @fn int wavnfreq(SPX_ARGS) * @brief Convert wave number to frequency (vector). * * @b %wavnfreq() converts wave number to frequency. * * See freqafrq() for a description of the API. */ /** @fn int freqwave(SPX_ARGS) * @brief Convert frequency to vacuum wavelength (vector). * * @b %freqwave() converts frequency to vacuum wavelength. * * See freqafrq() for a description of the API. */ /** @fn int wavefreq(SPX_ARGS) * @brief Convert vacuum wavelength to frequency (vector). * * @b %wavefreq() converts vacuum wavelength to frequency. * * See freqafrq() for a description of the API. */ /** @fn int freqawav(SPX_ARGS) * @brief Convert frequency to air wavelength (vector). * * @b %freqawav() converts frequency to air wavelength. * * See freqafrq() for a description of the API. */ /** @fn int awavfreq(SPX_ARGS) * @brief Convert air wavelength to frequency (vector). * * @b %awavfreq() converts air wavelength to frequency. * * See freqafrq() for a description of the API. */ /** @fn int waveawav(SPX_ARGS) * @brief Convert vacuum wavelength to air wavelength (vector). * * @b %waveawav() converts vacuum wavelength to air wavelength. * * See freqafrq() for a description of the API. */ /** @fn int awavwave(SPX_ARGS) * @brief Convert air wavelength to vacuum wavelength (vector). * * @b %awavwave() converts air wavelength to vacuum wavelength. * * See freqafrq() for a description of the API. */ /** @fn int velobeta(SPX_ARGS) * @brief Convert relativistic velocity to relativistic beta (vector). * * @b %velobeta() converts relativistic velocity to relativistic beta. * * See freqafrq() for a description of the API. */ /** @fn int betavelo(SPX_ARGS) * @brief Convert relativistic beta to relativistic velocity (vector). * * @b %betavelo() converts relativistic beta to relativistic velocity. * * See freqafrq() for a description of the API. */ /** @fn int velofreq(SPX_ARGS) * @brief Convert relativistic velocity to frequency (vector). * * @b %velofreq() converts relativistic velocity to frequency. * * See freqvelo() for a description of the API. */ /** @fn int freqvrad(SPX_ARGS) * @brief Convert frequency to radio velocity (vector). * * @b %freqvrad() converts frequency to radio velocity. * * See freqvelo() for a description of the API. */ /** @fn int vradfreq(SPX_ARGS) * @brief Convert radio velocity to frequency (vector). * * @b %vradfreq() converts radio velocity to frequency. * * See freqvelo() for a description of the API. */ /** @fn int velowave(SPX_ARGS) * @brief Convert relativistic velocity to vacuum wavelength (vector). * * @b %velowave() converts relativistic velocity to vacuum wavelength. * * See freqvelo() for a description of the API. */ /** @fn int awavvelo(SPX_ARGS) * @brief Convert air wavelength to relativistic velocity (vector). * * @b %awavvelo() converts air wavelength to relativistic velocity. * * See freqvelo() for a description of the API. */ /** @fn int veloawav(SPX_ARGS) * @brief Convert relativistic velocity to air wavelength (vector). * * @b %veloawav() converts relativistic velocity to air wavelength. * * See freqvelo() for a description of the API. */ /** @fn int wavevopt(SPX_ARGS) * @brief Convert vacuum wavelength to optical velocity (vector). * * @b %wavevopt() converts vacuum wavelength to optical velocity. * * See freqvelo() for a description of the API. */ /** @fn int voptwave(SPX_ARGS) * @brief Convert optical velocity to vacuum wavelength (vector). * * @b %voptwave() converts optical velocity to vacuum wavelength. * * See freqvelo() for a description of the API. */ /** @fn int wavezopt(SPX_ARGS) * @brief Convert vacuum wavelength to redshift (vector). * * @b %wavevopt() converts vacuum wavelength to redshift. * * See freqvelo() for a description of the API. */ /** @fn int zoptwave(SPX_ARGS) * @brief Convert redshift to vacuum wavelength (vector). * * @b %zoptwave() converts redshift to vacuum wavelength. * * See freqvelo() for a description of the API. */ /** @def SPX_ARGS * @brief For use in declaring spectral conversion function prototypes. * * Preprocessor macro used for declaring spectral conversion function * prototypes. */ /** @def SPXLEN * @brief Size of the spxprm struct in @a int units. * * Size of the spxprm struct in @a int units, used by the Fortran wrappers. */ pywcs-1.12/wcslib/doxygen/tab.sed0000644001153600020070000000036512310355626021055 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} s|PVi_\([0-4]\)a|PVi_\1a|g s| <= | @f$\\leq@f$ |g s|(K_1, K_2,... K_M)|@f$&@f$|g s| K_1 \* K_2 \* ... \* K_M |@f$K_1 K_2 \\ldots K_M@f$|g s| compressed K_1 | compressed @f$K_1@f$ |g s|Upsilon_m|@f$\\&@f$|g pywcs-1.12/wcslib/doxygen/tab_extras.dox0000644001153600020070000000212412310355626022455 0ustar cslocumSTSCI\science00000000000000/** @def TABLEN * @brief Size of the tabprm struct in @a int units. * * Size of the tabprm struct in @a int units, used by the Fortran wrappers. */ /** @def tabini_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #tab_errmsg directly now * instead. */ /** @def tabcpy_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #tab_errmsg directly now * instead. */ /** @def tabfree_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #tab_errmsg directly now * instead. */ /** @def tabprt_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #tab_errmsg directly now * instead. */ /** @def tabset_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #tab_errmsg directly now * instead. */ /** @def tabx2s_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #tab_errmsg directly now * instead. */ /** @def tabs2x_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #tab_errmsg directly now * instead. */ pywcs-1.12/wcslib/doxygen/wcs.sed0000644001153600020070000000200512310355626021074 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} s|CROTAia|CROTAia|g s|EPOCH|&|g s|VELREF|&|g s|PVi_\([0-4]\)a|PVi_\1a|g s|'a'|'a'|g s|axis i |axis i |g s|\([^_]\)CUBEFACE|\1CUBEFACE|g s|\([^_]\)STOKES|\1STOKES|g s|'RA--'|'RA--'|g s|'DEC-'|'DEC-'|g s|'GLON'|'GLON'|g s|'GLAT'|'GLAT'|g s|CSC|&|g s|GLS|&|g s|NCP|&|g s|QSC|&|g s|SFL|&|g s|SIN|&|g s|TSC|&|g s|'FREQ'|'FREQ'|g s|'FELO-HEL'|&|g s|'FREQ-LSR'|&|g s|'ZOPT-F2W'|&|g s|yyyy-mm-ddThh:mm:ss|yyyy-mm-ddThh:mm:ss|g s|(phi_0,theta_0)|@f$(\\phi_0,\\theta_0)@f$| s|phi_p|@f$\\phi_{\\mathrm p}@f$|g s|theta_p|@f$\\theta_{\\mathrm p}@f$|g s| x-| @f$x@f$-|g s| y-| @f$y@f$-|g s/altlin |= [124];/\\code & \\endcode/ pywcs-1.12/wcslib/doxygen/wcs_extras.dox0000644001153600020070000000525112310355626022507 0ustar cslocumSTSCI\science00000000000000/** @def WCSSUB_LONGITUDE * @brief Mask for extraction of longitude axis by wcssub(). * * Mask to use for extracting the longitude axis when sub-imaging, refer to the * axes argument of wcssub(). */ /** @def WCSSUB_LATITUDE * @brief Mask for extraction of latitude axis by wcssub(). * * Mask to use for extracting the latitude axis when sub-imaging, refer to the * axes argument of wcssub(). */ /** @def WCSSUB_CUBEFACE * @brief Mask for extraction of CUBEFACE axis by wcssub(). * * Mask to use for extracting the CUBEFACE axis when * sub-imaging, refer to the axes argument of wcssub(). */ /** @def WCSSUB_CELESTIAL * @brief Mask for extraction of celestial axes by wcssub(). * * Mask to use for extracting the celestial axes (longitude, latitude and * cubeface) when sub-imaging, refer to the axes argument of * wcssub(). */ /** @def WCSSUB_SPECTRAL * @brief Mask for extraction of spectral axis by wcssub(). * * Mask to use for extracting the spectral axis when sub-imaging, refer to the * axes argument of wcssub(). */ /** @def WCSSUB_STOKES * @brief Mask for extraction of STOKES axis by wcssub(). * * Mask to use for extracting the STOKES axis when sub-imaging, * refer to the axes argument of wcssub(). */ /** @def WCSLEN * @brief Size of the wcsprm struct in int units. * * Size of the wcsprm struct in @a int units, used by the Fortran wrappers. */ /** @def wcsini_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #wcs_errmsg directly now * instead. */ /** @def wcssub_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #wcs_errmsg directly now * instead. */ /** @def wcscopy_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #wcs_errmsg directly now * instead. */ /** @def wcsfree_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #wcs_errmsg directly now * instead. */ /** @def wcsprt_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #wcs_errmsg directly now * instead. */ /** @def wcsset_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #wcs_errmsg directly now * instead. */ /** @def wcsp2s_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #wcs_errmsg directly now * instead. */ /** @def wcss2p_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #wcs_errmsg directly now * instead. */ /** @def wcsmix_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #wcs_errmsg directly now * instead. */ pywcs-1.12/wcslib/doxygen/wcsfix.sed0000644001153600020070000000143512310355626021611 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} s|CD00i00j|&|g s|EPOCH|&|g s|PC00i00j|&|g s|PROJPn|&|g s|VELREF|&|g s|VSOURCEa|&|g s|GLS|&|g s|NCP|&|g s|SIN|&|g s|FREQ\([^-]\)|FREQ\1|g s|FELO\([^-]\)|FELO\1|g s|VELO\([^-]\)|VELO\1|g s|\([^-]\)OBS|\1OBS|g s|\([^-]\)LSR|\1LSR|g s|\([^-]\)HEL|\1HEL|g s|'VELO-OBS'|&|g s|'FELO-HEL'|&|g s|'FREQ-LSR'|&|g s|'DEG'|'DEG'|g s|'deg'|'deg'|g s|CLDJ|&|g s|DJCL|&|g s|yyyy-mm-ddThh:mm:ss|yyyy-mm-ddThh:mm:ss|g pywcs-1.12/wcslib/doxygen/wcsfix_extras.dox0000644001153600020070000000262112310355626023214 0ustar cslocumSTSCI\science00000000000000/** @def CDFIX * @brief Index of cdfix() status value in vector returned by wcsfix(). * * Index of the status value returned by cdfix() in the status * vector returned by wcsfix(). */ /** @def DATFIX * @brief Index of datfix() status value in vector returned by wcsfix(). * * Index of the status value returned by datfix() in the status vector * returned by wcsfix(). */ /** @def UNITFIX * @brief Index of unitfix() status value in vector returned by wcsfix(). * * Index of the status value returned by unitfix() in the status vector * returned by wcsfix(). */ /** @def CELFIX * @brief Index of celfix() status value in vector returned by wcsfix(). * * Index of the status value returned by celfix() in the status vector * returned by wcsfix(). */ /** @def SPCFIX * @brief Index of spcfix() status value in vector returned by wcsfix(). * * Index of the status value returned by spcfix() in the status vector * returned by wcsfix(). */ /** @def CYLFIX * @brief Index of cylfix() status value in vector returned by wcsfix(). * * Index of the status value returned by cylfix() in the status vector * returned by wcsfix(). */ /** @def NWCSFIX * @brief Number of elements in the status vector returned by wcsfix(). * * Number of elements in the status vector returned by wcsfix(). */ /** @def cylfix_errmsg * @brief Deprecated. * @deprecated Added for backwards compatibility, use #wcsfix_errmsg directly * now instead. */ pywcs-1.12/wcslib/doxygen/wcshdr.sed0000644001153600020070000001260712310355626021603 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} # All standard. s|\([ >]\)CROTAi|\1CROTAi|g s|\([ >]\)DAVGn|\1DAVGn|g s|\([ >]\)EQUIna|\1EQUIna|g s|\([ >]\)LATPna|\1LATPna|g s|\([ >]\)LONPna|\1LONPna|g s|\([ >]\)MJDAn|\1MJDAn|g s|\([ >]\)MJDOBn|\1MJDOBn|g s|\([ >]\)OBSGXn|\1OBSGXn|g s|\([ >]\)OBSGYn|\1OBSGYn|g s|\([ >]\)OBSGZn|\1OBSGZn|g s|\([ >]\)RADEna|\1RADEna|g s|\([ >]\)RFRQna|\1RFRQna|g s|\([ >]\)RWAVna|\1RWAVna|g s|\([ >]\)SOBSna|\1SOBSna|g s|\([ >]\)SPECna|\1SPECna|g s|\([ >]\)SSRCna|\1SSRCna|g s|\([ >]\)TCDEna|\1TCDEna|g s|\([ >]\)TCDLTn|\1TCDLTn|g s|\([ >]\)TCNAna|\1TCNAna|g s|\([ >]\)TCRDna|\1TCRDna|g s|\([ >]\)TCRPXn|\1TCRPXn|g s|\([ >]\)TCRPna|\1TCRPna|g s|\([ >]\)TCRVLn|\1TCRVLn|g s|\([ >]\)TCRVna|\1TCRVna|g s|\([ >]\)TCSYna|\1TCSYna|g s|\([ >]\)TCTYPn|\1TCTYPn|g s|\([ >]\)TCTYna|\1TCTYna|g s|\([ >]\)TCUNIn|\1TCUNIn|g s|\([ >]\)TCUNna|\1TCUNna|g s|\([ >]\)TCn_ka|\1TCn_ka|g s|\([ >]\)TFIELDS|\1TFIELDS|g s|\([ >]\)TFORM|\1TFORM|g s|\([ >]\)TPn_ka|\1TPn_ka|g s|\([ >]\)TSn_ma|\1TSn_ma|g s|\([ >]\)TVn_ma|\1TVn_ma|g s|\([ >]\)TWCSna|\1TWCSna|g s|\([ >]\)VANGna|\1VANGna|g s|\([ >]\)VSYSna|\1VSYSna|g s|\([ >]\)WCAXna|\1WCAXna|g s|\([ >]\)WCSNna|\1WCSNna|g s|\([ >]\)iCDEna|\1iCDEna|g s|\([ >]\)iCDLTn|\1iCDLTn|g s|\([ >]\)iCNAna|\1iCNAna|g s|\([ >]\)iCRDna|\1iCRDna|g s|\([ >]\)iCROTn|\1iCROTn|g s|\([ >]\)iCRVLn|\1iCRVLn|g s|\([ >]\)iCRVna|\1iCRVna|g s|\([ >]\)iCSYna|\1iCSYna|g s|\([ >]\)iCTYPn|\1iCTYPn|g s|\([ >]\)iCTYna|\1iCTYna|g s|\([ >]\)iCUNIn|\1iCUNIn|g s|\([ >]\)iCUNna|\1iCUNna|g s|\([ >]\)iSn_ma|\1iSn_ma|g s|\([ >]\)iVn_ma|\1iVn_ma|g s|\([ >]\)ijCDna|\1ijCDna|g s|\([ >]\)ijPCna|\1ijPCna|g s|\([ >]\)jCRPXn|\1jCRPXn|g s|\([ >]\)jCRPna|\1jCRPna|g #\([ >]\)All\1non-standard or deprecated. s|\([ >]\)ALTRPIX|\1ALTRPIX|g s|\([ >]\)ALTRVAL|\1ALTRVAL|g s|\([ >]\)CD00i00j|\1CD00i00j|g s|\([ >]\)CROTAia|\1CROTAia|g s|\([ >]\)CROTAn|\1CROTAn|g s|\([ >]\)DOBSn|\1DOBSn|g s|\([ >]\)EPOCHa|\1EPOCHa|g s|\([ >]\)EPOCH|\1EPOCH|g s|\([ >]\)PC00i00j|\1PC00i00j|g s|\([ >]\)PROJPn|\1PROJPn|g s|\([ >]\)RADECSYS|\1RADECSYS|g s|\([ >]\)RESTFREQ|\1RESTFREQ|g s|\([ >]\)TCDLTna|\1TCDLTna|g s|\([ >]\)TCDn_ka|\1TCDn_ka|g s|\([ >]\)TCNAMn|\1TCNAMn|g s|\([ >]\)TCNAMna|\1TCNAMna|g s|\([ >]\)TCRDEn|\1TCRDEn|g s|\([ >]\)TCRDEna|\1TCRDEna|g s|\([ >]\)TCROTna|\1TCROTna|g s|\([ >]\)TCRPXna|\1TCRPXna|g s|\([ >]\)TCRVLna|\1TCRVLna|g s|\([ >]\)TCSYEn|\1TCSYEn|g s|\([ >]\)TCSYEna|\1TCSYEna|g s|\([ >]\)TCTYPn|\1TCTYPn|g s|\([ >]\)TCTYPna|\1TCTYPna|g s|\([ >]\)TCUNIna|\1TCUNIna|g s|\([ >]\)TPCn_ka|\1TPCn_ka|g s|\([ >]\)TPSn_ma|\1TPSn_ma|g s|\([ >]\)TPVn_ma|\1TPVn_ma|g s|\([ >]\)VELREFa|\1VELREFa|g s|\([ >]\)VELREF|\1VELREF|g s|\([ >]\)VSOURCEa|\1VSOURCEa|g s|\([ >]\)VSOUna|\1VSOUna|g s|\([ >]\)ZSOUna|\1ZSOUna|g s|\([ >]\)iCDLTna|\1iCDLTna|g s|\([ >]\)iCNAMn|\1iCNAMn|g s|\([ >]\)iCNAMna|\1iCNAMna|g s|\([ >]\)iCRDEn|\1iCRDEn|g s|\([ >]\)iCRDEna|\1iCRDEna|g s|\([ >]\)iCROTna|\1iCROTna|g s|\([ >]\)iCRVLna|\1iCRVLna|g s|\([ >]\)iCSYEn|\1iCSYEn|g s|\([ >]\)iCSYEna|\1iCSYEna|g s|\([ >]\)iCTYPn|\1iCTYPn|g s|\([ >]\)iCTYPna|\1iCTYPna|g s|\([ >]\)iCUNIna|\1iCUNIna|g s|\([ >]\)iPSn_ma|\1iPSn_ma|g s|\([ >]\)iPVn_ma|\1iPVn_ma|g s|\([ >]\)jCRPXna|\1jCRPXna|g s|'TAB'|'TAB'|g s|'T'|'T'|g s|'{DATE,MJD}-|'{DATE,MJD}-|g s|{OBS,AVG}'|{OBS,AVG}'|g s|'OBSGEO-|'OBSGEO-|g s|{X,Y,Z}'|{X,Y,Z}'|g s|WCSHDR_|#&|g s|WCSHDO_|#&|g /^\*/s|tabprm|#&|g /^\*/s|wcsprm|#&|g /^\*/s|wtbarr|#&|g s|fits_hdr2str()|&|g s|m = n <= 9|m = n @f$\\le@f$ 9| s| ARE NOT | are not | s| ARE | are | s|"relax"|relax| pywcs-1.12/wcslib/doxygen/wcshdr_extras.dox0000644001153600020070000002202412310355626023202 0ustar cslocumSTSCI\science00000000000000/** @def WCSHDR_none * @brief Bit mask for wcspih() and wcsbth() - reject all extensions. * * Bit mask for the relax argument of wcspih() and wcsbth() - reject * all extensions. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_all * @brief Bit mask for wcspih() and wcsbth() - accept all extensions. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * all extensions. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_reject * @brief Bit mask for wcspih() and wcsbth() - reject non-standard keywords. * * Bit mask for the relax argument of wcspih() and wcsbth() - reject * non-standard keywords. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_CROTAia * @brief Bit mask for wcspih() and wcsbth() - accept CROTAia, * iCROTna, TCROTna. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * CROTAia, iCROTna, TCROTna. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_EPOCHa * @brief Bit mask for wcspih() and wcsbth() - accept EPOCHa. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * EPOCHa. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_VELREFa * @brief Bit mask for wcspih() and wcsbth() - accept VELREFa. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * VELREFa. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_CD00i00j * @brief Bit mask for wcspih() and wcsbth() - accept * CD00i00j. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * CD00i00j. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_PC00i00j * @brief Bit mask for wcspih() and wcsbth() - accept * PC00i00j. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * PC00i00j. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_PROJPn * @brief Bit mask for wcspih() and wcsbth() - accept PROJPn. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * PROJPn. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_RADECSYS * @brief Bit mask for wcspih() and wcsbth() - accept RADECSYS. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * RADECSYS. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_VSOURCE * @brief Bit mask for wcspih() and wcsbth() - accept VSOURCEa. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * VSOURCEa. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_DOBSn * @brief Bit mask for wcspih() and wcsbth() - accept DOBSn. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * DOBSn. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_LONGKEY * @brief Bit mask for wcspih() and wcsbth() - accept long forms of the * alternate binary table and pixel list WCS keywords. * * Bit mask for the relax argument of wcspih() and wcsbth() - * accept long forms of the alternate binary table and pixel list WCS keywords. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_CNAMn * @brief Bit mask for wcspih() and wcsbth() - accept * iCNAMn, TCNAMn, * iCRDEn, TCRDEn, * iCSYEn, TCSYEn. * * Bit mask for the relax argument of wcspih() and wcsbth() - accept * iCNAMn, TCNAMn, * iCRDEn, TCRDEn, * iCSYEn, TCSYEn. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_AUXIMG * @brief Bit mask for wcspih() and wcsbth() - allow the image-header form of * an auxiliary WCS keyword to provide a default value for all images. * * Bit mask for the relax argument of wcspih() and wcsbth() - * allow the image-header form of an auxiliary WCS keyword with * representation-wide scope to provide a default value for all images. * * Refer to wcsbth() note 5. */ /** @def WCSHDR_ALLIMG * @brief Bit mask for wcspih() and wcsbth() - allow the image-header form of * all image header WCS keywords to provide a default value for all * images. * * Bit mask for the relax argument of wcspih() and wcsbth() - * allow the image-header form of all image header WCS keywords to * provide a default value for all image arrays in a binary table (n.b. not * pixel list). * * Refer to wcsbth() note 5. */ /** @def WCSHDR_IMGHEAD * @brief Bit mask for wcsbth() - restrict to image header keywords only. * * Bit mask for the keysel argument of wcsbth() - * restrict keyword types considered to image header keywords only. */ /** @def WCSHDR_BIMGARR * @brief Bit mask for wcsbth() - restrict to binary table image array keywords * only. * * Bit mask for the keysel argument of wcsbth() - * restrict keyword types considered to binary table image array keywords only. */ /** @def WCSHDR_PIXLIST * @brief Bit mask for wcsbth() - restrict to pixel list keywords only. * * Bit mask for the keysel argument of wcsbth() - * restrict keyword types considered to pixel list keywords only. */ /** @def WCSHDO_none * @brief Bit mask for wcshdo() - don't write any extensions. * * Bit mask for the relax argument of wcshdo() - * don't write any extensions. * * Refer to the notes for wcshdo(). */ /** @def WCSHDO_all * @brief Bit mask for wcshdo() - write all extensions. * * Bit mask for the relax argument of wcshdo() - * write all extensions. * * Refer to the notes for wcshdo(). */ /** @def WCSHDO_safe * @brief Bit mask for wcshdo() - write safe extensions only. * * Bit mask for the relax argument of wcshdo() - * write only extensions that are considered safe. * * Refer to the notes for wcshdo(). */ /** @def WCSHDO_DOBSn * @brief Bit mask for wcshdo() - write DOBSn. * * Bit mask for the relax argument of wcshdo() - write * DOBSn, the column-specific analogue of DATE-OBS for * use in binary tables and pixel lists. * * Refer to the notes for wcshdo(). */ /** @def WCSHDO_TPCn_ka * @brief Bit mask for wcshdo() - write TPCn_ka. * * Bit mask for the relax argument of wcshdo() - write * TPCn_ka * if less than eight characters instead of * TPn_ka. * * Refer to the notes for wcshdo(). */ /** @def WCSHDO_PVn_ma * @brief Bit mask for wcshdo() - write * iPVn_ma, TPVn_ma, * iPSn_ma, TPSn_ma. * * Bit mask for the relax argument of wcshdo() - write * iPVn_ma, TPVn_ma, * iPSn_ma, TPSn_ma, * if less than eight characters instead of * iVn_ma, TVn_ma, * iSn_ma, TSn_ma. * * Refer to the notes for wcshdo(). */ /** @def WCSHDO_CRPXna * @brief Bit mask for wcshdo() - write * jCRPXna, TCRPXna, * iCDLTna, TCDLTna, * iCUNIna, TCUNIna, * iCTYPna, TCTYPna, * iCRVLna, TCRVLna. * * Bit mask for the relax argument of wcshdo() - write * jCRPXna, TCRPXna, * iCDLTna, TCDLTna, * iCUNIna, TCUNIna, * iCTYPna, TCTYPna, * iCRVLna, TCRVLna, * if less than eight characters instead of * jCRPna, TCRPna, * iCDEna, TCDEna, * iCUNna, TCUNna, * iCTYna, TCTYna, * iCRVna, TCRVna. * * Refer to the notes for wcshdo(). */ /** @def WCSHDO_CNAMna * @brief Bit mask for wcshdo() - write * iCNAMna, TCNAMna, * iCRDEna, TCRDEna, * iCSYEna, TCSYEna. * * Bit mask for the relax argument of wcshdo() - write * iCNAMna, TCNAMna, * iCRDEna, TCRDEna, * iCSYEna, TCSYEna, * if less than eight characters instead of * iCNAna, TCNAna, * iCRDna, TCRDna, * iCSYna, TCSYna. * * Refer to the notes for wcshdo(). */ /** @def WCSHDO_WCSNna * @brief Bit mask for wcshdo() - write WCSNna instead of * TWCSna * * Bit mask for the relax argument of wcshdo() - * write WCSNna instead of TWCSna. * * Refer to the notes for wcshdo(). */ pywcs-1.12/wcslib/doxygen/wcsmath_extras.dox0000644001153600020070000000135612310355626023363 0ustar cslocumSTSCI\science00000000000000/** @def D2R * @brief Degrees to radians conversion factor. * * Factor @f$\pi/180^\circ@f$ to convert from degrees to radians. */ /** @def R2D * @brief Radians to degrees conversion factor. * * Factor @f$180^\circ/\pi@f$ to convert from radians to degrees. */ /** @def SQRT2 * @f$\sqrt{2}@f$, used only by molset() (MOL projection). */ /** @def SQRT2INV * @f$1/\sqrt{2}@f$, used only by qscx2s() (QSC projection). */ /** @def UNDEFINED * @brief Value used to indicate an undefined quantity. * * Value used to indicate an undefined quantity (noting that NaNs cannot be * used portably). */ /** @def undefined * @brief Macro used to test for an undefined quantity. * * Macro used to test for an undefined value. */ pywcs-1.12/wcslib/doxygen/wcstrig.sed0000644001153600020070000000027512310355626021771 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} s|90 degrees|@f$90^\\circ@f$|g s| x-| @f$x@f$-|g s| y-| @f$y@f$-|g s| beta| @f$\\beta@f$|g s| (x,y)| @f$(x,y)@f$|g s|(rho,beta)|@f$(\\rho,\\beta)@f$|g s|arg(x,y)|@f$\\&@f$|g pywcs-1.12/wcslib/doxygen/wcstrig_extras.dox0000644001153600020070000000045212310355626023373 0ustar cslocumSTSCI\science00000000000000/** @def WCSTRIG_TOL * @brief Domain tolerance for asin() and acos() functions. * * Domain tolerance for the asin() and acos() functions to allow for floating * point rounding errors. * * If @f$v@f$ lies in the range @f$1 < |v| < 1 + WCSTRIG\_TOL@f$ then it will * be treated as @f$|v| == 1@f$. */ pywcs-1.12/wcslib/doxygen/wcsunits.sed0000644001153600020070000000014312310355626022160 0ustar cslocumSTSCI\science00000000000000/^[^*]/{p;d;} s|offset is|offset is| s|power is|power is| s|1e6|@f$10^6@f$| pywcs-1.12/wcslib/doxygen/wcsunits_extras.dox0000644001153600020070000001015512310355626023571 0ustar cslocumSTSCI\science00000000000000/** @def WCSUNITS_PLANE_ANGLE * @brief Array index for plane angle units type. * * Array index for plane angle units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_SOLID_ANGLE * @brief Array index for solid angle units type. * * Array index for solid angle units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_CHARGE * @brief Array index for charge units type. * * Array index for charge units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_MOLE * @brief Array index for mole units type. * * Array index for mole ("gram molecular weight") units in the units * array returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_TEMPERATURE * @brief Array index for temperature units type. * * Array index for temperature units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_LUMINTEN * @brief Array index for luminous intensity units type. * * Array index for luminous intensity units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_MASS * @brief Array index for mass units type. * * Array index for mass units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_LENGTH * @brief Array index for length units type. * * Array index for length units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_TIME * @brief Array index for time units type. * * Array index for time units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_BEAM * @brief Array index for beam units type. * * Array index for beam units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_BIN * @brief Array index for bin units type. * * Array index for bin units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_BIT * @brief Array index for bit units type. * * Array index for bit units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_COUNT * @brief Array index for count units type. * * Array index for count units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_MAGNITUDE * @brief Array index for stellar magnitude units type. * * Array index for stellar magnitude units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_PIXEL * @brief Array index for pixel units type. * * Array index for pixel units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_SOLRATIO * @brief Array index for solar mass ratio units type. * * Array index for solar mass ratio units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_VOXEL * @brief Array index for voxel units type. * * Array index for voxel units in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ /** @def WCSUNITS_NTYPE * @brief Number of entries in the units array. * * Number of entries in the units array * returned by wcsulex(), and the #wcsunits_types[] and #wcsunits_units[] * global variables. */ pywcs-1.12/wcslib/flavours0000644001153600020070000001045412310355626017721 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # Makefile overrides for various combinations of architecture, operating # system and compiler. Used for development and testing only, not required # for building WCSLIB. # # Variables like CC and CFLAGS are exported into the environment so that they # will be seen by 'configure'. Thus, normal usage is as follows: # # make distclean # make FLAVOUR=Linux configure # make # # Reminder: add '-d' to FLFLAGS for debugging. # # $Id: flavours,v 4.10 2012/02/05 23:41:45 cal103 Exp $ #----------------------------------------------------------------------------- # The list of FLAVOURs can be set on the command line. F := $(shell echo $(FLAVOURS) | tr a-z A-Z) ifeq "$F" "" F := FLAVOURS := "" endif ifeq "$F" "LINUX" override FLAVOURS := "" Linux Linuxp endif ifeq "$F" "SUN" override FLAVOURS := "" SUN/GNU SUN/GNU3 SUN/GNUp SUN/ANSI endif ifeq "$F" "PURE" override FLAVOURS := SUN/Pure SUN/Quant endif F := # Various C standards handled by features.h in Linux. FEATURES := ifeq "$(notdir $(shell pwd))" "utils" # To get off_t for fseeko() usage in fitshdr when gcc is invoked with the # -std=c89 (same as -ansi) or the -std=c99 options. FEATURES := -D_XOPEN_SOURCE endif # Linux with gcc/gfortran (also works for Darwin). ifeq "$(FLAVOUR)" "Linux" F := $(FLAVOUR) export CC := gcc -std=c89 -pedantic export CPPFLAGS := $(FEATURES) export CFLAGS := -g -O0 -Wall -Wpadded -Wno-long-long export FFLAGS := -g -O0 -fimplicit-none -Wall -I. VALGRIND := valgrind -v --leak-check=yes endif ifeq "$(FLAVOUR)" "Linuxp" F := $(FLAVOUR) export CC := gcc -std=c89 -pedantic export CPPFLAGS := $(FEATURES) export CFLAGS := -pg -g -O -Wall -Wpadded -Wno-long-long export FFLAGS := -pg -a -g -O -fimplicit-none -Wall -I. export LDFLAGS := -pg -g $(filter -L%, $(LDFLAGS)) override EXTRA_CLEAN := gmon.out bb.out endif # Solaris with gcc/gfortran 4.x (lynx). ifeq "$(FLAVOUR)" "SUN/GNU" F := $(FLAVOUR) export CC := gcc -std=c89 export CPPFLAGS := $(FEATURES) export CFLAGS := -g -Wall -Wpadded -Wno-long-long export F77 := gfortran export FFLAGS := -g -fimplicit-none -Wall -I. LD := gcc endif ifeq "$(FLAVOUR)" "SUN/GNU3" F := $(FLAVOUR) export CC := gcc-3.1.1 -std=c89 export CPPFLAGS := $(FEATURES) export CFLAGS := -g -Wall -Wpadded -Wno-long-long export F77 := g77-3.1.1 export FFLAGS := -g -Wimplicit -Wunused -Wno-globals -I. LD := gcc-3.1.1 endif ifeq "$(FLAVOUR)" "SUN/GNUp" F := $(FLAVOUR) export CC := gcc -std=c89 -pedantic export CPPFLAGS := $(FEATURES) export CFLAGS := -pg -a -g -O -Wall -Wpadded -Wno-long-long export FFLAGS := -pg -a -g -O -fimplicit-none -Wall -I. export LDFLAGS := -pg -a -g $(filter -L%, $(LDFLAGS)) override EXTRA_CLEAN := gmon.out bb.out endif # Solaris with SUN cc/f77. ifeq "$(FLAVOUR)" "SUN/ANSI" F := $(FLAVOUR) WCSTRIG := NATIVE export CC := cc export CFLAGS := -g -I/usr/local/include export F77 := f77 export FFLAGS := -g -erroff=WDECL_LOCAL_NOTUSED LD := f77 endif # Purify and quantify in Solaris. ifeq "$(FLAVOUR)" "SUN/Pure" F := $(FLAVOUR) WCSTRIG := NATIVE export CC := purify gcc export CFLAGS := -g export F77 := purify gcc export FFLAGS := -g -Wimplicit -Wno-globals -I. export LDFLAGS := $(filter -L%, $(LDFLAGS)) override EXTRA_CLEAN := *_pure_p*.[ao] *.pcv .pure ../C/*_pure_p*.[ao] endif ifeq "$(FLAVOUR)" "SUN/Quant" F := $(FLAVOUR) WCSTRIG := NATIVE export CC := quantify gcc export CFLAGS := -g export F77 := quantify gcc export FFLAGS := -g -Wimplicit -Wno-globals -I. export LDFLAGS := $(filter -L%, $(LDFLAGS)) override EXTRA_CLEAN := *_pure_q*.[ao] .pure endif ifneq "$F" "$(FLAVOUR)" override FLAVOUR := unrecognised endif # gmake uses FC in place of configure's F77. ifdef F77 FC := $(F77) endif ifndef TIMER TIMER := date +"%a %Y/%m/%d %X %z, executing on $$HOST" endif ifdef FLAVOUR TIMER := $(TIMER) ; echo " with $(FLAVOUR) FLAVOUR." endif show :: -@ echo 'For code development...' -@ echo ' FLAVOURS := $(FLAVOURS)' -@ echo ' FLAVOUR := $(FLAVOUR)' -@ echo ' VALGRIND := $(VALGRIND)' -@ echo ' EXTRA_CLEAN := $(EXTRA_CLEAN)' -@ echo '' pywcs-1.12/wcslib/Fortran/0000755001153600020070000000000012310355732017542 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/Fortran/cel.inc0000644001153600020070000000611012310355626021000 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: cel.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL CELFREE, CELGET, CELGTC, CELGTD, CELGTI, CELINI, CELPRT, : CELPTC, CELPTD, CELPTI, CELPUT, CELS2X, CELSET, CELX2S INTEGER CELFREE, CELGET, CELGTC, CELGTD, CELGTI, CELINI, CELPRT, : CELPTC, CELPTD, CELPTI, CELPUT, CELS2X, CELSET, CELX2S * Length of the CELPRM data structure (INTEGER array) on 64-bit * machines. Only needs to be 144 on 32-bit machines. INTEGER CELLEN PARAMETER (CELLEN = 150) * Codes for CEL data structure elements used by CELPUT and CELGET. INTEGER CEL_FLAG, CEL_OFFSET, CEL_PHI0, CEL_PRJ, CEL_REF, : CEL_THETA0 PARAMETER (CEL_FLAG = 100) PARAMETER (CEL_OFFSET = 101) PARAMETER (CEL_PHI0 = 102) PARAMETER (CEL_THETA0 = 103) PARAMETER (CEL_REF = 104) PARAMETER (CEL_PRJ = 105) * Codes for CEL data structure elements used by CELGET (only). INTEGER CEL_ERR, CEL_EULER, CEL_ISOLAT, CEL_LATPRQ PARAMETER (CEL_EULER = 200) PARAMETER (CEL_LATPRQ = 201) PARAMETER (CEL_ISOLAT = 202) PARAMETER (CEL_ERR = 203) * Error codes and messages. INTEGER CELERR_BAD_COORD_TRANS, CELERR_BAD_PARAM, : CELERR_BAD_PIX, CELERR_BAD_WORLD, : CELERR_ILL_COORD_TRANS, CELERR_NULL_POINTER, : CELERR_SUCCESS PARAMETER (CELERR_SUCCESS = 0) PARAMETER (CELERR_NULL_POINTER = 1) PARAMETER (CELERR_BAD_PARAM = 2) PARAMETER (CELERR_BAD_COORD_TRANS = 3) PARAMETER (CELERR_ILL_COORD_TRANS = 4) PARAMETER (CELERR_BAD_PIX = 5) PARAMETER (CELERR_BAD_WORLD = 6) CHARACTER CEL_ERRMSG(0:6)*80 COMMON /CEL_DATA/ CEL_ERRMSG pywcs-1.12/wcslib/Fortran/cel_f.c0000644001153600020070000001525712310355626020772 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: cel_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include /* Fortran name mangling. */ #include #define celini_ F77_FUNC(celini, CELINI) #define celput_ F77_FUNC(celput, CELPUT) #define celget_ F77_FUNC(celget, CELGET) #define celfree_ F77_FUNC(celfree, CELFREE) #define celprt_ F77_FUNC(celprt, CELPRT) #define celset_ F77_FUNC(celset, CELSET) #define celx2s_ F77_FUNC(celx2s, CELX2S) #define cels2x_ F77_FUNC(cels2x, CELS2X) #define celptc_ F77_FUNC(celptc, CELPTC) #define celptd_ F77_FUNC(celptd, CELPTD) #define celpti_ F77_FUNC(celpti, CELPTI) #define celgtc_ F77_FUNC(celgtc, CELGTC) #define celgtd_ F77_FUNC(celgtd, CELGTD) #define celgti_ F77_FUNC(celgti, CELGTI) #define CEL_FLAG 100 #define CEL_OFFSET 101 #define CEL_PHI0 102 #define CEL_THETA0 103 #define CEL_REF 104 #define CEL_PRJ 105 #define CEL_EULER 200 #define CEL_LATPRQ 201 #define CEL_ISOLAT 202 #define CEL_ERR 203 /*--------------------------------------------------------------------------*/ int celini_(int *cel) { return celini((struct celprm *)cel); } /*--------------------------------------------------------------------------*/ int celput_(int *cel, const int *what, const void *value, const int *i) { int k; int *icelp; const int *ivalp; const double *dvalp; struct celprm *celp; /* Cast pointers. */ celp = (struct celprm *)cel; ivalp = (const int *)value; dvalp = (const double *)value; celp->flag = 0; switch (*what) { case CEL_FLAG: celp->flag = *ivalp; break; case CEL_OFFSET: celp->offset = *ivalp; break; case CEL_PHI0: celp->phi0 = *dvalp; break; case CEL_THETA0: celp->theta0 = *dvalp; break; case CEL_REF: celp->ref[*i-1] = *dvalp; break; case CEL_PRJ: k = (int *)(&(celp->prj)) - (int *)celp; icelp = cel + k; for (k = 0; k < PRJLEN; k++) { *(icelp++) = *(ivalp++); } break; default: return 1; } return 0; } int celptc_(int *cel, const int *what, const char *value, const int *i) { return celput_(cel, what, value, i); } int celptd_(int *cel, const int *what, const double *value, const int *i) { return celput_(cel, what, value, i); } int celpti_(int *cel, const int *what, const int *value, const int *i) { return celput_(cel, what, value, i); } /*--------------------------------------------------------------------------*/ int celget_(const int *cel, const int *what, void *value) { int k; int *ivalp; double *dvalp; const int *icelp; const struct celprm *celp; /* Cast pointers. */ celp = (const struct celprm *)cel; ivalp = (int *)value; dvalp = (double *)value; switch (*what) { case CEL_FLAG: *ivalp = celp->flag; break; case CEL_OFFSET: *ivalp = celp->offset; break; case CEL_PHI0: *dvalp = celp->phi0; break; case CEL_THETA0: *dvalp = celp->theta0; break; case CEL_REF: for (k = 0; k < 4; k++) { *(dvalp++) = celp->ref[k]; } break; case CEL_PRJ: icelp = (int *)(&(celp->prj)); for (k = 0; k < PRJLEN; k++) { *(ivalp++) = *(icelp++); } break; case CEL_EULER: for (k = 0; k < 5; k++) { *(dvalp++) = celp->euler[k]; } break; case CEL_LATPRQ: *ivalp = celp->latpreq; break; case CEL_ISOLAT: *ivalp = celp->isolat; break; case CEL_ERR: /* Copy the contents of the wcserr struct. */ if (celp->err) { icelp = (int *)(celp->err); for (k = 0; k < ERRLEN; k++) { *(ivalp++) = *(icelp++); } } else { for (k = 0; k < ERRLEN; k++) { *(ivalp++) = 0; } } break; default: return 1; } return 0; } int celgtc_(const int *cel, const int *what, char *value) { return celget_(cel, what, value); } int celgtd_(const int *cel, const int *what, double *value) { return celget_(cel, what, value); } int celgti_(const int *cel, const int *what, int *value) { return celget_(cel, what, value); } /*--------------------------------------------------------------------------*/ int celfree_(int *cel) { return celfree((struct celprm *)cel); } /*--------------------------------------------------------------------------*/ int celprt_(int *cel) { /* This may or may not force the Fortran I/O buffers to be flushed. If * not, try CALL FLUSH(6) before calling CELPRT in the Fortran code. */ fflush(NULL); return celprt((struct celprm *)cel); } /*--------------------------------------------------------------------------*/ int celset_(int *cel) { return celset((struct celprm *)cel); } /*--------------------------------------------------------------------------*/ int celx2s_( int *cel, const int *nx, const int *ny, const int *sxy, const int *sll, const double x[], const double y[], double phi[], double theta[], double lng[], double lat[], int stat[]) { return celx2s((struct celprm *)cel, *nx, *ny, *sxy, *sll, x, y, phi, theta, lng, lat, stat); } /*--------------------------------------------------------------------------*/ int cels2x_( int *cel, const int *nlng, const int *nlat, const int *sll, const int *sxy, const double lng[], const double lat[], double phi[], double theta[], double x[], double y[], int stat[]) { return cels2x((struct celprm *)cel, *nlng, *nlat, *sll, *sxy, lng, lat, phi, theta, x, y, stat); } pywcs-1.12/wcslib/Fortran/fitshdr.inc0000644001153600020070000000515712310355626021712 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: fitshdr.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL FITSHDR, FREEKEYS, KEYGET, KEYIDGET, KEYIDGTC, KEYIDGTI, : KEYIDPTC, KEYIDPUT INTEGER FITSHDR, FREEKEYS, KEYGET, KEYIDGET, KEYIDGTC, KEYIDGTI, : KEYIDPTC, KEYIDPUT * Length of FITSKEY and FITSKEYID data structures (INTEGER arrays) * on 64-bit machines. These are the same for 32-bit machines. INTEGER KEYLEN, KEYIDLEN PARAMETER (KEYLEN = 48) PARAMETER (KEYIDLEN = 6) * Codes for KEYID data structure elements used by KEYIDPUT/GET. INTEGER KEYID_COUNT, KEYID_IDX, KEYID_NAME PARAMETER (KEYID_NAME = 100) PARAMETER (KEYID_COUNT = 101) PARAMETER (KEYID_IDX = 102) * Codes for KEY data structure elements used by KEYGET. INTEGER KEY_COMMENT, KEY_KEYID, KEY_KEYNO, KEY_KEYVALUE, : KEY_KEYWORD, KEY_STATUS, KEY_TYPE, KEY_ULEN PARAMETER (KEY_KEYNO = 200) PARAMETER (KEY_KEYID = 201) PARAMETER (KEY_STATUS = 202) PARAMETER (KEY_KEYWORD = 203) PARAMETER (KEY_TYPE = 204) PARAMETER (KEY_KEYVALUE = 205) PARAMETER (KEY_ULEN = 206) PARAMETER (KEY_COMMENT = 207) CHARACTER FITSHDR_ERRMSG(0:2)*80 COMMON /FITSHDR_DATA/ FITSHDR_ERRMSG pywcs-1.12/wcslib/Fortran/fitshdr_f.c0000644001153600020070000001465112310355626021667 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: fitshdr_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include #include /* Fortran name mangling. */ #include #define keyidput_ F77_FUNC(keyidput, KEYIDPUT) #define keyidget_ F77_FUNC(keyidget, KEYIDGET) #define keyget_ F77_FUNC(keyget, KEYGET) #define fitshdr_ F77_FUNC(fitshdr, FITSHDR) #define freekeys_ F77_FUNC(freekeys, FREEKEYS) #define keyidptc_ F77_FUNC(keyidptc, KEYIDPTC) #define keyidgtc_ F77_FUNC(keyidgtc, KEYIDGTC) #define keyidgti_ F77_FUNC(keyidgti, KEYIDGTI) #define KEYID_NAME 100 #define KEYID_COUNT 101 #define KEYID_IDX 102 #define KEY_KEYNO 200 #define KEY_KEYID 201 #define KEY_STATUS 202 #define KEY_KEYWORD 203 #define KEY_TYPE 204 #define KEY_KEYVALUE 205 #define KEY_ULEN 206 #define KEY_COMMENT 207 /*--------------------------------------------------------------------------*/ int keyidput_(int *keyid, const int *i, const int *what, const void *value) { const char *cvalp; struct fitskeyid *kidp; /* Cast pointers. */ kidp = (struct fitskeyid *)keyid + *i; cvalp = (const char *)value; switch (*what) { case KEYID_NAME: strncpy(kidp->name, cvalp, 12); wcsutil_null_fill(12, kidp->name); break; default: return 1; } return 0; } int keyidptc_(int *keyid, const int *i, const int *what, const char *value) { return keyidput_(keyid, i, what, value); } /*--------------------------------------------------------------------------*/ int keyidget_(const int *keyid, const int *i, const int *what, void *value) { char *cvalp; int *ivalp; const struct fitskeyid *keyidp; /* Cast pointers. */ keyidp = (const struct fitskeyid *)keyid + *i; cvalp = (char *)value; ivalp = (int *)value; switch (*what) { case KEYID_NAME: strncpy(cvalp, keyidp->name, 12); wcsutil_blank_fill(12, cvalp); break; case KEYID_COUNT: *ivalp = keyidp->count; break; case KEYID_IDX: *(ivalp++) = keyidp->idx[0]; *(ivalp++) = keyidp->idx[1]; break; default: return 1; } return 0; } int keyidgtc_(const int *keyid, const int *i, const int *what, char *value) { return keyidget_(keyid, i, what, value); } int keyidgti_(const int *keyid, const int *i, const int *what, int *value) { return keyidget_(keyid, i, what, value); } /*--------------------------------------------------------------------------*/ int keyget_( const int *keys, const int *i, const int *what, void *value, int *nc) { char *cvalp, text[32]; int *ivalp, j; double *dvalp; const struct fitskey *keyp; /* Cast pointers. */ keyp = *((const struct fitskey **)keys) + *i; cvalp = (char *)value; ivalp = (int *)value; dvalp = (double *)value; *nc = 1; switch (*what) { case KEY_KEYNO: *ivalp = keyp->keyno; break; case KEY_KEYID: *ivalp = keyp->keyid; break; case KEY_STATUS: *ivalp = keyp->status; break; case KEY_KEYWORD: *nc = strlen(keyp->keyword); strncpy(cvalp, keyp->keyword, 12); wcsutil_blank_fill(12, cvalp); break; case KEY_TYPE: *ivalp = keyp->type; break; case KEY_KEYVALUE: switch (abs(keyp->type)%10) { case 1: case 2: /* Logical and 32-bit integer. */ *ivalp = keyp->keyvalue.i; break; case 3: /* 64-bit integer. */ *nc = 3; #ifdef WCSLIB_INT64 sprintf(text, "%28.27lld", keyp->keyvalue.k); sscanf(text+1, "%9d%9d%9d", ivalp+2, ivalp+1, ivalp); if (*text == '-') { ivalp[0] *= -1; ivalp[1] *= -1; ivalp[2] *= -1; } #else *(ivalp++) = keyp->keyvalue.k[0]; *(ivalp++) = keyp->keyvalue.k[1]; *(ivalp++) = keyp->keyvalue.k[2]; #endif break; case 4: /* Very long integer. */ *nc = 8; for (j = 0; j < 8; j++) { *(ivalp++) = keyp->keyvalue.l[j]; } break; case 5: /* Floating point. */ *dvalp = keyp->keyvalue.f; break; case 6: case 7: /* Integer complex and floating point complex. */ *nc = 2; *(dvalp++) = keyp->keyvalue.c[0]; *(dvalp++) = keyp->keyvalue.c[1]; break; case 8: /* String or part of a continued string. */ *nc = strlen(keyp->keyvalue.s); strncpy(cvalp, keyp->keyvalue.s, 72); wcsutil_blank_fill(72, cvalp); break; default: /* No value. */ break; } break; case KEY_ULEN: *ivalp = keyp->ulen; break; case KEY_COMMENT: *nc = strlen(keyp->comment); strncpy(cvalp, keyp->comment, 84); wcsutil_blank_fill(84, cvalp); break; default: return 1; } return 0; } /*--------------------------------------------------------------------------*/ int fitshdr_( const char header[], const int *nkeyrec, const int *nkeyids, int *keyids, int *nreject, iptr keys) { return fitshdr(header, *nkeyrec, *nkeyids, (struct fitskeyid *)keyids, nreject, (struct fitskey **)keys); } /*--------------------------------------------------------------------------*/ int freekeys_(int *keys) { free(*((struct fitskey **)keys)); *keys = 0; return 0; } pywcs-1.12/wcslib/Fortran/getwcstab.inc0000644001153600020070000000266512310355626022233 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: getwcstab.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL FTWCST INTEGER FTWCST pywcs-1.12/wcslib/Fortran/getwcstab_f.c0000644001153600020070000000406112310355626022201 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: getwcstab_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include /* Fortran name mangling. */ #include #define ftwcst_ F77_FUNC(ftwcst, FTWCST) /* CFITSIO global variable defined by/for the FITSIO wrappers that maps * Fortran unit numbers to fitsfile *; see f77_wrap.h and f77_wrap1.c. */ extern fitsfile *gFitsFiles[]; /*--------------------------------------------------------------------------*/ int ftwcst_( int *unit, int *nwtb, int *wtb, int *status) { /* *wtb is meant to hold a pointer to a wtbarr struct. On 64-bit machines sizeof(void *) = 2 * sizeof(int) = sizeof(long). */ long wtbp = *((long *)wtb); return fits_read_wcstab(gFitsFiles[*unit], *nwtb, (void *)wtbp, status); } pywcs-1.12/wcslib/Fortran/GNUmakefile0000644001153600020070000002340212310355626021617 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # GNU makefile for building the WCSLIB 4.10 FORTRAN wrappers. # # Summary of the main targets # --------------------------- # build: Build the library # # clean: Delete intermediate object files. # # cleaner: clean, and also delete the test executables. # # cleanest (distclean, or realclean): cleaner, and also delete the # object library. # # check (or test): Compile and run the test programs. By default they are # executed in batch mode, and non-graphical tests only report # "PASS" on success. Use # # make MODE=interactive check # # to run them interactively with full diagnostic output. To skip # graphical tests even if PGPLOT is available, use # # make CHECK=nopgplot check # # tests: Compile the test programs (but don't run them). # # Notes: # 1) If you need to make changes then preferably modify ../makedefs.in # instead and re-run configure. # # 2) This makefile assumes that the WCSLIB 4.10 sources reside in ../C # (as in the distribution kit). # # 3) twcstab assumes that ../C/wcstab.fits has already been generated by # the corresponding C test program. # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: GNUmakefile,v 4.10 2012/02/05 23:41:44 cal103 Exp $ #----------------------------------------------------------------------------- # Get configure settings. include ../makedefs MODULES := $(patsubst %.c,%.o,$(filter-out getwcstab_f.c,$(wildcard *.c))) MODULES += $(patsubst %.f,%.o,$(wildcard *.f)) ifdef GETWCSTAB FGETWCSTAB := ../C/getwcstab.o endif WCSLIB := ../C/$(WCSLIB) # Build the sharable library? ifneq "$(SHRLIB)" "" PICLIB := ../C/libwcs-PIC.a SHRLIB := ../C/$(SHRLIB) endif CPPFLAGS += -I.. -I../C vpath %.h ..:../C vpath %.in .. # For building and exercising the test suite # ------------------------------------------ # Test programs that don't require CFITSIO or PGPLOT. TEST_N := tlin tlog tprj1 tsph tspx ttab1 twcs twcssub tpih1 tfitshdr tunits \ twcsfix # Test programs that require CFITSIO (they don't need PGPLOT). TEST_C := twcstab # Test programs that require PGPLOT but not PGSBOX. TEST_P := tspc tprj2 tcel1 ttab2 ttab3 twcsmix # Test programs that require PGPLOT and PGSBOX. TEST_B := tpih2 TESTS := $(TEST_N) # Add test programs that require CFITSIO if we have it. ifneq "$(CFITSIOINC)" "" ifneq "$(CFITSIOLIB)" "" TESTS += $(TEST_C) endif endif # Add test programs that require PGPLOT if we have it. ifneq "$(CHECK)" "nopgplot" ifneq "$(PGPLOTINC)" "" ifneq "$(PGPLOTLIB)" "" TESTS += $(TEST_P) $(TEST_B) endif endif endif PGSBOXLIB := ../pgsbox/libpgsbox-$(LIBVER).a PGPLOTLIB := $(PGPLOTLIB) # Pattern rules #-------------- $(WCSLIB)(%.o) : %.c -@ echo '' $(CC) $(CPPFLAGS) $(CFLAGS) -c $< $(AR) r $(WCSLIB) $% -@ $(RM) $% $(WCSLIB)(%.o) : %.f -@ echo '' $(FC) $(FFLAGS) -c $< $(AR) r $(WCSLIB) $% -@ $(RM) $% $(PICLIB)(%.o) : %.c -@ echo '' $(CC) $(CPPFLAGS) $(SHRFLAGS) -c $< $(AR) r $(PICLIB) $% -@ $(RM) $% $(PICLIB)(%.o) : %.f -@ echo '' $(FC) $(FFLAGS) $(SHRFLAGS) -c $< $(AR) r $(PICLIB) $% -@ $(RM) $% %.i : %.c -@ echo '' -@ $(RM) $@ $(CPP) $(CPPFLAGS) $(CFLAGS) $< > $@ %.d : %.c -@ echo '' -@ $(CPP) $(CPPFLAGS) $(CFLAGS) $< | \ sed -n -e 's|^# 1 "\([^/].*\.h\)".*|\1|p' | \ sort -u %.o : %.f -@ echo '' $(FC) $(FFLAGS) -c $< run_% : % -@ echo '' -@ $(TIMER) @ if [ '$(MODE)' = interactive -o '$(VALGRIND)' ] ; then \ printf 'Press to run $<: ' ; \ read DUMMY ; \ fi ; \ if [ '$(VALGRIND)' ] ; then \ if [ '$<' = tunits ] ; then \ $(VALGRIND) ./$< < test/units_test ; \ else \ $(VALGRIND) ./$< ; \ fi ; \ else \ if [ '$(filter $<, $(TEST_N) $(TEST_C))' ] ; then \ if [ '$<' = tunits ] ; then \ if [ '$(MODE)' = interactive ] ; then \ ./$< < ../C/test/units_test 2>&1 | tee $<.out ; \ else \ ./$< < ../C/test/units_test > $<.out 2>&1 ; \ fi ; \ else \ if [ '$(MODE)' = interactive ] ; then \ ./$< < /dev/null 2>&1 | tee $<.out ; \ else \ ./$< < /dev/null > $<.out 2>&1 ; \ fi ; \ fi ; \ if grep 'PASS:' $<.out > /dev/null ; then \ if [ '$(MODE)' != interactive ] ; then \ head -2 $<.out ; \ grep 'PASS:' $<.out ; \ fi ; \ echo 'PASS: Fortran/$<' >> test_results ; \ elif [ -f 'test/$<.out' ] ; then \ trap 'rm -f run_test.tmp' 0 1 2 3 15 ; \ sed -e 's/0x[0-9a-f][0-9a-f][0-9a-f]*/0x
      /g' $<.out > \ run_test.tmp ; \ mv -f run_test.tmp $<.out ; \ if cmp -s $<.out test/$<.out ; then \ if [ '$(MODE)' != interactive ] ; then \ head -2 $<.out ; \ echo 'PASS: Output agrees with Fortran/test/$<.out' ; \ fi ; \ echo 'PASS: Fortran/$<' >> test_results ; \ else \ if [ '$(MODE)' != interactive ] ; then \ cat $<.out ; \ fi ; \ echo '' ; \ echo 'FAIL: Output disagrees with Fortran/test/$<.out' ; \ echo 'FAIL: Fortran/$<' >> test_results ; \ fi ; \ elif [ '$(MODE)' != interactive ] ; then \ cat $<.out ; \ echo 'FAIL: Fortran/$<' >> test_results ; \ fi ; \ elif [ '$(MODE)' = interactive ] ; then \ ./$< ; \ else \ if [ '$<' = tcel2 ] ; then \ echo N | ./$< ; \ else \ ./$< < /dev/null 2>&1 ; \ fi ; \ fi ; \ fi -@ echo '' # Static and static pattern rules #-------------------------------- .PHONY : build check clean cleaner cleanest distclean install lib realclean \ test tests build : lib lib : $(WCSLIB) $(SHRLIB) $(WCSLIB) :: -@ echo '' $(MAKE) -C ../C lib $(WCSLIB) :: $(MODULES:%=$(WCSLIB)(%)) -@ echo '' $(RANLIB) $(WCSLIB) $(SHRLIB) : $(PICLIB) -@ echo '' -@ $(RM) -r tmp mkdir tmp && \ cd tmp && \ trap 'cd .. ; $(RM) -r tmp' 0 1 2 3 15 ; \ $(AR) x ../$(PICLIB) && \ $(SHRLD) $(LDFLAGS) -o $(@F) *.o && \ mv $(@F) ../../C $(PICLIB) : $(MODULES:%.o=$(PICLIB)(%.o)) ; install : build $(MAKE) -C ../C install $(INSTALL) -m 444 *.inc $(INCDIR) clean : - $(RM) -r *.o *.i a.out t*.out core fort.* *.dSYM $(EXTRA_CLEAN) cleaner : clean - $(RM) .gdb_history - $(RM) $(TEST_N) - $(RM) $(TEST_P) tpih2 twcstab - $(RM) tofits pih.fits test_results cleanest distclean realclean : cleaner - $(RM) $(WCSLIB) $(PICLIB) $(SHRLIB) check test : tests $(TESTS:%=run_%) tests : $(TESTS) $(TEST_N) : % : test/%.f $(WCSLIB) -@ echo '' $(FC) $(FFLAGS) $(LDFLAGS) -o $@ $< $(WCSLIB) $(LIBS) -@ $(RM) $@.o $(TEST_P) : % : test/%.f $(WCSLIB) -@ echo '' $(FC) $(FFLAGS) $(LDFLAGS) -o $@ $< $(WCSLIB) $(PGPLOTLIB) $(LIBS) -@ $(RM) $@.o tpih2 : % : test/%.f $(PGSBOXLIB) $(WCSLIB) -@ echo '' $(FC) $(FFLAGS) $(LDFLAGS) -o $@ $< $(PGSBOXLIB) $(WCSLIB) \ $(PGPLOTLIB) $(LIBS) -@ $(RM) $@.o twcstab : test/twcstab.f getwcstab_f.o getwcstab.inc $(FGETWCSTAB) \ $(WCSLIB) -@ echo '' $(FC) $(FFLAGS) $(LDFLAGS) -o $@ $< getwcstab_f.o \ $(FGETWCSTAB) $(CFITSIOLIB) $(WCSLIB) $(LIBS) -@ $(RM) $@.o getwcstab_f.o : getwcstab_f.c getwcstab.h -@ echo '' $(CC) $(CPPFLAGS) $(CFLAGS) $(CFITSIOINC) -c $< ../C/getwcstab.o :: -@ echo '' $(MAKE) -C ../C getwcstab.o $(PGSBOXLIB) : -@ echo '' $(MAKE) -C ../pgsbox lib tofits : ../C/test/tofits.c $(CC) $(CFLAGS) -o $@ $< pih.fits : ../C/test/pih.keyrec tofits sed '/^BADKEYREC/q' $< | ./tofits > $@ GNUmakefile : ../makedefs ; ../makedefs ../wcsconfig.h ../wcsconfig_f77.h : makedefs.in wcsconfig.h.in \ wcsconfig_f77.h.in ../config.status -@ $(RM) ../wcsconfig.h ../wcsconfig_f77.h cd .. && ./config.status show :: -@ echo ' MODULES := $(MODULES)' # Dependencies (use the %.d pattern rule to list them) #----------------------------------------------------- $(WCSLIB)(cel_f.o) : cel.h prj.h wcserr.h wcsconfig_f77.h $(WCSLIB)(fitshdr_f.o) : fitshdr.h wcsconfig.h wcsconfig_f77.h wcsutil.h $(WCSLIB)(getwcstab_f.o): getwcstab.h wcsconfig_f77.h $(WCSLIB)(lin_f.o) : lin.h wcsconfig_f77.h wcserr.h $(WCSLIB)(log_f.o) : log.h wcsconfig_f77.h $(WCSLIB)(prj_f.o) : prj.h wcsconfig_f77.h wcserr.h $(WCSLIB)(spc_f.o) : spc.h spx.h wcsconfig_f77.h wcserr.h wcsutil.h $(WCSLIB)(sph_f.o) : sph.h wcsconfig_f77.h $(WCSLIB)(spx_f.o) : spx.h wcsconfig_f77.h wcserr.h $(WCSLIB)(tab_f.o) : tab.h wcsconfig_f77.h wcserr.h $(WCSLIB)(wcs_f.o) : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h \ wcsconfig_f77.h wcserr.h wcsutil.h $(WCSLIB)(wcsfix_f.o) : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h \ wcsconfig_f77.h wcserr.h wcsfix.h $(WCSLIB)(wcshdr_f.o) : cel.h lin.h prj.h spc.h spx.h tab.h wcs.h \ wcsconfig_f77.h wcserr.h wcshdr.h $(WCSLIB)(wcsunits_f.o) : wcsconfig_f77.h wcserr.h wcsunits.h wcsutil.h tcel1 : cel.inc prj.inc tfitshdr: fitshdr.inc wcshdr.inc tlin : lin.inc tlog : log.inc tpih1 : wcs.inc wcsfix.inc wcshdr.inc tpih2 : wcs.inc wcshdr.inc tprj1 : prj.inc tprj2 : prj.inc tspc : spc.inc spx.inc tspx : spx.inc ttab1 : tab.inc ttab2 : tab.inc ttab3 : prj.inc tab.inc tunits : wcsunits.inc twcs : cel.inc prj.inc wcs.inc wcserr.inc wcsmath.inc twcsfix : wcs.inc wcsfix.inc wcsunits.inc twcsmix : cel.inc lin.inc prj.inc wcs.inc twcssub : wcs.inc twcstab : getwcstab.inc wcs.inc wcsfix.inc wcshdr.inc run_tfitshdr run_tpih1 run_tpih2: pih.fits run_twcstab: ../C/wcstab.fits pywcs-1.12/wcslib/Fortran/lin.inc0000644001153600020070000000540312310355626021023 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: lin.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL LINCPY, LINFREE, LINGET, LINGTD, LINGTI, LININI, LINP2X, : LINPRT, LINPTD, LINPTI, LINPUT, LINSET, LINX2P INTEGER LINCPY, LINFREE, LINGET, LINGTD, LINGTI, LININI, LINP2X, : LINPRT, LINPTD, LINPTI, LINPUT, LINSET, LINX2P * Length of the LINPRM data structure (INTEGER array) on 64-bit * machines. Only needs to be 18 on 32-bit machines. INTEGER LINLEN PARAMETER (LINLEN = 28) * Codes for LIN data structure elements used by LINPUT and LINGET. INTEGER LIN_CDELT, LIN_CRPIX, LIN_FLAG, LIN_NAXIS, LIN_PC PARAMETER (LIN_FLAG = 100) PARAMETER (LIN_NAXIS = 101) PARAMETER (LIN_CRPIX = 102) PARAMETER (LIN_PC = 103) PARAMETER (LIN_CDELT = 104) * Codes for LIN data structure elements used by LINGET (only). INTEGER LIN_ERR, LIN_IMGPIX, LIN_PIXIMG, LIN_UNITY PARAMETER (LIN_PIXIMG = 200) PARAMETER (LIN_IMGPIX = 201) PARAMETER (LIN_UNITY = 202) PARAMETER (LIN_ERR = 203) * Error codes and messages. INTEGER LINERR_MEMORY, LINERR_NULL_POINTER, LINERR_SINGULAR_MTX, : LINERR_SUCCESS PARAMETER (LINERR_SUCCESS = 0) PARAMETER (LINERR_NULL_POINTER = 1) PARAMETER (LINERR_MEMORY = 2) PARAMETER (LINERR_SINGULAR_MTX = 3) CHARACTER LIN_ERRMSG(0:3)*80 COMMON /LIN_DATA/ LIN_ERRMSG pywcs-1.12/wcslib/Fortran/lin_f.c0000644001153600020070000001554312310355626021007 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: lin_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include /* Fortran name mangling. */ #include #define linini_ F77_FUNC(linini, LININI) #define lincpy_ F77_FUNC(lincpy, LINCPY) #define linput_ F77_FUNC(linput, LINPUT) #define linget_ F77_FUNC(linget, LINGET) #define linfree_ F77_FUNC(linfree, LINFREE) #define linprt_ F77_FUNC(linprt, LINPRT) #define linset_ F77_FUNC(linset, LINSET) #define linp2x_ F77_FUNC(linp2x, LINP2X) #define linx2p_ F77_FUNC(linx2p, LINX2P) #define linptd_ F77_FUNC(linptd, LINPTD) #define linpti_ F77_FUNC(linpti, LINPTI) #define lingtd_ F77_FUNC(lingtd, LINGTD) #define lingti_ F77_FUNC(lingti, LINGTI) #define LIN_FLAG 100 #define LIN_NAXIS 101 #define LIN_CRPIX 102 #define LIN_PC 103 #define LIN_CDELT 104 #define LIN_PIXIMG 200 #define LIN_IMGPIX 201 #define LIN_UNITY 202 #define LIN_ERR 203 /*--------------------------------------------------------------------------*/ int linini_(const int *naxis, int *lin) { return linini(1, *naxis, (struct linprm *)lin); } /*--------------------------------------------------------------------------*/ int lincpy_(const int *linsrc, int *lindst) { return lincpy(1, (const struct linprm *)linsrc, (struct linprm *)lindst); } /*--------------------------------------------------------------------------*/ int linput_( int *lin, const int *what, const void *value, const int *i, const int *j) { int i0, j0, k; const int *ivalp; const double *dvalp; struct linprm *linp; /* Cast pointers. */ linp = (struct linprm *)lin; ivalp = (const int *)value; dvalp = (const double *)value; /* Convert 1-relative FITS axis numbers to 0-relative C array indices. */ i0 = *i - 1; j0 = *j - 1; linp->flag = 0; switch (*what) { case LIN_FLAG: linp->flag = *ivalp; break; case LIN_NAXIS: linp->naxis = *ivalp; break; case LIN_CRPIX: linp->crpix[i0] = *dvalp; break; case LIN_PC: k = (i0)*(linp->naxis) + (j0); *(linp->pc+k) = *dvalp; break; case LIN_CDELT: linp->cdelt[i0] = *dvalp; break; default: return 1; } return 0; } int linptd_( int *lin, const int *what, const double *value, const int *i, const int *j) { return linput_(lin, what, value, i, j); } int linpti_( int *lin, const int *what, const int *value, const int *i, const int *j) { return linput_(lin, what, value, i, j); } /*--------------------------------------------------------------------------*/ int linget_(const int *lin, const int *what, void *value) { int i, j, k, naxis; int *ivalp; double *dvalp; const int *ilinp; const double *dlinp; const struct linprm *linp; /* Cast pointers. */ linp = (const struct linprm *)lin; ivalp = (int *)value; dvalp = (double *)value; naxis = linp->naxis; switch (*what) { case LIN_FLAG: *ivalp = linp->flag; break; case LIN_NAXIS: *ivalp = naxis; break; case LIN_CRPIX: for (i = 0; i < naxis; i++) { *(dvalp++) = linp->crpix[i]; } break; case LIN_PC: /* C row-major to FORTRAN column-major. */ for (j = 0; j < naxis; j++) { dlinp = linp->pc + j; for (i = 0; i < naxis; i++) { *(dvalp++) = *dlinp; dlinp += naxis; } } break; case LIN_CDELT: for (i = 0; i < naxis; i++) { *(dvalp++) = linp->cdelt[i]; } break; case LIN_PIXIMG: /* C row-major to FORTRAN column-major. */ for (j = 0; j < naxis; j++) { dlinp = linp->piximg + j; for (i = 0; i < naxis; i++) { *(dvalp++) = *dlinp; dlinp += naxis; } } break; case LIN_IMGPIX: /* C row-major to FORTRAN column-major. */ for (j = 0; j < naxis; j++) { dlinp = linp->imgpix + j; for (i = 0; i < naxis; i++) { *(dvalp++) = *dlinp; dlinp += naxis; } } break; case LIN_UNITY: *ivalp = linp->unity; break; case LIN_ERR: /* Copy the contents of the wcserr struct. */ if (linp->err) { ilinp = (int *)(linp->err); for (k = 0; k < ERRLEN; k++) { *(ivalp++) = *(ilinp++); } } else { for (k = 0; k < ERRLEN; k++) { *(ivalp++) = 0; } } break; default: return 1; } return 0; } int lingtd_(const int *lin, const int *what, double *value) { return linget_(lin, what, value); } int lingti_(const int *lin, const int *what, int *value) { return linget_(lin, what, value); } /*--------------------------------------------------------------------------*/ int linfree_(int *lin) { return linfree((struct linprm *)lin); } /*--------------------------------------------------------------------------*/ int linprt_(int *lin) { /* This may or may not force the Fortran I/O buffers to be flushed. If * not, try CALL FLUSH(6) before calling LINPRT in the Fortran code. */ fflush(NULL); return linprt((struct linprm *)lin); } /*--------------------------------------------------------------------------*/ int linset_(int *lin) { return linset((struct linprm *)lin); } /*--------------------------------------------------------------------------*/ int linp2x_( int *lin, const int *ncoord, const int *nelem, const double pixcrd[], double imgcrd[]) { return linp2x((struct linprm *)lin, *ncoord, *nelem, pixcrd, imgcrd); } /*--------------------------------------------------------------------------*/ int linx2p_( int *lin, const int *ncoord, const int *nelem, const double imgcrd[], double pixcrd[]) { return linx2p((struct linprm *)lin, *ncoord, *nelem, imgcrd, pixcrd); } pywcs-1.12/wcslib/Fortran/log.inc0000644001153600020070000000360512310355626021024 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: log.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL LOGS2X, LOGX2S INTEGER LOGS2X, LOGX2S * Error codes and messages. INTEGER LOGERR_BAD_LOG_REF_VAL, LOGERR_BAD_WORLD, LOGERR_BAD_X, : LOGERR_NULL_POINTER, LOGERR_SUCCESS PARAMETER (LOGERR_SUCCESS = 0) PARAMETER (LOGERR_NULL_POINTER = 1) PARAMETER (LOGERR_BAD_LOG_REF_VAL = 2) PARAMETER (LOGERR_BAD_X = 3) PARAMETER (LOGERR_BAD_WORLD = 4) CHARACTER LOG_ERRMSG(0:3)*80 COMMON /LOG_DATA/ LOG_ERRMSG pywcs-1.12/wcslib/Fortran/log_f.c0000644001153600020070000000412412310355626020777 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: log_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include /* Fortran name mangling. */ #include #define logx2s_ F77_FUNC(logx2s, LOGX2S) #define logs2x_ F77_FUNC(logs2x, LOGS2X) /*--------------------------------------------------------------------------*/ int logx2s_( const double *crval, const int *nx, const int *sx, const int *slogc, const double x[], double logc[], int stat[]) { return logx2s(*crval, *nx, *sx, *slogc, x, logc, stat); } /*--------------------------------------------------------------------------*/ int logs2x_( const double *crval, const int *nlogc, const int *slogc, const int *sx, const double logc[], double x[], int stat[]) { return logs2x(*crval, *nlogc, *slogc, *sx, logc, x, stat); } pywcs-1.12/wcslib/Fortran/prj.inc0000644001153600020070000001346012310355626021036 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: prj.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL PRJFREE, PRJGET, PRJGTC, PRJGTD, PRJGTI, PRJINI, PRJPRT, : PRJPTC, PRJPTD, PRJPTI, PRJPUT, PRJS2X, PRJSET, PRJX2S INTEGER PRJFREE, PRJGET, PRJGTC, PRJGTD, PRJGTI, PRJINI, PRJPRT, : PRJPTC, PRJPTD, PRJPTI, PRJPUT, PRJS2X, PRJSET, PRJX2S EXTERNAL AZPSET, AZPX2S, AZPS2X, SFLSET, SFLX2S, SFLS2X, : SZPSET, SZPX2S, SZPS2X, PARSET, PARX2S, PARS2X, : TANSET, TANX2S, TANS2X, MOLSET, MOLX2S, MOLS2X, : STGSET, STGX2S, STGS2X, AITSET, AITX2S, AITS2X, : SINSET, SINX2S, SINS2X, COPSET, COPX2S, COPS2X, : ARCSET, ARCX2S, ARCS2X, COESET, COEX2S, COES2X, : ZPNSET, ZPNX2S, ZPNS2X, CODSET, CODX2S, CODS2X, : ZEASET, ZEAX2S, ZEAS2X, COOSET, COOX2S, COOS2X, : AIRSET, AIRX2S, AIRS2X, BONSET, BONX2S, BONS2X, : CYPSET, CYPX2S, CYPS2X, PCOSET, PCOX2S, PCOS2X, : CEASET, CEAX2S, CEAS2X, TSCSET, TSCX2S, TSCS2X, : CARSET, CARX2S, CARS2X, CSCSET, CSCX2S, CSCS2X, : MERSET, MERX2S, MERS2X, QSCSET, QSCX2S, QSCS2X INTEGER AZPSET, AZPX2S, AZPS2X, SFLSET, SFLX2S, SFLS2X, : SZPSET, SZPX2S, SZPS2X, PARSET, PARX2S, PARS2X, : TANSET, TANX2S, TANS2X, MOLSET, MOLX2S, MOLS2X, : STGSET, STGX2S, STGS2X, AITSET, AITX2S, AITS2X, : SINSET, SINX2S, SINS2X, COPSET, COPX2S, COPS2X, : ARCSET, ARCX2S, ARCS2X, COESET, COEX2S, COES2X, : ZPNSET, ZPNX2S, ZPNS2X, CODSET, CODX2S, CODS2X, : ZEASET, ZEAX2S, ZEAS2X, COOSET, COOX2S, COOS2X, : AIRSET, AIRX2S, AIRS2X, BONSET, BONX2S, BONS2X, : CYPSET, CYPX2S, CYPS2X, PCOSET, PCOX2S, PCOS2X, : CEASET, CEAX2S, CEAS2X, TSCSET, TSCX2S, TSCS2X, : CARSET, CARX2S, CARS2X, CSCSET, CSCX2S, CSCS2X, : MERSET, MERX2S, MERS2X, QSCSET, QSCX2S, QSCS2X * Length of the PRJPRM data structure (INTEGER array) on 64-bit * machines. Only needs to be 116 on 32-bit machines. INTEGER PRJLEN PARAMETER (PRJLEN = 120) * Number of projection parameters supported by WCSLIB, 0 to PVN-1. INTEGER PRJ_PVN PARAMETER (PRJ_PVN = 30) * Codes for PRJ data structure elements used by PRJPUT and PRJGET. INTEGER PRJ_BOUNDS, PRJ_CODE, PRJ_FLAG, PRJ_PHI0, PRJ_PV, : PRJ_R0, PRJ_THETA0 PARAMETER (PRJ_FLAG = 100) PARAMETER (PRJ_CODE = 101) PARAMETER (PRJ_R0 = 102) PARAMETER (PRJ_PV = 103) PARAMETER (PRJ_PHI0 = 104) PARAMETER (PRJ_THETA0 = 105) PARAMETER (PRJ_BOUNDS = 106) * Codes for PRJ data structure elements used by PRJGET (only). INTEGER PRJ_CATEGORY, PRJ_CONFORMAL, PRJ_ERR, PRJ_GLOBAL, : PRJ_DIVERGENT, PRJ_EQUIAREAL, PRJ_N, PRJ_NAME, : PRJ_PVRANGE, PRJ_SIMPLEZEN, PRJ_W, PRJ_X0, PRJ_Y0 PARAMETER (PRJ_NAME = 200) PARAMETER (PRJ_CATEGORY = 201) PARAMETER (PRJ_PVRANGE = 202) PARAMETER (PRJ_SIMPLEZEN = 203) PARAMETER (PRJ_EQUIAREAL = 204) PARAMETER (PRJ_CONFORMAL = 205) PARAMETER (PRJ_GLOBAL = 206) PARAMETER (PRJ_DIVERGENT = 207) PARAMETER (PRJ_X0 = 208) PARAMETER (PRJ_Y0 = 209) PARAMETER (PRJ_ERR = 210) PARAMETER (PRJ_W = 211) PARAMETER (PRJ_N = 212) * Projection categories. INTEGER PRJ_CONIC, PRJ_CONVENTIONAL, PRJ_CYLINDRICAL, : PRJ_HEALPIX, PRJ_POLYCONIC, PRJ_PSEUDOCYLINDRICAL, : PRJ_QUADCUBE, PRJ_ZENITHAL PARAMETER (PRJ_ZENITHAL = 1) PARAMETER (PRJ_CYLINDRICAL = 2) PARAMETER (PRJ_PSEUDOCYLINDRICAL = 3) PARAMETER (PRJ_CONVENTIONAL = 4) PARAMETER (PRJ_CONIC = 5) PARAMETER (PRJ_POLYCONIC = 6) PARAMETER (PRJ_QUADCUBE = 7) PARAMETER (PRJ_HEALPIX = 8) * Error codes and messages. INTEGER PRJERR_BAD_PARAM, PRJERR_BAD_PIX, PRJERR_BAD_WORLD, : PRJERR_NULL_POINTER, PRJERR_SUCCESS PARAMETER (PRJERR_SUCCESS = 0) PARAMETER (PRJERR_NULL_POINTER = 1) PARAMETER (PRJERR_BAD_PARAM = 2) PARAMETER (PRJERR_BAD_PIX = 3) PARAMETER (PRJERR_BAD_WORLD = 4) CHARACTER PRJ_ERRMSG(0:4)*80 COMMON /PRJ_DATA/ PRJ_ERRMSG pywcs-1.12/wcslib/Fortran/prj_f.c0000644001153600020070000002013012310355626021004 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: prj_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include /* Fortran name mangling. */ #include #define prjini_ F77_FUNC(prjini, PRJINI) #define prjput_ F77_FUNC(prjput, PRJPUT) #define prjget_ F77_FUNC(prjget, PRJGET) #define prjfree_ F77_FUNC(prjfree, PRJFREE) #define prjprt_ F77_FUNC(prjprt, PRJPRT) #define prjptc_ F77_FUNC(prjptc, PRJPTC) #define prjptd_ F77_FUNC(prjptd, PRJPTD) #define prjpti_ F77_FUNC(prjpti, PRJPTI) #define prjgtc_ F77_FUNC(prjgtc, PRJGTC) #define prjgtd_ F77_FUNC(prjgtd, PRJGTD) #define prjgti_ F77_FUNC(prjgti, PRJGTI) #define PRJ_FLAG 100 #define PRJ_CODE 101 #define PRJ_R0 102 #define PRJ_PV 103 #define PRJ_PHI0 104 #define PRJ_THETA0 105 #define PRJ_BOUNDS 106 #define PRJ_NAME 200 #define PRJ_CATEGORY 201 #define PRJ_PVRANGE 202 #define PRJ_SIMPLEZEN 203 #define PRJ_EQUIAREAL 204 #define PRJ_CONFORMAL 205 #define PRJ_GLOBAL 206 #define PRJ_DIVERGENT 207 #define PRJ_X0 208 #define PRJ_Y0 209 #define PRJ_ERR 210 #define PRJ_W 211 #define PRJ_N 212 /*--------------------------------------------------------------------------*/ int prjini_(int *prj) { return prjini((struct prjprm *)prj); } /*--------------------------------------------------------------------------*/ int prjput_(int *prj, const int *what, const void *value, const int *m) { const char *cvalp; const int *ivalp; const double *dvalp; struct prjprm *prjp; /* Cast pointers. */ prjp = (struct prjprm *)prj; cvalp = (const char *)value; ivalp = (const int *)value; dvalp = (const double *)value; prjp->flag = 0; switch (*what) { case PRJ_FLAG: prjp->flag = *ivalp; break; case PRJ_CODE: strncpy(prjp->code, cvalp, 3); prjp->code[3] = '\0'; break; case PRJ_R0: prjp->r0 = *dvalp; break; case PRJ_PV: prjp->pv[*m] = *dvalp; break; case PRJ_PHI0: prjp->phi0 = *dvalp; break; case PRJ_THETA0: prjp->theta0 = *dvalp; break; case PRJ_BOUNDS: prjp->bounds = *ivalp; break; default: return 1; } return 0; } int prjptc_(int *prj, const int *what, const char *value, const int *m) { return prjput_(prj, what, value, m); } int prjptd_(int *prj, const int *what, const double *value, const int *m) { return prjput_(prj, what, value, m); } int prjpti_(int *prj, const int *what, const int *value, const int *m) { return prjput_(prj, what, value, m); } /*--------------------------------------------------------------------------*/ int prjget_(const int *prj, const int *what, void *value) { int k, m; char *cvalp; int *ivalp; double *dvalp; const int *iprjp; const struct prjprm *prjp; /* Cast pointers. */ prjp = (const struct prjprm *)prj; cvalp = (char *)value; ivalp = (int *)value; dvalp = (double *)value; switch (*what) { case PRJ_FLAG: *ivalp = prjp->flag; break; case PRJ_CODE: strncpy(cvalp, prjp->code, 3); break; case PRJ_R0: *dvalp = prjp->r0; break; case PRJ_PV: for (m = 0; m < PVN; m++) { *(dvalp++) = prjp->pv[m]; } break; case PRJ_PHI0: *dvalp = prjp->phi0; break; case PRJ_THETA0: *dvalp = prjp->theta0; break; case PRJ_BOUNDS: *ivalp = prjp->bounds; break; case PRJ_NAME: strncpy(cvalp, prjp->name, 40); break; case PRJ_CATEGORY: *ivalp = prjp->category; break; case PRJ_PVRANGE: *ivalp = prjp->pvrange; break; case PRJ_SIMPLEZEN: *ivalp = prjp->simplezen; break; case PRJ_EQUIAREAL: *ivalp = prjp->equiareal; break; case PRJ_CONFORMAL: *ivalp = prjp->conformal; break; case PRJ_GLOBAL: *ivalp = prjp->global; break; case PRJ_DIVERGENT: *ivalp = prjp->divergent; break; case PRJ_X0: *dvalp = prjp->x0; break; case PRJ_Y0: *dvalp = prjp->y0; break; case PRJ_ERR: /* Copy the contents of the wcserr struct. */ if (prjp->err) { iprjp = (int *)(prjp->err); for (k = 0; k < ERRLEN; k++) { *(ivalp++) = *(iprjp++); } } else { for (k = 0; k < ERRLEN; k++) { *(ivalp++) = 0; } } break; case PRJ_W: for (m = 0; m < 10; m++) { *(dvalp++) = prjp->w[m]; } break; case PRJ_N: *ivalp = prjp->n; break; default: return 1; } return 0; } int prjgtc_(const int *prj, const int *what, char *value) { return prjget_(prj, what, value); } int prjgtd_(const int *prj, const int *what, double *value) { return prjget_(prj, what, value); } int prjgti_(const int *prj, const int *what, int *value) { return prjget_(prj, what, value); } /*--------------------------------------------------------------------------*/ int prjfree_(int *prj) { return prjfree((struct prjprm *)prj); } /*--------------------------------------------------------------------------*/ int prjprt_(int *prj) { /* This may or may not force the Fortran I/O buffers to be flushed. If * not, try CALL FLUSH(6) before calling PRJPRT in the Fortran code. */ fflush(NULL); return prjprt((struct prjprm *)prj); } /*--------------------------------------------------------------------------*/ #define PRJSET_FWRAP(pcode, PCODE) \ int F77_FUNC(pcode##set, PCODE##SET)(int *prj) \ {return prjset((struct prjprm *)prj);} #define PRJS2X_FWRAP(pcode, PCODE) \ int F77_FUNC(pcode##s2x, PCODE##S2X)( \ int *prj, \ const int *nphi, \ const int *ntheta, \ const int *spt, \ const int *sxy, \ const double phi[], \ const double theta[], \ double x[], \ double y[], \ int stat[]) \ {return prj##s2x((struct prjprm *)prj, *nphi, *ntheta, *spt, *sxy, \ phi, theta, x, y, stat);} #define PRJX2S_FWRAP(pcode, PCODE) \ int F77_FUNC(pcode##x2s, PRJ##X2S)( \ int *prj, \ const int *nx, \ const int *ny, \ const int *sxy, \ const int *spt, \ const double x[], \ const double y[], \ double phi[], \ double theta[], \ int stat[]) \ {return pcode##x2s((struct prjprm *)prj, *nx, *ny, *sxy, *spt, x, y, \ phi, theta, stat);} #define PRJ_FWRAP(pcode, PCODE) \ PRJSET_FWRAP(pcode, PCODE) \ PRJS2X_FWRAP(pcode, PCODE) \ PRJX2S_FWRAP(pcode, PCODE) PRJ_FWRAP(prj, PRJ) PRJ_FWRAP(azp, AZP) PRJ_FWRAP(szp, SZP) PRJ_FWRAP(tan, TAN) PRJ_FWRAP(stg, STG) PRJ_FWRAP(sin, SIN) PRJ_FWRAP(arc, ARC) PRJ_FWRAP(zpn, ZPN) PRJ_FWRAP(zea, ZEA) PRJ_FWRAP(air, AIR) PRJ_FWRAP(cyp, CYP) PRJ_FWRAP(cea, CEA) PRJ_FWRAP(car, CAR) PRJ_FWRAP(mer, MER) PRJ_FWRAP(sfl, SFL) PRJ_FWRAP(par, PAR) PRJ_FWRAP(mol, MOL) PRJ_FWRAP(ait, AIT) PRJ_FWRAP(cop, COP) PRJ_FWRAP(coe, COE) PRJ_FWRAP(cod, COD) PRJ_FWRAP(coo, COO) PRJ_FWRAP(bon, BON) PRJ_FWRAP(pco, PCO) PRJ_FWRAP(tsc, TSC) PRJ_FWRAP(csc, CSC) PRJ_FWRAP(qsc, QSC) PRJ_FWRAP(hpx, HPX) pywcs-1.12/wcslib/Fortran/spc.inc0000644001153600020070000000623212310355626021027 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: spc.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL SPCAIPS, SPCFREE, SPCGET, SPCGTC, SPCGTD, SPCGTI, : SPCINI, SPCPRT, SPCPTC, SPCPTD, SPCPTI, SPCPUT, SPCS2X, : SPCSET, SPCSPXE, SPCTRNE, SPCTYPE, SPCX2S, SPCXPSE INTEGER SPCAIPS, SPCFREE, SPCGET, SPCGTC, SPCGTD, SPCGTI, : SPCINI, SPCPRT, SPCPTC, SPCPTD, SPCPTI, SPCPUT, SPCS2X, : SPCSET, SPCSPXE, SPCTRNE, SPCTYPE, SPCX2S, SPCXPSE * Deprecated functions. EXTERNAL SPCSPX, SPCTRN, SPCTYP, SPCXPS INTEGER SPCSPX, SPCTRN, SPCTYP, SPCXPS * Length of the SPCPRM data structure (INTEGER array) on 64-bit * machines. Only needs to be 44 on 32-bit machines. INTEGER SPCLEN PARAMETER (SPCLEN = 50) * Codes for SPC data structure elements used by SPCPUT and SPCGET. INTEGER SPC_CODE, SPC_CRVAL, SPC_FLAG, SPC_PV, SPC_RESTFRQ, : SPC_RESTWAV, SPC_TYPE PARAMETER (SPC_FLAG = 100) PARAMETER (SPC_TYPE = 101) PARAMETER (SPC_CODE = 102) PARAMETER (SPC_CRVAL = 103) PARAMETER (SPC_RESTFRQ = 104) PARAMETER (SPC_RESTWAV = 105) PARAMETER (SPC_PV = 106) * Codes for SPC data structure elements used by SPCGET (only). INTEGER SPC_ERR, SPC_ISGRISM, SPC_W PARAMETER (SPC_W = 200) PARAMETER (SPC_ISGRISM = 201) PARAMETER (SPC_ERR = 202) * Error codes and messages. INTEGER SPCERR_BAD_SPEC, SPCERR_BAD_SPEC_PARAMS, SPCERR_BAD_X, : SPCERR_NULL_POINTER, SPCERR_SUCCESS PARAMETER (SPCERR_SUCCESS = 0) PARAMETER (SPCERR_NULL_POINTER = 1) PARAMETER (SPCERR_BAD_SPEC_PARAMS = 2) PARAMETER (SPCERR_BAD_X = 3) PARAMETER (SPCERR_BAD_SPEC = 4) CHARACTER SPC_ERRMSG(0:4)*80 COMMON /SPC_DATA/ SPC_ERRMSG pywcs-1.12/wcslib/Fortran/spc_f.c0000644001153600020070000002636712310355626021020 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: spc_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include #include /* Fortran name mangling. */ #include #define spcini_ F77_FUNC(spcini, SPCINI) #define spcput_ F77_FUNC(spcput, SPCPUT) #define spcget_ F77_FUNC(spcget, SPCGET) #define spcfree_ F77_FUNC(spcfree, SPCFREE) #define spcprt_ F77_FUNC(spcprt, SPCPRT) #define spcset_ F77_FUNC(spcset, SPCSET) #define spcx2s_ F77_FUNC(spcx2s, SPCX2S) #define spcs2x_ F77_FUNC(spcs2x, SPCS2X) #define spctype_ F77_FUNC(spctype, SPCTYPE) #define spcspxe_ F77_FUNC(spcspxe, SPCSPXE) #define spcxpse_ F77_FUNC(spcxpse, SPCXPSE) #define spctrne_ F77_FUNC(spctrne, SPCTRNE) #define spcaips_ F77_FUNC(spcaips, SPCAIPS) #define spcptc_ F77_FUNC(spcptc, SPCPTC) #define spcptd_ F77_FUNC(spcptd, SPCPTD) #define spcpti_ F77_FUNC(spcpti, SPCPTI) #define spcgtc_ F77_FUNC(spcgtc, SPCGTC) #define spcgtd_ F77_FUNC(spcgtd, SPCGTD) #define spcgti_ F77_FUNC(spcgti, SPCGTI) /* Deprecated. */ #define spctyp_ F77_FUNC(spctyp, SPCTYP) #define spcspx_ F77_FUNC(spcspx, SPCSPX) #define spcxps_ F77_FUNC(spcxps, SPCXPS) #define spctrn_ F77_FUNC(spctrn, SPCTRN) #define SPC_FLAG 100 #define SPC_TYPE 101 #define SPC_CODE 102 #define SPC_CRVAL 103 #define SPC_RESTFRQ 104 #define SPC_RESTWAV 105 #define SPC_PV 106 #define SPC_W 200 #define SPC_ISGRISM 201 #define SPC_ERR 202 /*--------------------------------------------------------------------------*/ int spcini_(int *spc) { return spcini((struct spcprm *)spc); } /*--------------------------------------------------------------------------*/ int spcput_(int *spc, const int *what, const void *value, const int *m) { const char *cvalp; const int *ivalp; const double *dvalp; struct spcprm *spcp; /* Cast pointers. */ spcp = (struct spcprm *)spc; cvalp = (const char *)value; ivalp = (const int *)value; dvalp = (const double *)value; spcp->flag = 0; switch (*what) { case SPC_FLAG: spcp->flag = *ivalp; break; case SPC_TYPE: strncpy(spcp->type, cvalp, 4); spcp->type[4] = '\0'; break; case SPC_CODE: strncpy(spcp->code, cvalp, 3); spcp->code[3] = '\0'; break; case SPC_CRVAL: spcp->crval = *dvalp; break; case SPC_RESTFRQ: spcp->restfrq = *dvalp; break; case SPC_RESTWAV: spcp->restwav = *dvalp; break; case SPC_PV: spcp->pv[*m] = *dvalp; break; default: return 1; } return 0; } int spcptc_(int *spc, const int *what, const char *value, const int *m) { return spcput_(spc, what, value, m); } int spcptd_(int *spc, const int *what, const double *value, const int *m) { return spcput_(spc, what, value, m); } int spcpti_(int *spc, const int *what, const int *value, const int *m) { return spcput_(spc, what, value, m); } /*--------------------------------------------------------------------------*/ int spcget_(const int *spc, const int *what, void *value) { int k, m; char *cvalp; int *ivalp; double *dvalp; const int *ispcp; const struct spcprm *spcp; /* Cast pointers. */ spcp = (const struct spcprm *)spc; cvalp = (char *)value; ivalp = (int *)value; dvalp = (double *)value; switch (*what) { case SPC_FLAG: *ivalp = spcp->flag; break; case SPC_TYPE: strncpy(cvalp, spcp->type, 4); break; case SPC_CODE: strncpy(cvalp, spcp->code, 3); break; case SPC_CRVAL: *dvalp = spcp->crval; break; case SPC_RESTFRQ: *dvalp = spcp->restfrq; break; case SPC_RESTWAV: *dvalp = spcp->restwav; break; case SPC_PV: for (m = 0; m < 7; m++) { *(dvalp++) = spcp->pv[m]; } break; case SPC_W: for (m = 0; m < 6; m++) { *(dvalp++) = spcp->w[m]; } break; case SPC_ISGRISM: *ivalp = spcp->isGrism; break; case SPC_ERR: /* Copy the contents of the wcserr struct. */ if (spcp->err) { ispcp = (int *)(spcp->err); for (k = 0; k < ERRLEN; k++) { *(ivalp++) = *(ispcp++); } } else { for (k = 0; k < ERRLEN; k++) { *(ivalp++) = 0; } } break; default: return 1; } return 0; } int spcgtc_(const int *spc, const int *what, char *value) { return spcget_(spc, what, value); } int spcgtd_(const int *spc, const int *what, double *value) { return spcget_(spc, what, value); } int spcgti_(const int *spc, const int *what, int *value) { return spcget_(spc, what, value); } /*--------------------------------------------------------------------------*/ int spcfree_(int *spc) { return spcfree((struct spcprm *)spc); } /*--------------------------------------------------------------------------*/ int spcprt_(int *spc) { /* This may or may not force the Fortran I/O buffers to be flushed. If * not, try CALL FLUSH(6) before calling SPCPRT in the Fortran code. */ fflush(NULL); return spcprt((struct spcprm *)spc); } /*--------------------------------------------------------------------------*/ int spcset_(int *spc) { return spcset((struct spcprm *)spc); } /*--------------------------------------------------------------------------*/ int spcx2s_( int *spc, const int *nx, const int *sspec, const int *sx, const double x[], double spec[], int stat[]) { return spcx2s((struct spcprm *)spc, *nx, *sx, *sspec, x, spec, stat); } /*--------------------------------------------------------------------------*/ int spcs2x_( int *spc, const int *nspec, const int *sspec, const int *sx, const double spec[], double x[], int stat[]) { return spcs2x((struct spcprm *)spc, *nspec, *sspec, *sx, spec, x, stat); } /*--------------------------------------------------------------------------*/ int spctype_( const char ctypei[8], char stype[4], char scode[3], char sname[21], char units[7], char ptype[1], char xtype[1], int *restreq, iptr err) { char ctypei_[9], scode_[4], sname_[22], stype_[5], units_[8]; int status; strncpy(ctypei_, ctypei, 8); ctypei_[8] = '\0'; status = spctype(ctypei_, stype_, scode_, sname_, units_, ptype, xtype, restreq, (struct wcserr **)err); wcsutil_blank_fill( 5, stype_); wcsutil_blank_fill( 4, scode_); wcsutil_blank_fill(22, sname_); wcsutil_blank_fill( 8, units_); strncpy(stype, stype_, 4); strncpy(scode, scode_, 3); strncpy(sname, sname_, 21); strncpy(units, units_, 7); return status; } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int spctyp_( const char ctypei[8], char stype[4], char scode[3], char sname[21], char units[7], char ptype[1], char xtype[1], int *restreq) { return spctype_(ctypei, stype, scode, sname, units, ptype, xtype, restreq, 0x0); } /*--------------------------------------------------------------------------*/ int spcspxe_( const char ctypeS[8], const double *crvalS, const double *restfrq, const double *restwav, char ptype[1], char xtype[1], int *restreq, double *crvalX, double *dXdS, iptr err) { char ctypeS_[9]; strncpy(ctypeS_, ctypeS, 8); ctypeS_[8] = '\0'; return spcspxe(ctypeS_, *crvalS, *restfrq, *restwav, ptype, xtype, restreq, crvalX, dXdS, (struct wcserr **)err); } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int spcspx_( const char ctypeS[8], const double *crvalS, const double *restfrq, const double *restwav, char ptype[1], char xtype[1], int *restreq, double *crvalX, double *dXdS) { return spcspxe_(ctypeS, crvalS, restfrq, restwav, ptype, xtype, restreq, crvalX, dXdS, 0x0); } /*--------------------------------------------------------------------------*/ int spcxpse_( const char ctypeS[8], const double *crvalX, const double *restfrq, const double *restwav, char ptype[1], char xtype[1], int *restreq, double *crvalS, double *dSdX, iptr err) { char ctypeS_[9]; strncpy(ctypeS_, ctypeS, 8); ctypeS_[8] = '\0'; return spcxpse(ctypeS_, *crvalX, *restfrq, *restwav, ptype, xtype, restreq, crvalS, dSdX, (struct wcserr **)err); } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int spcxps_( const char ctypeS[8], const double *crvalX, const double *restfrq, const double *restwav, char ptype[1], char xtype[1], int *restreq, double *crvalS, double *dSdX) { return spcxpse_(ctypeS, crvalX, restfrq, restwav, ptype, xtype, restreq, crvalS, dSdX, 0x0); } /*--------------------------------------------------------------------------*/ int spctrne_( const char ctypeS1[8], const double *crvalS1, const double *cdeltS1, const double *restfrq, const double *restwav, char ctypeS2[8], double *crvalS2, double *cdeltS2, iptr err) { int status; char ctypeS1_[9], ctypeS2_[9]; strncpy(ctypeS1_, ctypeS1, 8); ctypeS1_[8] = '\0'; status = spctrne(ctypeS1_, *crvalS1, *cdeltS1, *restfrq, *restwav, ctypeS2_, crvalS2, cdeltS2, (struct wcserr **)err); wcsutil_blank_fill(9, ctypeS2_); strncpy(ctypeS2, ctypeS2_, 8); return status; } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int spctrn_( const char ctypeS1[8], const double *crvalS1, const double *cdeltS1, const double *restfrq, const double *restwav, char ctypeS2[8], double *crvalS2, double *cdeltS2) { return spctrne_(ctypeS1, crvalS1, cdeltS1, restfrq, restwav, ctypeS2, crvalS2, cdeltS2, 0x0); } /*--------------------------------------------------------------------------*/ int spcaips_( const char ctypeA[8], int *velref, char ctype[8], char specsys[8]) { int status; char ctypeA_[9], ctype_[9], specsys_[9]; strncpy(ctypeA_, ctypeA, 8); ctypeA_[8] = '\0'; status = spcaips(ctypeA_, *velref, ctype_, specsys_); wcsutil_blank_fill(9, ctype_); strncpy(ctype, ctype_, 8); wcsutil_blank_fill(9, specsys_); strncpy(specsys, specsys_, 8); return status; } pywcs-1.12/wcslib/Fortran/sph.inc0000644001153600020070000000273712310355626021042 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: sph.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL SPHDPA, SPHPAD, SPHS2X, SPHX2S INTEGER SPHDPA, SPHPAD, SPHS2X, SPHX2S pywcs-1.12/wcslib/Fortran/sph_f.c0000644001153600020070000000556212310355626021017 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: sph_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include /* Fortran name mangling. */ #include #define sphx2s_ F77_FUNC(sphx2s, SPHX2S) #define sphs2x_ F77_FUNC(sphs2x, SPHS2X) #define sphdpa_ F77_FUNC(sphdpa, SPHDPA) #define sphpad_ F77_FUNC(sphpad, SPHPAD) /*--------------------------------------------------------------------------*/ int sphx2s_( const double eul[5], const int *nphi, const int *ntheta, const int *spt, const int *sll, const double phi[], const double theta[], double lng[], double lat[]) { return sphx2s(eul, *nphi, *ntheta, *spt, *sll, phi, theta, lng, lat); } /*--------------------------------------------------------------------------*/ int sphs2x_( const double eul[5], const int *nlng, const int *nlat, const int *sll, const int *spt, const double lng[], const double lat[], double phi[], double theta[]) { return sphs2x(eul, *nlng, *nlat, *sll, *spt, lng, lat, phi, theta); } /*--------------------------------------------------------------------------*/ int sphdpa_( const int *nfield, const double *lng0, const double *lat0, const double lng[], const double lat[], double dist[], double pa[]) { return sphdpa(*nfield, *lng0, *lat0, lng, lat, dist, pa); } /*--------------------------------------------------------------------------*/ int sphpad_( const int *nfield, const double *lng0, const double *lat0, const double dist[], const double pa[], double lng[], double lat[]) { return sphpad(*nfield, *lng0, *lat0, dist, pa, lng, lat); } pywcs-1.12/wcslib/Fortran/spx.inc0000644001153600020070000001270112310355626021052 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: spx.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL SPECX, SPXGET, SPXGTI, : FREQAFRQ, AFRQFREQ, FREQENER, ENERFREQ, : FREQWAVN, WAVNFREQ, FREQVRAD, VRADFREQ, : FREQWAVE, WAVEFREQ, FREQAWAV, AWAVFREQ, : FREQVELO, VELOFREQ, WAVEVOPT, VOPTWAVE, : WAVEZOPT, ZOPTWAVE, WAVEAWAV, AWAVWAVE, : WAVEVELO, VELOWAVE, AWAVVELO, VELOAWAV, : VELOBETA, BETAVELO INTEGER SPECX, SPXGET, SPXGTI, : FREQAFRQ, AFRQFREQ, FREQENER, ENERFREQ, : FREQWAVN, WAVNFREQ, FREQVRAD, VRADFREQ, : FREQWAVE, WAVEFREQ, FREQAWAV, AWAVFREQ, : FREQVELO, VELOFREQ, WAVEVOPT, VOPTWAVE, : WAVEZOPT, ZOPTWAVE, WAVEAWAV, AWAVWAVE, : WAVEVELO, VELOWAVE, AWAVVELO, VELOAWAV, : VELOBETA, BETAVELO * Spectral data structure. INTEGER SPX_WAVETYPE, SPX_VELOTYPE DOUBLE PRECISION : SPX_RESTFRQ, SPX_RESTWAV, SPX_TYPES, : SPX_FREQ, SPX_AFRQ, SPX_ENER, SPX_WAVN, : SPX_VRAD, SPX_WAVE, SPX_VOPT, SPX_ZOPT, : SPX_AWAV, SPX_VELO, SPX_BETA, : SPX_DFREQAFRQ, SPX_DAFRQFREQ, SPX_DFREQENER, : SPX_DENERFREQ, SPX_DFREQWAVN, SPX_DWAVNFREQ, : SPX_DFREQVRAD, SPX_DVRADFREQ, SPX_DFREQWAVE, : SPX_DWAVEFREQ, SPX_DFREQAWAV, SPX_DAWAVFREQ, : SPX_DFREQVELO, SPX_DVELOFREQ, SPX_DWAVEVOPT, : SPX_DVOPTWAVE, SPX_DWAVEZOPT, SPX_DZOPTWAVE, : SPX_DWAVEAWAV, SPX_DAWAVWAVE, SPX_DWAVEVELO, : SPX_DVELOWAVE, SPX_DAWAVVELO, SPX_DVELOAWAV, : SPX_DVELOBETA, SPX_DBETAVELO * Direct equivalences into the data structure (not indexing codes). DOUBLE PRECISION SPX(40) EQUIVALENCE (SPX( 1), SPX_RESTFRQ) EQUIVALENCE (SPX( 2), SPX_RESTWAV) EQUIVALENCE (SPX( 3), SPX_TYPES) EQUIVALENCE (SPX( 4), SPX_FREQ) EQUIVALENCE (SPX( 5), SPX_AFRQ) EQUIVALENCE (SPX( 6), SPX_ENER) EQUIVALENCE (SPX( 7), SPX_WAVN) EQUIVALENCE (SPX( 8), SPX_VRAD) EQUIVALENCE (SPX( 9), SPX_WAVE) EQUIVALENCE (SPX(10), SPX_VOPT) EQUIVALENCE (SPX(11), SPX_ZOPT) EQUIVALENCE (SPX(12), SPX_AWAV) EQUIVALENCE (SPX(13), SPX_VELO) EQUIVALENCE (SPX(14), SPX_BETA) EQUIVALENCE (SPX(15), SPX_DFREQAFRQ) EQUIVALENCE (SPX(16), SPX_DAFRQFREQ) EQUIVALENCE (SPX(17), SPX_DFREQENER) EQUIVALENCE (SPX(18), SPX_DENERFREQ) EQUIVALENCE (SPX(19), SPX_DFREQWAVN) EQUIVALENCE (SPX(20), SPX_DWAVNFREQ) EQUIVALENCE (SPX(21), SPX_DFREQVRAD) EQUIVALENCE (SPX(22), SPX_DVRADFREQ) EQUIVALENCE (SPX(23), SPX_DFREQWAVE) EQUIVALENCE (SPX(24), SPX_DWAVEFREQ) EQUIVALENCE (SPX(25), SPX_DFREQAWAV) EQUIVALENCE (SPX(26), SPX_DAWAVFREQ) EQUIVALENCE (SPX(27), SPX_DFREQVELO) EQUIVALENCE (SPX(28), SPX_DVELOFREQ) EQUIVALENCE (SPX(29), SPX_DWAVEVOPT) EQUIVALENCE (SPX(30), SPX_DVOPTWAVE) EQUIVALENCE (SPX(31), SPX_DWAVEZOPT) EQUIVALENCE (SPX(32), SPX_DZOPTWAVE) EQUIVALENCE (SPX(33), SPX_DWAVEAWAV) EQUIVALENCE (SPX(34), SPX_DAWAVWAVE) EQUIVALENCE (SPX(35), SPX_DWAVEVELO) EQUIVALENCE (SPX(36), SPX_DVELOWAVE) EQUIVALENCE (SPX(37), SPX_DAWAVVELO) EQUIVALENCE (SPX(38), SPX_DVELOAWAV) EQUIVALENCE (SPX(39), SPX_DVELOBETA) EQUIVALENCE (SPX(40), SPX_DBETAVELO) INTEGER SPXI(2) EQUIVALENCE (SPXI, SPX_TYPES) EQUIVALENCE (SPXI(1), SPX_WAVETYPE) EQUIVALENCE (SPXI(2), SPX_VELOTYPE) * Codes for SPX data structure elements used by SPXGET (only). INTEGER SPX_ERR PARAMETER (SPX_ERR = 200) * Error codes and messages. INTEGER SPXERR_BAD_INSPEC_COORD, SPXERR_BAD_SPEC_PARAMS, : SPXERR_BAD_SPEC_VAR, SPXERR_NULL_POINTER, SPXERR_SUCCESS PARAMETER (SPXERR_SUCCESS = 0) PARAMETER (SPXERR_NULL_POINTER = 1) PARAMETER (SPXERR_BAD_SPEC_PARAMS = 2) PARAMETER (SPXERR_BAD_SPEC_VAR = 3) PARAMETER (SPXERR_BAD_INSPEC_COORD = 4) CHARACTER SPX_ERRMSG(0:4)*80 COMMON /SPX_DATA/ SPX_ERRMSG pywcs-1.12/wcslib/Fortran/spx_f.c0000644001153600020070000000743012310355626021033 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: spx_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include /* Fortran name mangling. */ #include #define spxget_ F77_FUNC(spxget, SPXGET) #define specx_ F77_FUNC(specx, SPECX) #define SPX_ERR 200 /*--------------------------------------------------------------------------*/ int spxget_(const int *spx, const int *what, void *value) { int k; int *ivalp; const int *ispxp; const struct spxprm *spxp; /* Cast pointers. */ spxp = (const struct spxprm *)spx; ivalp = (int *)value; switch (*what) { case SPX_ERR: /* Copy the contents of the wcserr struct. */ if (spxp->err) { ispxp = (int *)(spxp->err); for (k = 0; k < ERRLEN; k++) { *(ivalp++) = *(ispxp++); } } else { for (k = 0; k < ERRLEN; k++) { *(ivalp++) = 0; } } break; default: return 1; } return 0; } int spxgti_(const int *spx, const int *what, int *value) { return spxget_(spx, what, value); } /*--------------------------------------------------------------------------*/ int specx_( const char *type, const double *spec, const double *restfrq, const double *restwav, double *specs) { char stype[5]; strncpy(stype, type, 4); stype[4] = '\0'; return specx(stype, *spec, *restfrq, *restwav, (struct spxprm *)specs); } /*--------------------------------------------------------------------------*/ #define SPX_FWRAP(scode, SCODE) \ int F77_FUNC(scode, SCODE)( \ const double *rest, \ const int *n1, \ const int *s1, \ const int *s2, \ const double spec1[], \ double spec2[], \ int stat[]) \ {return scode(*rest, *n1, *s1, *s2, spec1, spec2, stat);} SPX_FWRAP(freqafrq, FREQAFRQ) SPX_FWRAP(afrqfreq, AFRQFREQ) SPX_FWRAP(freqener, FREQENER) SPX_FWRAP(enerfreq, ENERFREQ) SPX_FWRAP(freqwavn, FREQWAVN) SPX_FWRAP(wavnfreq, WAVNFREQ) SPX_FWRAP(freqvrad, FREQVRAD) SPX_FWRAP(vradfreq, VRADFREQ) SPX_FWRAP(freqwave, FREQWAVE) SPX_FWRAP(wavefreq, WAVEFREQ) SPX_FWRAP(freqawav, FREQAWAV) SPX_FWRAP(awavfreq, AWAVFREQ) SPX_FWRAP(freqvelo, FREQVELO) SPX_FWRAP(velofreq, VELOFREQ) SPX_FWRAP(wavevopt, WAVEVOPT) SPX_FWRAP(voptwave, VOPTWAVE) SPX_FWRAP(wavezopt, WAVEZOPT) SPX_FWRAP(zoptwave, ZOPTWAVE) SPX_FWRAP(waveawav, WAVEAWAV) SPX_FWRAP(awavwave, AWAVWAVE) SPX_FWRAP(wavevelo, WAVEVELO) SPX_FWRAP(velowave, VELOWAVE) SPX_FWRAP(awavvelo, AWAVVELO) SPX_FWRAP(veloawav, VELOAWAV) SPX_FWRAP(velobeta, VELOBETA) SPX_FWRAP(betavelo, BETAVELO) pywcs-1.12/wcslib/Fortran/tab.inc0000644001153600020070000000613512310355626021012 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tab.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL TABCPY, TABFREE, TABGET, TABGTD, TABGTI, TABINI, TABMEM, : TABPRT, TABPTD, TABPTI, TABPUT, TABS2X, TABSET, TABX2S INTEGER TABCPY, TABFREE, TABGET, TABGTD, TABGTI, TABINI, TABMEM, : TABPRT, TABPTD, TABPTI, TABPUT, TABS2X, TABSET, TABX2S * Length of the TABPRM data structure (INTEGER array) on 64-bit * machines. Only needs to be 24 on 32-bit machines. INTEGER TABLEN PARAMETER (TABLEN = 40) * Codes for TAB data structure elements used by TABPUT and TABGET. INTEGER TAB_COORD, TAB_CRVAL, TAB_FLAG, TAB_INDEX, TAB_K, TAB_M, : TAB_MAP PARAMETER (TAB_FLAG = 100) PARAMETER (TAB_M = 101) PARAMETER (TAB_K = 102) PARAMETER (TAB_MAP = 103) PARAMETER (TAB_CRVAL = 104) PARAMETER (TAB_INDEX = 105) PARAMETER (TAB_COORD = 106) * Codes for TAB data structure elements used by TABGET (only). INTEGER TAB_DELTA, TAB_ERR, TAB_EXTREMA, TAB_NC, TAB_P0, : TAB_SENSE PARAMETER (TAB_NC = 200) PARAMETER (TAB_SENSE = 201) PARAMETER (TAB_P0 = 202) PARAMETER (TAB_DELTA = 203) PARAMETER (TAB_EXTREMA = 204) PARAMETER (TAB_ERR = 205) * Error codes and messages. INTEGER TABERR_BAD_PARAMS, TABERR_BAD_WORLD, TABERR_BAD_X, : TABERR_MEMORY, TABERR_NULL_POINTER, TABERR_SUCCESS PARAMETER (TABERR_SUCCESS = 0) PARAMETER (TABERR_NULL_POINTER = 1) PARAMETER (TABERR_MEMORY = 2) PARAMETER (TABERR_BAD_PARAMS = 3) PARAMETER (TABERR_BAD_X = 4) PARAMETER (TABERR_BAD_WORLD = 5) CHARACTER TAB_ERRMSG(0:5)*80 COMMON /TAB_DATA/ TAB_ERRMSG pywcs-1.12/wcslib/Fortran/tab_f.c0000644001153600020070000001671512310355626020775 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: tab_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include /* Fortran name mangling. */ #include #define tabini_ F77_FUNC(tabini, TABINI) #define tabmem_ F77_FUNC(tabmem, TABMEM) #define tabcpy_ F77_FUNC(tabcpy, TABCPY) #define tabput_ F77_FUNC(tabput, TABPUT) #define tabget_ F77_FUNC(tabget, TABGET) #define tabfree_ F77_FUNC(tabfree, TABFREE) #define tabprt_ F77_FUNC(tabprt, TABPRT) #define tabset_ F77_FUNC(tabset, TABSET) #define tabx2s_ F77_FUNC(tabx2s, TABX2S) #define tabs2x_ F77_FUNC(tabs2x, TABS2X) #define tabptd_ F77_FUNC(tabptd, TABPTD) #define tabpti_ F77_FUNC(tabpti, TABPTI) #define tabgtd_ F77_FUNC(tabgtd, TABGTD) #define tabgti_ F77_FUNC(tabgti, TABGTI) #define TAB_FLAG 100 #define TAB_M 101 #define TAB_K 102 #define TAB_MAP 103 #define TAB_CRVAL 104 #define TAB_INDEX 105 #define TAB_COORD 106 #define TAB_NC 200 #define TAB_SENSE 201 #define TAB_P0 202 #define TAB_DELTA 203 #define TAB_EXTREMA 204 #define TAB_ERR 205 /*--------------------------------------------------------------------------*/ int tabini_(const int *M, const int *K, int *tab) { return tabini(1, *M, K, (struct tabprm *)tab); } /*--------------------------------------------------------------------------*/ int tabmem_(int *tab) { return tabmem((struct tabprm *)tab); } /*--------------------------------------------------------------------------*/ int tabcpy_(const int *tabsrc, int *tabdst) { return tabcpy(1, (const struct tabprm *)tabsrc, (struct tabprm *)tabdst); } /*--------------------------------------------------------------------------*/ int tabput_( int *tab, const int *what, const void *value, const int *m, const int *k) { int k0, m0; const int *ivalp; const double *dvalp; struct tabprm *tabp; /* Cast pointers. */ tabp = (struct tabprm *)tab; ivalp = (const int *)value; dvalp = (const double *)value; /* Convert 1-relative FITS axis numbers to 0-relative C array indices. */ m0 = *m - 1; k0 = *k - 1; tabp->flag = 0; switch (*what) { case TAB_FLAG: tabp->flag = *ivalp; break; case TAB_M: tabp->M = *ivalp; break; case TAB_K: tabp->K[m0] = *ivalp; break; case TAB_MAP: tabp->map[m0] = *ivalp; break; case TAB_CRVAL: tabp->crval[m0] = *dvalp; break; case TAB_INDEX: tabp->index[m0][k0] = *dvalp; break; case TAB_COORD: tabp->coord[m0] = *dvalp; break; default: return 1; } return 0; } int tabptd_(int *tab, const int *what, const double *value, const int *m, const int *k) { return tabput_(tab, what, value, m, k); } int tabpti_(int *tab, const int *what, const int *value, const int *m, const int *k) { return tabput_(tab, what, value, m, k); } /*--------------------------------------------------------------------------*/ int tabget_(const int *tab, const int *what, void *value) { int i, k, m, n; int *ivalp; double *dvalp; const int *itabp; const struct tabprm *tabp; /* Cast pointers. */ tabp = (const struct tabprm *)tab; ivalp = (int *)value; dvalp = (double *)value; switch (*what) { case TAB_FLAG: *ivalp = tabp->flag; break; case TAB_M: *ivalp = tabp->M; break; case TAB_K: for (m = 0; m < tabp->M; m++) { *(ivalp++) = tabp->K[m]; } break; case TAB_MAP: for (m = 0; m < tabp->M; m++) { *(ivalp++) = tabp->map[m]; } break; case TAB_CRVAL: for (m = 0; m < tabp->M; m++) { *(dvalp++) = tabp->crval[m]; } break; case TAB_INDEX: for (m = 0; m < tabp->M; m++) { for (k = 0; k < tabp->K[m]; k++) { *(dvalp++) = tabp->index[m][k]; } } break; case TAB_COORD: /* Don't rely on tabprm.nc being set. */ n = tabp->M; for (m = 0; m < tabp->M; m++) { n *= tabp->K[m]; } for (i = 0; i < n; i++) { *(dvalp++) = tabp->coord[i]; } break; case TAB_NC: *ivalp = tabp->nc; break; case TAB_SENSE: for (m = 0; m < tabp->M; m++) { *(ivalp++) = tabp->sense[m]; } break; case TAB_P0: for (m = 0; m < tabp->M; m++) { *(ivalp++) = tabp->p0[m]; } break; case TAB_DELTA: for (m = 0; m < tabp->M; m++) { *(dvalp++) = tabp->delta[m]; } break; case TAB_EXTREMA: n = 2 * tabp->M; for (m = 1; m < tabp->M; m++) { n *= tabp->K[m]; } for (i = 0; i < n; i++) { *(dvalp++) = tabp->extrema[i]; } break; case TAB_ERR: /* Copy the contents of the wcserr struct. */ if (tabp->err) { itabp = (int *)(tabp->err); for (k = 0; k < ERRLEN; k++) { *(ivalp++) = *(itabp++); } } else { for (k = 0; k < ERRLEN; k++) { *(ivalp++) = 0; } } break; default: return 1; } return 0; } int tabgtd_(const int *tab, const int *what, double *value) { return tabget_(tab, what, value); } int tabgti_(const int *tab, const int *what, int *value) { return tabget_(tab, what, value); } /*--------------------------------------------------------------------------*/ int tabfree_(int *tab) { return tabfree((struct tabprm *)tab); } /*--------------------------------------------------------------------------*/ int tabprt_(const int *tab) { /* This may or may not force the Fortran I/O buffers to be flushed. If * not, try CALL FLUSH(6) before calling TABPRT in the Fortran code. */ fflush(NULL); return tabprt((const struct tabprm *)tab); } /*--------------------------------------------------------------------------*/ int tabset_(int *tab) { return tabset((struct tabprm *)tab); } /*--------------------------------------------------------------------------*/ int tabx2s_( int *tab, const int *ncoord, const int *nelem, const double x[], double world[], int stat[]) { return tabx2s((struct tabprm *)tab, *ncoord, *nelem, x, world, stat); } /*--------------------------------------------------------------------------*/ int tabs2x_( struct tabprm* tab, const int *ncoord, const int *nelem, const double world[], double x[], int stat[]) { return tabs2x((struct tabprm *)tab, *ncoord, *nelem, world, x, stat); } pywcs-1.12/wcslib/Fortran/test/0000755001153600020070000000000012310355732020521 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/Fortran/test/tcel1.f0000644001153600020070000002637712310355626021721 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tcel1.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TCEL1 *----------------------------------------------------------------------- * * tcel1 tests the spherical projection driver routines supplied with * WCSLIB by drawing native and celestial coordinate graticules for * Bonne's projection. * *----------------------------------------------------------------------- INTEGER CI, CRVAL1, CRVAL2, ILAT, ILNG, J, K, LATPOL, LNGPOL, : STAT(361), STATUS REAL XR(512), YR(512) DOUBLE PRECISION LAT(181), LNG(361), PHI(361), REF(4), THETA(361), : X(361), Y(361) CHARACTER TEXT*72 * On some systems, such as Sun Sparc, the structs MUST be aligned * on a double precision boundary, done here using a equivalences. * Failure to do this may result in mysterious "bus errors". INCLUDE 'cel.inc' INCLUDE 'prj.inc' INTEGER CEL(CELLEN) INTEGER NTV(CELLEN) INTEGER PRJ(PRJLEN) DOUBLE PRECISION DUMMY1, DUMMY2, DUMMY3 EQUIVALENCE (CEL,DUMMY1), (NTV,DUMMY2), (PRJ,DUMMY3) *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing WCSLIB celestial coordinate transformation ', : 'routines (tcel1.f)',/, : '---------------------------------------------------', : '------------------') * Initialize. STATUS = CELINI (NTV) * Reference angles for the native graticule (in fact, the defaults). STATUS = CELPUT (NTV, CEL_REF, 0D0, 1) STATUS = CELPUT (NTV, CEL_REF, 0D0, 2) * Set up Bonne's projection with conformal latitude at +35. STATUS = CELGET (NTV, CEL_PRJ, PRJ) STATUS = PRJPUT (PRJ, PRJ_CODE, 'BON', 0) STATUS = PRJPUT (PRJ, PRJ_PV, 35D0, 1) STATUS = CELPUT (NTV, CEL_PRJ, PRJ, 0) * Celestial graticule. STATUS = CELINI (CEL) STATUS = CELPUT (CEL, CEL_PRJ, PRJ, 0) * PGPLOT initialization. CALL PGBEG (0, '/xwindow', 1, 1) * Define pen colours. CALL PGSCR (0, 0.00, 0.00, 0.00) CALL PGSCR (1, 1.00, 1.00, 0.00) CALL PGSCR (2, 1.00, 1.00, 1.00) CALL PGSCR (3, 0.50, 0.50, 0.80) CALL PGSCR (4, 0.80, 0.50, 0.50) CALL PGSCR (5, 0.80, 0.80, 0.80) CALL PGSCR (6, 0.50, 0.50, 0.80) CALL PGSCR (7, 0.80, 0.50, 0.50) CALL PGSCR (8, 0.30, 0.50, 0.30) * Define PGPLOT viewport. CALL PGENV (-180.0, 180.0, -90.0, 140.0, 1, -2) * Loop over CRVAL2, LONPOLE, and LATPOLE with CRVAL1 incrementing by * 15 degrees each time (it has an uninteresting effect). CRVAL1 = -180 DO 190 CRVAL2 = -90, 90, 30 DO 180 LNGPOL = -180, 180, 30 DO 170 LATPOL = -1, 1, 2 * For the celestial graticule, set the celestial * coordinates of the reference point of the projection * (which for Bonne's projection is at the intersection of * the native equator and prime meridian), the native * longitude of the celestial pole, and extra information * needed to determine the celestial latitude of the native * pole. These correspond to FITS keywords CRVAL1, CRVAL2, * LONPOLE, and LATPOLE. STATUS = CELPUT (CEL, CEL_FLAG, 0, 0) STATUS = CELPUT (CEL, CEL_REF, DBLE(CRVAL1), 1) STATUS = CELPUT (CEL, CEL_REF, DBLE(CRVAL2), 2) STATUS = CELPUT (CEL, CEL_REF, DBLE(LNGPOL), 3) STATUS = CELPUT (CEL, CEL_REF, DBLE(LATPOL), 4) * Skip invalid values of LONPOLE. STATUS = CELSET (CEL) IF (STATUS.NE.0) GO TO 170 * Skip redundant values of LATPOLE. STATUS = CELGET (CEL, CEL_REF, REF) IF (LATPOL.EQ.1 .AND. ABS(REF(4)).LT.0.1D0) GO TO 170 * Buffer PGPLOT output. CALL PGBBUF () CALL PGERAS () * Write a descriptive title. TEXT = 'Bonne''s projection (BON) - 15 degree graticule' WRITE (*, '(/,A)') TEXT CALL PGTEXT (-180.0, -100.0, TEXT) WRITE (TEXT, 20) REF(1), REF(2) 20 FORMAT ('centred on celestial coordinates (',F7.2,',',F6.2, : ')') WRITE (*, '(A)') TEXT CALL PGTEXT (-180.0, -110.0, TEXT) WRITE (TEXT, 30) REF(3), REF(4) 30 FORMAT ('with north celestial pole at native coordinates (', : F7.2,',',F7.2,')') WRITE (*, '(A)') TEXT CALL PGTEXT (-180.0, -120.0, TEXT) * Draw the native graticule faintly in the background. CALL PGSCI (8) * Draw native meridians of longitude. J = 1 DO 40 ILAT = -90, 90 LAT(J) = DBLE(ILAT) J = J + 1 40 CONTINUE DO 60 ILNG = -180, 180, 15 LNG(1) = DBLE(ILNG) IF (ILNG.EQ.-180) LNG(1) = -179.99D0 IF (ILNG.EQ.+180) LNG(1) = +179.99D0 * Dash the longitude of the celestial pole. IF (MOD(ILNG-LNGPOL,360).EQ.0) THEN CALL PGSLS (2) CALL PGSLW (5) END IF STATUS = CELS2X (NTV, 1, 181, 1, 1, LNG, LAT, PHI, THETA, : X, Y, STAT) K = 0 DO 50 J = 1, 181 IF (STAT(J).NE.0) THEN IF (K.GT.1) CALL PGLINE (K, XR, YR) K = 0 GO TO 50 END IF K = K + 1 XR(K) = -X(J) YR(K) = Y(J) 50 CONTINUE CALL PGLINE (K, XR, YR) CALL PGSLS (1) CALL PGSLW (1) 60 CONTINUE * Draw native parallels of latitude. LNG(1) = -179.99D0 LNG(361) = +179.99D0 J = 2 ILNG = -179 DO 70 ILNG = -179, 180 LNG(J) = DBLE(ILNG) J = J + 1 70 CONTINUE DO 90 ILAT = -90, 90, 15 LAT(1) = DBLE(ILAT) STATUS = CELS2X (NTV, 361, 1, 1, 1, LNG, LAT, PHI, THETA, : X, Y, STAT) K = 0 DO 80 J = 1, 361 IF (STAT(J).NE.0) THEN IF (K.GT.1) CALL PGLINE (K, XR, YR) K = 0 GO TO 80 END IF K = K + 1 XR(K) = -X(J) YR(K) = Y(J) 80 CONTINUE CALL PGLINE (K, XR, YR) 90 CONTINUE * Draw a colour-coded celestial coordinate graticule. CI = 1 * Draw celestial meridians of longitude. J = 1 DO 100 ILAT = -90, 90 LAT(J) = DBLE(ILAT) J = J + 1 100 CONTINUE DO 120 ILNG = -180, 180, 15 LNG(1) = DBLE(ILNG) CI = CI + 1 IF (CI.GT.7) CI = 2 IF (ILNG.EQ.0) THEN CALL PGSCI (1) ELSE CALL PGSCI (CI) END IF * Dash the reference longitude. IF (MOD(ILNG-CRVAL1,360).EQ.0) THEN CALL PGSLS (2) CALL PGSLW (5) END IF STATUS = CELS2X (CEL, 1, 181, 1, 1, LNG, LAT, PHI, THETA, : X, Y, STAT) K = 0 DO 110 J = 1, 181 IF (STAT(J).NE.0) THEN IF (K.GT.1) CALL PGLINE (K, XR, YR) K = 0 GO TO 110 END IF * Test for discontinuities. IF (J.GT.1) THEN IF (ABS(X(J) - X(J-1)).GT.4D0 .OR. : ABS(Y(J) - Y(J-1)).GT.4D0) THEN IF (K.GT.1) CALL PGLINE (K, XR, YR) K = 0 END IF END IF K = K + 1 XR(K) = -X(J) YR(K) = Y(J) 110 CONTINUE CALL PGLINE (K, XR, YR) CALL PGSLS (1) CALL PGSLW (1) 120 CONTINUE * Draw celestial parallels of latitude. J = 1 DO 130 ILNG = -180, 180 LNG(J) = DBLE(ILNG) J = J + 1 130 CONTINUE CI = 1 DO 150 ILAT = -90, 90, 15 LAT(1) = DBLE(ILAT) CI = CI + 1 IF (CI.GT.7) CI = 2 IF (ILAT.EQ.0) THEN CALL PGSCI (1) ELSE CALL PGSCI (CI) END IF * Dash the reference latitude. IF (ILAT.EQ.CRVAL2) THEN CALL PGSLS (2) CALL PGSLW (5) END IF STATUS = CELS2X (CEL, 361, 1, 1, 1, LNG, LAT, PHI, THETA, : X, Y, STAT) K = 0 DO 140 J = 1, 361 IF (STAT(J).NE.0) THEN IF (K.GT.1) CALL PGLINE (K, XR, YR) K = 0 GO TO 140 END IF * Test for discontinuities. IF (J.GT.1) THEN IF (ABS(X(J) - X(J-1)).GT.4D0 .OR. : ABS(Y(J) - Y(J-1)).GT.4D0) THEN IF (K.GT.1) CALL PGLINE (K, XR, YR) K = 0 END IF END IF K = K + 1 XR(K) = -X(J) YR(K) = Y(J) 140 CONTINUE CALL PGLINE (K, XR, YR) CALL PGSLS (1) CALL PGSLW (1) 150 CONTINUE * Flush PGPLOT buffer. CALL PGEBUF () WRITE (*, '(A,$)') ' Type for next page: ' READ (*, *, END=160) * Cycle through celestial longitudes. 160 CRVAL1 = CRVAL1 + 15 IF (CRVAL1.GT.180) CRVAL1 = -180 * Skip boring celestial latitudes. IF (CRVAL2.EQ.0) GO TO 190 170 CONTINUE 180 CONTINUE 190 CONTINUE CALL PGASK (0) CALL PGEND END pywcs-1.12/wcslib/Fortran/test/tfitshdr.f0000644001153600020070000002340612310355626022526 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tfitshdr.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TFITSHDR *----------------------------------------------------------------------- * * TFITSHDR tests FITSHDR, the FITS parser for image headers, by reading * a test header and printing the resulting fitskey structs. * * Input comes from file 'pih.fits'. * * WCSHDR is called first to extract all WCS-related keyrecords from the * input header before passing it on to FITSHDR. * * KEYS, which is meant to hold a pointer, is declared as an array of * length 2 to accomodate 64-bit machines for which sizeof(void *) = * 2*sizeof(int). *----------------------------------------------------------------------- LOGICAL GOTEND INTEGER CTRL, I, IERR, IVAL(8), J, K, KEYNO, KEYS(2), KEYTYP, : KTYP, NC, NKEYRC, NKEYID, NREJECT, NWCS, RELAX, STATUS, : ULEN, WCSP DOUBLE PRECISION FVAL(2) CHARACTER KEYREC*80, CVAL*72, HEADER*288001, KEYWRD*12, INFILE*9, : TEXT*84 INCLUDE 'wcshdr.inc' INCLUDE 'fitshdr.inc' INTEGER KEYIDS(KEYIDLEN,8) DATA INFILE /'pih.fits'/ *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing FITS image header parser (tfitshdr.f)',/, : '---------------------------------------------',/) * Open the FITS WCS test header for formatted, direct I/O. OPEN (UNIT=1, FILE=INFILE, FORM='FORMATTED', ACCESS='DIRECT', : RECL=80, IOSTAT=IERR) IF (IERR.NE.0) THEN WRITE (*, 20) IERR, INFILE 20 FORMAT ('ERROR',I3,' opening ',A) GO TO 999 END IF * Read in the FITS header, excluding COMMENT and HISTORY keyrecords. K = 1 NKEYRC = 0 GOTEND = .FALSE. DO 50 J = 0, 100 DO 40 I = 1, 36 READ (1, '(A80)', REC=36*J+I, IOSTAT=IERR) KEYREC IF (IERR.NE.0) THEN WRITE (*, 30) IERR 30 FORMAT ('ERROR',I3,' reading header.') GO TO 999 END IF HEADER(K:) = KEYREC K = K + 80 NKEYRC = NKEYRC + 1 IF (KEYREC(:8).EQ.'END ') THEN * An END keyrecord was read, read the rest of the block. GOTEND = .TRUE. END IF 40 CONTINUE IF (GOTEND) GO TO 60 50 CONTINUE 60 CLOSE (UNIT=1) HEADER(K:K) = CHAR (0) WRITE (*, 70) NKEYRC 70 FORMAT ('Found',I4,' header keyrecords.') * Cull all recognized, syntactically valid WCS keyrecords from the * header. RELAX = WCSHDR_all CTRL = -1 * WCSPIH will allocate memory for NWCS intialized WCSPRM structs. IERR = WCSPIH (HEADER, NKEYRC, RELAX, CTRL, NREJECT, NWCS, WCSP) IF (IERR.NE.0) THEN WRITE (*, 80) IERR 80 FORMAT ('WCSPIH ERROR',I2,'.') GO TO 999 END IF * Number remaining. DO 90 I = 1, 288001, 80 IF (HEADER(I:I).EQ.CHAR(0)) GO TO 100 90 CONTINUE 100 NKEYRC = I / 80 * Specific keywords to be located or culled. IERR = KEYIDPUT (KEYIDS, 0, KEYID_NAME, 'SIMPLE ') IERR = KEYIDPUT (KEYIDS, 1, KEYID_NAME, 'BITPIX ') IERR = KEYIDPUT (KEYIDS, 2, KEYID_NAME, 'NAXIS ') IERR = KEYIDPUT (KEYIDS, 3, KEYID_NAME, 'COMMENT ') IERR = KEYIDPUT (KEYIDS, 4, KEYID_NAME, 'HISTORY ') IERR = KEYIDPUT (KEYIDS, 5, KEYID_NAME, ' ') IERR = KEYIDPUT (KEYIDS, 6, KEYID_NAME, 'END ') NKEYID = 7 IF (NKEYID.GT.0) THEN WRITE (*, '(/,A)') : 'The following keyrecords will not be listed:' DO 120 I = 0, NKEYID-1 IERR = KEYIDGET (KEYIDS, I, KEYID_NAME, TEXT) WRITE (*, 110) TEXT 110 FORMAT (' "',A8,'"') 120 CONTINUE END IF * Parse the header. IERR = FITSHDR (HEADER, NKEYRC, NKEYID, KEYIDS, NREJECT, KEYS) IF (IERR.NE.0) THEN WRITE (*, 130) IERR 130 FORMAT ('FITSKEY ERROR',I2) END IF * Report the results. WRITE (*, 140) NKEYRC, NREJECT 140 FORMAT(/,I3,' header keyrecords parsed by FITSHDR,',I3, : ' rejected:',/) DO 200 I = 0, NKEYRC-1 * Skip syntactically valid keyrecords that were indexed. IERR = KEYGET (KEYS, I, KEY_KEYNO, KEYNO, NC) IERR = KEYGET (KEYS, I, KEY_STATUS, STATUS, NC) IF (KEYNO.LT.0 .AND. STATUS.EQ.0) GO TO 200 * Basic keyrecord info. IERR = KEYGET (KEYS, I, KEY_KEYWORD, KEYWRD, NC) IERR = KEYGET (KEYS, I, KEY_TYPE, KEYTYP, NC) WRITE (*, '(I4,I5,2X,A,I3,$)') KEYNO, STATUS, KEYWRD(:8), : KEYTYP * Format the keyvalue for output. KTYP = MOD(ABS(KEYTYP),10) IF (KTYP.EQ.1) THEN * Logical. IERR = KEYGET (KEYS, I, KEY_KEYVALUE, IVAL, NC) IF (IVAL(1).EQ.0) THEN TEXT = 'F' ELSE TEXT = 'T' END IF ELSE IF (KTYP.EQ.2) THEN * 32-bit signed integer. IERR = KEYGET (KEYS, I, KEY_KEYVALUE, IVAL, NC) WRITE (TEXT, '(I11)') IVAL(1) ELSE IF (KTYP.EQ.3) THEN * 64-bit signed integer. IERR = KEYGET (KEYS, I, KEY_KEYVALUE, IVAL, NC) IF (IVAL(3).NE.0) THEN WRITE (TEXT, '(SP,I11,SS,2I9.9)') IVAL(3), ABS(IVAL(2)), : ABS(IVAL(1)) ELSE WRITE (TEXT, '(SP,I11,SS,I9.9)') IVAL(2), ABS(IVAL(1)) END IF ELSE IF (KTYP.EQ.4) THEN * Very long integer. IERR = KEYGET (KEYS, I, KEY_KEYVALUE, IVAL, NC) K = 0 DO 150 J = 8, 2, -1 IF (IVAL(J).NE.0) THEN K = J GO TO 160 END IF 150 CONTINUE 160 WRITE (TEXT, '(SP,I11)') IVAL(K) NC = 12 DO 170 J = K-1, 1, -1 WRITE (TEXT(NC:), '(I9.9)') ABS(IVAL(J)) NC = NC + 9 170 CONTINUE ELSE IF (KTYP.EQ.5) THEN * Float. IERR = KEYGET (KEYS, I, KEY_KEYVALUE, FVAL, NC) WRITE (TEXT, '(SP,1PE13.6)') FVAL(1) ELSE IF (KTYP.EQ.6) THEN * Int complex. IERR = KEYGET (KEYS, I, KEY_KEYVALUE, FVAL, NC) WRITE (TEXT, '(2I11)') NINT(FVAL(1)), NINT(FVAL(2)) ELSE IF (KTYP.EQ.7) THEN * Float complex. IERR = KEYGET (KEYS, I, KEY_KEYVALUE, FVAL, NC) WRITE (TEXT, '(SP,1P,E13.6,2X,E13.6)') FVAL ELSE IF (KTYP.EQ.8) THEN * String. IERR = KEYGET (KEYS, I, KEY_KEYVALUE, CVAL, NC) TEXT = '"' // CVAL(:NC) // '"' ELSE * No value. TEXT = '' END IF * Account for Fortran's abysmal formatting control. IF (ABS(KEYTYP).EQ.2 .OR. : ABS(KEYTYP).EQ.3 .OR. : ABS(KEYTYP).EQ.4 .OR. : ABS(KEYTYP).EQ.6) THEN * Squeeze out leading blanks. DO 180 J = 1, 84 IF (TEXT(J:J).NE.' ') THEN TEXT = TEXT(J:) GO TO 190 END IF 180 CONTINUE END IF 190 NC = LNBLNK(TEXT) IF (KEYTYP.GT.0) THEN * Keyvalue successfully extracted. WRITE (*, '(2X,A,$)') TEXT(:NC) ELSE IF (KEYTYP.LT.0) THEN * Syntax error of some type while extracting the keyvalue. WRITE (*, '(2X,A,$)') '(' // TEXT(:NC) // ')' END IF * Units? IERR = KEYGET (KEYS, I, KEY_ULEN, ULEN, NC) IERR = KEYGET (KEYS, I, KEY_COMMENT, TEXT, NC) IF (ULEN.GT.0) THEN WRITE (*, '(X,A,$)') TEXT(2:ULEN-2) END IF * Comment text or reject keyrecord. WRITE (*, '(/,A)') TEXT(:NC) 200 CONTINUE * Print indexes. WRITE (*, '(//,A)') 'Indexes of selected keywords:' DO 210 I = 0, NKEYID-1 IERR = KEYIDGET (KEYIDS, I, KEYID_NAME, TEXT) IERR = KEYIDGET (KEYIDS, I, KEYID_COUNT, NC) IERR = KEYIDGET (KEYIDS, I, KEYID_IDX, IVAL) WRITE (*, '(A8,3I5,$)') TEXT, NC, IVAL(1), IVAL(2) * Print logical (SIMPLE) and integer (BITPIX, NAXIS) values. IF (NC.GT.0) THEN IERR = KEYGET (KEYS, IVAL(1), KEY_TYPE, KEYTYP, NC) WRITE (*, '(I4,$)') KEYTYP IF (KEYTYP.EQ.1) THEN IERR = KEYGET (KEYS, I, KEY_KEYVALUE, IVAL, NC) IF (IVAL(1).EQ.0) THEN WRITE (*, '(4X,A,$)') 'F' ELSE WRITE (*, '(4X,A,$)') 'T' END IF ELSE IF (KEYTYP.EQ.2) THEN IERR = KEYGET (KEYS, I, KEY_KEYVALUE, IVAL, NC) WRITE (*, '(I5,$)') IVAL(1) END IF END IF WRITE (*, '()') 210 CONTINUE IERR = FREEKEYS(KEYS) 999 CONTINUE END pywcs-1.12/wcslib/Fortran/test/tlin.f0000644001153600020070000001167012310355626021645 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tlin.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TLIN *----------------------------------------------------------------------- * * TLIN tests the linear transformation routines supplied with WCSLIB. * *----------------------------------------------------------------------- DOUBLE PRECISION TOL PARAMETER (TOL = 1D-13) INTEGER NAXIS, NCOORD, NELEM PARAMETER (NAXIS = 5, NCOORD = 2, NELEM = 9) INTEGER I, J, K, NFAIL, STATUS DOUBLE PRECISION CDELT(NAXIS), CRPIX(NAXIS), IMG(NELEM,2), : PC(NAXIS,NAXIS), PIX0(NELEM,2), PIX(NELEM,2), RESID, : RESIDMAX * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'lin.inc' INTEGER LIN(LINLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (LIN,DUMMY) DATA (CRPIX(I), I=1,NAXIS) : /256D0, 256D0, 64D0, 128D0, 1D0/ DATA ((PC(I,J),J=1,NAXIS),I=1,NAXIS) : / 1.0D0, 0.5D0, 0D0, 0D0, 0D0, : 0.5D0, 1.0D0, 0D0, 0D0, 0D0, : 0.0D0, 0.0D0, 1D0, 0D0, 0D0, : 0.0D0, 0.0D0, 0D0, 1D0, 0D0, : 0.0D0, 0.0D0, 0D0, 0D0, 1D0/ DATA (CDELT(I), I=1,NAXIS) : / 1.2D0, 2.3D0, 3.4D0, 4.5D0, 5.6D0/ DATA ((PIX0(I,J), I=1,NAXIS), J=1,2) : /303.0D0, 265.0D0, 112.4D0, 144.5D0, 28.2D0, : 19.0D0, 57.0D0, 2.0D0, 15.0D0, 42.0D0/ *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ( : 'Testing WCSLIB linear transformation routines (tlin.f)',/, : '------------------------------------------------------') STATUS = LINPUT (LIN, LIN_FLAG, -1, 0, 0) STATUS = LININI (NAXIS, LIN) DO 30 I = 1, NAXIS STATUS = LINPUT (LIN, LIN_CRPIX, CRPIX(I), I, 0) DO 20 J = 1, NAXIS STATUS = LINPUT (LIN, LIN_PC, PC(I,J), I, J) 20 CONTINUE STATUS = LINPUT (LIN, LIN_CDELT, CDELT(I), I, 0) 30 CONTINUE WRITE (*, *) DO 50 K = 1, NCOORD WRITE (*, 40) K, (PIX0(J,K), J=1,NAXIS) 40 FORMAT ('PIX',I2,':',10F14.8) 50 CONTINUE STATUS = LINP2X (LIN, NCOORD, NELEM, PIX0, IMG) IF (STATUS.NE.0) THEN WRITE (*, 60) STATUS 60 FORMAT ('LINP2X ERROR',I3) GO TO 999 END IF WRITE (*, *) DO 80 K = 1, NCOORD WRITE (*, 70) K, (IMG(J,K), J=1,NAXIS) 70 FORMAT ('IMG',I2,':',10F14.8) 80 CONTINUE STATUS = LINX2P (LIN, NCOORD, NELEM, IMG, PIX) IF (STATUS.NE.0) THEN WRITE (*, 90) STATUS 90 FORMAT ('LINX2P ERROR',I3) GO TO 999 END IF WRITE (*, *) DO 100 K = 1, NCOORD WRITE (*, 40) K, (PIX(J,K), J=1,NAXIS) 100 CONTINUE * Check closure. NFAIL = 0 RESIDMAX = 0D0 DO 120 K = 1, NCOORD DO 110 J = 1, NAXIS RESID = ABS(PIX(j,k) - PIX0(j,k)) IF (RESIDMAX.LT.RESID) RESIDMAX = RESID IF (RESID.GT.TOL) NFAIL = NFAIL + 1 110 CONTINUE 120 CONTINUE WRITE (*, 130) RESIDMAX 130 FORMAT (/,'LINP2X/LINX2P: Maximum closure residual =',1PE8.1, : ' pixel.') IF (NFAIL.NE.0) THEN WRITE (*, 140) NFAIL 140 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', : 'tolerance.') ELSE WRITE (*, 150) 150 FORMAT (/,'PASS: All closure residuals are within reporting ', : 'tolerance.') END IF 999 STATUS = LINFREE(LIN) END pywcs-1.12/wcslib/Fortran/test/tlog.f0000644001153600020070000001045512310355626021644 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tlog.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TLOG *----------------------------------------------------------------------- * * TLOG tests the logarithmic coordinate transformation routines for * closure. * *----------------------------------------------------------------------- DOUBLE PRECISION TOL PARAMETER (TOL = 1D-13) INTEGER NCRD PARAMETER (NCRD = 10000) INTEGER J, K, NFAIL, STAT1(NCRD), STAT2(NCRD), STATUS DOUBLE PRECISION CRVAL, LOGC(NCRD), RESID, RESMAX, STEP, : X0(NCRD), X1(NCRD) DATA CRVAL /3.3D0/ INCLUDE 'log.inc' *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing closure of WCSLIB logarithmic coordinate ', : 'routines (tlog.f)',/, : '-------------------------------------------------', : '-----------------') * Construct a logarithmic axis and test closure. STEP = (40D0/NCRD) / 2D0 K = -NCRD DO 20 J = 1, NCRD X0(J) = K*STEP K = K + 2 20 CONTINUE WRITE (*, 30) X0(1), X0(NCRD), X0(2) - X0(1) 30 FORMAT (/,'Logarithmic range:',F6.1,' to',F5.1,', step:',F7.4) * Convert the first to the second. STATUS = LOGX2S(CRVAL, NCRD, 1, 1, X0, LOGC, STAT1) IF (STATUS.NE.0) THEN WRITE (*, 40) STATUS 40 FORMAT ('LOGX2S ERROR',I2,'.') END IF * Convert the second back to the first. STATUS = LOGS2X(CRVAL, NCRD, 1, 1, LOGC, X1, STAT2) IF (STATUS.NE.0) THEN WRITE (*, 50) STATUS 50 FORMAT ('LOGS2X ERROR',I2,'.') END IF * Test closure. NFAIL = 0 RESMAX = 0D0 DO 90 J = 1, NCRD IF (STAT1(J).NE.0) THEN WRITE (*, 60) X0(J), STAT1(J) 60 FORMAT ('LOGX2S: X =',1PE20.12,' -> log = ???, stat =',I2,'.') GO TO 90 END IF IF (STAT2(J).NE.0) THEN WRITE (*, 70) X0(J), LOGC(J), STAT2(J) 70 FORMAT ('LOGS2X: x =',1PE20.12,' -> log =',1PE20.12, : ' -> x = ???, stat =',I2) GO TO 90 END IF IF (X0(J).EQ.0D0) THEN RESID = ABS(X1(J) - X0(J)) ELSE RESID = ABS((X1(J) - X0(J)) / X0(J)) IF (RESID.GT.RESMAX) RESMAX = RESID END IF IF (RESID.GT.TOL) THEN NFAIL = NFAIL + 1 WRITE (*, 80) X0(J), LOGC(J), X1(J), RESID 80 FORMAT ('LOGX2S: x =',1PE20.12,' -> log =',1PE20.12,' ->',/, : ' x =',1PE20.12,', resid =',1PE20.12) END IF 90 CONTINUE IF (RESMAX.GT.TOL) THEN WRITE (*, *) END IF WRITE (*, 100) RESMAX 100 FORMAT ('LOGX2S/LOGS2X: Maximum closure residual =',1PE8.1) IF (NFAIL.NE.0) THEN WRITE (*, 110) NFAIL 110 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', : 'tolerance.') ELSE WRITE (*, 120) 120 FORMAT (/,'PASS: All closure residuals are within reporting ', : 'tolerance.') END IF END pywcs-1.12/wcslib/Fortran/test/tpih1.f0000644001153600020070000001425112310355626021722 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tpih1.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TPIH1 *----------------------------------------------------------------------- * * TPIH1 tests WCSPIH, the WCS FITS parser for image headers, and WCSFIX, * which translates non-standard constructs. It reads a test header and * uses WCSPRT to print the resulting WCSPRM structs. * * Input comes from file 'pih.fits'. * * WCSP, which is meant to hold an address, is declared as an INTEGER * array of length 2 to accomodate 64-bit machines for which * sizeof(void *) = 2*sizeof(int). *----------------------------------------------------------------------- LOGICAL GOTEND INTEGER ALTS(0:26), CTRL, I, IERR, J, K, NKEYRC, NREJECT, NWCS, : RELAX, WCSP(2) CHARACTER CALTS(0:26)*2, KEYREC*80, HEADER*288001, INFILE*9 * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'wcshdr.inc' INCLUDE 'wcs.inc' INCLUDE 'wcsfix.inc' INTEGER WCS(WCSLEN), STAT(WCSFIX_NWCS) DOUBLE PRECISION DUMMY EQUIVALENCE (WCS,DUMMY) DATA INFILE /'pih.fits'/ *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ( : 'Testing WCSLIB parser for FITS image headers (tpih1.f)',/, : '------------------------------------------------------',/) * Open the FITS WCS test header for formatted, direct I/O. OPEN (UNIT=1, FILE=INFILE, FORM='FORMATTED', ACCESS='DIRECT', : RECL=80, IOSTAT=IERR) IF (IERR.NE.0) THEN WRITE (*, 20) IERR, INFILE 20 FORMAT ('ERROR',I3,' opening ',A) GO TO 999 END IF * Read in the FITS header, excluding COMMENT and HISTORY keyrecords. K = 1 NKEYRC = 0 GOTEND = .FALSE. DO 50 J = 0, 100 DO 40 I = 1, 36 READ (1, '(A80)', REC=36*J+I, IOSTAT=IERR) KEYREC IF (IERR.NE.0) THEN WRITE (*, 30) IERR 30 FORMAT ('ERROR',I3,' reading header.') GO TO 999 END IF IF (KEYREC(:8).EQ.' ') GO TO 40 IF (KEYREC(:8).EQ.'COMMENT ') GO TO 40 IF (KEYREC(:8).EQ.'HISTORY ') GO TO 40 HEADER(K:) = KEYREC K = K + 80 NKEYRC = NKEYRC + 1 IF (KEYREC(:8).EQ.'END ') THEN * An END keyrecord was read, read the rest of the block. GOTEND = .TRUE. END IF 40 CONTINUE IF (GOTEND) GO TO 60 50 CONTINUE 60 CLOSE (UNIT=1) HEADER(K:K) = CHAR (0) WRITE (*, 70) NKEYRC 70 FORMAT ('Found',I4,' non-comment header keyrecords.',/) * Cull all WCS keyrecords from the header but report illegal ones. WRITE (*, 80) 80 FORMAT (/,'Illegal-WCS header keyrecords rejected by wcspih():') RELAX = WCSHDR_all CTRL = -2 * WCSPIH will allocate memory for NWCS intialized WCSPRM structs. CALL FLUSH(6) IERR = WCSPIH (HEADER, NKEYRC, RELAX, CTRL, NREJECT, NWCS, WCSP) IF (IERR.NE.0) THEN WRITE (*, 90) IERR 90 FORMAT ('WCSPIH ERROR',I2,'.') GO TO 999 END IF * List keyrecords that were not consumed by WCSPIH. WRITE (*, 100) 100 FORMAT (//,'Non-WCS header keyrecords not used by WCSPIH:') DO 110 I = 1, 288001, 80 IF (HEADER(I:I).EQ.CHAR(0)) GO TO 120 WRITE (*, '(A)') HEADER(I:I+79) 110 CONTINUE 120 IERR = WCSIDX (NWCS, WCSP, ALTS) WRITE (*, 130) 130 FORMAT (//,'Index of alternate coordinate descriptions found:',/, : ' A B C D E F G H I J K L M N O P Q R S T U V W X Y Z') DO 140 I = 0, 26 IF (ALTS(I).LT.0) THEN CALTS(I) = ' -' ELSE WRITE (CALTS(I), '(I2)') ALTS(I) END IF 140 CONTINUE WRITE (*, '(27A)') CALTS DO 190 I = 0, NWCS-1 WRITE (*, 150) 150 FORMAT (/,'------------------------------------', : '------------------------------------') * Copy into our WCSPRM struct. IERR = WCSVCOPY (WCSP, I, WCS) * Fix non-standard WCS keyvalues. IERR = WCSFIX (7, 0, WCS, STAT) IF (IERR.NE.0) THEN WRITE (*, 160) (STAT(J), J=1,WCSFIX_NWCS) 160 FORMAT ('WCSFIX ERROR, status returns: (',(I2,:,','),')',/) END IF IERR = WCSSET (WCS) IF (IERR.NE.0) THEN WRITE (*, 170) IERR 170 FORMAT ('WCSSET ERROR',I2,'.') GO TO 190 END IF CALL FLUSH(6) IERR = WCSPRT (WCS) IF (IERR.NE.0) THEN WRITE (*, 180) IERR 180 FORMAT ('WCSPRT ERROR',I2,'.') GO TO 190 END IF * Free memory (doesn't free memory allocated by WCSPIH). IERR = WCSFREE (WCS) 190 CONTINUE * Free the memory allocated by WCSPIH. IERR = WCSVFREE (NWCS, WCSP) 999 CONTINUE END pywcs-1.12/wcslib/Fortran/test/tpih2.f0000644001153600020070000001420012310355626021715 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tpih2.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TPIH2 *----------------------------------------------------------------------- * * TPIH2 tests WCSPIH, the WCS FITS parser for image headers, by reading * a test header and using PGSBOX to plot coordinate graticules for the * resulting WCSPRM structs. * * Input comes from file 'pih.fits'. * * WCSP, which is meant to hold an address, is declared as an INTEGER * array of length 2 to accomodate 64-bit machines for which * sizeof(void *) = 2*sizeof(int). *----------------------------------------------------------------------- LOGICAL GOTEND INTEGER C0(7), GCODE(2), I, IC, IERR, J, K, NAXIS(2), : NKEYRC, NREJECT, NWCS, RELAX, WCSP(2) REAL BLC(2), TRC(2) DOUBLE PRECISION CACHE(4,0:256), NLDPRM(8) CHARACTER KEYREC*80, DEVTYP*16, HEADER*28801, IDENTS(3)*80, : INFILE*9, NLCPRM(1)*1, OPT(2)*1, WCSNAME*72 * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'wcshdr.inc' INCLUDE 'wcs.inc' INTEGER WCS(WCSLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (WCS,DUMMY) EXTERNAL PGWCSL DATA INFILE /'pih.fits'/ DATA C0 /7*-1/ *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ( : 'Testing WCSLIB parser for FITS image headers (tpih2.f)',/, : '------------------------------------------------------',/) * Open the FITS WCS test header for formatted, direct I/O. OPEN (UNIT=1, FILE=INFILE, FORM='FORMATTED', ACCESS='DIRECT', : RECL=80, IOSTAT=IERR) IF (IERR.NE.0) THEN WRITE (*, 20) IERR, INFILE 20 FORMAT ('ERROR',I3,' opening ',A) GO TO 999 END IF * Read in the FITS header, excluding COMMENT and HISTORY keyrecords. K = 1 NKEYRC = 0 GOTEND = .FALSE. DO 50 J = 0, 100 DO 40 I = 1, 36 READ (1, '(A80)', REC=36*J+I, IOSTAT=IERR) KEYREC IF (IERR.NE.0) THEN WRITE (*, 30) IERR 30 FORMAT ('ERROR',I3,' reading header.') GO TO 999 END IF IF (KEYREC(:8).EQ.' ') GO TO 40 IF (KEYREC(:8).EQ.'COMMENT ') GO TO 40 IF (KEYREC(:8).EQ.'HISTORY ') GO TO 40 HEADER(K:) = KEYREC K = K + 80 NKEYRC = NKEYRC + 1 IF (KEYREC(:8).EQ.'END ') THEN * An END keyrecord was read, read the rest of the block. GOTEND = .TRUE. END IF 40 CONTINUE IF (GOTEND) GO TO 60 50 CONTINUE 60 CLOSE (UNIT=1) HEADER(K:K) = CHAR (0) WRITE (*, 70) NKEYRC 70 FORMAT ('Found',I4,' non-comment header keyrecords.') * WCSPIH will allocate memory for an array of NWCS intialized WCSPRM * structs. This array will be returned via a "pointer", WCSP, that * may be passed to WCSVCOPY to extract a particular struct. RELAX = WCSHDR_all IERR = WCSPIH (HEADER, NKEYRC, RELAX, 3, NREJECT, NWCS, WCSP) IF (IERR.NE.0) THEN WRITE (*, 80) IERR 80 FORMAT ('WCSPIH ERROR',I2,'.') GO TO 999 END IF * Plot setup. NAXIS(1) = 1024 NAXIS(2) = 1024 BLC(1) = 0.5 BLC(2) = 0.5 TRC(1) = NAXIS(1) + 0.5 TRC(2) = NAXIS(2) + 0.5 DEVTYP = '/XWINDOW' CALL PGBEG(0, DEVTYP, 1, 1) CALL PGVSTD() CALL PGWNAD(0.0, 1.0, 0.0, 1.0) CALL PGASK(1) CALL PGPAGE() * Annotation. IDENTS(1) = 'Right ascension' IDENTS(2) = 'Declination' OPT(1) = 'G' OPT(2) = 'E' * Compact lettering. CALL PGSCH(0.8) * Draw full grid lines. CALL PGSCI(1) GCODE(1) = 2 GCODE(2) = 2 DO 100 I = 0, NWCS-1 * Copy into our WCSPRM struct. IERR = WCSVCOPY (WCSP, I, WCS) IERR = WCSSET (WCS) IF (IERR.NE.0) THEN WRITE (*, 90) IERR 90 FORMAT ('WCSSET ERROR',I2,'.') GO TO 999 END IF * Get WCSNAME out of the WCSPRM struct. IERR = WCSGET (WCS, WCS_WCSNAME, WCSNAME) IDENTS(3) = WCSNAME WRITE (*, '(/,A)') WCSNAME * Draw the celestial grid. The grid density is set for each * world coordinate by specifying LABDEN = 1224. IC = -1 CALL PGSBOX(BLC, TRC, IDENTS, OPT, 0, 1224, C0, GCODE, 0D0, 0, : 0D0, 0, 0D0, 0, PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, NLDPRM, : 256, IC, CACHE, IERR) * Draw the frame. CALL PGBOX('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE() * Free memory (doesn't free memory allocated by WCSPIH). IERR = WCSFREE (WCS) 100 CONTINUE * Free the memory allocated by WCSPIH. IERR = WCSVFREE (NWCS, WCSP) 999 CONTINUE END pywcs-1.12/wcslib/Fortran/test/tprj1.f0000644001153600020070000002624112310355626021737 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tprj1.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TPRJ1 *----------------------------------------------------------------------- * * TPRJ1 tests forward and reverse spherical projections for closure. * *----------------------------------------------------------------------- INCLUDE 'prj.inc' INTEGER J, K, NFAIL, PROJEX, STATUS DOUBLE PRECISION PV(0:29) DOUBLE PRECISION PI PARAMETER (PI = 3.141592653589793238462643D0) DOUBLE PRECISION TOL PARAMETER (TOL = 1D-9) *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing closure of WCSLIB spherical projection ', : 'routines (tprj1.f)',/, : '-----------------------------------------------', : '------------------') WRITE (*, '(/,A)') 'List of prj status return values:' DO 40 STATUS = 1, 4 DO 30 K = 80, 1, -1 IF (PRJ_ERRMSG(STATUS)(K:K).NE.' ') THEN WRITE(*, 20) STATUS, PRJ_ERRMSG(STATUS)(:K) 20 FORMAT(I4,': ',A,'.') GO TO 40 END IF 30 CONTINUE 40 CONTINUE WRITE(*, '()') DO 50 J = 0, 29 PV(J) = 0D0 50 CONTINUE NFAIL = 0 * AZP: zenithal/azimuthal perspective. PV(1) = 0.5D0 PV(2) = 30D0 NFAIL = NFAIL + PROJEX ('AZP', PV, 90, 5, TOL) * SZP: slant zenithal perspective. PV(1) = 0.5D0 PV(2) = 210D0 PV(3) = 60D0 NFAIL = NFAIL + PROJEX ('SZP', PV, 90, -90, TOL) * TAN: gnomonic. NFAIL = NFAIL + PROJEX ('TAN', PV, 90, 5, TOL) * STG: stereographic. NFAIL = NFAIL + PROJEX ('STG', PV, 90, -85, TOL) * SIN: orthographic/synthesis. PV(1) = -0.3D0 PV(2) = 0.5D0 NFAIL = NFAIL + PROJEX ('SIN', PV, 90, 45, TOL) * ARC: zenithal/azimuthal equidistant. NFAIL = NFAIL + PROJEX ('ARC', PV, 90, -90, TOL) * ZPN: zenithal/azimuthal polynomial. PV(0) = 0.00000D0 PV(1) = 0.95000D0 PV(2) = -0.02500D0 PV(3) = -0.15833D0 PV(4) = 0.00208D0 PV(5) = 0.00792D0 PV(6) = -0.00007D0 PV(7) = -0.00019D0 PV(8) = 0.00000D0 PV(9) = 0.00000D0 NFAIL = NFAIL + PROJEX ('ZPN', PV, 90, 10, TOL) * ZEA: zenithal/azimuthal equal area. NFAIL = NFAIL + PROJEX ('ZEA', PV, 90, -85, TOL) * AIR: Airy's zenithal projection. PV(1) = 45D0 NFAIL = NFAIL + PROJEX ('AIR', PV, 90, -85, TOL) * CYP: cylindrical perspective. PV(1) = 3.0D0 PV(2) = 0.8D0 NFAIL = NFAIL + PROJEX ('CYP', PV, 90, -90, TOL) * CEA: cylindrical equal area. PV(1) = 0.75D0 NFAIL = NFAIL + PROJEX ('CEA', PV, 90, -90, TOL) * CAR: plate carree. NFAIL = NFAIL + PROJEX ('CAR', PV, 90, -90, TOL) * MER: Mercator's. NFAIL = NFAIL + PROJEX ('MER', PV, 85, -85, TOL) * SFL: Sanson-Flamsteed. NFAIL = NFAIL + PROJEX ('SFL', PV, 90, -90, TOL) * PAR: parabolic. NFAIL = NFAIL + PROJEX ('PAR', PV, 90, -90, TOL) * MOL: Mollweide's projection. NFAIL = NFAIL + PROJEX ('MOL', PV, 90, -90, TOL) * AIT: Hammer-Aitoff. NFAIL = NFAIL + PROJEX ('AIT', PV, 90, -90, TOL) * COP: conic perspective. PV(1) = 60D0 PV(2) = 15D0 NFAIL = NFAIL + PROJEX ('COP', PV, 90, -25, TOL) * COE: conic equal area. PV(1) = 60D0 PV(2) = -15D0 NFAIL = NFAIL + PROJEX ('COE', PV, 90, -90, TOL) * COD: conic equidistant. PV(1) = -60D0 PV(2) = 15D0 NFAIL = NFAIL + PROJEX ('COD', PV, 90, -90, TOL) * COO: conic orthomorphic. PV(1) = -60D0 PV(2) = -15D0 NFAIL = NFAIL + PROJEX ('COO', PV, 85, -90, TOL) * BON: Bonne's projection. PV(1) = 30D0 NFAIL = NFAIL + PROJEX ('BON', PV, 90, -90, TOL) * PCO: polyconic. NFAIL = NFAIL + PROJEX ('PCO', PV, 90, -90, TOL) * TSC: tangential spherical cube. NFAIL = NFAIL + PROJEX ('TSC', PV, 90, -90, TOL) * CSC: COBE quadrilateralized spherical cube. NFAIL = NFAIL + PROJEX ('CSC', PV, 90, -90, 4D-2) * QSC: quadrilateralized spherical cube. NFAIL = NFAIL + PROJEX ('QSC', PV, 90, -90, TOL) * HPX: HEALPix projection. PV(1) = 4D0 PV(2) = 3D0 NFAIL = NFAIL + PROJEX ('HPX', PV, 90, -90, TOL) IF (NFAIL.NE.0) THEN WRITE (*, 60) NFAIL 60 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', : 'tolerance.') ELSE WRITE (*, 70) 70 FORMAT (/,'PASS: All closure residuals are within reporting ', : 'tolerance.') END IF END *----------------------------------------------------------------------- INTEGER FUNCTION PROJEX (PCODE, PV, NORTH, SOUTH, TOL) *----------------------------------------------------------------------- * PROJEX exercises the spherical projection routines. * * Given: * PCODE C*3 Projection code. * PV D(0:29) Projection parameters. * NORTH I Northern cutoff latitude, degrees. * SOUTH I Southern cutoff latitude, degrees. * TOL D Reporting tolerance, degrees. *----------------------------------------------------------------------- INTEGER J, LAT, LNG, NFAIL, NORTH, SOUTH, STAT1(361), : STAT2(361), STATUS DOUBLE PRECISION DLAT, DLATMX, DLNG, DLNGMX, DR, DRMAX, LAT1, : LAT2(361), LNG1(361), LNG2(361), PV(0:29), R, THETA, : TOL, X(361), X1(361), X2(361), Y(361), Y1(361), Y2(361) CHARACTER PCODE*3 * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'prj.inc' INTEGER PRJ(PRJLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (PRJ,DUMMY) DOUBLE PRECISION D2R, PI PARAMETER (PI = 3.141592653589793238462643D0) PARAMETER (D2R = PI/180D0) *----------------------------------------------------------------------- STATUS = PRJINI(PRJ) DO 10 J = 0, 29 STATUS = PRJPUT (PRJ, PRJ_PV, PV(J), J) 10 CONTINUE STATUS = PRJPUT (PRJ, PRJ_CODE, PCODE, 0) * Uncomment the next line to test alternative initializations of * projection parameters. * STATUS = PRJPUT (PRJ, PRJ_R0, 180D0/PI, 0) WRITE (*, 20) PCODE, NORTH, SOUTH, TOL 20 FORMAT ('Testing ',A3,'; latitudes',I3,' to',I4, : ', reporting tolerance',1PG8.1,' deg.') NFAIL = 0 DLNGMX = 0D0 DLATMX = 0D0 DO 80 LAT = NORTH, SOUTH, -1 LAT1 = DBLE(LAT) J = 1 DO 30 LNG = -180, 180 LNG1(J) = DBLE(LNG) J = J + 1 30 CONTINUE STATUS = PRJS2X (PRJ, 361, 1, 1, 1, LNG1, LAT1, X, Y, STAT1) IF (STATUS.EQ.1) THEN WRITE (*, 40) PCODE, STATUS 40 FORMAT (3X,A3,'(S2X) ERROR',I2) GO TO 80 END IF STATUS = PRJX2S (PRJ, 361, 0, 1, 1, X, Y, LNG2, LAT2, STAT2) IF (STATUS.EQ.1) THEN WRITE (*, 50) PCODE, STATUS 50 FORMAT (3X,A3,'(X2S) ERROR',I2) GO TO 80 END IF LNG = -180 DO 70 J = 1, 361 IF (STAT1(J).NE.0) GO TO 70 IF (STAT2(J).NE.0) THEN WRITE (*, 55) PCODE, LNG1(J), LAT1, X(J), Y(J), STAT2(J) 55 FORMAT (3X,A3,'(X2S): lng1 =',F20.15,' lat1 =',F20.15,/, : ' x =',F20.15,' y =',F20.15, : ' ERROR',I3) GO TO 70 END IF DLNG = ABS(LNG2(J) - LNG1(J)) IF (DLNG.GT.180D0) DLNG = ABS(DLNG-360D0) IF (ABS(LAT).NE.90 .AND. DLNG.GT.DLNGMX) DLNGMX = DLNG DLAT = ABS(LAT2(J) - LAT1) IF (DLAT.GT.DLATMX) DLATMX = DLAT IF (DLAT.GT.TOL) THEN NFAIL = NFAIL + 1 WRITE (*, 60) PCODE, LNG1(J), LAT1, X(J), Y(J), LNG2(J), : LAT2(J) 60 FORMAT (8X,A3,': lng1 =',F20.15,' lat1 =',F20.15,/, : 8X,' x =',F20.15,' y =',F20.15,/, : 8X,' lng2 =',F20.15,' lat2 =',F20.15) ELSE IF (ABS(LAT).NE.90) THEN IF (DLNG.GT.TOL) THEN NFAIL = NFAIL + 1 WRITE (*, 60) PCODE, LNG1(J), LAT1, X(J), Y(J), : LNG2(J), LAT2(J) END IF END IF 70 CONTINUE 80 CONTINUE WRITE (*, 90) DLNGMX, DLATMX 90 FORMAT (13X,'Maximum residual (sky): lng',1P,E8.1,' lat',E8.1) * Test closure at points close to the reference point. R = 1.0 THETA = -180D0 DRMAX = 0D0 DO 140 J = 1, 12 X1(1) = R*COS(THETA*D2R) Y1(1) = R*SIN(THETA*D2R) STATUS = PRJX2S (PRJ, 1, 1, 1, 1, X1, Y1, LNG1, LAT1, STAT2) IF (STATUS.NE.0) THEN WRITE (*, 100) PCODE, X1(1), Y1(1), STATUS 100 FORMAT (8X,A3,'(X2S): x1 =',F20.15,' y1 =',F20.15, : ' ERROR',I3) GO TO 130 END IF STATUS = PRJS2X (PRJ, 1, 1, 1, 1, LNG1, LAT1, X2, Y2, STAT1) IF (STATUS.NE.0) THEN WRITE (*, 110) PCODE, X1(1), Y1(1), LNG1(1), LAT1, STATUS 110 FORMAT (3X,A3,': x1 =',F20.15,' y1 =',F20.15,/, : 3X,' lng =',F20.15,' lat =',F20.15,' ERROR', : I3) GO TO 130 END IF DR = SQRT((X2(1)-X1(1))**2 + (Y2(1)-Y1(1))**2) IF (DR.GT.DRMAX) DRMAX = DR IF (DR.GT.TOL) THEN NFAIL = NFAIL + 1 WRITE (*, 120) PCODE, X1(1), Y1(1), LNG1(1), LAT1, X2(1), : Y2(1) 120 FORMAT (8X,A3,': x1 =',F20.15,' y1 =',F20.15,/, : 8X,' lng =',F20.15,' lat =',F20.15,/, : 8X,' x2 =',F20.15,' y2 =',F20.15) END IF 130 R = R/10D0 THETA = THETA + 15D0 140 CONTINUE WRITE (*, 150) DRMAX 150 FORMAT (13X,'Maximum residual (ref): dR',1PE8.1) PROJEX = NFAIL END pywcs-1.12/wcslib/Fortran/test/tprj2.f0000644001153600020070000003064112310355626021737 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tprj2.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TPRJ2 *----------------------------------------------------------------------- * * TPRJ2 tests projection routines by plotting test graticules using * PGPLOT. * *----------------------------------------------------------------------- INTEGER J DOUBLE PRECISION PV(0:29) DOUBLE PRECISION PI PARAMETER (PI = 3.141592653589793238462643D0) *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ( : 'Testing WCSLIB spherical projection routines (tprj2.f)',/, : '------------------------------------------------------') DO 20 J = 0, 29 PV(J) = 0D0 20 CONTINUE * PGPLOT initialization. CALL PGBEG (0, '/xwindow', 1, 1) * Define pen colours. CALL PGSCR (0, 0.00, 0.00, 0.00) CALL PGSCR (1, 1.00, 1.00, 0.00) CALL PGSCR (2, 1.00, 1.00, 1.00) CALL PGSCR (3, 0.50, 0.50, 0.80) CALL PGSCR (4, 0.80, 0.50, 0.50) CALL PGSCR (5, 0.80, 0.80, 0.80) CALL PGSCR (6, 0.50, 0.50, 0.80) CALL PGSCR (7, 0.80, 0.50, 0.50) CALL PGSCR (8, 0.30, 0.50, 0.30) 30 FORMAT(/,A,' projection') 40 FORMAT(/,A,' projection',/,'Parameters:',5F12.5,/,5F12.5) * AZP: zenithal/azimuthal perspective. PV(1) = 2D0 PV(2) = 30D0 WRITE (*, 40) 'Zenithal/azimuthal perspective', (PV(J), J=1,2) CALL PRJPLT ('AZP', 90, -90, PV) * SZP: zenithal/azimuthal perspective. PV(1) = 2D0 PV(2) = 210D0 PV(3) = 60D0 WRITE (*, 40) 'Slant zenithal perspective', (PV(J), J=1,3) CALL PRJPLT ('SZP', 90, -90, PV) * TAN: gnomonic. WRITE (*, 30) 'Gnomonic' CALL PRJPLT ('TAN', 90, 5, PV) * STG: stereographic. WRITE (*, 30) 'Stereographic' CALL PRJPLT ('STG', 90, -85, PV) * SIN: orthographic. PV(1) = -0.3D0 PV(2) = 0.5D0 WRITE (*, 40) 'Orthographic/synthesis', (PV(J), J=1,2) CALL PRJPLT ('SIN', 90, -90, PV) * ARC: zenithal/azimuthal equidistant. WRITE (*, 30) 'Zenithal/azimuthal equidistant' CALL PRJPLT ('ARC', 90, -90, PV) * ZPN: zenithal/azimuthal polynomial. PV(0) = 0.05000D0 PV(1) = 0.95000D0 PV(2) = -0.02500D0 PV(3) = -0.15833D0 PV(4) = 0.00208D0 PV(5) = 0.00792D0 PV(6) = -0.00007D0 PV(7) = -0.00019D0 PV(8) = 0.00000D0 PV(9) = 0.00000D0 WRITE (*, 40) 'Zenithal/azimuthal polynomial', (PV(J), J=0,9) CALL PRJPLT ('ZPN', 90, 10, PV) * ZEA: zenithal/azimuthal equal area. WRITE (*, 30) 'Zenithal/azimuthal equal area' CALL PRJPLT ('ZEA', 90, -90, PV) * AIR: Airy's zenithal projection. PV(1) = 45D0 WRITE (*, 40) 'Airy''s zenithal', PV(1) CALL PRJPLT ('AIR', 90, -85, PV) * CYP: cylindrical perspective. PV(1) = 3.0D0 PV(2) = 0.8D0 WRITE (*, 40) 'Cylindrical perspective', (PV(J), J=1,2) CALL PRJPLT ('CYP', 90, -90, PV) * CEA: cylindrical equal area. PV(1) = 0.75D0 WRITE (*, 40) 'Cylindrical equal area', PV(1) CALL PRJPLT ('CEA', 90, -90, PV) * CAR: plate carree. WRITE (*, 30) 'Plate carree' CALL PRJPLT ('CAR', 90, -90, PV) * MER: Mercator's. WRITE (*, 30) 'Mercator''s' CALL PRJPLT ('MER', 85, -85, PV) * SFL: Sanson-Flamsteed. WRITE (*, 30) 'Sanson-Flamsteed (global sinusoid)' CALL PRJPLT ('SFL', 90, -90, PV) * PAR: parabolic. WRITE (*, 30) 'Parabolic' CALL PRJPLT ('PAR', 90, -90, PV) * MOL: Mollweide's projection. WRITE (*, 30) 'Mollweide''s' CALL PRJPLT ('MOL', 90, -90, PV) * AIT: Hammer-Aitoff. WRITE (*, 30) 'Hammer-Aitoff' CALL PRJPLT ('AIT', 90, -90, PV) * COP: conic perspective. PV(1) = 60D0 PV(2) = 15D0 WRITE (*, 40) 'Conic perspective', (PV(J), J=1,2) CALL PRJPLT ('COP', 90, -25, PV) * COE: conic equal area. PV(1) = 60D0 PV(2) = -15D0 WRITE (*, 40) 'Conic equal area', (PV(J), J=1,2) CALL PRJPLT ('COE', 90, -90, PV) * COD: conic equidistant. PV(1) = -60D0 PV(2) = 15D0 WRITE (*, 40) 'Conic equidistant', (PV(J), J=1,2) CALL PRJPLT ('COD', 90, -90, PV) * COO: conic orthomorphic. PV(1) = -60D0 PV(2) = -15D0 WRITE (*, 40) 'Conic orthomorphic', (PV(J), J=1,2) CALL PRJPLT ('COO', 85, -90, PV) * BON: Bonne's projection. PV(1) = 30D0 WRITE (*, 40) 'Bonne''s', PV(1) CALL PRJPLT ('BON', 90, -90, PV) * PCO: polyconic. WRITE (*, 30) 'Polyconic' CALL PRJPLT ('PCO', 90, -90, PV) * TSC: tangential spherical cube. WRITE (*, 30) 'Tangential spherical cube' CALL PRJPLT ('TSC', 90, -90, PV) * CSC: COBE quadrilateralized spherical cube. WRITE (*, 30) 'COBE quadrilateralized spherical cube' CALL PRJPLT ('CSC', 90, -90, PV) * QSC: quadrilateralized spherical cube. WRITE (*, 30) 'Quadrilateralized spherical cube' CALL PRJPLT ('QSC', 90, -90, PV) * HPX: HEALPix projection. PV(1) = 4D0 PV(2) = 3D0 WRITE (*, 40) 'HEALPix', (PV(J), J=1,2) CALL PRJPLT ('HPX', 90, -90, PV) CALL PGASK (0) CALL PGEND END SUBROUTINE PRJPLT (PCODE, NORTH, SOUTH, PV) *----------------------------------------------------------------------- * PRJPLT draws a 15 degree coordinate graticule. * * Given: * PCODE C*3 Projection code. * NORTH I Northern cutoff latitude, degrees. * SOUTH I Southern cutoff latitude, degrees. * PV D(0:29) Projection parameters. *----------------------------------------------------------------------- LOGICAL CUBIC, HEALPX, INTRRP INTEGER CI, H, ILAT, ILNG, J, K, LEN, NORTH, SOUTH, STAT(361), : STATUS REAL HX, HY, SX, SY, XR(512), YR(512) DOUBLE PRECISION LAT(361), LNG(361), PV(0:29), X(361), X0, Y(361), : Y0 CHARACTER PCODE*3 * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'prj.inc' INTEGER PRJ(PRJLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (PRJ,DUMMY) *----------------------------------------------------------------------- STATUS = PRJINI(PRJ) DO 10 J = 0, 29 STATUS = PRJPUT (PRJ, PRJ_PV, PV(J), J) 10 CONTINUE STATUS = PRJPUT (PRJ, PRJ_CODE, PCODE, 0) WRITE (*, 20) PCODE, NORTH, SOUTH 20 FORMAT ('Plotting ',A3,'; latitudes',I3,' to',I4,'.') CALL PGASK (0) STATUS = PRJSET(PRJ) STATUS = PRJGET (PRJ, PRJ_CATEGORY, J) CUBIC = J.EQ.PRJ_QUADCUBE HEALPX = J.EQ.PRJ_HEALPIX IF (CUBIC) THEN * Draw the perimeter of the quadcube projection. CALL PGENV (-335.0, 65.0, -200.0, 200.0, 1, -2) CALL PGSCI (2) CALL PGTEXT (-340.0, -220.0, PCODE // ' - 15 degree graticule') CALL PGSCI (8) STATUS = PRJGET (PRJ, PRJ_X0, X0) STATUS = PRJGET (PRJ, PRJ_Y0, Y0) XR(1) = 45.0 + X0 YR(1) = 45.0 - Y0 XR(2) = 45.0 + X0 YR(2) = 3.0*45.0 - Y0 XR(3) = -45.0 + X0 YR(3) = 3.0*45.0 - Y0 XR(4) = -45.0 + X0 YR(4) = -3.0*45.0 - Y0 XR(5) = 45.0 + X0 YR(5) = -3.0*45.0 - Y0 XR(6) = 45.0 + X0 YR(6) = 45.0 - Y0 XR(7) = -7.0*45.0 + X0 YR(7) = 45.0 - Y0 XR(8) = -7.0*45.0 + X0 YR(8) = -45.0 - Y0 XR(9) = 45.0 + X0 YR(9) = -45.0 - Y0 CALL PGLINE (9, XR, YR) ELSE CALL PGENV (-200.0, 200.0, -200.0, 200.0, 1, -2) CALL PGSCI (2) CALL PGTEXT (-240.0, -220.0, PCODE//' - 15 degree graticule') IF (HEALPX) THEN * Draw the perimeter of the HEALPix projection. CALL PGSCI (8) H = NINT(PV(1)) SX = 180.0 / H SY = SX * NINT(PV(2) + 1D0) / 2.0 STATUS = PRJGET (PRJ, PRJ_X0, X0) STATUS = PRJGET (PRJ, PRJ_Y0, Y0) HX = 180.0 + X0 HY = SY - SX - Y0 CALL PGMOVE (HX, HY) DO 30 J = 1, H HX = HX - SX HY = HY + SX CALL PGDRAW (HX, HY) HX = HX - SX HY = HY - SX CALL PGDRAW (HX, HY) 30 CONTINUE HX = 180.0 + X0 HY = -SY + SX - Y0 IF (MOD(INT(PV(2)),2).EQ.1) THEN K = 1 ELSE K = -1 HY = HY - SX END IF CALL PGMOVE (HX, HY) DO 40 J = 1, H HX = HX - SX HY = HY - K*SX CALL PGDRAW (HX, HY) HX = HX - SX HY = HY + K*SX CALL PGDRAW (HX, HY) 40 CONTINUE END IF END IF CI = 1 DO 70 ILNG = -180, 180, 15 CI = CI + 1 IF (CI.GT.7) CI = 2 LNG(1) = DBLE(ILNG) IF (ILNG.EQ.0) THEN CALL PGSCI (1) ELSE CALL PGSCI (CI) END IF J = 1 DO 50 ILAT = NORTH, SOUTH, -1 LAT(J) = DBLE(ILAT) J = J + 1 50 CONTINUE LEN = NORTH - SOUTH + 1 STATUS = PRJS2X (PRJ, 1, LEN, 1, 1, LNG, LAT, X, Y, STAT) K = 0 DO 60 J = 1, LEN IF (STAT(J).NE.0) THEN IF (K.GT.1) CALL PGLINE (K, XR, YR) K = 0 GO TO 60 END IF IF (CUBIC .AND. J.GT.0) THEN IF (ABS(X(J) - X(J-1)).GT.2D0 .OR. : ABS(Y(J) - Y(J-1)).GT.5D0) THEN IF (K.GT.1) CALL PGLINE (K, XR, YR) K = 0 END IF ELSE IF (HEALPX .AND. ILNG.EQ.180) THEN IF (X(J).GT.180D0) GO TO 60 END IF K = K + 1 XR(K) = -X(J) YR(K) = Y(J) 60 CONTINUE CALL PGLINE (K, XR, YR) 70 CONTINUE CI = 1 INTRRP = CUBIC .OR. HEALPX DO 100 ILAT = -90, 90, 15 CI = CI + 1 IF (CI.GT.7) CI = 2 IF (ILAT.GT.NORTH) GO TO 100 IF (ILAT.LT.SOUTH) GO TO 100 LAT(1) = DBLE(ILAT) IF (ILAT.EQ.0) THEN CALL PGSCI (1) ELSE CALL PGSCI (CI) END IF ILNG = -180 DO 80 J = 1, 361 LNG(J) = DBLE(ILNG) ILNG = ILNG + 1 80 CONTINUE STATUS = PRJS2X (PRJ, 361, 1, 1, 1, LNG, LAT, X, Y, STAT) K = 0 DO 90 J = 1, 361 IF (STAT(J).NE.0) THEN IF (K.GT.1) CALL PGLINE (K, XR, YR) K = 0 GO TO 90 END IF IF (INTRRP .AND. J.GT.0) THEN IF (ABS(X(J) - X(J-1)).GT.2D0 .OR. : ABS(Y(J) - Y(J-1)).GT.5D0) THEN IF (K.GT.1) CALL PGLINE (K, XR, YR) K = 0 END IF END IF K = K + 1 XR(K) = -X(J) YR(K) = Y(J) 90 CONTINUE CALL PGLINE (K, XR, YR) 100 CONTINUE CALL PGSCI(1) XR(1) = 0.0 YR(1) = 0.0 CALL PGPT (1, XR, YR, 21) CALL PGASK (1) CALL PGPAGE() RETURN END pywcs-1.12/wcslib/Fortran/test/tspc.f0000644001153600020070000004023712310355626021651 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tspc.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TSPC *----------------------------------------------------------------------- * * TSPC tests the spectral transformation driver routines for closure. * *----------------------------------------------------------------------- * Maximum length of spectral axis - see CLOSURE. INTEGER NSPEC PARAMETER (NSPEC = 10001) INTEGER CLOSURE, NAXISJ, NFAIL DOUBLE PRECISION C, CDELTX, CRPIXJ, CRVALX, MARS(0:6), RESTFRQ, : RESTWAV, X1, X2 COMMON /SPECTRO/ MARS DATA C /2.99792458D8/ * KPNO MARS spectrograph grism parameters. DATA MARS /4.5D5, 1D0, 27D0, 1.765D0, -1.077D6, 3D0, 5D0/ *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing closure of WCSLIB spectral transformation ', : 'routines (tspc.f)',/, : '--------------------------------------------------', : '-----------------') NFAIL = 0 * PGPLOT initialization. CALL PGBEG (0, '/xwindow', 1, 1) NAXISJ = NSPEC CRPIXJ = NAXISJ/2 + 1 RESTFRQ = 1420.40595D6 RESTWAV = C/RESTFRQ X1 = 1D9 X2 = 2D9 CDELTX = (X2 - X1)/(NAXISJ - 1) CRVALX = X1 + (CRPIXJ - 1.0)*CDELTX WRITE (*, 20) X1*1D-9, X2*1D-9, CDELTX*1D-3 20 FORMAT (/,'Linear frequency axis, span:',F4.1,' to',F4.1, : ' (GHz), step:',F8.3,' (kHz)',/,'---------------------', : '-----------------------------------------------------') NFAIL = NFAIL + CLOSURE('WAVE-F2W', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VOPT-F2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('ZOPT-F2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('AWAV-F2A', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VELO-F2V', RESTFRQ, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('BETA-F2V', RESTFRQ, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) RESTWAV = 700D-9 RESTFRQ = C/RESTWAV X1 = 300D-9 X2 = 900D-9 CDELTX = (X2 - X1)/(NAXISJ - 1) CRVALX = X1 + (CRPIXJ - 1D0)*CDELTX WRITE (*, 30) INT(X1*1D9), INT(X2*1D9), CDELTX*1D9 30 FORMAT (/,'Linear vacuum wavelength axis, span:',I4,' to',I4, : ' (nm), step:',F9.6,' (nm)',/,'----------------------', : '----------------------------------------------------') NFAIL = NFAIL + CLOSURE('FREQ-W2F', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('AFRQ-W2F', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('ENER-W2F', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('WAVN-W2F', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VRAD-W2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('AWAV-W2A', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VELO-W2V', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('BETA-W2V', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) WRITE (*, 40) INT(X1*1D9), INT(X2*1D9), CDELTX*1D9 40 FORMAT (/,'Linear air wavelength axis, span:',I4,' to',I4, : ' (nm), step:',F9.6,' (nm)',/,'----------------------', : '----------------------------------------------------') NFAIL = NFAIL + CLOSURE('FREQ-A2F', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('AFRQ-A2F', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('ENER-A2F', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('WAVN-A2F', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VRAD-A2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('WAVE-A2W', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VOPT-A2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('ZOPT-A2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VELO-A2V', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('BETA-A2V', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) RESTFRQ = 1420.40595D6 RESTWAV = C/RESTFRQ X1 = -0.96D0*C X2 = 0.96D0*C CDELTX = (X2 - X1)/(NAXISJ - 1) CRVALX = X1 + (CRPIXJ - 1D0)*CDELTX WRITE (*, 50) INT(X1), INT(X2), INT(CDELTX) 50 FORMAT (/,'Linear velocity axis, span:',I11,' to',I10, : ' m/s, step:',I6,' (m/s)',/,'-----------------------', : '---------------------------------------------------') NFAIL = NFAIL + CLOSURE('FREQ-V2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('AFRQ-V2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('ENER-V2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('WAVN-V2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VRAD-V2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('WAVE-V2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VOPT-V2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('ZOPT-V2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('AWAV-V2A', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) RESTWAV = 650D-9 RESTFRQ = C/RESTWAV X1 = 300D-9 X2 = 1000D-9 CDELTX = (X2 - X1)/(NAXISJ - 1) CRVALX = X1 + (CRPIXJ - 1D0)*CDELTX WRITE (*, 60) INT(X1*1D9), INT(X2*1D9), CDELTX*1D9 60 FORMAT (/,'Vacuum wavelength grism axis, span:',I4,' to',I5, : ' (nm), step:',F9.6,' (nm)',/,'----------------------', : '----------------------------------------------------') NFAIL = NFAIL + CLOSURE('FREQ-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('AFRQ-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('ENER-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('WAVN-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VRAD-GRI', RESTFRQ, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('WAVE-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VOPT-GRI', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('ZOPT-GRI', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('AWAV-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VELO-GRI', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('BETA-GRI', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) * Reproduce Fig. 5 of Paper III. NAXISJ = 1700 CRPIXJ = 719.8D0 CRVALX = 7245.2D-10 CDELTX = 2.956D-10 RESTWAV = 8500D-10 RESTFRQ = C/RESTWAV X1 = CRVALX + (1 - CRPIXJ)*CDELTX X2 = CRVALX + (NAXISJ - CRPIXJ)*CDELTX MARS(5) = 0D0 MARS(6) = 0D0 WRITE (*, 70) INT(X1*1D9), INT(X2*1D9), CDELTX*1D9 70 FORMAT (/,'Air wavelength grism axis, span:',I4,' to',I5, : ' (nm), step:',F9.6,' (nm)',/,'----------------------', : '----------------------------------------------------') NFAIL = NFAIL + CLOSURE('AWAV-GRA', 0D0, 0D0, NAXISJ, CRPIXJ, : CDELTX, CRVALX) NFAIL = NFAIL + CLOSURE('VELO-GRA', 0D0, RESTWAV, NAXISJ, CRPIXJ, : CDELTX, CRVALX) CALL PGASK(0) CALL PGEND() IF (NFAIL.NE.0) THEN WRITE (*, 80) NFAIL 80 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', : 'tolerance.') ELSE WRITE (*, 90) 90 FORMAT (/,'PASS: All closure residuals are within reporting ', : 'tolerance.') END IF END *======================================================================= INTEGER FUNCTION CLOSURE (CTYPES, RESTFRQ, RESTWAV, NAXISJ, : CRPIXJ, CDELTX, CRVALX) INTEGER NSPEC PARAMETER (NSPEC = 10001) INTEGER J, NAXISJ, NFAIL, RESTREQ, STAT1(NSPEC), STAT2(NSPEC), : STATUS REAL TMP, X(NSPEC), XMIN, XMAX, Y(NSPEC), YMAX, YMIN DOUBLE PRECISION CDELTS, CDELTX, CLOS(NSPEC), CRPIXJ, CRVALS, : CRVALX, DSDX, MARS(0:6), RESID, RESIDMAX, RESTFRQ, : RESTWAV, SPEC1(NSPEC), SPEC2(NSPEC), TOL CHARACTER CTYPES*8, PTYPE, SCODE*3, SNAME*21, STYPE*4, TITLE*80, : UNITS*7, XTYPE, YLAB*80 * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'spx.inc' INCLUDE 'spc.inc' INTEGER SPC(SPCLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (SPC,DUMMY) COMMON /SPECTRO/ MARS DATA TOL /1D-11/ *----------------------------------------------------------------------- * Get keyvalues for the required spectral axis type. STATUS = SPCXPS (CTYPES, CRVALX, RESTFRQ, RESTWAV, PTYPE, XTYPE, : RESTREQ, CRVALS, DSDX) IF (STATUS.NE.0) THEN WRITE (*, 5) STATUS, CTYPES 5 FORMAT ('ERROR',I2,' from SPCXPS for',A,'.') RETURN END IF CDELTS = CDELTX * DSDX STATUS = SPCINI(SPC) IF (CTYPES(6:6).EQ.'G') THEN * KPNO MARS spectrograph grism parameters. STATUS = SPCPUT (SPC, SPC_PV, MARS(0), 0) STATUS = SPCPUT (SPC, SPC_PV, MARS(1), 1) STATUS = SPCPUT (SPC, SPC_PV, MARS(2), 2) STATUS = SPCPUT (SPC, SPC_PV, MARS(3), 3) STATUS = SPCPUT (SPC, SPC_PV, MARS(4), 4) STATUS = SPCPUT (SPC, SPC_PV, MARS(5), 5) STATUS = SPCPUT (SPC, SPC_PV, MARS(6), 6) END IF * Construct the axis. DO 10 J = 1, NAXISJ SPEC1(J) = (J - CRPIXJ)*CDELTS 10 CONTINUE WRITE (*, 20) CTYPES, CRVALS+SPEC1(1), CRVALS+SPEC1(NAXISJ), : CDELTS 20 FORMAT (A,' (CRVALk+w) range: ',1PE13.6,' to ',1PE13.6,', step: ', : 1PE13.6) * Initialize. STATUS = SPCPUT (SPC, SPC_FLAG, 0, 0) STATUS = SPCPUT (SPC, SPC_CRVAL, CRVALS, 0) STATUS = SPCPUT (SPC, SPC_RESTFRQ, RESTFRQ, 0) STATUS = SPCPUT (SPC, SPC_RESTWAV, RESTWAV, 0) STATUS = SPCPUT (SPC, SPC_TYPE, CTYPES, 0) STATUS = SPCPUT (SPC, SPC_CODE, CTYPES(6:8), 0) * Convert the first to the second. STATUS = SPCX2S(SPC, NAXISJ, 1, 1, SPEC1, SPEC2, STAT1) IF (STATUS.NE.0) THEN WRITE (*, 30) STATUS 30 FORMAT ('SPCX2S ERROR',I2,'.') RETURN END IF * Convert the second back to the first. STATUS = SPCS2X(SPC, NAXISJ, 1, 1, SPEC2, CLOS, STAT2) IF (STATUS.NE.0) THEN WRITE (*, 40) STATUS 40 FORMAT ('SPCS2X ERROR',I2,'.') RETURN END IF * Test closure. NFAIL = 0 RESIDMAX = 0D0 STATUS = SPCGET (SPC, SPC_TYPE, STYPE, 0) DO 80 J = 1, NAXISJ IF (STAT1(J).NE.0) THEN WRITE (*, 50) CTYPES, SPEC1(J), STYPE, STAT1(J) 50 FORMAT (A,': w =',1PE20.12,' -> ',A,' = ???, stat = ',I2) GO TO 80 END IF IF (STAT2(J).NE.0) THEN WRITE (*, 60) CTYPES, SPEC1(J), STYPE, SPEC2(J), STAT2(J) 60 FORMAT (A,': w =',1PE20.12,' -> ',A,' =',1PE20.12, : ' -> w = ???, stat = ',I2) GO TO 80 END IF RESID = ABS((CLOS(J) - SPEC1(J))/CDELTS) IF (RESID.GT.RESIDMAX) RESIDMAX = RESID IF (RESID.GT.TOL) THEN NFAIL = NFAIL + 1 WRITE (*, 70) CTYPES, SPEC1(J), STYPE, SPEC2(J), CLOS(J), : RESID 70 FORMAT (A,': w =',1PE20.12,' -> ',A,' =',1PE20.12,' ->',/, : ' w =',1PE20.12,', resid =',1PE8.1) END IF 80 CONTINUE WRITE (*, 90) CTYPES, RESIDMAX 90 FORMAT (A,': Maximum closure residual =',1PE8.1,' pixel') * Draw graph. CALL PGBBUF() CALL PGERAS() XMIN = REAL(CRVALS + SPEC1(1)) XMAX = REAL(CRVALS + SPEC1(NAXISJ)) YMIN = REAL(SPEC2(1)) - XMIN YMAX = YMIN DO 100 J = 1, NAXISJ X(J) = REAL(J) Y(J) = REAL(SPEC2(J) - (CRVALS + SPEC1(J))) IF (Y(J).GT.YMAX) YMAX = Y(J) IF (Y(J).LT.YMIN) YMIN = Y(J) 100 CONTINUE J = INT(CRPIXJ+1) IF (Y(J).LT.0D0) then TMP = YMIN YMIN = YMAX YMAX = TMP END IF CALL PGASK(0) CALL PGENV(1.0, REAL(NAXISJ), YMIN, YMAX, 0, -1) CALL PGSCI(1) CALL PGBOX('ABNTS', 0.0, 0, 'BNTS', 0.0, 0) STATUS = SPCTYP (CTYPES, STYPE, SCODE, SNAME, UNITS, PTYPE, XTYPE, : RESTREQ) DO 110 J = 21, 1, -1 IF (SNAME(J:J).NE.' ') GO TO 120 110 CONTINUE 120 YLAB = SNAME(:J) // ' - correction ' // UNITS TITLE = CTYPES // ': CRVALk + w ' // UNITS CALL PGLAB('Pixel coordinate', YLAB, TITLE) CALL PGAXIS('N', 0.0, YMAX, REAL(NAXISJ), YMAX, XMIN, XMAX, 0.0, : 0, -0.5, 0.0, 0.5, -0.5, 0.0) CALL PGAXIS('N', REAL(NAXISJ), ymin, REAL(NAXISJ), YMAX, : REAL(YMIN/CDELTS), REAL(YMAX/CDELTS), 0.0, 0, 0.5, : 0.0, 0.5, 0.1, 0.0) CALL PGMTXT('R', 2.2, 0.5, 0.5, 'Pixel offset') CALL PGLINE(NAXISJ, X, Y) CALL PGSCI(7) CALL PGPT1(REAL(CRPIXJ), 0.0, 24) CALL PGEBUF() WRITE (*, '(A,$)') 'Type for next page: ' READ (*, *, END=130) 130 WRITE (*, *) CLOSURE = NFAIL END pywcs-1.12/wcslib/Fortran/test/tsph.f0000644001153600020070000001211112310355626021644 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tsph.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TSPH *----------------------------------------------------------------------- * * TSPH tests the forward and reverse spherical coordinate transformation * routines for closure. * *----------------------------------------------------------------------- INTEGER J, LAT, LNG, NFAIL, SPHS2X, SPHX2S, STATUS DOUBLE PRECISION COSLAT, DLAT, DLATMX, DLNG, DLNGMX, LNG1(361), : LNG2(361), EUL(5), LAT1, LAT2(361), PHI(361), : THETA(361), TOL, ZETA PARAMETER (TOL = 1D-12) DOUBLE PRECISION D2R, PI PARAMETER (PI = 3.141592653589793238462643D0) PARAMETER (D2R = PI/180D0) *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing closure of WCSLIB coordinate transformation ', : 'routines (tsph.f)',/, : '----------------------------------------------------', : '-----------------') * Set reference angles. EUL(1) = 90D0 EUL(2) = 30D0 EUL(3) = -90D0 WRITE (*, 20) (EUL(J),J=1,3) 20 FORMAT (/,'Celestial longitude and latitude of the native pole, ', : 'and native',/,'longitude of the celestial pole ', : '(degrees):',3F10.4) EUL(4) = COS(EUL(2)*D2R) EUL(5) = SIN(EUL(2)*D2R) WRITE (*, 30) TOL 30 FORMAT ('Reporting tolerance:',1PG8.1,' degrees of arc.') NFAIL = 0 DLNGMX = 0D0 DLATMX = 0D0 DO 70 LAT = 90, -90, -1 LAT1 = DBLE(LAT) COSLAT = COS(LAT1*D2R) J = 1 DO 40 LNG = -180, 180 LNG1(J) = DBLE(LNG) J = J + 1 40 CONTINUE STATUS = SPHS2X (EUL, 361, 1, 1, 1, LNG1, LAT1, PHI, THETA) STATUS = SPHX2S (EUL, 361, 0, 1, 1, PHI, THETA, LNG2, LAT2) DO 60 J = 1, 361 DLNG = ABS(LNG2(J) - LNG1(J)) IF (DLNG.GT.180D0) DLNG = ABS(DLNG-360D0) DLNG = DLNG*COSLAT DLAT = ABS(LAT2(J)-LAT1) IF (DLNG.GT.DLNGMX) DLNGMX = DLNG IF (DLAT.GT.DLATMX) DLATMX = DLAT IF (DLNG.GT.TOL .OR. DLAT.GT.TOL) THEN NFAIL = NFAIL + 1 WRITE (*, 50) LNG1(J), LAT1, PHI(J), THETA(J), LNG2(J), : LAT2(J) 50 FORMAT ('Unclosed: LNG1 =',F20.15,' LAT1 =',F20.15,/, : ' PHI =',F20.15,' THETA =',F20.15,/, : ' LNG2 =',F20.15,' LAT2 =',F20.15) END IF 60 CONTINUE 70 CONTINUE * Test closure at points close to the pole. DO 90 J = -1, 1, 2 ZETA = 1D0 LNG1(1) = -180D0 DO 80 LAT = 1, 12 LAT1 = DBLE(J)*(90D0 - ZETA) STATUS = SPHS2X (EUL, 1, 1, 1, 1, LNG1, LAT1, PHI, THETA) STATUS = SPHX2S (EUL, 1, 1, 1, 1, PHI, THETA, LNG2, LAT2) DLNG = ABS(LNG2(1) - LNG1(1)) IF (DLNG.GT.180D0) DLNG = ABS(DLNG-360D0) DLNG = DLNG*COSLAT DLAT = ABS(LAT2(1)-LAT1) IF (DLNG.GT.DLNGMX) DLNGMX = DLNG IF (DLAT.GT.DLATMX) DLATMX = DLAT IF (DLNG.GT.TOL .OR. DLAT.GT.TOL) THEN NFAIL = NFAIL + 1 WRITE (*, 50) LNG1(1), LAT1, PHI(1), THETA(1), LNG2(1), : LAT2(1) END IF ZETA = ZETA/10D0 LNG1(1) = LNG1(1) + 30D0 80 CONTINUE 90 CONTINUE WRITE (*, 100) DLNGMX, DLATMX 100 FORMAT (/,'SPHS2X/SPHX2S: Maximum closure residual =',1P,E8.1, : ' (lng)',E8.1,' (lat) deg.') IF (NFAIL.NE.0) THEN WRITE (*, 110) NFAIL 110 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', : 'tolerance.') ELSE WRITE (*, 120) 120 FORMAT (/,'PASS: All closure residuals are within reporting ', : 'tolerance.') END IF END pywcs-1.12/wcslib/Fortran/test/tspx.f0000644001153600020070000002436112310355626021676 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tspx.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TSPX *----------------------------------------------------------------------- * * TSPEC tests the spectral transformation routines for closure. * *----------------------------------------------------------------------- * Length of spectral axis - see CLOSURE. INTEGER NSPEC PARAMETER (NSPEC = 9991) INTEGER CLOSURE, J, K, NFAIL, STAT(NSPEC), STATUS DOUBLE PRECISION AWAV(NSPEC), C, FREQ(NSPEC), RESTFRQ, RESTWAV, : SPC1(NSPEC), SPC2(NSPEC), STEP, VELO(NSPEC), WAVE(NSPEC) INCLUDE 'spx.inc' DATA C /2.99792458D8/ *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing closure of WCSLIB spectral transformation ', : 'routines (tspx.f)',/, : '--------------------------------------------------', : '-----------------') RESTFRQ = 1420.40595D6 RESTWAV = C/RESTFRQ * Exercise SPECX. WRITE (*, 20) 20 FORMAT (/,'Testing spectral cross-conversions (specx).',/) STATUS = SPECX('VELO', 4.3D5, RESTFRQ, RESTWAV, SPX) WRITE (*, 30) SPX(1), SPX(2), SPXI(1), SPXI(2), (SPX(J), J=4,14) 30 FORMAT (' restfrq:',1PE20.12,/,' restwav:',1PE20.12,/, : ' wavetype:',I3,/, ' velotype:',I3,//, : ' freq:',1PE20.12,/,' afrq:',1PE20.12,/, : ' ener:',1PE20.12,/,' wavn:',1PE20.12,/, : ' vrad:',1PE20.12,/,' wave:',1PE20.12,/, : ' vopt:',1PE20.12,/,' zopt:',1PE20.12,/, : ' awav:',1PE20.12,/,' velo:',1PE20.12,/, : ' beta:',1PE20.12,/) WRITE (*, 40) (SPX(J), J=15,40) 40 FORMAT ('dfreq/dafrq:',1PE20.12,/,'dafrq/dfreq:',1PE20.12,/, : 'dfreq/dener:',1PE20.12,/,'dener/dfreq:',1PE20.12,/, : 'dfreq/dwavn:',1PE20.12,/,'dwavn/dfreq:',1PE20.12,/, : 'dfreq/dvrad:',1PE20.12,/,'dvrad/dfreq:',1PE20.12,/, : 'dfreq/dwave:',1PE20.12,/,'dwave/dfreq:',1PE20.12,/, : 'dfreq/dawav:',1PE20.12,/,'dawav/dfreq:',1PE20.12,/, : 'dfreq/dvelo:',1PE20.12,/,'dvelo/dfreq:',1PE20.12,/, : 'dwave/dvopt:',1PE20.12,/,'dvopt/dwave:',1PE20.12,/, : 'dwave/dzopt:',1PE20.12,/,'dzopt/dwave:',1PE20.12,/, : 'dwave/dawav:',1PE20.12,/,'dawav/dwave:',1PE20.12,/, : 'dwave/dvelo:',1PE20.12,/,'dvelo/dwave:',1PE20.12,/, : 'dawav/dvelo:',1PE20.12,/,'dvelo/dawav:',1PE20.12,/, : 'dvelo/dbeta:',1PE20.12,/,'dbeta/dvelo:',1PE20.12,/) * Construct a linear velocity spectrum. STEP = (2D0*C/NSPEC) / 2D0 K = -NSPEC DO 50 J = 1, NSPEC VELO(J) = (K+1)*STEP K = K + 2 50 CONTINUE WRITE (*, 60) VELO(1)*1D-3, VELO(NSPEC)*1D-3, : (VELO(2) - VELO(1))*1D-3 60 FORMAT (/,'Velocity range:',F12.3,' to',F11.3,' km/s, step:', : F7.3,' km/s') * Convert it to frequency. STATUS = VELOFREQ(RESTFRQ, NSPEC, 1, 1, VELO, FREQ, STAT) * Test closure of all two-way combinations. NFAIL = 0 NFAIL = NFAIL + CLOSURE ('freq', 'afrq', 0D0, : FREQAFRQ, AFRQFREQ, FREQ, SPC1) NFAIL = NFAIL + CLOSURE ('afrq', 'freq', 0D0, : AFRQFREQ, FREQAFRQ, SPC1, SPC2) NFAIL = NFAIL + CLOSURE ('freq', 'ener', 0D0, : FREQENER, ENERFREQ, FREQ, SPC1) NFAIL = NFAIL + CLOSURE ('ener', 'freq', 0D0, : ENERFREQ, FREQENER, SPC1, SPC2) NFAIL = NFAIL + CLOSURE ('freq', 'wavn', 0D0, : FREQWAVN, WAVNFREQ, FREQ, SPC1) NFAIL = NFAIL + CLOSURE ('wavn', 'freq', 0D0, : WAVNFREQ, FREQWAVN, SPC1, SPC2) NFAIL = NFAIL + CLOSURE ('freq', 'vrad', RESTFRQ, : FREQVRAD, VRADFREQ, FREQ, SPC1) NFAIL = NFAIL + CLOSURE ('vrad', 'freq', RESTFRQ, : VRADFREQ, FREQVRAD, SPC1, SPC2) NFAIL = NFAIL + CLOSURE ('freq', 'wave', 0D0, : FREQWAVE, WAVEFREQ, FREQ, WAVE) NFAIL = NFAIL + CLOSURE ('wave', 'freq', 0D0, : WAVEFREQ, FREQWAVE, WAVE, SPC2) NFAIL = NFAIL + CLOSURE ('freq', 'awav', 0D0, : FREQAWAV, AWAVFREQ, FREQ, AWAV) NFAIL = NFAIL + CLOSURE ('awav', 'freq', 0D0, : AWAVFREQ, FREQAWAV, AWAV, SPC2) NFAIL = NFAIL + CLOSURE ('freq', 'velo', RESTFRQ, : FREQVELO, VELOFREQ, FREQ, VELO) NFAIL = NFAIL + CLOSURE ('velo', 'freq', RESTFRQ, : VELOFREQ, FREQVELO, VELO, SPC2) NFAIL = NFAIL + CLOSURE ('wave', 'vopt', RESTWAV, : WAVEVOPT, VOPTWAVE, WAVE, SPC1) NFAIL = NFAIL + CLOSURE ('vopt', 'wave', RESTWAV, : VOPTWAVE, WAVEVOPT, SPC1, SPC2) NFAIL = NFAIL + CLOSURE ('wave', 'zopt', RESTWAV, : WAVEZOPT, ZOPTWAVE, WAVE, SPC1) NFAIL = NFAIL + CLOSURE ('zopt', 'wave', RESTWAV, : ZOPTWAVE, WAVEZOPT, SPC1, SPC2) NFAIL = NFAIL + CLOSURE ('wave', 'awav', 0D0, : WAVEAWAV, AWAVWAVE, WAVE, SPC1) NFAIL = NFAIL + CLOSURE ('awav', 'wave', 0D0, : AWAVWAVE, WAVEAWAV, SPC1, SPC2) NFAIL = NFAIL + CLOSURE ('wave', 'velo', RESTWAV, : WAVEVELO, VELOWAVE, WAVE, SPC1) NFAIL = NFAIL + CLOSURE ('velo', 'wave', RESTWAV, : VELOWAVE, WAVEVELO, SPC1, SPC2) NFAIL = NFAIL + CLOSURE ('awav', 'velo', RESTWAV, : AWAVVELO, VELOAWAV, AWAV, SPC1) NFAIL = NFAIL + CLOSURE ('velo', 'awav', RESTWAV, : VELOAWAV, AWAVVELO, SPC1, SPC2) NFAIL = NFAIL + CLOSURE ('velo', 'beta', 0D0, : VELOBETA, BETAVELO, VELO, SPC1) NFAIL = NFAIL + CLOSURE ('beta', 'velo', 0D0, : BETAVELO, VELOBETA, SPC1, SPC2) IF (NFAIL.NE.0) THEN WRITE (*, 70) NFAIL 70 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', : 'tolerance.') ELSE WRITE (*, 80) 80 FORMAT (/,'PASS: All closure residuals are within reporting ', : 'tolerance.') END IF END *======================================================================= INTEGER FUNCTION CLOSURE (FROM, TO, PARM, FWD, REV, SPEC1, SPEC2) INTEGER NSPEC PARAMETER (NSPEC = 9991) LOGICAL SKIP INTEGER J, NFAIL, STAT1(NSPEC), STAT2(NSPEC), STATUS DOUBLE PRECISION CLOS(NSPEC), PARM, RESID, RESIDMAX, SPEC1(NSPEC), : SPEC2(NSPEC), TOL CHARACTER FROM*(*), TO*(*) PARAMETER (TOL = 1D-9) INTEGER FWD, REV EXTERNAL FWD, REV SAVE SKIP DATA SKIP/.FALSE./ *----------------------------------------------------------------------- * Convert the first to the second. STATUS = FWD(PARM, NSPEC, 1, 1, SPEC1, SPEC2, STAT1) IF (STATUS.NE.0) THEN WRITE (*, 10) FROM, TO, STATUS 10 FORMAT (A,A,' ERROR',I2,'.') END IF * Convert the second back to the first. STATUS = REV(PARM, NSPEC, 1, 1, SPEC2, CLOS, STAT2) IF (STATUS.NE.0) THEN WRITE (*, 10) TO, FROM, STATUS END IF * Test closure. NFAIL = 0 RESIDMAX = 0.0 DO 50 J = 1, NSPEC IF (STAT1(J).NE.0) THEN IF (SKIP) WRITE (*, *) WRITE (*, 20) FROM, TO, FROM, SPEC1(J), TO, STAT1(J) 20 FORMAT (A,A,': ',A,' =',1PE19.12,' -> ',A, : ' = ???, stat = ',I2) SKIP = .FALSE. GO TO 50 END IF IF (STAT2(J).NE.0) THEN IF (SKIP) WRITE (*, *) WRITE (*, 30) TO, FROM, FROM, SPEC1(J), TO, SPEC2(J), FROM, : STAT2(J) 30 FORMAT (A,A,': ',A,' =',1PE19.12,' -> ',A,' =',1PE19.12, : ' -> ',A,' = ???, stat = ',I2) SKIP = .FALSE. GO TO 50 END IF IF (SPEC1(J).EQ.0.0) THEN RESID = ABS(CLOS(J) - SPEC1(J)) ELSE RESID = ABS((CLOS(J) - SPEC1(J))/SPEC1(J)) IF (RESID.GT.RESIDMAX) RESIDMAX = RESID END IF IF (RESID.GT.TOL) THEN NFAIL = NFAIL + 1 IF (SKIP) WRITE (*, *) WRITE (*, 40) FROM, TO, FROM, SPEC1(J), TO, SPEC2(J), FROM, : CLOS(J), RESID 40 FORMAT (A,A,': ',A,' =',1PE19.12,' -> ',A,' =',1PE19.12, : ' ->',/,' ',A,' =',1PE19.12,', resid =', : 1PE8.1) SKIP = .FALSE. END IF 50 CONTINUE WRITE (*, 60) FROM, TO, RESIDMAX 60 FORMAT (A,A,': Maximum closure residual =',1PE8.1) IF (RESIDMAX.GT.TOL) THEN WRITE (*, *) SKIP = .FALSE. ELSE SKIP = .TRUE. END IF CLOSURE = NFAIL END pywcs-1.12/wcslib/Fortran/test/ttab1.f0000644001153600020070000002170512310355626021712 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: ttab1.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TTAB1 *----------------------------------------------------------------------- * * TTAB1 tests the -TAB routines for closure. * *----------------------------------------------------------------------- DOUBLE PRECISION TOL PARAMETER (TOL = 1D-8) INTEGER K1, K2, M PARAMETER (M = 2, K1 = 32, K2 = 16) INTEGER K(2), MAP(2) DOUBLE PRECISION CRVAL(2) DATA K /K1, K2/ DATA MAP /0, 1/ DATA CRVAL /1D0, -1D0/ INTEGER I, IK, IK1, IK2, IM, J, N, NFAIL, STAT0(128), : STAT1(128), STATUS DOUBLE PRECISION CRPIX4, EPSILON, RESID, RESIDMAX, TIME(12), : WORLD(M,11,11), XT0(12), XT1(12), X0(M,11,11), : X1(M,11,11), Z * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'tab.inc' INTEGER TAB(TABLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (TAB,DUMMY) *----------------------------------------------------------------------- WRITE (*, 10) TOL 10 FORMAT ('Testing closure of WCSLIB tabular coordinate routines ', : '(ttab1.f)',/, : '------------------------------------------------------', : '---------',//, : 'Reporting tolerance',1PG8.1,'.') * First a 1-dimensional table from Sect. 6.2.3 of Paper III. WRITE (*, '(/,A)') 'One-dimensional test:' STATUS = TABPUT (TAB, TAB_FLAG, -1, 0, 0) STATUS = TABINI (M, K, TAB) IF (STATUS.NE.0) THEN WRITE (*, 20) STATUS 20 FORMAT ('TABINI ERROR',I2,'.') GO TO 999 END IF STATUS = TABPUT (TAB, TAB_M, 1, 0, 0) STATUS = TABPUT (TAB, TAB_K, 8, 1, 0) STATUS = TABPUT (TAB, TAB_MAP, 0, 1, 0) STATUS = TABPUT (TAB, TAB_CRVAL, 0D0, 1, 0) STATUS = TABPUT (TAB, TAB_INDEX, 0D0, 1, 1) STATUS = TABPUT (TAB, TAB_INDEX, 1D0, 1, 2) STATUS = TABPUT (TAB, TAB_INDEX, 1D0, 1, 3) STATUS = TABPUT (TAB, TAB_INDEX, 2D0, 1, 4) STATUS = TABPUT (TAB, TAB_INDEX, 2D0, 1, 5) STATUS = TABPUT (TAB, TAB_INDEX, 3D0, 1, 6) STATUS = TABPUT (TAB, TAB_INDEX, 3D0, 1, 7) STATUS = TABPUT (TAB, TAB_INDEX, 4D0, 1, 8) STATUS = TABPUT (TAB, TAB_COORD, 1997.84512D0, 1, 0) STATUS = TABPUT (TAB, TAB_COORD, 1997.84631D0, 2, 0) STATUS = TABPUT (TAB, TAB_COORD, 1993.28451D0, 3, 0) STATUS = TABPUT (TAB, TAB_COORD, 1993.28456D0, 4, 0) STATUS = TABPUT (TAB, TAB_COORD, 2001.59234D0, 5, 0) STATUS = TABPUT (TAB, TAB_COORD, 2001.59239D0, 6, 0) STATUS = TABPUT (TAB, TAB_COORD, 2002.18265D0, 7, 0) STATUS = TABPUT (TAB, TAB_COORD, 2002.18301D0, 8, 0) EPSILON = 1D-3 CRPIX4 = 0.5 XT0(1) = 0.5 + EPSILON - CRPIX4 XT0(2) = 1.0 - CRPIX4 XT0(3) = 1.5 - EPSILON - CRPIX4 XT0(4) = 1.5 + EPSILON - CRPIX4 XT0(5) = 2.0 - CRPIX4 XT0(6) = 2.5 - EPSILON - CRPIX4 XT0(7) = 2.5 + EPSILON - CRPIX4 XT0(8) = 3.0 - CRPIX4 XT0(9) = 3.5 - EPSILON - CRPIX4 XT0(10) = 3.5 + EPSILON - CRPIX4 XT0(11) = 4.0 - CRPIX4 XT0(12) = 4.5 - EPSILON - CRPIX4 STATUS = TABX2S (TAB, 12, 1, XT0, TIME, STAT0) IF (STATUS.NE.0) THEN WRITE (*, 30) STATUS 30 FORMAT ('TABX2S ERROR',I2,'.') END IF STATUS = TABS2X (TAB, 12, 1, TIME, XT1, STAT1) IF (STATUS.NE.0) THEN WRITE (*, 40) STATUS 40 FORMAT ('TABX2S ERROR',I2,'.') END IF WRITE (*, 50) 50 FORMAT (' x -> time -> x') DO 70 I = 1, 12 WRITE (*, 60) XT0(I), TIME(I), XT1(I) 60 FORMAT (F8.5,F12.5,F9.5) 70 CONTINUE WRITE (*, '(/)') * Test closure. NFAIL = 0 RESIDMAX = 0D0 DO 110 I = 1, 12 IF (STAT0(I).NE.0) THEN WRITE (*, 80) XT0(I), STAT0(I) 80 FORMAT (' TABX2S: X =',F7.1,', STAT =',I2) GO TO 110 END IF IF (STAT1(I).NE.0) THEN WRITE (*, 90) TIME(I), STAT1(I) 90 FORMAT (' TABS2X: T =',F7.1,', STAT =',I2) GO TO 110 END IF RESID = ABS(XT1(I) - XT0(I)) IF (RESID.GT.RESIDMAX) RESIDMAX = RESID IF (RESID.GT.TOL) THEN NFAIL = NFAIL + 1 WRITE (*, 100) XT0(I), TIME(I), XT1(I) 100 FORMAT (' Closure error:',/,' X = ',F20.15,/, : ' -> T = ',F20.15,/,' -> X = ',F20.15) END IF 110 CONTINUE STATUS = TABFREE (TAB) * Now a 2-dimensional table. WRITE (*, '(A)') 'Two-dimensional test:' STATUS = TABPUT (TAB, TAB_FLAG, -1, 0, 0) STATUS = TABINI (M, K, TAB) IF (STATUS.NE.0) THEN WRITE (*, 120) STATUS 120 FORMAT ('TABINI ERROR',I2,'.') GO TO 999 END IF STATUS = TABPUT (TAB, TAB_M, M, 0, 0) DO 140 IM = 1, M STATUS = TABPUT (TAB, TAB_K, K(IM), IM, 0) STATUS = TABPUT (TAB, TAB_MAP, MAP(IM), IM, 0) STATUS = TABPUT (TAB, TAB_CRVAL, CRVAL(IM), IM, 0) DO 130 IK = 1, K(IM) STATUS = TABPUT (TAB, TAB_INDEX, DBLE(IK-1), IM, IK) 130 CONTINUE 140 CONTINUE N = 0 Z = 1D0 / ((K1-1) * (K2-1)) DO 160 IK2 = 0, K2-1 DO 150 IK1 = 0, K1-1 N = N + 1 STATUS = TABPUT (TAB, TAB_COORD, 3D0*IK1*IK2*Z, N, 0) N = N + 1 STATUS = TABPUT (TAB, TAB_COORD, -1D0*(K1-IK1-1)*IK2*Z + : 0.01*IK1, N, 0) 150 CONTINUE 160 CONTINUE DO 180 I = 1, 11 DO 170 J = 1, 11 X0(1,J,I) = (J-1)*(K1-1)/10D0 - CRVAL(1) X0(2,J,I) = (I-1)*(K2-1)/10D0 - CRVAL(2) 170 CONTINUE 180 CONTINUE STATUS = TABX2S (TAB, 121, 2, X0, WORLD, STAT0) IF (STATUS.NE.0) THEN WRITE (*, 190) STATUS 190 FORMAT ('TABX2S ERROR',I2,'.') END IF STATUS = TABS2X (TAB, 121, 2, WORLD, X1, STAT1) IF (STATUS.NE.0) THEN WRITE (*, 200) STATUS 200 FORMAT ('TABX2S ERROR',I2,'.') END IF * Test closure. N = 0 RESIDMAX = 0D0 DO 260 I = 1, 11 DO 250 J = 1, 11 N = N + 1 IF (STAT0(N).NE.0) THEN WRITE (*, 210) X0(1,J,I), X0(2,J,I), STAT0(N) 210 FORMAT (' TABX2S: X = (',F6.1,',',F6.1,'), STAT =',I2) GO TO 250 END IF IF (STAT1(N).NE.0) THEN WRITE (*, 220) WORLD(1,J,I), WORLD(2,J,I), STAT1(N) 220 FORMAT (' TABS2X: S = (',F6.1,',',F6.1,'), STAT =',I2) GO TO 250 END IF DO 240 IM = 1, M RESID = ABS(X1(IM,J,I) - X0(IM,J,I)) IF (RESID.GT.RESIDMAX) RESIDMAX = RESID IF (RESID.GT.TOL) THEN NFAIL = NFAIL + 1 WRITE (*, 230) X0(1,J,I), X0(2,J,I), WORLD(1,J,I), : WORLD(2,J,I), X1(1,J,I), X1(2,J,I) 230 FORMAT (' Closure error:',/, : ' X = (',F20.15,',',F20.15,')',/, : ' -> W = (',F20.15,',',F20.15,')',/, : ' -> X = (',F20.15,',',F20.15,')') GO TO 250 END IF 240 CONTINUE 250 CONTINUE 260 CONTINUE WRITE (*, 270) RESIDMAX 270 FORMAT (/,'TABX2S/TABS2X: Maximum closure residual =',1PE8.1) IF (NFAIL.NE.0) THEN WRITE (*, 280) NFAIL 280 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', : 'tolerance.') ELSE WRITE (*, 290) 290 FORMAT (/,'PASS: All closure residuals are within reporting ', : 'tolerance.') END IF 999 STATUS = TABFREE (TAB) END pywcs-1.12/wcslib/Fortran/test/ttab2.f0000644001153600020070000002242612310355626021714 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: ttab2.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TTAB2 *----------------------------------------------------------------------- * * TTAB2 tests the -TAB routines using PGPLOT for graphical display. It * demonstrates the nature of linear interpolation in 2 dimensions by * contouring the interior a single 2 x 2 interpolation element as the * values in each corner change. * *----------------------------------------------------------------------- * Set up a 2 x 2 lookup table. INTEGER K1, K2, M PARAMETER (M = 2, K1 = 2, K2 = 2) INTEGER K(2), MAP(2) DOUBLE PRECISION CRVAL(2) DATA K /K1, K2/ DATA MAP /0, 1/ DATA CRVAL /0D0, 0D0/ * Number of subdivisions on each side of the interpolation element. INTEGER NP REAL SCL PARAMETER (NP = 128) PARAMETER (SCL = 2.0/(NP-1)) INTEGER I, IM, IK, J, L, L1, L2, L3, LSTEP, STAT(NP*NP), STATUS REAL ARRAY(NP,NP), CLEV(-10:20), LTM(6), V0, V1, W DOUBLE PRECISION X(M,NP,NP), WORLD(M,NP,NP) CHARACTER TEXT*80 * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'tab.inc' INTEGER TAB(TABLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (TAB,DUMMY) *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ( : 'Testing WCSLIB coordinate lookup table routines (ttab2.f)',/, : '---------------------------------------------------------') * PGPLOT initialization. CALL PGBEG (0, '/xwindow', 1, 1) CALL PGVSTD () CALL PGSCH (0.7) * The viewport is slightly oversized. CALL PGWNAD (-0.65, 1.65, -0.65, 1.65) DO 20 L = -10, 20 CLEV(L) = 0.2*L 20 CONTINUE LTM(1) = -SCL*(1.0 + (NP-1)/4.0) LTM(2) = SCL LTM(3) = 0.0 LTM(4) = -SCL*(1.0 + (NP-1)/4.0) LTM(5) = 0.0 LTM(6) = SCL * Set up the lookup table. STATUS = TABPUT (TAB, TAB_FLAG, -1, 0, 0) STATUS = TABINI(M, K, TAB) IF (STATUS.NE.0) THEN WRITE (*, 30) STATUS 30 FORMAT ('TABINI ERROR',I2,'.') GO TO 999 END IF STATUS = TABPUT (TAB, TAB_M, M, 0, 0) DO 50 IM = 1, M STATUS = TABPUT (TAB, TAB_K, K(IM), IM, 0) STATUS = TABPUT (TAB, TAB_MAP, MAP(IM), IM, 0) STATUS = TABPUT (TAB, TAB_CRVAL, CRVAL(IM), IM, 0) DO 40 IK = 1, K(IM) STATUS = TABPUT (TAB, TAB_INDEX, DBLE(IK-1), IM, IK) 40 CONTINUE 50 CONTINUE * Subdivide the interpolation element. DO 70 I = 1, NP DO 60 J = 1, NP X(1,J,I) = (J-1)*(K1-1.0)*SCL - 0.5 - CRVAL(1) X(2,J,I) = (I-1)*(K2-1.0)*SCL - 0.5 - CRVAL(2) 60 CONTINUE 70 CONTINUE * The first coordinate element is static. STATUS = TABPUT (TAB, TAB_COORD, 0D0, 1, 0) STATUS = TABPUT (TAB, TAB_COORD, 0D0, 3, 0) STATUS = TABPUT (TAB, TAB_COORD, 0D0, 5, 0) STATUS = TABPUT (TAB, TAB_COORD, 0D0, 7, 0) * (k1,k2) = (1,1). STATUS = TABPUT (TAB, TAB_COORD, 0D0, 2, 0) * The second coordinate element varies in three of the corners. DO 170 L3 = 0, 100, 20 * (k1,k2) = (2,2). STATUS = TABPUT (TAB, TAB_COORD, 0.01D0*L3, 8, 0) DO 160 L2 = 0, 100, 20 * (k1,k2) = (1,2). STATUS = TABPUT (TAB, TAB_COORD, 0.01D0*L2, 6, 0) CALL PGPAGE () DO 150 L1 = 0, 100, 2 * (k1,k2) = (2,1). STATUS = TABPUT (TAB, TAB_COORD, 0.01D0*L1, 4, 0) * Compute coordinates within the interpolation element. STATUS = TABX2S (TAB, NP*NP, 2, X, WORLD, STAT) IF (STATUS.NE.0) THEN WRITE (*, 80) STATUS 80 FORMAT ('TABX2S ERROR',I2,'.') END IF * Start a new plot. CALL PGBBUF () CALL PGERAS () CALL PGSCI (1) CALL PGSLW (3) CALL PGBOX ('BCNST', 0.0, 0, 'BCNSTV', 0.0, 0) CALL PGMTXT ('T', 0.7, 0.5, 0.5, '-TAB coordinates: ' // : 'linear interpolation / extrapolation in 2-D') * Draw the boundary of the interpolation element in red. CALL PGSCI (2) CALL PGMOVE (-0.5, 0.0) CALL PGDRAW ( 1.5, 0.0) CALL PGMOVE ( 1.0, -0.5) CALL PGDRAW ( 1.0, 1.5) CALL PGMOVE ( 1.5, 1.0) CALL PGDRAW (-0.5, 1.0) CALL PGMOVE ( 0.0, 1.5) CALL PGDRAW ( 0.0, -0.5) * Label the value of the coordinate element in each corner. WRITE (TEXT, '(F3.1)') 0.0 CALL PGTEXT (-0.09, -0.05, TEXT) WRITE (TEXT, '(F4.2)') 0.01*L1 CALL PGTEXT ( 1.02, -0.05, TEXT) WRITE (TEXT, '(F3.1)') 0.01*L2 CALL PGTEXT (-0.13, 1.02, TEXT) WRITE (TEXT, '(F3.1)') 0.01*L3 CALL PGTEXT ( 1.02, 1.02, TEXT) CALL PGSCI (1) * Contour labelling: bottom. V0 = WORLD(2,1,1) V1 = WORLD(2,NP,1) IF (V0.NE.V1) THEN IF (ABS(INT((V1-V0)/0.2)).LT.10) THEN LSTEP = 20 ELSE LSTEP = 40 END IF DO 90 L = -200, 300, LSTEP W = -0.5 + 2.0*(L*0.01 - V0)/(V1 - V0) IF (W.LT.-0.5 .OR. W.GT.1.5) GO TO 90 WRITE (TEXT, '(F4.1)') L*0.01 CALL PGPTXT (W+0.04, -0.56, 0.0, 1.0, TEXT) 90 CONTINUE END IF * Contour labelling: left. V0 = WORLD(2,1,1) V1 = WORLD(2,1,NP) IF (V0.NE.V1) THEN IF (ABS(INT((V1-V0)/0.2)).LT.10) THEN LSTEP = 20 ELSE LSTEP = 40 END IF DO 100 L = -200, 300, LSTEP W = -0.5 + 2.0*(L*0.01 - V0)/(V1 - V0) IF (W.LT.-0.5 .OR. W.GT.1.5) GO TO 100 WRITE (TEXT, '(F4.1)') L*0.01 CALL PGPTXT (-0.52, W-0.02, 0.0, 1.0, TEXT) 100 CONTINUE END IF * Contour labelling: right. V0 = WORLD(2,NP,1) V1 = WORLD(2,NP,NP) IF (V0.NE.V1) THEN IF (ABS(INT((V1-V0)/0.2)).LT.10) THEN LSTEP = 20 ELSE LSTEP = 40 END IF DO 110 L = -200, 300, LSTEP W = -0.5 + 2.0*(L*0.01 - V0)/(V1 - V0) IF (W.LT.-0.5 .OR. W.GT.1.5) GO TO 110 WRITE (TEXT, '(F3.1)') L*0.01 CALL PGPTXT (1.52, W-0.02, 0.0, 0.0, TEXT) 110 CONTINUE END IF * Contour labelling: top. V0 = WORLD(2,1,NP) V1 = WORLD(2,NP,NP) IF (V0.NE.V1) THEN IF (ABS(INT((V1-V0)/0.2)).LT.10) THEN LSTEP = 20 ELSE LSTEP = 40 END IF DO 120 L = -200, 300, LSTEP W = -0.5 + 2.0*(L*0.01 - V0)/(V1 - V0) IF (W.LT.-0.5 .OR. W.GT.1.5) GO TO 120 WRITE (TEXT, '(F3.1)') L*0.01 CALL PGPTXT (W+0.04, 1.52, 0.0, 1.0, TEXT) 120 CONTINUE END IF * Draw contours for the second coordinate element. DO 140 I = 1, NP DO 130 J = 1, NP ARRAY(J,I) = WORLD(2,J,I) 130 CONTINUE 140 CONTINUE CALL PGSLW (2) CALL PGSCI (4) CALL PGCONT (ARRAY, NP, NP, 1, NP, 1, NP, CLEV(-10), 10, : LTM) CALL PGSCI (7) CALL PGCONT (ARRAY, NP, NP, 1, NP, 1, NP, CLEV(0), 1, LTM) CALL PGSCI (5) CALL PGCONT (ARRAY, NP, NP, 1, NP, 1, NP, CLEV(1), 20, LTM) CALL PGEBUF () 150 CONTINUE 160 CONTINUE 170 CONTINUE CALL PGEND () 999 STATUS = TABFREE (TAB) END pywcs-1.12/wcslib/Fortran/test/ttab3.f0000644001153600020070000001444012310355626021712 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: ttab3.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TTAB3 *----------------------------------------------------------------------- * * TTAB3 tests the -TAB routines using PGPLOT for graphical display. It * constructs a table that approximates Bonne's projection and uses it to * draw a graticule. * *----------------------------------------------------------------------- * Set up the lookup table. INTEGER K1, K2, M PARAMETER (M = 2, K1 = 271, K2 = 235) INTEGER K(M), MAP(M) DOUBLE PRECISION CRVAL(M) DATA K /K1, K2/ DATA MAP /0, 1/ DATA CRVAL /135D0, 95D0/ INTEGER CI, I, IK, ILAT, ILNG, IM, J, STAT(K1,K2), STATUS REAL XR(361), YR(361) DOUBLE PRECISION COORD(M,K1,K2), WORLD(M,361), X(K1), XY(M,361), : Y(K2) * On some systems, such as Sun Sparc, the structs MUST be aligned * on a double precision boundary, done here using equivalences. * Failure to do this may result in mysterious "bus errors". INCLUDE 'prj.inc' INCLUDE 'tab.inc' INTEGER PRJ(PRJLEN), TAB(TABLEN) DOUBLE PRECISION DUMMY1, DUMMY2 EQUIVALENCE (PRJ,DUMMY1), (TAB,DUMMY2) *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing WCSLIB inverse coordinate lookup table ', : 'routines (ttab3.f)',/, : '-----------------------------------------------', : '------------------',/) * PGPLOT initialization. CALL PGBEG (0, '/xwindow', 1, 1) CALL PGVSTD () CALL PGSCH (0.7) CALL PGWNAD (-135.0, 135.0, -95.0, 140.0) CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGSCR (0, 0.00, 0.00, 0.00) CALL PGSCR (1, 1.00, 1.00, 0.00) CALL PGSCR (2, 1.00, 1.00, 1.00) CALL PGSCR (3, 0.50, 0.50, 0.80) CALL PGSCR (4, 0.80, 0.50, 0.50) CALL PGSCR (5, 0.80, 0.80, 0.80) CALL PGSCR (6, 0.50, 0.50, 0.80) CALL PGSCR (7, 0.80, 0.50, 0.50) CALL PGSCR (8, 0.30, 0.50, 0.30) * Set up the lookup table. STATUS = TABPUT (TAB, TAB_FLAG, -1, 0, 0) STATUS = TABINI(M, K, TAB) IF (STATUS.NE.0) THEN WRITE (*, 20) STATUS 20 FORMAT ('TABINI ERROR',I2,'.') GO TO 999 END IF STATUS = TABPUT (TAB, TAB_M, M, 0, 0) DO 40 IM = 1, M STATUS = TABPUT (TAB, TAB_K, K(IM), IM, 0) STATUS = TABPUT (TAB, TAB_MAP, MAP(IM), IM, 0) STATUS = TABPUT (TAB, TAB_CRVAL, CRVAL(IM), IM, 0) DO 30 IK = 1, K(IM) STATUS = TABPUT (TAB, TAB_INDEX, DBLE(IK-1), IM, IK) 30 CONTINUE 40 CONTINUE * Set up the lookup table to approximate Bonne's projection. DO 50 I = 1, K1 X(I) = 136 - I 50 CONTINUE DO 60 J = 1, K2 Y(J) = J - 96 60 CONTINUE STATUS = PRJINI (PRJ) STATUS = PRJPUT (PRJ, PRJ_PV, 35D0, 1) STATUS = BONX2S (PRJ, K1, K2, 1, 2, X, Y, COORD(1,1,1), : COORD(2,1,1), STAT) IK = 1 DO 80 J = 1, K2 DO 70 I = 1, K1 IF (STAT(I,J).NE.0) THEN COORD(1,I,J) = 999D0 COORD(2,I,J) = 999D0 END IF STATUS = TABPUT (TAB, TAB_COORD, COORD(1,I,J), IK, 0) STATUS = TABPUT (TAB, TAB_COORD, COORD(2,I,J), IK+1, 0) IK = IK + 2 70 CONTINUE 80 CONTINUE * Draw meridians. CI = 1 DO 110 ILNG = -180, 180, 15 CI = CI + 1 IF (CI.GT.7) CI = 2 IF (ILNG.NE.0) THEN CALL PGSCI (CI) ELSE CALL PGSCI (1) END IF J = 0 DO 90 ILAT = -90, 90 J = J + 1 WORLD(1,J) = DBLE(ILNG) WORLD(2,J) = DBLE(ILAT) 90 CONTINUE * A fudge to account for the singularity at the poles. WORLD(1,1) = 0D0 WORLD(1,181) = 0D0 STATUS = TABS2X (TAB, 181, 2, WORLD, XY, STAT) IK = 0 DO 100 J = 1, 181 IF (STAT(J,1).NE.0) THEN IF (IK.GT.1) CALL PGLINE (K, XR, YR) IK = 0 GO TO 100 END IF IK = IK + 1 XR(IK) = XY(1,J) YR(IK) = XY(2,J) 100 CONTINUE CALL PGLINE (IK, XR, YR) 110 CONTINUE * Draw parallels. CI = 1 DO 140 ILAT = -75, 75, 15 CI = CI + 1 IF (CI.GT.7) CI = 2 IF (ILAT.NE.0) THEN CALL PGSCI (CI) ELSE CALL PGSCI (1) END IF J = 0 DO 120 ILNG = -180, 180 J = J + 1 WORLD(1,J) = DBLE(ILNG) WORLD(2,J) = DBLE(ILAT) 120 CONTINUE STATUS = TABS2X (TAB, 361, 2, WORLD, XY, STAT) IK = 0 DO 130 J = 1, 361 IF (STAT(J,1).NE.0) THEN IF (IK.GT.1) CALL PGLINE (IK, XR, YR) IK = 0 GO TO 130 END IF IK = IK + 1 XR(IK) = XY(1,J) YR(IK) = XY(2,J) 130 CONTINUE CALL PGLINE (IK, XR, YR) 140 CONTINUE CALL PGEND () 999 STATUS = TABFREE (TAB) END pywcs-1.12/wcslib/Fortran/test/tunits.f0000644001153600020070000001266112310355626022226 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: tunits.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TUNITS *----------------------------------------------------------------------- * * TUNITS tests WCSULEX, WCSUTRN, and WCSUNITS the FITS units * specification parser, translator and converter. * *----------------------------------------------------------------------- INCLUDE 'wcsunits.inc' LOGICAL INTRCT INTEGER FUNC, I, NC, STATUS DOUBLE PRECISION OFFSET, POWER, SCALE, UNITS(WCSUNITS_NTYPE) CHARACTER HAVE*80, WANT*80 *----------------------------------------------------------------------- INTRCT = ISATTY(5) WRITE (*, 10) 10 FORMAT ('Testing FITS unit specification parser (tunits.f)',/, : '-------------------------------------------------') IF (INTRCT) WRITE (*, 20) 20 FORMAT (/,'To test WCSULEX, enter when prompted with "Unit ', : 'string (want):".') 30 CONTINUE IF (INTRCT) WRITE (*, '(/,A,$)') 'Unit string (have): ' READ (*, '(A)', END=999) HAVE NC = LNBLNK(HAVE) IF (.NOT.INTRCT) WRITE (*, 40) HAVE(:NC) 40 FORMAT (/,'Unit string (have): ',A) STATUS = WCSUTRN(7, HAVE) IF (STATUS.GE.0) THEN NC = LNBLNK(HAVE) WRITE (*, 50) HAVE(:NC) 50 FORMAT (' Translation: ',A,$) IF (STATUS.EQ.0) THEN WRITE (*, '()') ELSE NC = LNBLNK(WCSUNITS_ERRMSG(STATUS)) WRITE (*, 60) WCSUNITS_ERRMSG(STATUS)(:NC) 60 FORMAT (' (WARNING: ',A,')') END IF END IF IF (INTRCT) WRITE (*, '(A,$)') 'Unit string (want): ' READ (*, '(A)', END=999) WANT IF (WANT.NE.' ') THEN NC = LNBLNK(WANT) IF (.NOT.INTRCT) WRITE (*, 70) WANT(:NC) 70 FORMAT ('Unit string (want): ',A) STATUS = WCSUTRN(7, WANT) IF (STATUS.GE.0) THEN NC = LNBLNK(WANT) WRITE (*, 50) WANT(:NC) IF (STATUS.EQ.0) THEN WRITE (*, '()') ELSE NC = LNBLNK(WCSUNITS_ERRMSG(STATUS)) WRITE (*, 60) WCSUNITS_ERRMSG(STATUS)(:NC) END IF END IF WRITE (*, 80) HAVE(:LNBLNK(HAVE)), WANT(:LNBLNK(WANT)) 80 FORMAT ('Conversion: "',A,'" -> "',A,'"') STATUS = WCSUNITS (HAVE, WANT, SCALE, OFFSET, POWER) IF (STATUS.NE.0) THEN NC = LNBLNK(WCSUNITS_ERRMSG(STATUS)) WRITE (*, 90) STATUS, WCSUNITS_ERRMSG(STATUS)(:NC) 90 FORMAT ('WCSUNITS ERROR',I3,': ',A) GO TO 30 END IF IF (POWER.EQ.1D0) THEN WRITE (*, '(A,$)') ' = ' ELSE WRITE (*, '(A,$)') ' = (' END IF IF (SCALE.EQ.1.0) THEN WRITE (*, '(A,$)') 'value' ELSE WRITE (*, '(1PG14.8,A,$)') SCALE, ' * value' END IF IF (OFFSET.NE.0D0) THEN WRITE (*, '(A,1PG14.8,$)') ' + ', OFFSET END IF IF (POWER.EQ.1D0) THEN WRITE (*, '()') ELSE WRITE (*, '(A,1PG12.6)') ')^', POWER END IF ELSE * Parse the unit string. NC = LNBLNK(HAVE) WRITE (*, '(A,A,A)') ' Parsing: "', HAVE(:NC), '"' STATUS = WCSULEX (HAVE, FUNC, SCALE, UNITS) IF (STATUS.NE.0) THEN NC = LNBLNK(WCSUNITS_ERRMSG(STATUS)) WRITE (*, 100) STATUS, WCSUNITS_ERRMSG(STATUS)(:NC) 100 FORMAT ('WCSULEX ERROR',I3,': ',A,'.') GO TO 30 END IF WRITE (*, '(1PG15.8,A)') SCALE, ' *' DO 110 I = 1, WCSUNITS_NTYPE IF (UNITS(I).NE.0.0) THEN NC = LNBLNK(WCSUNITS_TYPES(I)) WRITE (*, '(F11.2,X,A,$)') UNITS(I), : WCSUNITS_TYPES(I)(:NC) IF (WCSUNITS_UNITS(I).NE.' ') THEN NC = LNBLNK(WCSUNITS_UNITS(I)) WRITE (*, '(A,A,A)') ' (', WCSUNITS_UNITS(I)(:NC),')' ELSE WRITE (*, '()') END IF END IF 110 CONTINUE END IF GO TO 30 999 WRITE (*, '()') END pywcs-1.12/wcslib/Fortran/test/twcs.f0000644001153600020070000003466212310355626021665 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: twcs.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TWCS *----------------------------------------------------------------------- * * TWCS1 tests WCSS2P and WCSP2S for closure on an oblique 2-D slice * through a 4-D image with celestial, spectral and logarithmic * coordinate axes. * *----------------------------------------------------------------------- INCLUDE 'cel.inc' INCLUDE 'prj.inc' INCLUDE 'wcs.inc' INCLUDE 'wcserr.inc' INCLUDE 'wcsmath.inc' DOUBLE PRECISION TOL PARAMETER (TOL = 1D-10) INTEGER NELEM PARAMETER (NELEM = 9) INTEGER CHECK_ERROR, ETEST, I, J, K, LAT, LATIDX, LNG, LNGIDX, : NFAIL1, NFAIL2, SPCIDX, STAT(0:360), STATUS, : TEST_ERRORS DOUBLE PRECISION FREQ, IMG(NELEM,0:360), LAT1, LNG1, PHI(0:360), : PIXEL1(NELEM,0:360), PIXEL2(NELEM,0:360), R, RESID, : RESMAX, THETA(0:360), TIME, WORLD1(NELEM,0:360), : WORLD2(NELEM,0:360) * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INTEGER WCS(WCSLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (WCS,DUMMY) * Number of axes. INTEGER N PARAMETER (N = 4) * WCS header parameters. INTEGER NAXIS, NPV, PVI(3), PVM(3) DOUBLE PRECISION CDELT(N), CRPIX(N), CRVAL(N), LATPOLE, LONPOLE, : PC(N,N), PV(3), RESTFRQ, RESTWAV CHARACTER CTYPE(N)*72 COMMON /HEADER/ NAXIS, NPV, CRPIX, PC, CDELT, CRVAL, LONPOLE, : LATPOLE, RESTFRQ, RESTWAV, PVI, PVM, PV COMMON /HEADCH/ CTYPE DATA NAXIS /N/ DATA (CRPIX(J), J=1,N) : /513D0, 0D0, 0D0, 0D0/ DATA ((PC(I,J),J=1,N),I=1,N) : /1.1D0, 0D0, 0D0, 0D0, : 0D0, 1.0D0, 0D0, 0.1D0, : 0D0, 0D0, 1.0D0, 0D0, : 0D0, 0.2D0, 0D0, 1.0D0/ DATA (CDELT(I), I=1,N) : /-9.635265432D-6, 1D0, 0.1D0, -1D0/ DATA (CTYPE(I), I=1,N) : /'WAVE-F2W', 'XLAT-BON', 'TIME-LOG', 'XLON-BON'/ DATA (CRVAL(I), I=1,N) : /0.214982042D0, -30D0, 1D0, 150D0/ DATA LONPOLE /150D0/ DATA LATPOLE /999D0/ DATA RESTFRQ /1.42040575D9/ DATA RESTWAV /0D0/ * Set PVi_m keyvalues for the longitude axis (I = 4). For test * purposes, these are set so that the fiducial native coordinates * are at the native pole, i.e. so that (phi0,theta0) = (0,90), but * without any fiducial offset, i.e. iwith PVi_0a == 0 (by default). DATA NPV /3/ DATA (PVI(K), PVM(K), PV(K), K=1,2) : /4, 1, 0D0, : 4, 2, 90D0/ * PVi_m keyvalues for the latitude axis (I = 2). DATA PVI(3), PVM(3), PV(3) : /2, 1, -30D0/ * For the wcserr tests. COMMON /ERRTST/ ETEST DATA ETEST /0/ *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing closure of WCSLIB world coordinate ', : 'transformation routines (twcs.f)',/, : '-------------------------------------------', : '--------------------------------') * This routine simulates the actions of a FITS header parser. STATUS = WCSPUT (WCS, WCS_FLAG, -1, 0, 0) CALL PARSER (WCS) WRITE (*, 20) TOL 20 FORMAT (/,'Reporting tolerance',1PG8.1,' pixel.') * Get indices. STATUS = WCSGET (WCS, WCS_LNG, LNGIDX) STATUS = WCSGET (WCS, WCS_LAT, LATIDX) STATUS = WCSGET (WCS, WCS_SPEC, SPCIDX) * Initialize non-celestial world coordinates. TIME = 1D0 FREQ = 1.42040595D9 - 180D0 * 62500D0 DO 30 K = 0, 360 WORLD1(1,K) = 0D0 WORLD1(2,K) = 0D0 WORLD1(3,K) = 0D0 WORLD1(4,K) = 0D0 WORLD1(3,K) = TIME TIME = 1.01D0 * TIME WORLD1(SPCIDX,K) = 2.99792458D8 / FREQ FREQ = FREQ + 62500D0 30 CONTINUE NFAIL1 = 0 RESMAX = 0D0 DO 110 LAT = 90, -90, -1 LAT1 = DBLE(LAT) K = 0 DO 40 LNG = -180, 180 LNG1 = DBLE(LNG) WORLD1(LNGIDX,K) = LNG1 WORLD1(LATIDX,K) = LAT1 K = K + 1 40 CONTINUE STATUS = WCSS2P (WCS, 361, NELEM, WORLD1, PHI, THETA, IMG, : PIXEL1, STAT) IF (STATUS.NE.0) THEN WRITE (*, 50) STATUS, LAT1 50 FORMAT (3X,'WCSS2P(1) ERROR',I3,' (LAT1 =',F20.15, ')') GO TO 110 END IF STATUS = WCSP2S (WCS, 361, NELEM, PIXEL1, IMG, PHI, THETA, : WORLD2, STAT) IF (STATUS.NE.0) THEN WRITE (*, 60) STATUS, LAT1 60 FORMAT (3X,'WCSP2S ERROR',I3,' (LAT1 =',F20.15, ')') GO TO 110 END IF STATUS = WCSS2P (WCS, 361, NELEM, WORLD2, PHI, THETA, IMG, : PIXEL2, STAT) IF (STATUS.NE.0) THEN WRITE (*, 70) STATUS, LAT1 70 FORMAT (3X,'WCSS2P(2) ERROR',I3,' (LAT1 =',F20.15, ')') GO TO 110 END IF DO 100 K = 0, 360 RESID = 0D0 DO 80 I = 1, NAXIS R = PIXEL2(I,K) - PIXEL1(I,K) RESID = RESID + R*R 80 CONTINUE RESID = SQRT(RESID) IF (RESID.GT.RESMAX) RESMAX = RESID IF (RESID.GT.TOL) THEN NFAIL1 = NFAIL1 + 1 WRITE (*, 90) (WORLD1(I,K), I=1,NAXIS), : (PIXEL1(I,K), I=1,NAXIS), : (WORLD2(I,K), I=1,NAXIS), : (PIXEL2(I,K), I=1,NAXIS) 90 FORMAT (/,'Closure error:',/, : 'world1:',4F18.12,/, : 'pixel1:',4F18.12,/, : 'world2:',4F18.12,/, : 'pixel2:',4F18.12) END IF LNG1 = LNG1 + 1D0 100 CONTINUE 110 CONTINUE WRITE (*, 120) RESMAX 120 FORMAT ('WCSP2S/WCSS2P: Maximum closure residual =',1P,G8.1, : ' pixel.') * Test WCSERR. WRITE (*, 130) 130 FORMAT (//,'IGNORE messages marked with ''OK'', they test ', : 'WCSERR: ') STATUS = WCSERR_ENABLE(1) * Test 1. STATUS = WCSPUT (WCS, WCS_PV, UNDEFINED, PVI(3), PVM(3)) STATUS = WCSSET (WCS) NFAIL2 = CHECK_ERROR (WCS, STATUS, WCSERR_BAD_PARAM, : 'Invalid parameter value') NFAIL2 = NFAIL2 + TEST_ERRORS() IF (NFAIL1.NE.0 .OR. NFAIL2.NE.0) THEN IF (NFAIL1.NE.0) THEN WRITE (*, 140) NFAIL1 140 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', : 'tolerance.') END IF IF (NFAIL2.NE.0) THEN WRITE (*, 150) NFAIL2 150 FORMAT ('FAIL:',I5,' error messages differ from that ', : 'expected.') END IF ELSE WRITE (*, 160) 160 FORMAT (/,'PASS: All closure residuals are within reporting ', : 'tolerance.',/,'PASS: All error messages reported as ', : 'expected.') END IF * Clean up. STATUS = WCSFREE(WCS) END *----------------------------------------------------------------------- SUBROUTINE PARSER (WCS) *----------------------------------------------------------------------- * In practice a parser would read the FITS header until it encountered * the NAXIS keyword which must occur near the start, before any of the * WCS keywords. It would then use WCSINI to allocate memory for arrays * in the WCSPRM "data structure" and set default values. * * In this simulation the header keyvalues are set in the main program in * variables passed in COMMON. *----------------------------------------------------------------------- * Number of axes. INTEGER N PARAMETER (N = 4) INTEGER I, J, K, NAXIS, NPV, PVI(3), PVM(3), STATUS, WCS(*) DOUBLE PRECISION CDELT(N), CRPIX(N), CRVAL(N), LATPOLE, LONPOLE, : PC(N,N), PV(3), RESTFRQ, RESTWAV CHARACTER CTYPE(N)*72 INCLUDE 'wcs.inc' COMMON /HEADER/ NAXIS, NPV, CRPIX, PC, CDELT, CRVAL, LONPOLE, : LATPOLE, RESTFRQ, RESTWAV, PVI, PVM, PV COMMON /HEADCH/ CTYPE *----------------------------------------------------------------------- STATUS = WCSINI (NAXIS, WCS) DO 20 I = 1, NAXIS STATUS = WCSPUT (WCS, WCS_CRPIX, CRPIX(I), I, 0) DO 10 J = 1, NAXIS STATUS = WCSPUT (WCS, WCS_PC, PC(I,J), I, J) 10 CONTINUE STATUS = WCSPUT (WCS, WCS_CDELT, CDELT(I), I, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(I), I, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, CRVAL(I), I, 0) 20 CONTINUE STATUS = WCSPUT (WCS, WCS_LONPOLE, LONPOLE, 0, 0) STATUS = WCSPUT (WCS, WCS_LATPOLE, LATPOLE, 0, 0) STATUS = WCSPUT (WCS, WCS_RESTFRQ, RESTFRQ, 0, 0) STATUS = WCSPUT (WCS, WCS_RESTWAV, RESTWAV, 0, 0) DO 30 K = 1, NPV STATUS = WCSPUT (WCS, WCS_PV, PV(K), PVI(K), PVM(K)) 30 CONTINUE * Extract information from the FITS header. STATUS = WCSSET (WCS) IF (STATUS.NE.0) THEN WRITE (*, 40) STATUS 40 FORMAT ('WCSSET ERROR',I3) END IF END *----------------------------------------------------------------------- INTEGER FUNCTION TEST_ERRORS() *----------------------------------------------------------------------- INTEGER CHECK_ERROR, ETEST, NFAIL, STATUS * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'wcs.inc' INTEGER WCS(WCSLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (WCS,DUMMY) COMMON /ERRTST/ ETEST *----------------------------------------------------------------------- NFAIL = 0 * Test 2. STATUS = WCSPUT (WCS, WCS_FLAG, -1, 0, 0) STATUS = WCSINI (-32, WCS) NFAIL = NFAIL + CHECK_ERROR (WCS, STATUS, WCSERR_MEMORY, : 'naxis must be positive (got -32)') * Test 3. STATUS = WCSPUT (WCS, WCS_FLAG, 0, 0, 0) STATUS = WCSINI (2, WCS) NFAIL = NFAIL + CHECK_ERROR (WCS, STATUS, WCSERR_SUCCESS, ' ') * Test 4. STATUS = WCSPUT (WCS, WCS_CTYPE, 'CUBEFACE', 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, 'CUBEFACE', 2, 0) STATUS = WCSSET (WCS) NFAIL = NFAIL + CHECK_ERROR (WCS, STATUS, WCSERR_BAD_CTYPE, : 'Multiple CUBEFACE axes (in CTYPE1 and CTYPE2)') * Test 5. STATUS = WCSPUT (WCS, WCS_FLAG, 0, 0, 0) STATUS = WCSINI (2, WCS) STATUS = WCSPUT (WCS, WCS_CTYPE, 'RA---FOO', 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, 'DEC--BAR', 2, 0) STATUS = WCSSET (WCS) NFAIL = NFAIL + CHECK_ERROR (WCS, STATUS, WCSERR_BAD_CTYPE, : 'Unrecognized projection code (FOO in CTYPE1)') * Test 6. STATUS = WCSPUT (WCS, WCS_FLAG, 0, 0, 0) STATUS = WCSINI (2, WCS) STATUS = WCSPUT (WCS, WCS_CTYPE, 'RA---TAN', 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, 'FREQ-LOG', 2, 0) STATUS = WCSSET (WCS) NFAIL = NFAIL + CHECK_ERROR (WCS, STATUS, WCSERR_BAD_CTYPE, : 'Unmatched celestial axes') STATUS = WCSFREE(WCS) TEST_ERRORS = NFAIL END *----------------------------------------------------------------------- INTEGER FUNCTION CHECK_ERROR(WCS, STATUS, EXSTATUS, EXMSG) *----------------------------------------------------------------------- INCLUDE 'wcs.inc' INCLUDE 'wcserr.inc' INTEGER EXSTATUS, ILEN, ISTAT, ETEST, STATUS, WCS(WCSLEN) CHARACTER ERRMSG*(WCSERR_MSG_LENGTH), EXMSG*(*) * On some systems, such as Sun Sparc, the structs MUST be aligned * on a double precision boundary. As a dummy argument, WCS should * already be aligned. WCSERR is aligned here using an equivalence. * Failure to do this may result in mysterious "bus errors". INTEGER WCSERR(ERRLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (WCSERR,DUMMY) COMMON /ERRTST/ ETEST *----------------------------------------------------------------------- IF (STATUS.NE.0) THEN ISTAT = WCSGET (WCS, WCS_ERR, WCSERR) ISTAT = WCSERR_GET (WCSERR, WCSERR_MSG, ERRMSG) ELSE ERRMSG = ' ' END IF ETEST = ETEST + 1 WRITE (*, 10) ETEST 10 FORMAT (/,'Test ',I2,'...') IF (STATUS.EQ.EXSTATUS .AND. ERRMSG.EQ.EXMSG) THEN CALL FLUSH(6) ISTAT = WCSPERR (WCS, 'OK: '//CHAR(0)) WRITE (*, *) '...succeeded.' CHECK_ERROR = 0 ELSE WRITE (*, 20) EXSTATUS, EXMSG(:ILEN(EXMSG)) 20 FORMAT ('Expected error ',I2,': ''',A,''', got') CALL FLUSH(6) ISTAT = WCSPERR (WCS, CHAR(0)) WRITE (*, *) '...failed.' CHECK_ERROR = 1 END IF END *----------------------------------------------------------------------- INTEGER FUNCTION ILEN(STRING) *----------------------------------------------------------------------- CHARACTER STRING*(*) *----------------------------------------------------------------------- DO 10 ILEN = LEN(STRING), 1, -1 IF (STRING(ILEN:ILEN).NE. ' ') RETURN 10 CONTINUE ILEN = 0 END pywcs-1.12/wcslib/Fortran/test/twcsfix.f0000644001153600020070000001553112310355626022366 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: twcsfix.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TWCSFIX *----------------------------------------------------------------------- * * TWCSFIX tests the translation routines for non-standard WCS keyvalues, * the WCSFIX suite, and the spectral coordinate translation routine * WCSPTR. * *----------------------------------------------------------------------- DOUBLE PRECISION TOL PARAMETER (TOL = 1D-10) * CUNITia is set to arcsec below as an additional test. DOUBLE PRECISION DEC, RA PARAMETER (RA = 265.62209470900D0 * 3600D0) PARAMETER (DEC = -28.98849996030D0 * 3600D0) * Number of axes. INTEGER N PARAMETER (N = 3) INTEGER I, J, NAXIS DOUBLE PRECISION CDELT(N), CRPIX(N), CRVAL(N), PC(N,N), RESTFRQ, : RESTWAV CHARACTER CTYPE(N)*72, CUNIT(N)*72, DATEOBS*72 COMMON /HEADER/ CRPIX, PC, CDELT, CRVAL, RESTFRQ, RESTWAV, NAXIS COMMON /HEADCH/ CTYPE, CUNIT, DATEOBS * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'wcs.inc' INCLUDE 'wcsfix.inc' INTEGER STAT(WCSFIX_NWCS), STATUS CHARACTER CTYPES*8 INTEGER WCS(WCSLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (WCS,DUMMY) DATA NAXIS /N/ DATA (CRPIX(J), J=1,N) : /90D0, 90D0, 1D0/ DATA ((PC(I,J),J=1,N),I=1,N) : /1D0, 0D0, 0D0, : 0D0, 1D0, 0D0, : 0D0, 0D0, 1D0/ DATA (CDELT(I), I=1,N) : /-1D0, 1D0, 19.68717093222D0/ DATA (CUNIT(I), I=1,N) : /'ARCSEC', 'ARCSEC', 'KM/SEC'/ DATA (CTYPE(I), I=1,N) : /'RA---NCP', 'DEC--NCP', 'FELO-HEL'/ DATA (CRVAL(I), I=1,N) : /RA, DEC, 5569.27104D0/ DATA RESTFRQ /1.42040575D9/ DATA RESTWAV /0D0/ * N.B. non-standard, corresponding to MJD 35884.04861111 DATA DATEOBS /'1957/02/15 01:10:00'/ *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing WCSLIB translator for non-standard usage ', : '(twcsfix.f)',/, : '-------------------------------------------------', : '-----------',/) * This routine simulates the actions of a FITS header parser. STATUS = WCSPUT (WCS, WCS_FLAG, -1, 0, 0) CALL PARSER (WCS) * Fix non-standard WCS keyvalues. STATUS = WCSFIX (7, 0, WCS, STAT) WRITE (*, 20) (STAT(I), I=1,WCSFIX_NWCS) 20 FORMAT ('WCSFIX status returns: (',I2,5(',',I2),')',/) IF (STATUS.NE.0) THEN WRITE (*, 30) STATUS 30 FORMAT ('WCSFIX ERROR',I2,'.') GO TO 999 END IF * Extract information from the FITS header. STATUS = WCSSET (WCS) IF (STATUS.NE.0) THEN WRITE (*, 40) STATUS 40 FORMAT (/,'WCSSET ERROR',I2,'.') END IF CALL FLUSH(6) STATUS = WCSPRT (WCS) WRITE (*, 50) 50 FORMAT (/,'------------------------------------', : '------------------------------------') * Should now have a 'VOPT-F2W' axis, translate it to frequency. CTYPES = 'FREQ-???' I = -1 STATUS = WCSSPTR (WCS, I, CTYPES) IF (STATUS.NE.0) THEN WRITE (*, 60) STATUS 60 FORMAT ('WCSPTR ERROR',I2,'.') GO TO 999 END IF STATUS = WCSSET (WCS) IF (STATUS.NE.0) THEN WRITE (*, 70) STATUS 70 FORMAT ('WCSSET ERROR',I2,'.') GO TO 999 END IF CALL FLUSH(6) STATUS = WCSPRT (WCS) STATUS = WCSFREE (WCS) 999 CONTINUE END *----------------------------------------------------------------------- SUBROUTINE PARSER (WCS) *----------------------------------------------------------------------- * In practice a parser would read the FITS header until it encountered * the NAXIS keyword which must occur near the start, before any of the * WCS keywords. It would then use WCSINI to allocate memory for arrays * in the WCSPRM "data structure" and set default values. * * In this simulation the header keyvalues are set in the main program in * variables passed in COMMON. *----------------------------------------------------------------------- * Number of axes. INTEGER N PARAMETER (N = 3) INTEGER I, J, NAXIS, STATUS, WCS(*) DOUBLE PRECISION CDELT(N), CRPIX(N), CRVAL(N), : PC(N,N), RESTFRQ, RESTWAV CHARACTER CTYPE(N)*72, CUNIT(N)*72, DATEOBS*72 COMMON /HEADER/ CRPIX, PC, CDELT, CRVAL, RESTFRQ, RESTWAV, NAXIS COMMON /HEADCH/ CTYPE, CUNIT, DATEOBS INCLUDE 'wcsunits.inc' INCLUDE 'wcs.inc' *----------------------------------------------------------------------- STATUS = WCSNPV (2) STATUS = WCSINI (NAXIS, WCS) DO 20 I = 1, NAXIS STATUS = WCSPUT (WCS, WCS_CRPIX, CRPIX(I), I, 0) DO 10 J = 1, NAXIS STATUS = WCSPUT (WCS, WCS_PC, PC(I,J), I, J) 10 CONTINUE STATUS = WCSPUT (WCS, WCS_CDELT, CDELT(I), I, 0) STATUS = WCSPUT (WCS, WCS_CUNIT, CUNIT(I), I, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(I), I, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, CRVAL(I), I, 0) 20 CONTINUE STATUS = WCSPUT (WCS, WCS_RESTFRQ, RESTFRQ, 0, 0) STATUS = WCSPUT (WCS, WCS_RESTWAV, RESTWAV, 0, 0) STATUS = WCSPUT (WCS, WCS_NPV, 1, 0, 0) STATUS = WCSPUT (WCS, WCS_PV, -1D0, -1, -1) STATUS = WCSPUT (WCS, WCS_DATEOBS, DATEOBS, 0, 0) RETURN END pywcs-1.12/wcslib/Fortran/test/twcsmix.f0000644001153600020070000006470512310355626022404 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: twcsmix.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TWCS2 *----------------------------------------------------------------------- * * TWCS2 tests WCSMIX for closure on the 1 degree celestial graticule for * a number of selected projections. Points with good solutions are * marked with a white dot on a graphical display of the projection while * bad solutions are flagged with a red circle. * *----------------------------------------------------------------------- * Number of axes. INTEGER N PARAMETER (N = 4) INTEGER I, J, K, NAXIS, NPV, PVI(4), PVM(4) DOUBLE PRECISION CDELT(N), CRPIX(N), CRVAL(N), LATPOLE, LONPOLE, : PC(N,N), PV(4), RESTFRQ, RESTWAV CHARACTER CTYPE(N)*72 DOUBLE PRECISION TOL PARAMETER (TOL = 1D-9) COMMON /HEADER/ NAXIS, NPV, CRPIX, PC, CDELT, CRVAL, LONPOLE, : LATPOLE, RESTFRQ, RESTWAV, PVI, PVM, PV COMMON /HEADCH/ CTYPE DATA NAXIS /N/ DATA (CRPIX(J), J=1,N) : /513D0, 0D0, 0D0, 0D0/ DATA ((PC(I,J),J=1,N),I=1,N) : /1.1D0, 0D0, 0D0, 0D0, : 0D0, 1.0D0, 0D0, 0.1D0, : 0D0, 0D0, 1.0D0, 0D0, : 0D0, 0.2D0, 0D0, 1.0D0/ DATA (CDELT(I), I=1,N) : /-9.635265432D-6, 1D0, 1D0, -1D0/ DATA (CTYPE(I), I=1,N) : /'WAVE-F2W', 'XLAT-xxx ', 'TIME ', 'XLON-xxx '/ DATA (CRVAL(I), I=1,N) : /0.214982042D0, -30D0, -2D3, 150D0/ DATA LONPOLE /150D0/ DATA LATPOLE /999D0/ DATA RESTFRQ /1.42040575D9/ DATA RESTWAV /0D0/ * Set PVi_m keyvalues for the longitude axis (I = 4) so that the * fiducial native coordinates are at the native pole, i.e. * (phi0,theta0) = (0,90), but without any fiducial offset. We do * this as a test, and also so that all projections will be * exercised with the same obliquity parameters. DATA (PVI(K), PVM(K), PV(K), K=1,2) : /4, 1, 0D0, : 4, 2, 90D0/ * PVi_m keyvalues for the latitude axis (I = 2). Value may be reset * below. DATA (PVI(K), PVM(K), PV(K), K=3,4) : /2, 1, 0D0, : 2, 2, 0D0/ *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing WCSLIB wcsmix routine (twcsmix.f)',/, : '-----------------------------------------') * PGPLOT initialization. CALL PGBEG (0, '/xwindow', 1, 1) * Define pen colours. CALL PGSCR (0, 0.00, 0.00, 0.00) CALL PGSCR (1, 1.00, 1.00, 0.00) CALL PGSCR (2, 1.00, 1.00, 1.00) CALL PGSCR (3, 0.50, 0.50, 0.80) CALL PGSCR (4, 0.80, 0.50, 0.50) CALL PGSCR (5, 0.80, 0.80, 0.80) CALL PGSCR (6, 0.50, 0.50, 0.80) CALL PGSCR (7, 0.80, 0.50, 0.50) CALL PGSCR (8, 0.30, 0.50, 0.30) CALL PGSCR (9, 1.00, 0.75, 0.00) * ARC: zenithal/azimuthal equidistant. CTYPE(2)(6:8) = 'ARC' CTYPE(4)(6:8) = 'ARC' NPV = 2 CALL MIXEX (TOL, -190.0, 190.0, -190.0, 190.0) * ZEA: zenithal/azimuthal equal area. CTYPE(2)(6:8) = 'ZEA' CTYPE(4)(6:8) = 'ZEA' NPV = 2 CALL MIXEX (TOL, -120.0, 120.0, -120.0, 120.0) * CYP: cylindrical perspective. CTYPE(2)(6:8) = 'CYP' CTYPE(4)(6:8) = 'CYP' NPV = 4 PV(3) = 3D0 PV(4) = 0.8D0 CALL MIXEX (TOL, -170.0, 170.0, -170.0, 170.0) * CEA: cylindrical equal area. CTYPE(2)(6:8) = 'CEA' CTYPE(4)(6:8) = 'CEA' NPV = 3 PV(3) = 0.75D0 CALL MIXEX (TOL, -200.0, 200.0, -200.0, 200.0) * CAR: plate carree. CTYPE(2)(6:8) = 'CAR' CTYPE(4)(6:8) = 'CAR' NPV = 2 CALL MIXEX (TOL, -210.0, 210.0, -210.0, 210.0) * SFL: Sanson-Flamsteed. CTYPE(2)(6:8) = 'SFL' CTYPE(4)(6:8) = 'SFL' NPV = 2 CALL MIXEX (TOL, -190.0, 190.0, -190.0, 190.0) * PAR: parabolic. CTYPE(2)(6:8) = 'PAR' CTYPE(4)(6:8) = 'PAR' NPV = 2 CALL MIXEX (TOL, -190.0, 190.0, -190.0, 190.0) * MOL: Mollweide's projection. CTYPE(2)(6:8) = 'MOL' CTYPE(4)(6:8) = 'MOL' NPV = 2 CALL MIXEX (TOL, -170.0, 170.0, -170.0, 170.0) * AIT: Hammer-Aitoff. CTYPE(2)(6:8) = 'AIT' CTYPE(4)(6:8) = 'AIT' NPV = 2 CALL MIXEX (TOL, -170.0, 170.0, -170.0, 170.0) * COE: conic equal area. CTYPE(2)(6:8) = 'COE' CTYPE(4)(6:8) = 'COE' NPV = 4 PV(3) = 60D0 PV(4) = 15D0 CALL MIXEX (TOL, -140.0, 140.0, -120.0, 160.0) * COD: conic equidistant. CTYPE(2)(6:8) = 'COD' CTYPE(4)(6:8) = 'COD' NPV = 4 PV(3) = 60D0 PV(4) = 15D0 CALL MIXEX (TOL, -200.0, 200.0, -180.0, 220.0) * BON: Bonne's projection. CTYPE(2)(6:8) = 'BON' CTYPE(4)(6:8) = 'BON' NPV = 3 PV(3) = 30D0 CALL MIXEX (TOL, -160.0, 160.0, -160.0, 160.0) * PCO: polyconic. CTYPE(2)(6:8) = 'PCO' CTYPE(4)(6:8) = 'PCO' NPV = 2 CALL MIXEX (TOL, -190.0, 190.0, -190.0, 190.0) * TSC: tangential spherical cube. CTYPE(2)(6:8) = 'TSC' CTYPE(4)(6:8) = 'TSC' NPV = 2 CALL MIXEX (TOL, -340.0, 80.0, -210.0, 210.0) * QSC: quadrilateralized spherical cube. CTYPE(2)(6:8) = 'QSC' CTYPE(4)(6:8) = 'QSC' NPV = 2 CALL MIXEX (TOL, -340.0, 80.0, -210.0, 210.0) CALL PGEND () END *----------------------------------------------------------------------- SUBROUTINE MIXEX (TOL, IMIN, IMAX, JMIN, JMAX) *----------------------------------------------------------------------- * MIXEX tests WCSMIX. * * Given: * TOL D Reporting tolerance, degrees. *----------------------------------------------------------------------- INTEGER DOID, ILAT, ILNG, LATIDX, LNGIDX, SPCIDX, STAT, STATUS REAL IMAX, IMIN, IPT(1), JMAX, JMIN, JPT(1) DOUBLE PRECISION IMG(4), LAT1, LATSPN(2), LNGSPN(2), LNG1, PHI, : PIX1(4), PIX2(4), PIX3(4), PIXLAT, PIXLNG, THETA, TOL, : WORLD(4) CHARACTER PCODE*3 * On some systems, such as Sun Sparc, the structs MUST be aligned * on a double precision boundary, done here using equivalences. * Failure to do this may result in mysterious "bus errors". INCLUDE 'wcs.inc' INCLUDE 'cel.inc' INCLUDE 'prj.inc' INTEGER CEL(CELLEN), PRJ(PRJLEN), WCS(WCSLEN) DOUBLE PRECISION DUMMY1, DUMMY2, DUMMY3 EQUIVALENCE (CEL,DUMMY1), (PRJ,DUMMY2), (WCS,DUMMY3) *----------------------------------------------------------------------- * This routine simulates the actions of a FITS header parser. STATUS = WCSPUT (WCS, WCS_FLAG, -1, 0, 0) CALL PARSER (WCS) * Draw the coordinate graticule. CALL GRDPLT(WCS, IMIN, IMAX, JMIN, JMAX) STATUS = WCSGET (WCS, WCS_CEL, CEL) STATUS = CELGET (CEL, CEL_PRJ, PRJ) STATUS = PRJGET (PRJ, PRJ_CODE, PCODE) WRITE (*, 10) PCODE, TOL 10 FORMAT ('Testing ',A,'; reporting tolerance',1PG8.1,' deg.') STATUS = WCSGET (WCS, WCS_LNG, LNGIDX) STATUS = WCSGET (WCS, WCS_LAT, LATIDX) STATUS = WCSGET (WCS, WCS_SPEC, SPCIDX) WORLD(1) = 0D0 WORLD(2) = 0D0 WORLD(3) = 0D0 WORLD(4) = 0D0 WORLD(SPCIDX) = 2.99792458D8 / 1.42040595D9 DO 80 ILAT = 90, -90, -1 LAT1 = DBLE(ILAT) DO 70 ILNG = -180, 180, 15 LNG1 = DBLE(ILNG) WORLD(LNGIDX) = LNG1 WORLD(LATIDX) = LAT1 STATUS = WCSS2P (WCS, 1, 4, WORLD, PHI, THETA, IMG, PIX1, : STAT) IF (STATUS.NE.0) THEN WRITE (*, 20) PCODE, LNG1, LAT1, STATUS 20 FORMAT (A3,': LNG1 =',F20.15,' LAT1 =',F20.15, : ' ERROR',I3) GO TO 70 END IF PIXLNG = PIX1(LNGIDX) PIXLAT = PIX1(LATIDX) IPT(1) = PIXLNG JPT(1) = PIXLAT CALL PGPT (1, IPT, JPT, -1) LNGSPN(1) = LNG1 - 9.3D0 IF (LNGSPN(1).LT.-180D0) LNGSPN(1) = -180D0 LNGSPN(2) = LNG1 + 4.1D0 IF (LNGSPN(2).GT. 180D0) LNGSPN(2) = 180D0 LATSPN(1) = LAT1 - 3.7D0 IF (LATSPN(1).LT. -90D0) LATSPN(1) = -90D0 LATSPN(2) = LAT1 + 7.2D0 IF (LATSPN(2).GT. 90D0) LATSPN(2) = 90D0 DOID = 1 PIX2(LNGIDX) = PIXLNG STATUS = WCSMIX (WCS, LNGIDX, 1, LATSPN, 1D0, 0, WORLD, : PHI, THETA, IMG, PIX2) IF (STATUS.NE.0) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, '(A,I2)') ' A: WCSMIX ERROR', STATUS ELSE STATUS = WCSS2P (WCS, 1, 0, WORLD, PHI, THETA, IMG, PIX3, : STAT) IF (STATUS.NE.0) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, '(A,I2)') ' A: WCSS2P ERROR', STATUS ELSE IF (ABS(PIX3(LNGIDX)-PIXLNG).GT.TOL .AND. : (ABS(WORLD(LATIDX)- LAT1).GT.TOL .OR. : ABS(PIX2(LATIDX)-PIXLAT).GT.TOL)) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, 30) WORLD(LNGIDX), WORLD(LATIDX), PHI, : THETA, PIX2(LNGIDX), PIX2(LATIDX) 30 FORMAT (' A: (LNG2) =',F20.15,' LAT2 =',F20.15,/, : ' PHI =',F20.15,' THETA =',F20.15,/, : ' (I2) =',F20.15,' J2 =',F20.15) END IF END IF PIX2(LATIDX) = PIXLAT STATUS = WCSMIX (WCS, LATIDX, 1, LATSPN, 1D0, 0, WORLD, : PHI, THETA, IMG, PIX2) IF (STATUS.NE.0) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, '(A,I2)') ' B: WCSMIX ERROR', STATUS ELSE STATUS = WCSS2P (WCS, 1, 0, WORLD, PHI, THETA, IMG, PIX3, : STAT) IF (STATUS.NE.0) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, '(A,I2)') ' B: WCSS2P ERROR', STATUS ELSE IF (ABS(PIX3(LATIDX)-PIXLAT).GT.TOL .AND. : (ABS(WORLD(LATIDX)- LAT1).GT.TOL .OR. : ABS(PIX2(LNGIDX)-PIXLNG).GT.TOL)) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, 40) WORLD(LNGIDX), WORLD(LATIDX), PHI, : THETA, PIX2(LNGIDX), PIX2(LATIDX) 40 FORMAT (' B: (LNG2) =',F20.15,' LAT2 =',F20.15,/, : ' PHI =',F20.15,' THETA =',F20.15,/, : ' I2 =',F20.15,' (J2) =',F20.15) END IF END IF WORLD(LATIDX) = LAT1 PIX2(LNGIDX) = PIXLNG STATUS = WCSMIX (WCS, LNGIDX, 2, LNGSPN, 1D0, 0, WORLD, : PHI, THETA, IMG, PIX2) IF (STATUS.NE.0) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, '(A,I2)') ' C: WCSMIX ERROR', STATUS ELSE STATUS = WCSS2P (WCS, 1, 0, WORLD, PHI, THETA, IMG, PIX3, : STAT) IF (STATUS.NE.0) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, '(A,I2)') ' C: WCSS2P ERROR', STATUS ELSE IF (ABS(PIX3(LNGIDX)-PIXLNG).GT.TOL .AND. : (ABS(WORLD(LNGIDX)- LNG1).GT.TOL .OR. : ABS(PIX2(LATIDX)-PIXLAT).GT.TOL)) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, 50) WORLD(LNGIDX), WORLD(LATIDX), PHI, : THETA, PIX2(LNGIDX), PIX2(LATIDX) 50 FORMAT (' C: LNG2 =',F20.15,' (LAT2) =',F20.15,/, : ' PHI =',F20.15,' THETA =',F20.15,/, : ' (I2) =',F20.15,' J2 =',F20.15) END IF END IF PIX2(LATIDX) = PIXLAT STATUS = WCSMIX (WCS, LATIDX, 2, LNGSPN, 1D0, 0, WORLD, : PHI, THETA, IMG, PIX2) IF (STATUS.NE.0) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, '(A,I2)') ' D: WCSMIX ERROR', STATUS ELSE STATUS = WCSS2P (WCS, 1, 0, WORLD, PHI, THETA, IMG, PIX3, : STAT) IF (STATUS.NE.0) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, '(A,I2)') ' D: WCSS2P ERROR', STATUS ELSE IF (ABS(PIX3(LATIDX)-PIXLAT).GT.TOL .AND. : (ABS(WORLD(LNGIDX)- LNG1).GT.TOL .OR. : ABS(PIX2(LNGIDX)-PIXLNG).GT.TOL)) THEN CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) WRITE (*, 60) WORLD(LNGIDX), WORLD(LATIDX), PHI, : THETA, PIX2(LNGIDX), PIX2(LATIDX) 60 FORMAT (' D: LNG2 =',F20.15,' (LAT2) =',F20.15,/, : ' PHI =',F20.15,' THETA =',F20.15,/, : ' I2 =',F20.15,' (J2) =',F20.15) END IF END IF 70 CONTINUE 80 CONTINUE STATUS = WCSFREE (WCS) RETURN END *----------------------------------------------------------------------- SUBROUTINE ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) *----------------------------------------------------------------------- INTEGER DOID, STATUS REAL IPT(1), JPT(1) DOUBLE PRECISION EULER(5), LNG1, LAT1, PHI, PIXLAT, PIXLNG, THETA CHARACTER PCODE*3 * On some systems, such as Sun Sparc, the structs MUST be aligned * on a double precision boundary. As a dummy argument, WCS should * already be aligned. The others are aligned here using * equivalences. Failure to do this may result in mysterious "bus * errors". INCLUDE 'wcs.inc' INCLUDE 'cel.inc' INCLUDE 'prj.inc' INTEGER CEL(CELLEN), PRJ(PRJLEN), WCS(WCSLEN) DOUBLE PRECISION DUMMY1, DUMMY2 EQUIVALENCE (CEL,DUMMY1), (PRJ,DUMMY2) *----------------------------------------------------------------------- IF (DOID.NE.0) THEN * Compute native coordinates. STATUS = WCSGET (WCS, WCS_CEL, CEL) STATUS = CELGET (CEL, CEL_EULER, EULER) CALL SPHS2X (EULER, 1, 1, 1, 1, LNG1, LAT1, PHI, THETA) STATUS = CELGET (CEL, CEL_PRJ, PRJ) STATUS = PRJGET (PRJ, PRJ_CODE, PCODE) WRITE (*, 10) PCODE, LNG1, LAT1, PHI, THETA, PIXLNG, PIXLAT 10 FORMAT (/,A3,': LNG1 =',F20.15,' LAT1 =',F20.15,/, : ' PHI =',F20.15,' THETA =',F20.15,/, : ' I1 =',F20.15,' J1 =',F20.15) DOID = 0 CALL PGSCI (9) IPT(1) = PIXLNG JPT(1) = PIXLAT CALL PGPT (1, IPT, JPT, 21) CALL PGSCI (2) END IF RETURN END *----------------------------------------------------------------------- SUBROUTINE GRDPLT (WCS, IMIN, IMAX, JMIN, JMAX) *----------------------------------------------------------------------- * Number of axes. INTEGER N, NELEM PARAMETER (N = 4, NELEM = 9) LOGICAL CUBIC INTEGER CATEG, CI, ILAT, ILNG, J, K, LATIDX, LNGIDX, SPCIDX, : STAT(0:360), STATUS REAL IMAX, IMIN, JMAX, JMIN, IR(0:1023), JR(0:1023) DOUBLE PRECISION FREQ, IMG(NELEM,0:360), LAT, LNG, PHI(0:360), : PIX(NELEM,0:360), REF(4), STEP, THETA(0:360), W(10), : WORLD(NELEM,0:360) CHARACTER PCODE*3, TEXT*80 * On some systems, such as Sun Sparc, the structs MUST be aligned * on a double precision boundary. As a dummy argument, WCS should * already be aligned. The others are aligned here using * equivalences. Failure to do this may result in mysterious "bus * errors". INCLUDE 'wcs.inc' INCLUDE 'cel.inc' INCLUDE 'prj.inc' INCLUDE 'lin.inc' INTEGER CEL(CELLEN), LIN(LINLEN), PRJ(PRJLEN), WCS(WCSLEN) INTEGER NATIVE(WCSLEN) DOUBLE PRECISION DUMMY1, DUMMY2, DUMMY3, DUMMY4 EQUIVALENCE (CEL,DUMMY1), (LIN,DUMMY2), (PRJ,DUMMY3), : (NATIVE,DUMMY4) *----------------------------------------------------------------------- * Initialize non-celestial world coordinates. STATUS = WCSGET (WCS, WCS_LNG, LNGIDX) STATUS = WCSGET (WCS, WCS_LAT, LATIDX) STATUS = WCSGET (WCS, WCS_SPEC, SPCIDX) FREQ = 1.42040595D9 - 180D0 * 62500D0 DO 10 J = 0, 360 WORLD(1,J) = 0D0 WORLD(2,J) = 0D0 WORLD(3,J) = 0D0 WORLD(4,J) = 0D0 WORLD(SPCIDX,J) = 2.99792458D8 / FREQ FREQ = FREQ + 62500D0 10 CONTINUE * Define PGPLOT viewport. CALL PGENV (IMIN, IMAX, JMIN, JMAX, 1, -2) STATUS = WCSGET (WCS, WCS_CEL, CEL) STATUS = CELGET (CEL, CEL_PRJ, PRJ) STATUS = PRJGET (PRJ, PRJ_CATEGORY, CATEG) CUBIC = CATEG.EQ.7 IF (CUBIC) THEN * Some sort of quad-cube projection. CALL PGSCI (8) * Draw the map boundary. DO 20 J = 0, 8 IMG(1,J) = 0D0 IMG(2,J) = 0D0 IMG(3,J) = 0D0 IMG(4,J) = 0D0 20 CONTINUE STATUS = PRJGET (PRJ, PRJ_W, W) IMG(LNGIDX,0) = -W(1) IMG(LATIDX,0) = W(1) IMG(LNGIDX,1) = -W(1) IMG(LATIDX,1) = W(1)*3D0 IMG(LNGIDX,2) = W(1) IMG(LATIDX,2) = W(1)*3D0 IMG(LNGIDX,3) = W(1) IMG(LATIDX,3) = -W(1)*3D0 IMG(LNGIDX,4) = -W(1) IMG(LATIDX,4) = -W(1)*3D0 IMG(LNGIDX,5) = -W(1) IMG(LATIDX,5) = W(1) IMG(LNGIDX,6) = W(1)*7D0 IMG(LATIDX,6) = W(1) IMG(LNGIDX,7) = W(1)*7D0 IMG(LATIDX,7) = -W(1) IMG(LNGIDX,8) = -W(1) IMG(LATIDX,8) = -W(1) STATUS = WCSGET (WCS, WCS_LIN, LIN) STATUS = LINX2P (LIN, 9, NELEM, IMG, PIX) DO 30 J = 0, 8 IR(J) = PIX(LNGIDX,J) JR(J) = PIX(LATIDX,J) 30 CONTINUE CALL PGLINE (9, IR, JR) END IF IF (CATEG.EQ.6) THEN * Polyconic. STEP = 10D0 ELSE STEP = 15D0 END IF * Draw the native coordinate graticule faintly in the background. STATUS = WCSPUT (NATIVE, WCS_FLAG, -1, 0, 0) STATUS = WCSCOPY (WCS, NATIVE) STATUS = WCSPUT (NATIVE, WCS_CRVAL, 0D0, LNGIDX, 0) STATUS = WCSPUT (NATIVE, WCS_CRVAL, 90D0, LATIDX, 0) STATUS = WCSPUT (NATIVE, WCS_LONPOLE, 180D0, 0, 0) STATUS = WCSSET (NATIVE) CALL PGSCI (8) * Draw native meridians of longitude. DO 60 ILNG = -180, 180, 15 LNG = DBLE(ILNG) IF (ILNG.EQ.-180) LNG = -179.99D0 IF (ILNG.EQ.+180) LNG = +179.99D0 J = 0 DO 40 ILAT = -90, 90 WORLD(LNGIDX,J) = LNG WORLD(LATIDX,J) = DBLE(ILAT) J = J + 1 40 CONTINUE STATUS = WCSS2P (NATIVE, 181, NELEM, WORLD, PHI, THETA, IMG, : PIX, STAT) IF (STATUS.NE.0) GO TO 60 J = 0 K = 0 DO 50 ILAT = -90, 90 IF (CUBIC .AND. K.GT.0) THEN IF (ABS(PIX(LNGIDX,J)-IR(K-1)).GT.2D0 .OR. : ABS(PIX(LATIDX,J)-JR(K-1)).GT.5D0) THEN IF (K.GT.1) CALL PGLINE (K, IR, JR) K = 0 END IF END IF IR(K) = PIX(LNGIDX,J) JR(K) = PIX(LATIDX,J) J = J + 1 K = K + 1 50 CONTINUE CALL PGLINE (K, IR, JR) 60 CONTINUE * Draw native parallels of latitude. DO 90 ILAT = -90, 90, 15 LAT = DBLE(ILAT) J = 0 DO 70 ILNG = -180, 180 LNG = DBLE(ILNG) IF (ILNG.EQ.-180) LNG = -179.99D0 IF (ILNG.EQ.+180) LNG = +179.99D0 WORLD(LNGIDX,J) = LNG WORLD(LATIDX,J) = LAT J = J + 1 70 CONTINUE STATUS = WCSS2P (NATIVE, 361, NELEM, WORLD, PHI, THETA, IMG, : PIX, STAT) IF (STATUS.NE.0) GO TO 90 J = 0 K = 0 DO 80 ILNG = -180, 180 IF (CUBIC .AND. K.GT.0) THEN IF (ABS(PIX(LNGIDX,J)-IR(K-1)).GT.2D0 .OR. : ABS(PIX(LATIDX,J)-JR(K-1)).GT.5D0) THEN IF (K.GT.1) CALL PGLINE (K, IR, JR) K = 0 END IF END IF IR(K) = PIX(LNGIDX,J) JR(K) = PIX(LATIDX,J) J = J + 1 K = K + 1 80 CONTINUE CALL PGLINE (K, IR, JR) 90 CONTINUE STATUS = WCSFREE (NATIVE) * Draw a colour-coded celestial coordinate graticule. CI = 1 * Draw celestial meridians of longitude. DO 120 ILNG = -180, 180, 15 LNG = DBLE(ILNG) CI = CI + 1 IF (CI.GT.7) CI = 2 IF (ILNG.NE.0) THEN CALL PGSCI (CI) ELSE CALL PGSCI (1) END IF J = 0 DO 100 ILAT = -90, 90 LAT = DBLE(ILAT) WORLD(LNGIDX,J) = LNG WORLD(LATIDX,J) = LAT J = J + 1 100 CONTINUE STATUS = WCSS2P (WCS, 181, NELEM, WORLD, PHI, THETA, IMG, PIX, : STAT) IF (STATUS.NE.0) GO TO 120 J = 0 K = 0 DO 110 ILAT = -90, 90 * Test for discontinuities. IF (K.GT.0) THEN IF (ABS(PIX(LNGIDX,J)-IR(K-1)).GT.STEP .OR. : ABS(PIX(LATIDX,J)-JR(K-1)).GT.STEP) THEN IF (K.GT.1) CALL PGLINE (K, IR, JR) K = 0 END IF END IF IR(K) = PIX(LNGIDX,J) JR(K) = PIX(LATIDX,J) J = J + 1 K = K + 1 110 CONTINUE CALL PGLINE (K, IR, JR) 120 CONTINUE * Draw celestial parallels of latitude. CI = 1 DO 150 ILAT = -90, 90, 15 LAT = DBLE(ILAT) CI = CI + 1 IF (CI.GT.7) CI = 2 IF (ILAT.NE.0) THEN CALL PGSCI (CI) ELSE CALL PGSCI (1) END IF J = 0 DO 130 ILNG = -180, 180 WORLD(LNGIDX,J) = DBLE(ILNG) WORLD(LATIDX,J) = LAT J = J + 1 130 CONTINUE STATUS = WCSS2P (WCS, 361, NELEM, WORLD, PHI, THETA, IMG, PIX, : STAT) IF (STATUS.NE.0) GO TO 150 J = 0 K = 0 DO 140 ILNG = -180, 180 * Test for discontinuities. IF (K.GT.0) THEN IF (ABS(PIX(LNGIDX,J)-IR(K-1)).GT.STEP .OR. : ABS(PIX(LATIDX,J)-JR(K-1)).GT.STEP) THEN IF (K.GT.1) CALL PGLINE (K, IR, JR) K = 0 END IF END IF IR(K) = PIX(LNGIDX,J) JR(K) = PIX(LATIDX,J) J = J + 1 K = K + 1 140 CONTINUE CALL PGLINE (K, IR, JR) 150 CONTINUE * Write a descriptive title. CALL PGSCI (1) STATUS = PRJGET (PRJ, PRJ_CODE, PCODE) TEXT = PCODE // ' projection - 15 degree graticule' WRITE (*, '(//,A)') TEXT CALL PGTEXT (IMIN, JMIN-10.0, TEXT) STATUS = CELGET (CEL, CEL_REF, REF) WRITE (TEXT, 160) REF(1), REF(2) 160 FORMAT ('centered on celestial coordinates (',F6.2,',',F6.2,')') WRITE (*, '(A)') TEXT CALL PGTEXT (IMIN, JMIN-20.0, TEXT) WRITE (TEXT, 170) REF(3), REF(4) 170 FORMAT ('with celestial pole at native coordinates (',F7.2, : ',',F7.2,')') WRITE (*, '(A)') TEXT CALL PGTEXT (IMIN, JMIN-30.0, TEXT) CALL PGSCI (2) RETURN END *----------------------------------------------------------------------- SUBROUTINE PARSER (WCS) *----------------------------------------------------------------------- * In practice a parser would read the FITS header until it encountered * the NAXIS keyword which must occur near the start, before any of the * WCS keywords. It would then use WCSINI to allocate memory for arrays * in the WCSPRM "data structure" and set default values. * * In this simulation the header keyvalues are set in the main program in * variables passed in COMMON. *----------------------------------------------------------------------- * Number of axes. INTEGER N PARAMETER (N = 4) INTEGER I, J, K, NAXIS, NPV, PVI(4), PVM(4), STATUS, WCS(*) DOUBLE PRECISION CDELT(N), CRPIX(N), CRVAL(N), LATPOLE, LONPOLE, : PC(N,N), PV(4), RESTFRQ, RESTWAV CHARACTER CTYPE(N)*72 INCLUDE 'wcs.inc' COMMON /HEADER/ NAXIS, NPV, CRPIX, PC, CDELT, CRVAL, LONPOLE, : LATPOLE, RESTFRQ, RESTWAV, PVI, PVM, PV COMMON /HEADCH/ CTYPE *----------------------------------------------------------------------- STATUS = WCSPUT (WCS, WCS_FLAG, -1, 0, 0) STATUS = WCSINI (NAXIS, WCS) DO 20 I = 1, NAXIS STATUS = WCSPUT (WCS, WCS_CRPIX, CRPIX(I), I, 0) DO 10 J = 1, NAXIS STATUS = WCSPUT (WCS, WCS_PC, PC(I,J), I, J) 10 CONTINUE STATUS = WCSPUT (WCS, WCS_CDELT, CDELT(I), I, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(I), I, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, CRVAL(I), I, 0) 20 CONTINUE STATUS = WCSPUT (WCS, WCS_LONPOLE, LONPOLE, 0, 0) STATUS = WCSPUT (WCS, WCS_LATPOLE, LATPOLE, 0, 0) STATUS = WCSPUT (WCS, WCS_RESTFRQ, RESTFRQ, 0, 0) STATUS = WCSPUT (WCS, WCS_RESTWAV, RESTWAV, 0, 0) DO 30 K = 1, NPV STATUS = WCSPUT (WCS, WCS_PV, PV(K), PVI(K), PVM(K)) 30 CONTINUE * Extract information from the FITS header. STATUS = WCSSET (WCS) IF (STATUS.NE.0) THEN WRITE (*, 40) STATUS 40 FORMAT ('WCSSET ERROR',I3) END IF RETURN END pywcs-1.12/wcslib/Fortran/test/twcssub.f0000644001153600020070000001500112310355626022361 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: twcssub.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TWCSSUB *----------------------------------------------------------------------- * * TWCSSUB tests WCSSUB which extracts the coordinate description for a * subimage from a wcsprm struct. * *----------------------------------------------------------------------- * Number of axes. INTEGER NAXIS PARAMETER (NAXIS = 4) INTEGER AXES(NAXIS), I, J, K, NPS, NPV, NSUB, PSI(10), PSM(10), : PVI(10), PVM(10), STATUS DOUBLE PRECISION CDELT(NAXIS), CRPIX(NAXIS), CRVAL(NAXIS), : LATPOLE, LONPOLE, PC(NAXIS,NAXIS), PV(10), RESTFRQ, : RESTWAV CHARACTER CNAME(NAXIS)*72, CTYPE(NAXIS)*72, CUNIT(NAXIS)*72, : PS(10)*72 * On some systems, such as Sun Sparc, the structs MUST be aligned * on a double precision boundary, done here using equivalences. * Failure to do this may result in mysterious "bus errors". INCLUDE 'wcs.inc' INCLUDE 'wcserr.inc' INTEGER WCS(WCSLEN), WCSEXT(WCSLEN) DOUBLE PRECISION DUMMY1, DUMMY2 EQUIVALENCE (WCS,DUMMY1), (WCSEXT,DUMMY2) DATA (CRPIX(J), J=1,NAXIS) : / 1025D0, 64D0, 512D0, 513D0/ DATA ((PC(I,J),J=1,NAXIS),I=1,NAXIS) : / 1.1D0, 0D0, 0D0, 0D0, : 0D0, 1.0D0, 0D0, 0D0, : 0D0, 0D0, 1.0D0, 0.1D0, : 0D0, 0D0, 0.2D0, 1.0D0/ DATA (CDELT(I), I=1,NAXIS) : /-9.2D-6, 10D0, 1D0, -1D0/ DATA (CUNIT(I), I=1,NAXIS) : /'m', 's', 'deg', 'deg'/ DATA (CTYPE(I), I=1,NAXIS) : /'WAVE-F2W', 'TIME', 'XLAT-SZP', 'XLON-SZP'/ DATA (CRVAL(I), I=1,NAXIS) : /0.214982042D0, -2D3, -30D0, 150D0/ DATA LONPOLE /150D0/ DATA LATPOLE /999D0/ DATA RESTFRQ /1.42040575D9/ DATA RESTWAV /0D0/ DATA (CNAME(I), I=1,NAXIS) : /'Wavelength', 'Time', 'Latitude', 'Longitude'/ PARAMETER (NPV = 4) DATA (PVI(K), PVM(K), PV(K), K=1,NPV) : /1, 1, -1D0, : 3, 1, 2D0, : 3, 2, 210D0, : 3, 3, 60D0/ PARAMETER (NPS = 1) DATA (PSI(K), PSM(K), PS(K), K=1,NPS) : /2, 1, 'UTC'/ *----------------------------------------------------------------------- STATUS = WCSPUT (WCS, WCS_FLAG, -1, 0, 0) STATUS = WCSINI (NAXIS, WCS) DO 20 I = 1, NAXIS STATUS = WCSPUT (WCS, WCS_CRPIX, CRPIX(I), I, 0) DO 10 J = 1, NAXIS STATUS = WCSPUT (WCS, WCS_PC, PC(I,J), I, J) 10 CONTINUE STATUS = WCSPUT (WCS, WCS_CDELT, CDELT(I), I, 0) STATUS = WCSPUT (WCS, WCS_CUNIT, CUNIT(I), I, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(I), I, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, CRVAL(I), I, 0) STATUS = WCSPUT (WCS, WCS_CNAME, CNAME(I), I, 0) 20 CONTINUE STATUS = WCSPUT (WCS, WCS_LONPOLE, LONPOLE, 0, 0) STATUS = WCSPUT (WCS, WCS_LATPOLE, LATPOLE, 0, 0) STATUS = WCSPUT (WCS, WCS_RESTFRQ, RESTFRQ, 0, 0) STATUS = WCSPUT (WCS, WCS_RESTWAV, RESTWAV, 0, 0) DO 30 K = 1, NPV STATUS = WCSPUT (WCS, WCS_PV, PV(K), PVI(K), PVM(K)) 30 CONTINUE DO 40 K = 1, NPS STATUS = WCSPUT (WCS, WCS_PS, PS(K), PSI(K), PSM(K)) 40 CONTINUE * Extract information from the FITS header. STATUS = WCSSET (WCS) IF (STATUS.NE.0) THEN WRITE (*, 50) STATUS 50 FORMAT ('WCSSET ERROR',I3,'.') GO TO 999 END IF WRITE (*, 60) 60 FORMAT ( : 'Testing WCSLIB subimage extraction subroutine (twcssub.f)',/, : '---------------------------------------------------------',//, : 'Initial contents of wcsprm struct:') CALL FLUSH(6) STATUS = WCSPRT (WCS) * Extract the coordinate description for a subimage and add an axis. NSUB = 4 AXES(1) = WCSSUB_LONGITUDE AXES(2) = WCSSUB_LATITUDE AXES(3) = -(WCSSUB_SPECTRAL + WCSSUB_STOKES) AXES(4) = 0 WRITE (6, 70) 70 FORMAT (//,'Extracted contents of wcsprm struct:') STATUS = WCSPUT (WCSEXT, WCS_FLAG, -1, 0, 0) STATUS = WCSSUB (WCS, NSUB, AXES, WCSEXT) CALL FLUSH(6) IF (STATUS.NE.0) THEN STATUS = WCSPERR (WCSEXT, CHAR(0)) ELSE STATUS = WCSSET (WCSEXT) IF (STATUS.NE.0) THEN STATUS = WCSPERR (WCSEXT, CHAR(0)) ELSE STATUS = WCSPRT (WCSEXT) END IF END IF * Set it up for failure by setting PC1_3 non-zero. STATUS = WCSPUT (WCS, WCS_PC, 1D0, 1, 3) NSUB = 2 AXES(1) = 4 AXES(2) = 3 STATUS = WCSSUB(WCS, NSUB, AXES, WCSEXT) IF (STATUS.EQ.WCSERR_NON_SEPARABLE) THEN WRITE (6, 80) WCSERR_NON_SEPARABLE 80 FORMAT (//,'Received wcssub status',I3,' as expected for a ' : 'non-separable subimage',/,'coordinate system.') ELSE WRITE (6, 90) WCSERR_NON_SEPARABLE, STATUS 90 FORMAT (//,'ERROR: expected wcssub status',I3,' for a non-', : 'separable subimage coordinate',/,'system, but received ', : 'status',I3,' instead.') END IF STATUS = WCSFREE (WCSEXT) 999 STATUS = WCSFREE (WCS) END pywcs-1.12/wcslib/Fortran/test/twcstab.f0000644001153600020070000001423312310355626022344 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: twcstab.f,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= PROGRAM TWCSTAB *----------------------------------------------------------------------- * * TWCSTAB tests WCSTAB and also provides sample code for using it in * conjunction with WCSPIH and FTWCST. Although this example and FTWCST * are based on the CFITSIO library, WCSTAB itself is completely * independent of it. * * We assume that the input file, ../C/wcstab.fits, has already been * generated by running the C version of twcstab. * * WCSP and WTB, which are meant to hold addresses, are declared as * INTEGER arrays of length 2 to accomodate 64-bit machines for which * sizeof(void *) = 2*sizeof(int). *======================================================================= LOGICAL GOTEND INTEGER BLOKSZ, I, J, K, IERR, IUNIT, NKEYRC, NREJECT, NWCS, : NWTB, STATUS, WCSP(2), WTB(2) CHARACTER KEYREC*80, HEADER*28801, INFILE*16 * On some systems, such as Sun Sparc, the struct MUST be aligned * on a double precision boundary, done here using an equivalence. * Failure to do this may result in mysterious "bus errors". INCLUDE 'wcs.inc' INCLUDE 'wcshdr.inc' INCLUDE 'wcsfix.inc' INCLUDE 'getwcstab.inc' INTEGER STAT(WCSFIX_NWCS) INTEGER WCS(WCSLEN) DOUBLE PRECISION DUMMY EQUIVALENCE (WCS,DUMMY) DATA INFILE /'../C/wcstab.fits'/ *----------------------------------------------------------------------- WRITE (*, 10) 10 FORMAT ('Testing WCSTAB and associated routines (twcstab.f)',/, : '--------------------------------------------------',/) * Open the FITS test file. IUNIT = 1 STATUS = 0 CALL FTOPEN (IUNIT, INFILE, 0, BLOKSZ, STATUS) IF (STATUS.NE.0) THEN CALL FLUSH(6) CALL FTRPRT ('STDERR', STATUS) GO TO 999 END IF * Read the primary header; unfortunately there is no FITSIO * equivalent of CFITSIO's fits_hdr2str() so do it the long way. OPEN (UNIT=1, FILE=INFILE, FORM='FORMATTED', ACCESS='DIRECT', : RECL=80, IOSTAT=IERR) IF (IERR.NE.0) THEN WRITE (*, 20) IERR, INFILE 20 FORMAT ('ERROR',I3,' opening ',A) GO TO 999 END IF * Read in the FITS header, excluding COMMENT and HISTORY keyrecords. K = 1 NKEYRC = 0 GOTEND = .FALSE. DO 50 J = 0, 100 DO 40 I = 1, 36 READ (1, '(A80)', REC=36*J+I, IOSTAT=IERR) KEYREC IF (IERR.NE.0) THEN WRITE (*, 30) IERR 30 FORMAT ('ERROR',I3,' reading header.') GO TO 999 END IF IF (KEYREC(:8).EQ.' ') GO TO 40 IF (KEYREC(:8).EQ.'COMMENT ') GO TO 40 IF (KEYREC(:8).EQ.'HISTORY ') GO TO 40 HEADER(K:) = KEYREC K = K + 80 NKEYRC = NKEYRC + 1 IF (KEYREC(:8).EQ.'END ') THEN * An END keyrecord was read, read the rest of the block. GOTEND = .TRUE. END IF 40 CONTINUE IF (GOTEND) GO TO 60 50 CONTINUE 60 CLOSE (UNIT=1) *----------------------------------------------------------------------- * Basic steps required to interpret a FITS WCS header, including -TAB. *----------------------------------------------------------------------- * Parse the primary header of the FITS file. STATUS = WCSPIH (HEADER, NKEYRC, WCSHDR_all, 2, NREJECT, NWCS, : WCSP) IF (STATUS.NE.0) THEN WRITE (*, 70) STATUS, WCSHDR_ERRMSG(STATUS) 70 FORMAT ('WCSPIH ERROR',I2,A) GO TO 999 END IF * Copy into our WCSPRM struct. IERR = WCSVCOPY (WCSP, 0, WCS) * Read coordinate arrays from the binary table extension. STATUS = WCSGET (WCS, WCS_NWTB, NWTB) STATUS = WCSGET (WCS, WCS_WTB, WTB) STATUS = FTWCST (IUNIT, NWTB, WTB, STATUS) IF (STATUS.NE.0) THEN CALL FLUSH(6) CALL FTRPRT ('STDERR', STATUS) GO TO 999 END IF * Fix non-standard WCS keyvalues. STATUS = WCSFIX (7, 0, WCS, STAT) IF (STATUS.NE.0) THEN WRITE (*, 80) (STAT(I), I=1,WCSFIX_NWCS) 80 FORMAT ('WCSFIX ERROR, status returns: ',10(I2,:,',')) GO TO 999 END IF *----------------------------------------------------------------------- * The wcsprm struct is now ready for use. *----------------------------------------------------------------------- * Finished with the FITS file. CALL FTCLOS (IUNIT, STATUS) * Initialize the wcsprm struct, taking memory allocated by FTWCST. IF (STATUS.EQ.0) STATUS = WCSSET (WCS) IF (STATUS.NE.0) THEN WRITE (*, 90) STATUS, WCS_ERRMSG(STATUS) 90 FORMAT ('WCSSET ERROR',I2,A) GO TO 998 END IF * Do something with it. CALL FLUSH(6) STATUS = WCSPRT (WCS) * Clean up. 998 STATUS = WCSFREE (WCS) STATUS = WCSVFREE (NWCS, WCSP) 999 CONTINUE END pywcs-1.12/wcslib/Fortran/wcs.inc0000644001153600020070000001506612310355626021043 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcs.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL WCSCOPY, WCSFREE, WCSGET, WCSGTC, WCSGTD, WCSGTI, : WCSINI, WCSMIX, WCSNPS, WCSNPV, WCSP2S, WCSPERR, WCSPRT, : WCSSPTR, WCSPTC, WCSPTD, WCSPTI, WCSPUT, WCSS2P, WCSSET, : WCSSUB INTEGER WCSCOPY, WCSFREE, WCSGET, WCSGTC, WCSGTD, WCSGTI, : WCSINI, WCSMIX, WCSNPS, WCSNPV, WCSP2S, WCSPERR, WCSPRT, : WCSSPTR, WCSPTC, WCSPTD, WCSPTI, WCSPUT, WCSS2P, WCSSET, : WCSSUB * Length of the WCSPRM data structure (INTEGER array) on 64-bit * machines. Only needs to be 416 on 32-bit machines. INTEGER WCSLEN PARAMETER (WCSLEN = 474) * Codes for WCS data structure elements used by WCSPUT and WCSGET. INTEGER WCS_ALT, WCS_ALTLIN, WCS_CD, WCS_CDELT, WCS_CNAME, : WCS_COLAX, WCS_COLNUM, WCS_CRDER, WCS_CROTA, WCS_CRPIX, : WCS_CRVAL, WCS_CSYER, WCS_CTYPE, WCS_CUNIT, WCS_DATEAVG, : WCS_DATEOBS, WCS_EQUINOX, WCS_FLAG, WCS_LATPOLE, : WCS_LONPOLE, WCS_MJDAVG, WCS_MJDOBS, WCS_NAXIS, WCS_NPS, : WCS_NPSMAX, WCS_NPV, WCS_NPVMAX, WCS_OBSGEO, WCS_PC, : WCS_PS, WCS_PV, WCS_RADESYS, WCS_RESTFRQ, WCS_RESTWAV, : WCS_SPECSYS, WCS_SSYSOBS, WCS_SSYSSRC, WCS_VELANGL, : WCS_VELOSYS, WCS_VELREF, WCS_WCSNAME, WCS_ZSOURCE PARAMETER (WCS_FLAG = 100) PARAMETER (WCS_NAXIS = 101) PARAMETER (WCS_CRPIX = 102) PARAMETER (WCS_PC = 103) PARAMETER (WCS_CDELT = 104) PARAMETER (WCS_CRVAL = 105) PARAMETER (WCS_CUNIT = 106) PARAMETER (WCS_CTYPE = 107) PARAMETER (WCS_LONPOLE = 108) PARAMETER (WCS_LATPOLE = 109) PARAMETER (WCS_RESTFRQ = 110) PARAMETER (WCS_RESTWAV = 111) PARAMETER (WCS_NPV = 112) PARAMETER (WCS_NPVMAX = 113) PARAMETER (WCS_PV = 114) PARAMETER (WCS_NPS = 115) PARAMETER (WCS_NPSMAX = 116) PARAMETER (WCS_PS = 117) PARAMETER (WCS_CD = 118) PARAMETER (WCS_CROTA = 119) PARAMETER (WCS_ALTLIN = 120) PARAMETER (WCS_VELREF = 121) PARAMETER (WCS_ALT = 122) PARAMETER (WCS_COLNUM = 123) PARAMETER (WCS_COLAX = 124) PARAMETER (WCS_CNAME = 125) PARAMETER (WCS_CRDER = 126) PARAMETER (WCS_CSYER = 127) PARAMETER (WCS_DATEAVG = 128) PARAMETER (WCS_DATEOBS = 129) PARAMETER (WCS_EQUINOX = 130) PARAMETER (WCS_MJDAVG = 131) PARAMETER (WCS_MJDOBS = 132) PARAMETER (WCS_OBSGEO = 133) PARAMETER (WCS_RADESYS = 134) PARAMETER (WCS_SPECSYS = 135) PARAMETER (WCS_SSYSOBS = 136) PARAMETER (WCS_VELOSYS = 137) PARAMETER (WCS_ZSOURCE = 138) PARAMETER (WCS_SSYSSRC = 139) PARAMETER (WCS_VELANGL = 140) PARAMETER (WCS_WCSNAME = 141) * Codes for WCS data structure elements used by WCSGET (only). INTEGER WCS_CEL, WCS_CUBEFACE, WCS_ERR, WCS_LAT, WCS_LATTYP, : WCS_LIN, WCS_LNG, WCS_LNGTYP, WCS_NTAB, WCS_NWTB, : WCS_SPC, WCS_SPEC, WCS_TAB, WCS_TYPES, WCS_WTB PARAMETER (WCS_NTAB = 200) PARAMETER (WCS_NWTB = 201) PARAMETER (WCS_TAB = 202) PARAMETER (WCS_WTB = 203) PARAMETER (WCS_LNGTYP = 204) PARAMETER (WCS_LATTYP = 205) PARAMETER (WCS_LNG = 206) PARAMETER (WCS_LAT = 207) PARAMETER (WCS_SPEC = 208) PARAMETER (WCS_CUBEFACE = 209) PARAMETER (WCS_TYPES = 210) PARAMETER (WCS_LIN = 211) PARAMETER (WCS_CEL = 212) PARAMETER (WCS_SPC = 213) PARAMETER (WCS_ERR = 214) * Flag bits for the AXES argument. INTEGER WCSSUB_CELESTIAL, WCSSUB_CUBEFACE, WCSSUB_LATITUDE, : WCSSUB_LONGITUDE, WCSSUB_SPECTRAL, WCSSUB_STOKES PARAMETER (WCSSUB_LONGITUDE = 4096 + 1) PARAMETER (WCSSUB_LATITUDE = 4096 + 2) PARAMETER (WCSSUB_CUBEFACE = 4096 + 4) PARAMETER (WCSSUB_CELESTIAL = 4096 + 7) PARAMETER (WCSSUB_SPECTRAL = 4096 + 8) PARAMETER (WCSSUB_STOKES = 4096 + 16) * Error codes and messages. INTEGER WCSERR_BAD_COORD_TRANS, WCSERR_BAD_CTYPE, : WCSERR_BAD_PARAM, WCSERR_BAD_PIX, WCSERR_BAD_SUBIMAGE, : WCSERR_BAD_WORLD, WCSERR_BAD_WORLD_COORD, : WCSERR_ILL_COORD_TRANS, WCSERR_MEMORY, : WCSERR_NON_SEPARABLE, WCSERR_NO_SOLUTION, : WCSERR_NULL_POINTER, WCSERR_SINGULAR_MTX, WCSERR_SUCCESS PARAMETER (WCSERR_SUCCESS = 0) PARAMETER (WCSERR_NULL_POINTER = 1) PARAMETER (WCSERR_MEMORY = 2) PARAMETER (WCSERR_SINGULAR_MTX = 3) PARAMETER (WCSERR_BAD_CTYPE = 4) PARAMETER (WCSERR_BAD_PARAM = 5) PARAMETER (WCSERR_BAD_COORD_TRANS = 6) PARAMETER (WCSERR_ILL_COORD_TRANS = 7) PARAMETER (WCSERR_BAD_PIX = 8) PARAMETER (WCSERR_BAD_WORLD = 9) PARAMETER (WCSERR_BAD_WORLD_COORD = 10) PARAMETER (WCSERR_NO_SOLUTION = 11) PARAMETER (WCSERR_BAD_SUBIMAGE = 12) PARAMETER (WCSERR_NON_SEPARABLE = 13) CHARACTER WCS_ERRMSG(0:13)*80 COMMON /WCS_DATA/ WCS_ERRMSG pywcs-1.12/wcslib/Fortran/wcs_f.c0000644001153600020070000004361212310355626021017 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcs_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include /* Fortran name mangling. */ #include #define wcsnpv_ F77_FUNC(wcsnpv, WCSNPV) #define wcsnps_ F77_FUNC(wcsnps, WCSNPS) #define wcsini_ F77_FUNC(wcsini, WCSINI) #define wcssub_ F77_FUNC(wcssub, WCSSUB) #define wcscopy_ F77_FUNC(wcscopy, WCSCOPY) #define wcsput_ F77_FUNC(wcsput, WCSPUT) #define wcsget_ F77_FUNC(wcsget, WCSGET) #define wcsfree_ F77_FUNC(wcsfree, WCSFREE) #define wcsprt_ F77_FUNC(wcsprt, WCSPRT) #define wcsperr_ F77_FUNC(wcsperr, WCSPERR) #define wcsset_ F77_FUNC(wcsset, WCSSET) #define wcsp2s_ F77_FUNC(wcsp2s, WCSP2S) #define wcss2p_ F77_FUNC(wcss2p, WCSS2P) #define wcsmix_ F77_FUNC(wcsmix, WCSMIX) #define wcssptr_ F77_FUNC(wcssptr, WCSSPTR) #define wcsptc_ F77_FUNC(wcsptc, WCSPTC) #define wcsptd_ F77_FUNC(wcsptd, WCSPTD) #define wcspti_ F77_FUNC(wcspti, WCSPTI) #define wcsgtc_ F77_FUNC(wcsgtc, WCSGTC) #define wcsgtd_ F77_FUNC(wcsgtd, WCSGTD) #define wcsgti_ F77_FUNC(wcsgti, WCSGTI) #define WCS_FLAG 100 #define WCS_NAXIS 101 #define WCS_CRPIX 102 #define WCS_PC 103 #define WCS_CDELT 104 #define WCS_CRVAL 105 #define WCS_CUNIT 106 #define WCS_CTYPE 107 #define WCS_LONPOLE 108 #define WCS_LATPOLE 109 #define WCS_RESTFRQ 110 #define WCS_RESTWAV 111 #define WCS_NPV 112 #define WCS_NPVMAX 113 #define WCS_PV 114 #define WCS_NPS 115 #define WCS_NPSMAX 116 #define WCS_PS 117 #define WCS_CD 118 #define WCS_CROTA 119 #define WCS_ALTLIN 120 #define WCS_VELREF 121 #define WCS_ALT 122 #define WCS_COLNUM 123 #define WCS_COLAX 124 #define WCS_CNAME 125 #define WCS_CRDER 126 #define WCS_CSYER 127 #define WCS_DATEAVG 128 #define WCS_DATEOBS 129 #define WCS_EQUINOX 130 #define WCS_MJDAVG 131 #define WCS_MJDOBS 132 #define WCS_OBSGEO 133 #define WCS_RADESYS 134 #define WCS_SPECSYS 135 #define WCS_SSYSOBS 136 #define WCS_VELOSYS 137 #define WCS_ZSOURCE 138 #define WCS_SSYSSRC 139 #define WCS_VELANGL 140 #define WCS_WCSNAME 141 #define WCS_NTAB 200 #define WCS_NWTB 201 #define WCS_TAB 202 #define WCS_WTB 203 #define WCS_LNGTYP 204 #define WCS_LATTYP 205 #define WCS_LNG 206 #define WCS_LAT 207 #define WCS_SPEC 208 #define WCS_CUBEFACE 209 #define WCS_TYPES 210 #define WCS_LIN 211 #define WCS_CEL 212 #define WCS_SPC 213 #define WCS_ERR 214 /*--------------------------------------------------------------------------*/ int wcsnpv_(int *npvmax) { return wcsnpv(*npvmax); } int wcsnps_(int *npsmax) { return wcsnps(*npsmax); } /*--------------------------------------------------------------------------*/ int wcsini_(const int *naxis, int *wcs) { return wcsini(1, *naxis, (struct wcsprm *)wcs); } /*--------------------------------------------------------------------------*/ int wcssub_(const int *wcssrc, int *nsub, int axes[], int *wcsdst) { return wcssub(1, (const struct wcsprm *)wcssrc, nsub, axes, (struct wcsprm *)wcsdst); } /*--------------------------------------------------------------------------*/ int wcscopy_(const int *wcssrc, int *wcsdst) { return wcscopy(1, (const struct wcsprm *)wcssrc, (struct wcsprm *)wcsdst); } /*--------------------------------------------------------------------------*/ int wcsput_( int *wcs, const int *what, const void *value, const int *i, const int *j) { int i0, j0, k; const char *cvalp; const int *ivalp; const double *dvalp; struct wcsprm *wcsp; /* Cast pointers. */ wcsp = (struct wcsprm *)wcs; cvalp = (const char *)value; ivalp = (const int *)value; dvalp = (const double *)value; /* Convert 1-relative FITS axis numbers to 0-relative C array indices. */ i0 = *i - 1; j0 = *j - 1; wcsp->flag = 0; switch (*what) { case WCS_FLAG: wcsp->flag = *ivalp; break; case WCS_NAXIS: wcsp->naxis = *ivalp; break; case WCS_CRPIX: wcsp->crpix[i0] = *dvalp; break; case WCS_PC: k = (i0)*(wcsp->naxis) + (j0); *(wcsp->pc+k) = *dvalp; break; case WCS_CDELT: wcsp->cdelt[i0] = *dvalp; break; case WCS_CRVAL: wcsp->crval[i0] = *dvalp; break; case WCS_CUNIT: strncpy(wcsp->cunit[i0], cvalp, 72); wcsutil_null_fill(72, wcsp->cunit[i0]); break; case WCS_CTYPE: strncpy(wcsp->ctype[i0], cvalp, 72); wcsutil_null_fill(72, wcsp->ctype[i0]); break; case WCS_LONPOLE: wcsp->lonpole = *dvalp; break; case WCS_LATPOLE: wcsp->latpole = *dvalp; break; case WCS_RESTFRQ: wcsp->restfrq = *dvalp; break; case WCS_RESTWAV: wcsp->restwav = *dvalp; break; case WCS_NPV: case WCS_NPVMAX: return 1; break; case WCS_PV: (wcsp->pv + wcsp->npv)->i = *i; (wcsp->pv + wcsp->npv)->m = *j; (wcsp->pv + wcsp->npv)->value = *dvalp; (wcsp->npv)++; break; case WCS_NPS: case WCS_NPSMAX: return 1; break; case WCS_PS: (wcsp->ps + wcsp->nps)->i = *i; (wcsp->ps + wcsp->nps)->m = *j; strncpy((wcsp->ps + wcsp->nps)->value, cvalp, 72); wcsutil_null_fill(72, (wcsp->ps + wcsp->nps)->value); (wcsp->nps)++; break; case WCS_CD: k = (i0)*(wcsp->naxis) + (j0); *(wcsp->cd+k) = *dvalp; break; case WCS_CROTA: wcsp->crota[i0] = *dvalp; break; case WCS_ALTLIN: wcsp->altlin = *ivalp; break; case WCS_VELREF: wcsp->velref = *ivalp; break; case WCS_ALT: wcsp->alt[0] = cvalp[0]; wcsutil_null_fill(4, wcsp->alt); break; case WCS_COLNUM: wcsp->colnum = *ivalp; break; case WCS_COLAX: wcsp->colax[i0] = *ivalp; break; case WCS_CNAME: strncpy(wcsp->cname[i0], cvalp, 72); wcsutil_null_fill(72, wcsp->cname[i0]); break; case WCS_CRDER: wcsp->crder[i0] = *dvalp; break; case WCS_CSYER: wcsp->csyer[i0] = *dvalp; break; case WCS_DATEAVG: strncpy(wcsp->dateavg, cvalp, 72); wcsutil_null_fill(72, wcsp->dateavg); break; case WCS_DATEOBS: strncpy(wcsp->dateobs, cvalp, 72); wcsutil_null_fill(72, wcsp->dateobs); break; case WCS_EQUINOX: wcsp->equinox = *dvalp; break; case WCS_MJDAVG: wcsp->mjdavg = *dvalp; break; case WCS_MJDOBS: wcsp->mjdobs = *dvalp; break; case WCS_OBSGEO: wcsp->obsgeo[i0] = *dvalp; break; case WCS_RADESYS: strncpy(wcsp->radesys, cvalp, 72); wcsutil_null_fill(72, wcsp->radesys); break; case WCS_SPECSYS: strncpy(wcsp->specsys, cvalp, 72); wcsutil_null_fill(72, wcsp->specsys); break; case WCS_SSYSOBS: strncpy(wcsp->ssysobs, cvalp, 72); wcsutil_null_fill(72, wcsp->ssysobs); break; case WCS_VELOSYS: wcsp->velosys = *dvalp; break; case WCS_ZSOURCE: wcsp->zsource = *dvalp; break; case WCS_SSYSSRC: strncpy(wcsp->ssyssrc, cvalp, 72); wcsutil_null_fill(72, wcsp->ssyssrc); break; case WCS_VELANGL: wcsp->velangl = *dvalp; break; case WCS_WCSNAME: strncpy(wcsp->wcsname, cvalp, 72); wcsutil_null_fill(72, wcsp->wcsname); break; default: return 1; } return 0; } int wcsptc_(int *wcs, const int *what, const char *value, const int *i, const int *j) { return wcsput_(wcs, what, value, i, j); } int wcsptd_(int *wcs, const int *what, const double *value, const int *i, const int *j) { return wcsput_(wcs, what, value, i, j); } int wcspti_(int *wcs, const int *what, const int *value, const int *i, const int *j) { return wcsput_(wcs, what, value, i, j); } /*--------------------------------------------------------------------------*/ int wcsget_(const int *wcs, const int *what, void *value) { int i, j, k, naxis; char *cvalp; int *ivalp; double *dvalp; const int *iwcsp; const double *dwcsp; const struct wcsprm *wcsp; /* Cast pointers. */ wcsp = (const struct wcsprm *)wcs; cvalp = (char *)value; ivalp = (int *)value; dvalp = (double *)value; naxis = wcsp->naxis; switch (*what) { case WCS_FLAG: *ivalp = wcsp->flag; break; case WCS_NAXIS: *ivalp = naxis; break; case WCS_CRPIX: for (i = 0; i < naxis; i++) { *(dvalp++) = wcsp->crpix[i]; } break; case WCS_PC: /* C row-major to FORTRAN column-major. */ for (j = 0; j < naxis; j++) { dwcsp = wcsp->pc + j; for (i = 0; i < naxis; i++) { *(dvalp++) = *dwcsp; dwcsp += naxis; } } break; case WCS_CDELT: for (i = 0; i < naxis; i++) { *(dvalp++) = wcsp->cdelt[i]; } break; case WCS_CRVAL: for (i = 0; i < naxis; i++) { *(dvalp++) = wcsp->crval[i]; } break; case WCS_CUNIT: for (i = 0; i < naxis; i++) { strncpy(cvalp, wcsp->cunit[i], 72); wcsutil_blank_fill(72, cvalp); cvalp += 72; } break; case WCS_CTYPE: for (i = 0; i < naxis; i++) { strncpy(cvalp, wcsp->ctype[i], 72); wcsutil_blank_fill(72, cvalp); cvalp += 72; } break; case WCS_LONPOLE: *dvalp = wcsp->lonpole; break; case WCS_LATPOLE: *dvalp = wcsp->latpole; break; case WCS_RESTFRQ: *dvalp = wcsp->restfrq; break; case WCS_RESTWAV: *dvalp = wcsp->restwav; break; case WCS_NPV: *ivalp = wcsp->npv; break; case WCS_NPVMAX: *ivalp = wcsp->npvmax; break; case WCS_PV: for (k = 0; k < wcsp->npv; k++) { *(dvalp++) = (wcsp->pv + k)->i; *(dvalp++) = (wcsp->pv + k)->m; *(dvalp++) = (wcsp->pv + k)->value; } break; case WCS_NPS: *ivalp = wcsp->nps; break; case WCS_NPSMAX: *ivalp = wcsp->npsmax; break; case WCS_PS: for (k = 0; k < wcsp->nps; k++) { *(dvalp++) = (wcsp->ps + k)->i; *(dvalp++) = (wcsp->ps + k)->m; cvalp += 2*sizeof(double); strncpy(cvalp, (wcsp->ps + k)->value, 72); wcsutil_blank_fill(72, cvalp); cvalp += 72; } break; case WCS_CD: /* C row-major to FORTRAN column-major. */ for (j = 0; j < naxis; j++) { dwcsp = wcsp->cd + j; for (i = 0; i < naxis; i++) { *(dvalp++) = *dwcsp; dwcsp += naxis; } } break; case WCS_CROTA: for (i = 0; i < naxis; i++) { *(dvalp++) = wcsp->crota[i]; } break; case WCS_ALTLIN: *ivalp = wcsp->altlin; break; case WCS_VELREF: *ivalp = wcsp->velref; break; case WCS_ALT: strncpy(cvalp, wcsp->alt, 4); wcsutil_blank_fill(4, cvalp); break; case WCS_COLNUM: *ivalp = wcsp->colnum; break; case WCS_COLAX: for (i = 0; i < naxis; i++) { *(ivalp++) = wcsp->colax[i]; } break; case WCS_CNAME: for (i = 0; i < naxis; i++) { strncpy(cvalp, wcsp->cname[i], 72); wcsutil_blank_fill(72, cvalp); cvalp += 72; } break; case WCS_CRDER: for (i = 0; i < naxis; i++) { *(dvalp++) = wcsp->crder[i]; } break; case WCS_CSYER: for (i = 0; i < naxis; i++) { *(dvalp++) = wcsp->csyer[i]; } break; case WCS_DATEAVG: strncpy(cvalp, wcsp->dateavg, 72); wcsutil_blank_fill(72, cvalp); break; case WCS_DATEOBS: strncpy(cvalp, wcsp->dateobs, 72); wcsutil_blank_fill(72, cvalp); break; case WCS_EQUINOX: *dvalp = wcsp->equinox; break; case WCS_MJDAVG: *dvalp = wcsp->mjdavg; break; case WCS_MJDOBS: *dvalp = wcsp->mjdobs; break; case WCS_OBSGEO: for (i = 0; i < 3; i++) { *(dvalp++) = wcsp->obsgeo[i]; } break; case WCS_RADESYS: strncpy(cvalp, wcsp->radesys, 72); wcsutil_blank_fill(72, cvalp); break; case WCS_SPECSYS: strncpy(cvalp, wcsp->specsys, 72); wcsutil_blank_fill(72, cvalp); break; case WCS_SSYSOBS: strncpy(cvalp, wcsp->ssysobs, 72); wcsutil_blank_fill(72, cvalp); break; case WCS_VELOSYS: *dvalp = wcsp->velosys; break; case WCS_ZSOURCE: *dvalp = wcsp->zsource; break; case WCS_SSYSSRC: strncpy(cvalp, wcsp->ssyssrc, 72); wcsutil_blank_fill(72, cvalp); break; case WCS_VELANGL: *dvalp = wcsp->velangl; break; case WCS_WCSNAME: strncpy(cvalp, wcsp->wcsname, 72); wcsutil_blank_fill(72, cvalp); break; case WCS_NTAB: *ivalp = wcsp->ntab; break; case WCS_NWTB: *ivalp = wcsp->nwtb; break; case WCS_TAB: *(void **)value = wcsp->tab; break; case WCS_WTB: *(void **)value = wcsp->wtb; break; case WCS_LNGTYP: strncpy(cvalp, wcsp->lngtyp, 4); wcsutil_blank_fill(4, cvalp); break; case WCS_LATTYP: strncpy(cvalp, wcsp->lattyp, 4); wcsutil_blank_fill(4, cvalp); break; case WCS_LNG: *ivalp = wcsp->lng + 1; break; case WCS_LAT: *ivalp = wcsp->lat + 1; break; case WCS_SPEC: *ivalp = wcsp->spec + 1; break; case WCS_CUBEFACE: *ivalp = wcsp->cubeface; break; case WCS_TYPES: for (i = 0; i < naxis; i++) { *(ivalp++) = wcsp->types[i]; } break; case WCS_LIN: /* Copy the contents of the linprm struct. */ iwcsp = (int *)(&(wcsp->lin)); for (k = 0; k < LINLEN; k++) { *(ivalp++) = *(iwcsp++); } break; case WCS_CEL: /* Copy the contents of the celprm struct. */ iwcsp = (int *)(&(wcsp->cel)); for (k = 0; k < CELLEN; k++) { *(ivalp++) = *(iwcsp++); } break; case WCS_SPC: /* Copy the contents of the spcprm struct. */ iwcsp = (int *)(&(wcsp->spc)); for (k = 0; k < SPCLEN; k++) { *(ivalp++) = *(iwcsp++); } break; case WCS_ERR: /* Copy the contents of the wcserr struct. */ if (wcsp->err) { iwcsp = (int *)(wcsp->err); for (k = 0; k < ERRLEN; k++) { *(ivalp++) = *(iwcsp++); } } else { for (k = 0; k < ERRLEN; k++) { *(ivalp++) = 0; } } break; default: return 1; } return 0; } int wcsgtc_(const int *wcs, const int *what, char *value) { return wcsget_(wcs, what, value); } int wcsgtd_(const int *wcs, const int *what, double *value) { return wcsget_(wcs, what, value); } int wcsgti_(const int *wcs, const int *what, int *value) { return wcsget_(wcs, what, value); } /*--------------------------------------------------------------------------*/ int wcsfree_(int *wcs) { return wcsfree((struct wcsprm *)wcs); } /*--------------------------------------------------------------------------*/ int wcsprt_(int *wcs) { /* This may or may not force the Fortran I/O buffers to be flushed. If * not, try CALL FLUSH(6) before calling WCSPRT in the Fortran code. */ fflush(NULL); return wcsprt((struct wcsprm *)wcs); } /*--------------------------------------------------------------------------*/ /* prefix should be null-terminated, or else of length 72 in which case * trailing blanks are not significant. */ int wcsperr_(int *wcs, const char prefix[72]) { char prefix_[72]; int i; strncpy(prefix_, prefix, 72); if (prefix_[71] == ' ') { for (i = 70; i >= 0; i--) { if (prefix_[i] != ' ') break; prefix_[i] = '\0'; } } else { prefix_[71] = '\0'; } /* This may or may not force the Fortran I/O buffers to be flushed. */ /* If not, try CALL FLUSH(6) before calling WCSPERR in the Fortran code. */ fflush(NULL); return wcsperr((struct wcsprm *)wcs, prefix_); } /*--------------------------------------------------------------------------*/ int wcsset_(int *wcs) { return wcsset((struct wcsprm *)wcs); } /*--------------------------------------------------------------------------*/ int wcsp2s_( int *wcs, const int *ncoord, const int *nelem, const double pixcrd[], double imgcrd[], double phi[], double theta[], double world[], int stat[]) { return wcsp2s((struct wcsprm *)wcs, *ncoord, *nelem, pixcrd, imgcrd, phi, theta, world, stat); } /*--------------------------------------------------------------------------*/ int wcss2p_( int* wcs, const int *ncoord, const int *nelem, const double world[], double phi[], double theta[], double imgcrd[], double pixcrd[], int stat[]) { return wcss2p((struct wcsprm *)wcs, *ncoord, *nelem, world, phi, theta, imgcrd, pixcrd, stat); } /*--------------------------------------------------------------------------*/ int wcsmix_( int *wcs, const int *mixpix, const int *mixcel, const double vspan[2], const double *vstep, int *viter, double world[], double phi[], double theta[], double imgcrd[], double pixcrd[]) { return wcsmix((struct wcsprm *)wcs, *mixpix-1, *mixcel, vspan, *vstep, *viter, world, phi, theta, imgcrd, pixcrd); } /*--------------------------------------------------------------------------*/ int wcssptr_(struct wcsprm *wcs, int *i, char ctype[9]) { int status = wcssptr(wcs, i, ctype); wcsutil_blank_fill(9, ctype); return status; } pywcs-1.12/wcslib/Fortran/wcsfix.inc0000644001153600020070000000561212310355626021546 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcsfix.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL CDFIX, CELFIX, CYLFIX, DATFIX, SPCFIX, UNITFIX, WCSFIX INTEGER CDFIX, CELFIX, CYLFIX, DATFIX, SPCFIX, UNITFIX, WCSFIX * Flag bits for the RELAX argument. INTEGER WCSFIX_CD, WCSFIX_CEL, WCSFIX_CYL, WCSFIX_DAT, : WCSFIX_NWCS, WCSFIX_SPC, WCSFIX_UNIT PARAMETER (WCSFIX_CD = 1) PARAMETER (WCSFIX_DAT = 2) PARAMETER (WCSFIX_UNIT = 3) PARAMETER (WCSFIX_CEL = 4) PARAMETER (WCSFIX_SPC = 5) PARAMETER (WCSFIX_CYL = 6) PARAMETER (WCSFIX_NWCS = 6) * Error codes and messages. INTEGER FIXERR_BAD_COORD_TRANS, FIXERR_BAD_CORNER_PIX, : FIXERR_BAD_CTYPE, FIXERR_BAD_PARAM, : FIXERR_ILL_COORD_TRANS, FIXERR_MEMORY, FIXERR_NO_CHANGE, : FIXERR_NO_REF_PIX_COORD, FIXERR_NO_REF_PIX_VAL, : FIXERR_NULL_POINTER, FIXERR_SINGULAR_MTX, FIXERR_SUCCESS PARAMETER (FIXERR_NO_CHANGE = -1) PARAMETER (FIXERR_SUCCESS = 0) PARAMETER (FIXERR_NULL_POINTER = 1) PARAMETER (FIXERR_MEMORY = 2) PARAMETER (FIXERR_SINGULAR_MTX = 3) PARAMETER (FIXERR_BAD_CTYPE = 4) PARAMETER (FIXERR_BAD_PARAM = 5) PARAMETER (FIXERR_BAD_COORD_TRANS = 6) PARAMETER (FIXERR_ILL_COORD_TRANS = 7) PARAMETER (FIXERR_BAD_CORNER_PIX = 8) PARAMETER (FIXERR_NO_REF_PIX_COORD = 9) PARAMETER (FIXERR_NO_REF_PIX_VAL = 10) CHARACTER WCSFIX_ERRMSG(0:10)*80 COMMON /WCSFIX_DATA/ WCSFIX_ERRMSG pywcs-1.12/wcslib/Fortran/wcsfix_f.c0000644001153600020070000000560412310355626021525 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsfix_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include /* Fortran name mangling. */ #include #define wcsfix_ F77_FUNC(wcsfix, WCSFIX) #define cdfix_ F77_FUNC(cdfix, CDFIX) #define datfix_ F77_FUNC(datfix, DATFIX) #define unitfix_ F77_FUNC(unitfix, UNITFIX) #define celfix_ F77_FUNC(celfix, CELFIX) #define spcfix_ F77_FUNC(spcfix, SPCFIX) #define cylfix_ F77_FUNC(cylfix, CYLFIX) /*--------------------------------------------------------------------------*/ int wcsfix_(int *ctrl, const int naxis[], int *wcs, int stat[]) { if (*naxis == 0) naxis = 0x0; return wcsfix(*ctrl, naxis, (struct wcsprm *)wcs, stat); } /*--------------------------------------------------------------------------*/ int cdfix_(int *wcs) { return cdfix((struct wcsprm *)wcs); } /*--------------------------------------------------------------------------*/ int datfix_(int *wcs) { return datfix((struct wcsprm *)wcs); } /*--------------------------------------------------------------------------*/ int unitfix_(int *ctrl, int *wcs) { return unitfix(*ctrl, (struct wcsprm *)wcs); } /*--------------------------------------------------------------------------*/ int celfix_(int *wcs) { return celfix((struct wcsprm *)wcs); } /*--------------------------------------------------------------------------*/ int spcfix_(int *wcs) { return spcfix((struct wcsprm *)wcs); } /*--------------------------------------------------------------------------*/ int cylfix_(const int naxis[], int *wcs) { return cylfix(naxis, (struct wcsprm *)wcs); } pywcs-1.12/wcslib/Fortran/wcshdr.inc0000644001153600020070000000643112310355626021535 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcshdr.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL WCSBDX, WCSBTH, WCSIDX, WCSPIH, WCSTAB, WCSVCOPY, : WCSVFREE INTEGER WCSBDX, WCSBTH, WCSIDX, WCSPIH, WCSTAB, WCSVCOPY, : WCSVFREE * Flag bits for the RELAX argument. INTEGER WCSHDR_all, WCSHDR_ALLIMG, WCSHDR_AUXIMG, : WCSHDR_BIMGARR, WCSHDR_CD00i00j, WCSHDR_CNAMn, : WCSHDR_CROTAia, WCSHDR_DOBSn, WCSHDR_EPOCHa, : WCSHDR_IMGHEAD, WCSHDR_LONGKEY, WCSHDR_none, : WCSHDR_PC00i00j, WCSHDR_PIXLIST, WCSHDR_PROJPn, : WCSHDR_RADECSYS, WCSHDR_reject, WCSHDR_VELREFa, : WCSHDR_VSOURCE PARAMETER (WCSHDR_none = 0) PARAMETER (WCSHDR_all = 2**20 - 1) PARAMETER (WCSHDR_reject = 2**28) PARAMETER (WCSHDR_CROTAia = 2**0) PARAMETER (WCSHDR_EPOCHa = 2**1) PARAMETER (WCSHDR_VELREFa = 2**2) PARAMETER (WCSHDR_CD00i00j = 2**3) PARAMETER (WCSHDR_PC00i00j = 2**4) PARAMETER (WCSHDR_PROJPn = 2**5) PARAMETER (WCSHDR_RADECSYS = 2**6) PARAMETER (WCSHDR_VSOURCE = 2**7) PARAMETER (WCSHDR_DOBSn = 2**8) PARAMETER (WCSHDR_LONGKEY = 2**9) PARAMETER (WCSHDR_CNAMn = 2**10) PARAMETER (WCSHDR_AUXIMG = 2**11) PARAMETER (WCSHDR_ALLIMG = 2**12) PARAMETER (WCSHDR_IMGHEAD = 2**16) PARAMETER (WCSHDR_BIMGARR = 2**17) PARAMETER (WCSHDR_PIXLIST = 2**18) * Error codes and messages. INTEGER WCSHDRERR_BAD_TABULAR_PARAMS, WCSHDRERR_MEMORY, : WCSHDRERR_NULL_POINTER, WCSHDRERR_PARSER, : WCSHDRERR_SUCCESS PARAMETER (WCSHDRERR_SUCCESS = 0) PARAMETER (WCSHDRERR_NULL_POINTER = 1) PARAMETER (WCSHDRERR_MEMORY = 2) PARAMETER (WCSHDRERR_BAD_TABULAR_PARAMS = 3) PARAMETER (WCSHDRERR_PARSER = 4) CHARACTER WCSHDR_ERRMSG(0:3)*80 COMMON /WCSHDR_DATA/ WCSHDR_ERRMSG pywcs-1.12/wcslib/Fortran/wcshdr_f.c0000644001153600020070000001036212310355626021511 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcshdr_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include /* Fortran name mangling. */ #include #define wcspih_ F77_FUNC(wcspih, WCSPIH) #define wcsbth_ F77_FUNC(wcsbth, WCSBTH) #define wcstab_ F77_FUNC(wcstab, WCSTAB) #define wcsidx_ F77_FUNC(wcsidx, WCSIDX) #define wcsbdx_ F77_FUNC(wcsbdx, WCSBDX) #define wcsvcopy_ F77_FUNC(wcsvcopy, WCSVCOPY) #define wcsvfree_ F77_FUNC(wcsvfree, WCSVFREE) /*--------------------------------------------------------------------------*/ int wcspih_( char header[], const int *nkeys, const int *relax, const int *ctrl, int *nreject, int *nwcs, iptr wcsp) { /* This may or may not force the Fortran I/O buffers to be flushed. If * not, try CALL FLUSH(6) before calling WCSPIH in the Fortran code. */ fflush(NULL); return wcspih(header, *nkeys, *relax, *ctrl, nreject, nwcs, (struct wcsprm **)wcsp); } /*--------------------------------------------------------------------------*/ int wcsbth_( char header[], const int *nkeys, const int *relax, const int *ctrl, const int *keysel, int *colsel, int *nreject, int *nwcs, iptr wcsp) { /* This may or may not force the Fortran I/O buffers to be flushed. If * not, try CALL FLUSH(6) before calling WCSBTH in the Fortran code. */ fflush(NULL); return wcsbth(header, *nkeys, *relax, *ctrl, *keysel, colsel, nreject, nwcs, (struct wcsprm **)wcsp); } /*--------------------------------------------------------------------------*/ int wcstab_(int *wcs) { return wcstab((struct wcsprm *)wcs); } /*--------------------------------------------------------------------------*/ int wcsidx_(int *nwcs, iptr wcsp, int alts[27]) { return wcsidx(*nwcs, (struct wcsprm **)wcsp, alts); } /*--------------------------------------------------------------------------*/ int wcsbdx_(int *nwcs, iptr wcsp, int *type, short alts[1000][28]) { return wcsbdx(*nwcs, (struct wcsprm **)wcsp, *type, alts); } /*--------------------------------------------------------------------------*/ int wcsvcopy_(const iptr wcspp, const int *i, int *wcs) { struct wcsprm *wcsdst, *wcssrc; /* Do a shallow copy. */ wcssrc = *((struct wcsprm **)wcspp) + *i; wcsdst = (struct wcsprm *)wcs; *wcsdst = *wcssrc; /* Don't take memory. */ wcsdst->m_flag = 0; wcsdst->m_naxis = 0; wcsdst->m_crpix = 0x0; wcsdst->m_pc = 0x0; wcsdst->m_cdelt = 0x0; wcsdst->m_cunit = 0x0; wcsdst->m_ctype = 0x0; wcsdst->m_crval = 0x0; wcsdst->m_pv = 0x0; wcsdst->m_ps = 0x0; wcsdst->m_cd = 0x0; wcsdst->m_crota = 0x0; wcsdst->m_cname = 0x0; wcsdst->m_crder = 0x0; wcsdst->m_csyer = 0x0; wcsdst->m_wtb = 0x0; wcsdst->m_tab = 0x0; return 0; } /*--------------------------------------------------------------------------*/ int wcsvfree_(int *nwcs, iptr wcspp) { return wcsvfree(nwcs, (struct wcsprm **)wcspp); } pywcs-1.12/wcslib/Fortran/wcsunits.inc0000644001153600020070000001020612310355626022115 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * WCSLIB 4.10 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2012, Mark Calabretta * * This file is part of WCSLIB. * * WCSLIB is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WCSLIB is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with WCSLIB. If not, see http://www.gnu.org/licenses. * * Correspondence concerning WCSLIB may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcsunits.inc,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *======================================================================= * Functions. EXTERNAL WCSULEXE, WCSUNITSE, WCSUTRNE INTEGER WCSULEXE, WCSUNITSE, WCSUTRNE * Deprecated functions. EXTERNAL WCSULEX, WCSUNITS, WCSUTRN INTEGER WCSULEX, WCSUNITS, WCSUTRN * Array indices. INTEGER WCSUNITS_BEAM, WCSUNITS_BIN, WCSUNITS_BIT, : WCSUNITS_CHARGE, WCSUNITS_COUNT, WCSUNITS_LENGTH, : WCSUNITS_LUMINTEN, WCSUNITS_MAGNITUDE, WCSUNITS_MASS, : WCSUNITS_MOLE, WCSUNITS_NTYPE, WCSUNITS_PIXEL, : WCSUNITS_PLANE_ANGLE, WCSUNITS_SOLID_ANGLE, : WCSUNITS_SOLRATIO, WCSUNITS_TEMPERATURE, WCSUNITS_TIME, : WCSUNITS_VOXEL PARAMETER (WCSUNITS_PLANE_ANGLE = 1) PARAMETER (WCSUNITS_SOLID_ANGLE = 2) PARAMETER (WCSUNITS_CHARGE = 3) PARAMETER (WCSUNITS_MOLE = 4) PARAMETER (WCSUNITS_TEMPERATURE = 5) PARAMETER (WCSUNITS_LUMINTEN = 6) PARAMETER (WCSUNITS_MASS = 7) PARAMETER (WCSUNITS_LENGTH = 8) PARAMETER (WCSUNITS_TIME = 9) PARAMETER (WCSUNITS_BEAM = 10) PARAMETER (WCSUNITS_BIN = 11) PARAMETER (WCSUNITS_BIT = 12) PARAMETER (WCSUNITS_COUNT = 13) PARAMETER (WCSUNITS_MAGNITUDE = 14) PARAMETER (WCSUNITS_PIXEL = 15) PARAMETER (WCSUNITS_SOLRATIO = 16) PARAMETER (WCSUNITS_VOXEL = 17) PARAMETER (WCSUNITS_NTYPE = 17) CHARACTER WCSUNITS_ERRMSG(0:12)*40, : WCSUNITS_TYPES(WCSUNITS_NTYPE)*18, : WCSUNITS_UNITS(WCSUNITS_NTYPE)*9 * Error codes and messages. INTEGER UNITSERR_BAD_EXPON_SYMBOL, UNITSERR_BAD_FUNCS, : UNITSERR_BAD_INITIAL_SYMBOL, : UNITSERR_BAD_NUM_MULTIPLIER, UNITSERR_BAD_UNIT_SPEC, : UNITSERR_CONSEC_BINOPS, UNITSERR_DANGLING_BINOP, : UNITSERR_FUNCTION_CONTEXT, UNITSERR_PARSER_ERROR, : UNITSERR_SUCCESS, UNITSERR_UNBAL_BRACKET, : UNITSERR_UNBAL_PAREN, UNITSERR_UNSAFE_TRANS PARAMETER (UNITSERR_SUCCESS = 0) PARAMETER (UNITSERR_BAD_NUM_MULTIPLIER = 1) PARAMETER (UNITSERR_DANGLING_BINOP = 2) PARAMETER (UNITSERR_BAD_INITIAL_SYMBOL = 3) PARAMETER (UNITSERR_FUNCTION_CONTEXT = 4) PARAMETER (UNITSERR_BAD_EXPON_SYMBOL = 5) PARAMETER (UNITSERR_UNBAL_BRACKET = 6) PARAMETER (UNITSERR_UNBAL_PAREN = 7) PARAMETER (UNITSERR_CONSEC_BINOPS = 8) PARAMETER (UNITSERR_PARSER_ERROR = 9) PARAMETER (UNITSERR_BAD_UNIT_SPEC = 10) PARAMETER (UNITSERR_BAD_FUNCS = 11) PARAMETER (UNITSERR_UNSAFE_TRANS = 12) COMMON /WCSUNITS_DATA/ WCSUNITS_ERRMSG, WCSUNITS_TYPES, : WCSUNITS_UNITS pywcs-1.12/wcslib/Fortran/wcsunits_f.c0000644001153600020070000000770012310355626022100 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsunits_f.c,v 4.10 2012/02/05 23:41:44 cal103 Exp $ *===========================================================================*/ #include #include #include #include /* Fortran name mangling. */ #include #define wcsunitse_ F77_FUNC(wcsunitse, WCSUNITSE) #define wcsutrne_ F77_FUNC(wcsutrne, WCSUTRNE) #define wcsulexe_ F77_FUNC(wcsulexe, WCSULEXE) /* Deprecated. */ #define wcsunits_ F77_FUNC(wcsunits, WCSUNITS) #define wcsutrn_ F77_FUNC(wcsutrn, WCSUTRN) #define wcsulex_ F77_FUNC(wcsulex, WCSULEX) /*--------------------------------------------------------------------------*/ int wcsunitse_( const char have[72], const char want[72], double *scale, double *offset, double *power, iptr err) { char have_[72], want_[72]; strncpy(have_, have, 72); strncpy(want_, want, 72); have_[71] = '\0'; want_[71] = '\0'; return wcsunitse(have_, want_, scale, offset, power, (struct wcserr **)err); } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int wcsunits_( const char have[72], const char want[72], double *scale, double *offset, double *power) { return wcsunitse_(have, want, scale, offset, power, 0x0); } /*--------------------------------------------------------------------------*/ int wcsutrne_( const int *ctrl, char unitstr[72], iptr err) { int status; char unitstr_[72]; strncpy(unitstr_, unitstr, 72); unitstr_[71] = '\0'; /* This may or may not force the Fortran I/O buffers to be flushed. If * not, try CALL FLUSH(6) before calling WCSUTRNE in the Fortran code. */ fflush(NULL); status = wcsutrne(*ctrl, unitstr_, (struct wcserr **)err); wcsutil_blank_fill(72, unitstr_); strncpy(unitstr, unitstr_, 72); return status; } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int wcsutrn_( const int *ctrl, char unitstr[72]) { return wcsutrne_(ctrl, unitstr, 0x0); } /*--------------------------------------------------------------------------*/ int wcsulexe_( const char unitstr[72], int *func, double *scale, double units[WCSUNITS_NTYPE], iptr err) { char unitstr_[72]; strncpy(unitstr_, unitstr, 72); unitstr_[71] = '\0'; /* This may or may not force the Fortran I/O buffers to be flushed. If * not, try CALL FLUSH(6) before calling WCSULEXE in the Fortran code. */ fflush(NULL); return wcsulexe(unitstr_, func, scale, units, (struct wcserr **)err); } /* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : */ int wcsulex_( const char unitstr[72], int *func, double *scale, double units[WCSUNITS_NTYPE]) { return wcsulexe_(unitstr, func, scale, units, 0x0); } pywcs-1.12/wcslib/GNUmakefile0000644001153600020070000001451212310355626020206 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # GNU makefile for building WCSLIB 4.10 # # Summary of the main targets # --------------------------- # all: Do 'make all' in each subdirectory (excluding ./doxygen). # check: Do 'make check' in each subdirectory (compile and run tests). # tests: Do 'make tests' in each subdirectory (compile test programs but # don't run them). # install: Do 'make install' in each subdirectory. # clean: Recursively delete intermediate files produced as part of the # build, e.g. object modules, core dumps, etc. # cleaner: Recursively clean, and also delete test executables, test # input and output, and intermediates produced in compiling the # programmers' manual. # distclean (or realclean): Recursively delete all platform-dependent files # generated during the build, preserving only the programmers' # manual and man pages (which are normally provided pre-built). # It is the one to use between builds for multiple platforms. # cleanest: Like distclean, but deletes everything that can be regenerated # from the source files, including the programmers' manual and # man pages, but excluding 'configure'. # show: Print the values of important variables used in this and the # other makefiles. # writable: Run chmod recursively to make all sources writable. # # Notes: # 1) If you need to make changes then preferably modify makedefs.in instead. # # 2) Refer also to the makefiles in subdirectories, particularly # C/GNUmakefile. # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: GNUmakefile,v 4.10 2012/02/05 23:41:45 cal103 Exp $ #----------------------------------------------------------------------------- # Get configure settings. include makedefs ifeq "$(CHECK)" "nopgplot" TSTDIRS := $(filter-out pgsbox,$(TSTDIRS)) endif .PHONY : build check chmod clean cleaner cleanest distclean install \ realclean show tests writable build : -@ for DIR in $(SUBDIRS) ; do \ echo '' ; \ $(TIMER) ; \ $(MAKE) -k -C $$DIR build ; \ done check tests :: show -@ echo '' -@ $(TIMER) @ for DIR in $(SUBDIRS) ; do \ echo '' ; \ $(MAKE) -i -C $$DIR cleaner ; \ done -@ echo '' @ for DIR in $(TSTDIRS) ; do \ echo '' ; \ $(TIMER) ; \ $(MAKE) -k -C $$DIR $@ ; \ done check :: -@ echo '' -@ echo 'Summary of results for non-graphical tests' -@ echo '------------------------------------------' -@ cat ./*/test_results @ if grep 'FAIL:' ./*/test_results > /dev/null ; then \ exit 1 ; \ else \ exit 0 ; \ fi install : @ for DIR in $(INSTDIR) ; do \ $(MAKE) -k -C $$DIR $@ ; \ done $(INSTALL) -m 444 wcsconfig.h wcsconfig_f77.h $(INCDIR) - if [ ! -d "$(DOCDIR)" ] ; then \ $(INSTALL) -d -m 2775 $(DOCDIR) ; \ fi $(INSTALL) -m 444 CHANGES COPYING* README $(DOCDIR) - if [ ! -d "$(PDFDIR)" ] ; then \ $(INSTALL) -d -m 2775 $(PDFDIR) ; \ fi $(INSTALL) -m 444 wcslib.pdf $(PDFDIR) - if [ ! -d "$(HTMLDIR)/html" ] ; then \ $(INSTALL) -d -m 2775 $(HTMLDIR)/html ; \ fi $(INSTALL) -m 444 html/* $(HTMLDIR)/html if [ ! -d "$(LIBDIR)/pkgconfig" ] ; then \ $(INSTALL) -d -m 2775 $(LIBDIR)/pkgconfig ; \ fi $(INSTALL) -m 444 wcslib.pc $(LIBDIR)/pkgconfig/wcslib.pc clean cleaner : for DIR in $(SUBDIRS) doxygen ; do \ $(MAKE) -C $$DIR $@ ; \ done cleanest distclean realclean : for DIR in $(SUBDIRS) doxygen ; do \ $(MAKE) -C $$DIR $@ ; \ done - $(RM) *.log - $(RM) -r autom4te.cache autoscan.log - $(RM) confdefs.h conftest.* - $(RM) config.log config.status configure.lineno - $(RM) makedefs wcslib.pc - $(RM) wcsconfig.h wcsconfig_*.h - $(RM) wcslib-*.tar.gz show :: -@ echo 'Subdirectories to be built...' -@ echo ' SUBDIRS := $(SUBDIRS)' -@ echo ' TSTDIRS := $(TSTDIRS)' -@ echo '' writable : chmod -R u+w . GNUmakefile : makedefs ; makedefs : makedefs.in config.status -@ echo '' -@ $(TIMER) ./config.status config.status : configure -@ echo '' -@ $(TIMER) -@ echo '' -@ echo "Environment variables that affect 'configure':" -@ echo " CC = $${CC-(undefined)}" -@ echo " CFLAGS = $${CFLAGS-(undefined)}" -@ echo " CPP = $${CPP-(undefined)}" -@ echo " CPPFLAGS = $${CPPFLAGS-(undefined)}" -@ echo " F77 = $${F77-(undefined)}" -@ echo " FFLAGS = $${FFLAGS-(undefined)}" -@ echo " LDFLAGS = $${LDFLAGS-(undefined)}" -@ echo '' ./configure --no-create #----------------------------------------------------------------------------- # These are for code management. .PHONY : dist dist : $(MAKE) -C doxygen cleanest build $(MAKE) -C utils man $(MAKE) distclean -@ echo $(WCSLIBPKG)/C/RCS > wcslib.X -@ echo $(WCSLIBPKG)/C/flexed/RCS >> wcslib.X -@ echo $(WCSLIBPKG)/C/test/RCS >> wcslib.X -@ echo $(WCSLIBPKG)/doxygen/RCS >> wcslib.X -@ echo $(WCSLIBPKG)/Fortran/RCS >> wcslib.X -@ echo $(WCSLIBPKG)/Fortran/test/RCS >> wcslib.X -@ echo $(WCSLIBPKG)/makedefs >> wcslib.X -@ echo $(WCSLIBPKG)/other >> wcslib.X -@ echo $(WCSLIBPKG)/pgsbox/RCS >> wcslib.X -@ echo $(WCSLIBPKG)/RCS >> wcslib.X -@ echo $(WCSLIBPKG)/TODO >> wcslib.X -@ echo $(WCSLIBPKG)/utils/RCS >> wcslib.X -@ echo $(WCSLIBPKG)/wcslib.T >> wcslib.X -@ echo $(WCSLIBPKG)/wcslib.X >> wcslib.X rm -f $(WCSLIBPKG).tar.bz2 tar cf - -C .. -X wcslib.X $(WCSLIBPKG) | \ tar t | \ grep -v '/$$' | \ sort > wcslib.T rm -f wcslib.X tar cvf $(WCSLIBPKG).tar -C .. -T wcslib.T rm -f wcslib.T bzip2 $(WCSLIBPKG).tar chmod 444 $(WCSLIBPKG).tar.bz2 install_dist : cp -fp $(WCSLIBPKG).tar.bz2 /nfs/ftp/software/wcslib/ mv -f $(WCSLIBPKG).tar.bz2 ../wcslib-releases/ (cd /nfs/ftp/software/wcslib/ && \ rm -f wcslib.tar.bz2 && \ ln -s $(WCSLIBPKG).tar.bz2 wcslib.tar.bz2) cp -fp CHANGES wcslib.pdf ~/public_html/WCS/ rsync --archive --delete html/ ~/public_html/WCS/wcslib/ configure : configure.ac -@ echo '' -@ $(TIMER) autoconf # Code development overrides must be included specifically before 'configure' # generates makedefs. -include flavours pywcs-1.12/wcslib/html/0000755001153600020070000000000012310355732017073 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/html/annotated.html0000644001153600020070000000636612310355626021753 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Structures

      Data Structures

      Here are the data structures with brief descriptions:
      celprmCelestial transformation parameters
      fitskeyKeyword/value information
      fitskeyidKeyword indexing
      linprmLinear transformation parameters
      prjprmProjection parameters
      pscardStore for PSi_ma keyrecords
      pvcardStore for PVi_ma keyrecords
      spcprmSpectral transformation parameters
      spxprmSpectral variables and their derivatives
      tabprmTabular transformation parameters
      wcserrError message handling
      wcsprmCoordinate transformation parameters
      wtbarrExtraction of coordinate lookup tables from BINTABLE

      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/Bonne.gif0000644001153600020070000002221412310355626020626 0ustar cslocumSTSCI\science00000000000000GIF87a ëòÿÿÿÿÿffÿÿff3™3, ëþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ ¢@,„È™±˜,-‡Œ‚€Ø¬:‰‚èÐhÝ Ž##Ëìš5åìBÜ °Ï*ÜxÔ[¸>n¿¯`r{kotZ xyƒ{‚j} tp}†ˆ šš‹Id–He–o››Q“žAD ¡o¶·¶[¥>G¥¤™š ‰ªP°I » d·m˶½Mb¾ ­˜‡ÄƱÉÍ€c¢B³ÙàÜÃoÊÚ3èÜŹ£Zбä¾Áå×— ïí9dá“Ç,‚!6S~Aß>~»´Á†Õ®yG†-88þ†] 1 ã!Q‰eT¬æ0Ü%súq›ПÌs—èÄ‚ÍæÃ”,ViÑWšN˜1÷JˆÃÎ,¡[H>2ÍÁS 0VBFN°I’ª=k*2ÞS6a#étkP±u* ÏO£@p—Q´Z,™´%uñ­ëÖ„SWvl‘«‹GÞ¼H[@z à/öXMÙK‰qÞ4é°0% 3©êts¹F›;;ù,¨ž§ ¹ùœ;kjt»ì–÷P+aÙLÛ©%²m—qQª2…áĹR­yr§¯>pþ¾HŽsÌÎt@È?,>Aq’éÅNXæÇ‘•H#¬ÐO¥ú‘ìóØÙHAŠ%Š£¨Ù—¸ ! ŽR|›Ç MårTè‹ÃYf‰Œ¾…Ò*az¢K¤š,ü •ùƒ_F½FŽ’ta\ŠÂŽ"gV$&1 '€àBœ³\FÞ:‰d`òÁðÒ;Qg DŒÎÄ…†Ã2v-7ׄâ–ãÅw.J´DH‡Ð„Ž›þ@QΙÎ>âc åáY‘“LÂvÀØ‘ðé¹RNW{XëüpÍôn8Ô gjÔÎ2À‰t8݉<#ªÓÈùTuzBØØ¤Lb¢*NdÓ M‰“&ÊnšñÉß„òù½?ÖOq¡Tfj ŠK¢S§T(‚D¿ú%,Š$j1ˆQÑ0õ­šhb¼ ¶÷!¢¥(Kê©—¬*“µŒÅ$èFL¢˜JQ$MôFÁDj/}_±´We:9j<ÄQ•ªLƒYJh½ˆ;™þ"™z*½ $"2¸Oà…˜ |(XýÍ0¤ÒVFâH÷Â:̪YÛ‰Ìd¿0”É‘eqJõ¶Ø\‚àSxáÄWs¹1ÑœÄnúʼkͦŎX!:¦ë…á¯_ë\ôX VϽÕ漺87$|œ:þÕæÌ7„O]Ç8.(æ$3ãSÉt”wÇ3zàgSoþcS¹¿þ#T#zòöëט ð—©1}ÙíhÑþ@´˜¹Ñ4˜¦Œ±‚¢ðÕ\ËJ[º‚Æä„„:GÅiÉèjV6àR¿˜ ¸Ä¾p 蕌†h?î¢Sµ4(Œ×A›Í_"x ÇY;Kf‹ˆK+*Áê‹ E±'ýæ»W0VÑ‘›9” X9x&†¶¬§vË\GÿH›x 7:ünGtjQÆþ‹KÛ˜Ê|él£bÝ3­mº7Qv$±¥¥„‰kû ¬¾ýfÖ!j wcý5qIÏÜÀžYþØÈx‰›É¥.°L]k«ËqµTï”æOÙ†0ãNLJÛÃ;²Z;\ a¿Þ û²Ë‹e7iŠeœ}@rždÂd¼¼yt;'Æç…BEbgè¼é*ê+O]D©B™WÖ´o6p‹Âm.8B¢Úž„'6—ÍRÔÖ¿†"‰™·ört%뤛Êų‹Ã0Ú~×'–êD§iÄǃïÁ£ž'7vhü³Ít²ëÉR ö°v¨§ªm«HœóŽMÕ¯:¡pn˵÷hÏY¥­ã‰†Å±Il¿s]Ý# !äÆžÈW7g.ž®§ÎµSýZ"½bÓ·bR«k„Ǫ“švþwúÖÃss}h¼s DúõŸ‰þÐPÝ7ð4½Ç,ð4~z¢2Cæ4#õp•‡ Ž—)—2môW~+1}­†uqQ{ý÷p…asû°3iå5'‡€ÁQä'‚ï =h‚`4dGhÕ#!"Èi’]ˆãÃ:ÁórfâB}0 ±Qm]70«pH¶Ppw5‚qZuƒç'84<¾·;fATCè¦{ua&~$„r€?~®’d#”&FÕqÃQO+"ƒƒcVnE&S¶%z¨Ó=JAó¿Ò)¬¶Uj'@nÒ=G¸f(†£¶z–áq A"‡h1s‰—þ .•h†$ZX_Ó5Uá‚Td˜XkEѧQ„ÇñD+ñˆ2äi²¨Ò‘± –žp}S4¢Ø8/ˆ`Æg0C‰3Ά1[öX©‚g\vSÃædSº²‹¼XgåY|óg.×f}“Ñ6À'LƧ ´\ÍÓ3É0Cý&é·#\9 •P€6F€1A'‰D„+„h‰üa]Ž }Ñ7íè9¢ -ñU³Ð&Ð’Š÷ Y6V’~;Ø8éÃ" "`wÆ16•32÷{q8Z3D1tKs'w“©ZìEŠß’‘ë ˆW‡s"‘3ív+šþ(”ŽA”¯è+´ãbyÕ~Z|ôÈspØ¡ÑÑPkž£xys“¹Õ-*u‘â“â•b3zD§sk ‰VõhÊ@W´Xµ¸h88„Ž%(ë´ƒÿlL7-|gtðЕ]ù•r²“~Ø“¢ÇiôfO2Œ¬á.!L/÷–þ7*øq=z9j/CpW™‰9\'eº/̦‚ÙŽs`R†iHC–þe–ç?Æoj>+ñEä4ÕG——É" ›‘i7ž©=’%‰ˆL¦yŒ†”šAtBbÙ)•u)Àk4·—²ùb†‚.m9k}ö÷oÕç"ÝXU‘y‚Á÷ur*G4‚“‘Ò´‚þ &4ʨwuÔ£f¡99jøTðg0çD`ذ%ŽX`}‘™‹Ùœo8JÎET ád—u?÷ž¸ów½@UafÑÙ!vÉšØ5þGka?e‡Ö¸l²Y„Öa0ˆKøø–‘á¡ÀezðIkÑÐ'ŰŒö±¡ed øùŠtsñ ¢þ>3Ä™­)ª\ìT†gy¡U;ŒbÉ´¶œöB <š >Úz‹7;Bšj6ÇHóq[â6ã)¢…ù£ãy-÷p,š$é[ñáoØe‚!Òok†T¡´¶+=JŸËfŸS™ yEBhÊ™'DCe·*£„Ó$”æYþÚ…•h¢™›ÉGM¸«áTœös¡øžèi1¦‡P¦ìCC:HŠ{ІÛq§"úbìâ™@Ó›yUë#sôò†ðFx„ðFŸw…‚Z¨†„:#¬ÚŠj±J•ptŽ #ꄵºV·àM¼º3š~$¬Ãš03i¬ªe7V§A wª~ cô­ˆz.s¤‹hª/‘Uf2–"”¦YÞ9BðöQB’`(`’Ù¡ë÷EõŸ`ÚV­ñzï}‰¶)Ø÷™Ô³Pù:‹€ F=óâ{x–«µ¹M‘r~Ž·g‡IžÔd0Wnë¦ô^iûGà ̡,Ïë÷·™i>ÄESÍ< oRC;—Ö‹Š÷ì5D“vŒ(Í»ÜÍIÄ-3OÀÔÒË=C«[(‹a…Zç© £p&Ð’Ò«¬‰Ï¼ñÈÃ"Öÿ‹ÙeM©‹ }´Û:|}¢‚ÃõÉTÉnè¿ÆbrDxÝqª˜‹ã"  mš€­¹#ɸÙn°¤œWá5²O1¼„—=Sõ˜o™6h5ÚÍd .Z€d ¯Šv×þÍÂqâ±ÞkÖÊt½;¼-)d`‚–ÃR‚ßû÷„¨—eW»e‘§¤¤jÅç½Ú¤È}¤û!dŸåˆ‘šÜ8P'¼1übÄû-Lm\Ñ»óõ±ävD(Zæ=¾BÍÇü/ìý8gWµƒ²ßXƒɱ ísZŠZ¥Á]h#+7½í4Û[4¨Ñã‚äÛ-F¨é1äãæÀ0»0zm;¡GÉáÐãúÑ9€«^áHäßãR%FÎhg)^a¹àhðä9¡Üd»Úuùi -L>Ü2ƒ,„öCwúåzäA^h CÓëÙÁ«öœä÷Ûæ-^"/.þR>™&è(D@äÛOz¾Ñ94²ûrœ‹ñ5íÞMr%âçWÞýÂ5±‡ê ÀT*Ì“¾']¶¯4|-yN±L,@ ËÅ!U~c\¥ŽÚ±(‰øxÄÈר*c¯®ž# ¾LXiµ.C„qÕ¼70LÝÆ†Äé.!]i¨UP;ì{J&ÿmêdxÒaQÃ>ÛîeL9%Z¤ Ú‘=î½½RÖ'…ËйEËËjÞû‚rƼ¤ò$ûPþÎÎ EË=#`Ýf 44<úê$FÅ4ë©Rí!Lâ'¡…y6az‹¼£):üMÅõ2^+Xm»”CàV• JÞ!’âh4¯£¼7sþ±‰r¡qø®gÈZóÙAÀƒJò#dòÁÞ_bÄ1ò7ç”; ¡7TÁó ðP÷Ã"G–å1 +³,ðn#·!¨9:¼Ts1­aìPì®ìòÿ‡/B}¸T*sá?üèÖ³ó[WE"uöÔ¥®tY÷F!.ˆ:¦\BEU]î¾/›øYM§3NÕÜ™ó!pñ^?jA¨ê‚Ô•ÁÝnw9Ã8típ´â'JÉÝ.ëùœ•¯Ä3È•¯ë|2¿EKaõ£6“?O-€s©·LŸ¢ï4ÁQ¯/Ó óôMi±õe‚©·ŸªrÞä°!SB’ÐEý%ê3þÃß9O ™§ĵü½¦P=HæEÞÝw¤Ù•ÆÅ‰ò ј8¤„Ø1ï:H@Ìe 8IJµy‹š–5Di !U!6¶Ö`ÎeèÁÌ‹3ìü;] T)xŒÙpŒ$“:î®XÊF µìЕUKÒôe:EŒ˜ y¦6iFO©£ä’‚µgBŠ'Ž¥ç?bXøÉŸXØÖ“þ>¯tiè_Ê'aßå÷(šp6‚`›ñ…Çej`¦õ‘ žbZÃúˆ ©‚fQv¨}ÂI Õ‘(<|×Xh³1e’Î4â=–«¥j9©bNf’Ê Ø^Ù²\Qž‘™É™›œbRÛÚSŽf+®/™tÛ‰:ìʹQ•p® ½Æ*Ÿ—Öò®Œ2ª »|`Md;òåÀ×úkÒ™¼x«·µ|ƒµÀèôáœq@U†“ÿ„Yñ<•ªåÐ5ï¤6È’D¦ý½Ùš€§+²PÛ–È¡ ”fV'S£ÌŸöfM7[(,š,±ÎxtÅÚ ÓK™Ž¨h‹øƒþíÒJ~ä4›(Û;Œƒ[„´miÁуÉ4÷5b£² áK*.Á7tùŽå +Ñ=ò>÷>}Á’óRujh‹c¹rBÃw–á.²T±­Q³ ãC¤"+È–Ká¶Ç}æU¥‰X"Ëú²ðC'ž‘ƒo¶d€ ÊJÑk¤‚c`Í>N‚ŠÏ)|œIìΗ€€üüæÓGûjŒpU‰Ä,‹ÇXÏ”£,™`¾õµl‚˜ðÖD£ø0…Í ùâ3þœïXîAŠ÷­z­ì{ª€*SàÜEOøƒÿ`°â!€Kƒj¢"¦( (RÚé@’ •ˆ7þúë¤ JlÐyE³œéhö¿!­ˆé€Ý ¯p¶ðìMU[B“xÃòál†¨áš‚C8I-N¸K ‹~DÌ}eáxËš%#«ØÇ}I“"ÔbÅ*ôŒèkX™ûV%ˆ.ê­o¡D6zÐ< öFº#XªŽòzîX ‰ˆôõ9ÁŒiB š[kwµ¬„¨‚4IœjN‘ ²Œó@`¸ .T\1m„¤Z0Xg܉U»7©G÷xÒZ ¤Ì+ý羃±^† ]+YùJÆ‘'s…Zþ˜VèÉÛØI´ I^¦I»…`*ˆ‚=ºE&¼DG Y( hÓ^iþ!bÙLÚÅ3`Jª¦OÒ‚Ñu Ýô&'ÑV$ú  0ƒ8—c"3s×l¥ ©²FŒ ðžFƒçq¬Ù ž$B½Í`Ìy2#²z5 Æg"¸°%0Tb™C&óŠŠ.1Pñ„BF5:B«Ër1¬gH1侊.㟠²½†ƒÀ‡ykØLÑ8@xÞ4.4Í…&Æ¿%á;°ÙåPƒç¿„3t9´ééÄÅ8w†à>žFOÁؾMñ‘-oq3wZUú0nøôxr8V²b`0ÜâÙÁ ØÏ)).¥llˆ N³Sv±ÒYÊ@ZX󘕤Å[þ cµå°I®kË;ÁøÊ7¾–q°§\’HB™ÀD‹PK ‰ÓÚ‹‚aü)èØ:U_¥óX‰Pf½H`Œ‡‰—W¼ç‘ö½¶7„%®HcN?G‰¾TGT÷Dç¼GˆÔ­®UUV@\§³âÙÓyEË ðŠ·0O0kb·Öåz•®…ò˜ó\‹DèA ÞS=9ûPÑen ]ã¯.]ößGµêÍÕSˆ‘wN¾:œ¥úáÿ)´J•Ãf Ú]Ú*¸ ìpž’®s׫Wp[À^ꢳmEÆB•ûJHu‹Íˆ¯¾{‹ßê8[èo‚Ø!Ü8oëŒÈþž0Ad‰.Ù'M–1T¬©£:À®aÌ è•1´º³>vÓ‹†W£àÍpTce¶êocÖ®­?FŒ¾b’ž9‹ì ¾3žóLÒñÈÕ•8‘ê¢0ÂA£§†]šÚ\ÁŠ3nŽ^Zš"/Qý"Ï„nnR«4[‡¬T¢\¶ïƒ…ÙùèÃÍ{®ò|SíaeÅR®Žd¯÷)k¸tu®Rtì°s '¹µ f°™5\b‹ôWÇ ±¼V×ë=mzÓ‡á´átíøZ "EQ_ž‰¡*ïò÷ õ6ðx,§Ôr·âš mnSkp[Æ× Œá-BK2æ ÁtD¯â,g}ŸÇ›šþâ(/O»É ؤä”-ú ÑlìÏÍT ‹ßÔUÌ‘poÅ-^ÜÙ*µ»T×™£bDïä,Ö²¬,Ýí8l&ÑÝÆ”Ó™’ ÒœnÐP@á6Þ£f½8™å>w»q•6ènÌ¿À¦ÂS KÖ)ÚrìÊ÷ÓàðPëé&»ŠédЧªb?³*)ÄÎw±Ç™>ŒW¤<æ°¯]Õév;SíýŪÛM²˜Ž¶ôr‡À7¸.ÿº:!õLø–®ûðˆw’]ßþ5sVúßa¶Á¼‘(ªßD˜F WÒ‹©Ô@S ›Ú Ÿá‡¤Ãõ:Ažg±| UÿইöáŠZEXÛx¸ó Ò¤( ásþ¯9»åª÷LõxEÅŠbÎ]êYÍ”ðº{âÝVσcnôô©_ý:Ï¢Ç!£®­ü‹n¾Ž³Ì7ž®™oÎJ¢’E`3Ç~`ý¦sNâ ]S?ÕusWÿ¢Õö`gGXƒ8rBZèMV_P'dO‰&rJÀ}ö¢|x)¥t·lã‘I8Vÿ÷=ä2 ¨·£R¡¶JU,B ä‡N*x°Æi(3XZänå„:ø<ÍöG^T8C`D§"…Ε, ¸„X6Mv6j« UW×}/s5ƒ‚!¸‚Ég+$Ó|³E†bè/{T†€|µ‚$þèf„¾ó€Ñ”‚[BBÿg/Ö‚…yø_{øHâ燂3x©O/Py”`83„ËSnå×W,åS‰"†7¯á!øó,d°iÞõ)ùWeG¶|wñ,EÄP| ¤XŠØh³àE•O‹ñ+o³Jj5l|Ò Ë¢ °E. Õ01Á‹Äæ‹Q`5?.f.ª7,ÃfK®Ó‰ÕcBº2£†„ªdÒxe!t o‡Ts·j13k&ȉØÓ3¨pJwŽc ‹˜ŽÞ¶Xý'ž‡(ãF-¶z-6Œ—wˆãG÷€AÐHnþø_ó‹ö2f_–%‚ãjÛÓJàäL^Ì4‘iƒÔ%7þ OÒõVß÷ phU! ‹¢¨èe’Þ¶@FŒaL‚dóè¨_[V‚êRT#Fˆ‡8RÜÆ XŽ+‘s²ö Ç}#Œ÷RR©”eÕ”ˆoññv‘_ bç÷‘ÀXWÉ5äÈ”`YXѸ<™‚q–qR$‘cóào]£I93Ý6—' ÜüØ'À(r|É k‰yGD¿urZ#—†)^v´ØÔp‘”T'’’¹[RdÄ1&€™™ù_ÐÀ,Šé--• F›Q„£U#f?–¤S¬Ùš¶Š¿H"åc›c'-±a›%åU].¼BÚœˆþ˜+•RxpuèuYiÝ2‡‚x õ1oÒ –k? ;ߣu¸ ßB“Çö‡kÂc3!¿9žúVžDHyp Ç…rWRve‡ÿ“)ØeŸäù?ŠIŸEô™`upH¹šO3Ÿ—7$GÚ”E” Rù?Ù“‘·YÐI"£†ZŸ zø©¡ É7‡A©#Z5ôy¢4ª2vi‡@ö=_ø–ï)<‹É~X£5Š 9š!r‘IèIø[C¤Bú¤ø Fª£IJ·â£vhtú¤P¥r¡‹º¸ßC ¦Fä¤\š¦7 ?ššÔ˜eZ¤+g¡jš¦ŠŸéA ¹r}0¥ÐcBu¨ý@_ºŽbŠ£7ª gJ§‚Ú¨óú C9Ú§E´rŽz©~À¦•ÊDa£ô±¥˜ª¡#¥ú¨ø£¥&*ª* ú§{: ªª²Ú­* _Êb³š«ô@¨ rÑOº¬#óè&¬Æz¬Èš¬Êº¬ÌÚ¬ú–;pywcs-1.12/wcslib/html/cel_8h-source.html0000644001153600020070000014215712310355626022435 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: cel.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/cel_8h.html0000644001153600020070000010775712310355626021146 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: cel.h File Reference

      cel.h File Reference

      #include "prj.h"
      #include "wcserr.h"

      Go to the source code of this file.

      Data Structures

      struct  celprm
       Celestial transformation parameters. More...

      Defines

      #define CELLEN   (sizeof(struct celprm)/sizeof(int))
       Size of the celprm struct in int units.
      #define celini_errmsg   cel_errmsg
       Deprecated.
      #define celprt_errmsg   cel_errmsg
       Deprecated.
      #define celset_errmsg   cel_errmsg
       Deprecated.
      #define celx2s_errmsg   cel_errmsg
       Deprecated.
      #define cels2x_errmsg   cel_errmsg
       Deprecated.

      Enumerations

      enum  cel_errmsg_enum {
        CELERR_SUCCESS = 0, CELERR_NULL_POINTER = 1, CELERR_BAD_PARAM = 2, CELERR_BAD_COORD_TRANS = 3,
        CELERR_ILL_COORD_TRANS = 4, CELERR_BAD_PIX = 5, CELERR_BAD_WORLD = 6
      }

      Functions

      int celini (struct celprm *cel)
       Default constructor for the celprm struct.
      int celfree (struct celprm *cel)
       Destructor for the celprm struct.
      int celprt (const struct celprm *cel)
       Print routine for the celprm struct.
      int celset (struct celprm *cel)
       Setup routine for the celprm struct.
      int celx2s (struct celprm *cel, int nx, int ny, int sxy, int sll, const double x[], const double y[], double phi[], double theta[], double lng[], double lat[], int stat[])
       Pixel-to-world celestial transformation.
      int cels2x (struct celprm *cel, int nlng, int nlat, int sll, int sxy, const double lng[], const double lat[], double phi[], double theta[], double x[], double y[], int stat[])
       World-to-pixel celestial transformation.

      Variables

      const char * cel_errmsg []


      Detailed Description

      These routines implement the part of the FITS World Coordinate System (WCS) standard that deals with celestial coordinates. They define methods to be used for computing celestial world coordinates from intermediate world coordinates (a linear transformation of image pixel coordinates), and vice versa. They are based on the celprm struct which contains all information needed for the computations. This struct contains some elements that must be set by the user, and others that are maintained by these routines, somewhat like a C++ class but with no encapsulation.

      Routine celini() is provided to initialize the celprm struct with default values, celfree() reclaims any memory that may have been allocated to store an error message, and celprt() prints its contents.

      A setup routine, celset(), computes intermediate values in the celprm struct from parameters in it that were supplied by the user. The struct always needs to be set up by celset() but it need not be called explicitly - refer to the explanation of celprm::flag.

      celx2s() and cels2x() implement the WCS celestial coordinate transformations. In fact, they are high level driver routines for the lower level spherical coordinate rotation and projection routines described in sph.h and prj.h.


      Define Documentation

      #define CELLEN   (sizeof(struct celprm)/sizeof(int))

      Size of the celprm struct in int units, used by the Fortran wrappers.

      #define celini_errmsg   cel_errmsg

      Deprecated:
      Added for backwards compatibility, use cel_errmsg directly now instead.

      #define celprt_errmsg   cel_errmsg

      Deprecated:
      Added for backwards compatibility, use cel_errmsg directly now instead.

      #define celset_errmsg   cel_errmsg

      Deprecated:
      Added for backwards compatibility, use cel_errmsg directly now instead.

      #define celx2s_errmsg   cel_errmsg

      Deprecated:
      Added for backwards compatibility, use cel_errmsg directly now instead.

      #define cels2x_errmsg   cel_errmsg

      Deprecated:
      Added for backwards compatibility, use cel_errmsg directly now instead.


      Enumeration Type Documentation

      Enumerator:
      CELERR_SUCCESS 
      CELERR_NULL_POINTER 
      CELERR_BAD_PARAM 
      CELERR_BAD_COORD_TRANS 
      CELERR_ILL_COORD_TRANS 
      CELERR_BAD_PIX 
      CELERR_BAD_WORLD 


      Function Documentation

      int celini ( struct celprm cel  ) 

      celini() sets all members of a celprm struct to default values. It should be used to initialize every celprm struct.

      Parameters:
      [out] cel Celestial transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null celprm pointer passed.

      int celfree ( struct celprm cel  ) 

      celfree() frees any memory that may have been allocated to store an error message in the celprm struct.

      Parameters:
      [in] cel Celestial transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null celprm pointer passed.

      int celprt ( const struct celprm cel  ) 

      celprt() prints the contents of a celprm struct using wcsprintf(). Mainly intended for diagnostic purposes.

      Parameters:
      [in] cel Celestial transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null celprm pointer passed.

      int celset ( struct celprm cel  ) 

      celset() sets up a celprm struct according to information supplied within it.

      Note that this routine need not be called directly; it will be invoked by celx2s() and cels2x() if celprm::flag is anything other than a predefined magic value.

      Parameters:
      [in,out] cel Celestial transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null celprm pointer passed.
      • 2: Invalid projection parameters.
      • 3: Invalid coordinate transformation parameters.
      • 4: Ill-conditioned coordinate transformation parameters.
      For returns > 1, a detailed error message is set in celprm::err if enabled, see wcserr_enable().

      int celx2s ( struct celprm cel,
      int  nx,
      int  ny,
      int  sxy,
      int  sll,
      const double  x[],
      const double  y[],
      double  phi[],
      double  theta[],
      double  lng[],
      double  lat[],
      int  stat[] 
      )

      celx2s() transforms $(x,y)$ coordinates in the plane of projection to celestial coordinates $(\alpha,\delta)$.

      Parameters:
      [in,out] cel Celestial transformation parameters.
      [in] nx,ny Vector lengths.
      [in] sxy,sll Vector strides.
      [in] x,y Projected coordinates in pseudo "degrees".
      [out] phi,theta Longitude and latitude $(\phi,\theta)$ in the native coordinate system of the projection [deg].
      [out] lng,lat Celestial longitude and latitude $(\alpha,\delta)$ of the projected point [deg].
      [out] stat Status return value for each vector element:
      • 0: Success.
      • 1: Invalid value of $(x,y)$.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null celprm pointer passed.
      • 2: Invalid projection parameters.
      • 3: Invalid coordinate transformation parameters.
      • 4: Ill-conditioned coordinate transformation parameters.
      • 5: One or more of the $(x,y)$ coordinates were invalid, as indicated by the stat vector.
      For returns > 1, a detailed error message is set in celprm::err if enabled, see wcserr_enable().

      int cels2x ( struct celprm cel,
      int  nlng,
      int  nlat,
      int  sll,
      int  sxy,
      const double  lng[],
      const double  lat[],
      double  phi[],
      double  theta[],
      double  x[],
      double  y[],
      int  stat[] 
      )

      cels2x() transforms celestial coordinates $(\alpha,\delta)$ to $(x,y)$ coordinates in the plane of projection.

      Parameters:
      [in,out] cel Celestial transformation parameters.
      [in] nlng,nlat Vector lengths.
      [in] sll,sxy Vector strides.
      [in] lng,lat Celestial longitude and latitude $(\alpha,\delta)$ of the projected point [deg].
      [out] phi,theta Longitude and latitude $(\phi,\theta)$ in the native coordinate system of the projection [deg].
      [out] x,y Projected coordinates in pseudo "degrees".
      [out] stat Status return value for each vector element:
      • 0: Success.
      • 1: Invalid value of $(\alpha,\delta)$.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null celprm pointer passed.
      • 2: Invalid projection parameters.
      • 3: Invalid coordinate transformation parameters.
      • 4: Ill-conditioned coordinate transformation parameters.
      • 6: One or more of the $(\alpha,\delta)$ coordinates were invalid, as indicated by the stat vector.
      For returns > 1, a detailed error message is set in celprm::err if enabled, see wcserr_enable().


      Variable Documentation

      const char* cel_errmsg[]


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/deprecated.html0000644001153600020070000003471412310355626022074 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Deprecated List

      Deprecated List

      Global celini_errmsg
      Added for backwards compatibility, use cel_errmsg directly now instead.

      Global celprt_errmsg
      Added for backwards compatibility, use cel_errmsg directly now instead.

      Global celset_errmsg
      Added for backwards compatibility, use cel_errmsg directly now instead.

      Global celx2s_errmsg
      Added for backwards compatibility, use cel_errmsg directly now instead.

      Global cels2x_errmsg
      Added for backwards compatibility, use cel_errmsg directly now instead.

      Global FITSHDR_CARD
      Added for backwards compatibility, use FITSHDR_KEYREC instead.

      Global linini_errmsg
      Added for backwards compatibility, use lin_errmsg directly now instead.

      Global lincpy_errmsg
      Added for backwards compatibility, use lin_errmsg directly now instead.

      Global linfree_errmsg
      Added for backwards compatibility, use lin_errmsg directly now instead.

      Global linprt_errmsg
      Added for backwards compatibility, use lin_errmsg directly now instead.

      Global linset_errmsg
      Added for backwards compatibility, use lin_errmsg directly now instead.

      Global linp2x_errmsg
      Added for backwards compatibility, use lin_errmsg directly now instead.

      Global linx2p_errmsg
      Added for backwards compatibility, use lin_errmsg directly now instead.

      Global prjini_errmsg
      Added for backwards compatibility, use prj_errmsg directly now instead.

      Global prjprt_errmsg
      Added for backwards compatibility, use prj_errmsg directly now instead.

      Global prjset_errmsg
      Added for backwards compatibility, use prj_errmsg directly now instead.

      Global prjx2s_errmsg
      Added for backwards compatibility, use prj_errmsg directly now instead.

      Global prjs2x_errmsg
      Added for backwards compatibility, use prj_errmsg directly now instead.

      Global spcini_errmsg
      Added for backwards compatibility, use spc_errmsg directly now instead.

      Global spcprt_errmsg
      Added for backwards compatibility, use spc_errmsg directly now instead.

      Global spcset_errmsg
      Added for backwards compatibility, use spc_errmsg directly now instead.

      Global spcx2s_errmsg
      Added for backwards compatibility, use spc_errmsg directly now instead.

      Global spcs2x_errmsg
      Added for backwards compatibility, use spc_errmsg directly now instead.

      Global tabini_errmsg
      Added for backwards compatibility, use tab_errmsg directly now instead.

      Global tabcpy_errmsg
      Added for backwards compatibility, use tab_errmsg directly now instead.

      Global tabfree_errmsg
      Added for backwards compatibility, use tab_errmsg directly now instead.

      Global tabprt_errmsg
      Added for backwards compatibility, use tab_errmsg directly now instead.

      Global tabset_errmsg
      Added for backwards compatibility, use tab_errmsg directly now instead.

      Global tabx2s_errmsg
      Added for backwards compatibility, use tab_errmsg directly now instead.

      Global tabs2x_errmsg
      Added for backwards compatibility, use tab_errmsg directly now instead.

      Global wcsini_errmsg
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      Global wcssub_errmsg
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      Global wcscopy_errmsg
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      Global wcsfree_errmsg
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      Global wcsprt_errmsg
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      Global wcsset_errmsg
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      Global wcsp2s_errmsg
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      Global wcss2p_errmsg
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      Global wcsmix_errmsg
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      Global cylfix_errmsg
      Added for backwards compatibility, use wcsfix_errmsg directly now instead.

      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/doxygen.css0000644001153600020070000002161012310355626021264 0ustar cslocumSTSCI\science00000000000000BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { font-family: Geneva, Arial, Helvetica, sans-serif; } BODY,TD { font-size: 90%; } H1 { text-align: center; font-size: 160%; } H2 { font-size: 120%; } H3 { font-size: 100%; } CAPTION { font-weight: bold } DIV.qindex { width: 100%; background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; line-height: 140%; } DIV.navpath { width: 100%; background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; line-height: 140%; } DIV.navtab { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } TD.navtab { font-size: 70%; } A.qindex { text-decoration: none; font-weight: bold; color: #1A419D; } A.qindex:visited { text-decoration: none; font-weight: bold; color: #1A419D } A.qindex:hover { text-decoration: none; background-color: #ddddff; } A.qindexHL { text-decoration: none; font-weight: bold; background-color: #6666cc; color: #ffffff; border: 1px double #9295C2; } A.qindexHL:hover { text-decoration: none; background-color: #6666cc; color: #ffffff; } A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } A.el { text-decoration: none; font-weight: bold } A.elRef { font-weight: bold } A.code:link { text-decoration: none; font-weight: normal; color: #0000FF } A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF } A.codeRef:link { font-weight: normal; color: #0000FF } A.codeRef:visited { font-weight: normal; color: #0000FF } A:hover { text-decoration: none; background-color: #f2f2ff } DL.el { margin-left: -1cm } .fragment { font-family: monospace, fixed; font-size: 95%; } PRE.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; margin-top: 4px; margin-bottom: 4px; margin-left: 2px; margin-right: 8px; padding-left: 6px; padding-right: 6px; padding-top: 4px; padding-bottom: 4px; } DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } BODY { background: white; color: black; margin-right: 20px; margin-left: 20px; } TD.indexkey { background-color: #e8eef2; font-weight: bold; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TD.indexvalue { background-color: #e8eef2; font-style: italic; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TR.memlist { background-color: #f0f0f0; } P.formulaDsp { text-align: center; } IMG.formulaDsp { } IMG.formulaInl { vertical-align: middle; } SPAN.keyword { color: #008000 } SPAN.keywordtype { color: #604020 } SPAN.keywordflow { color: #e08000 } SPAN.comment { color: #800000 } SPAN.preprocessor { color: #806020 } SPAN.stringliteral { color: #002080 } SPAN.charliteral { color: #008080 } SPAN.vhdldigit { color: #ff00ff } SPAN.vhdlchar { color: #000000 } SPAN.vhdlkeyword { color: #700070 } SPAN.vhdllogic { color: #ff0000 } .mdescLeft { padding: 0px 8px 4px 8px; font-size: 80%; font-style: italic; background-color: #FAFAFA; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; } .mdescRight { padding: 0px 8px 4px 8px; font-size: 80%; font-style: italic; background-color: #FAFAFA; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; } .memItemLeft { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memItemRight { padding: 1px 8px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplItemLeft { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplItemRight { padding: 1px 8px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplParams { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; color: #606060; background-color: #FAFAFA; font-size: 80%; } .search { color: #003399; font-weight: bold; } FORM.search { margin-bottom: 0px; margin-top: 0px; } INPUT.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } TD.tiny { font-size: 75%; } a { color: #1A41A8; } a:visited { color: #2A3798; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } TH.dirtab { background: #e8eef2; font-weight: bold; } HR { height: 1px; border: none; border-top: 1px solid black; } /* Style for detailed member documentation */ .memtemplate { font-size: 80%; color: #606060; font-weight: normal; margin-left: 3px; } .memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .memitem { padding: 4px; background-color: #eef3f5; border-width: 1px; border-style: solid; border-color: #dedeee; -moz-border-radius: 8px 8px 8px 8px; } .memname { white-space: nowrap; font-weight: bold; } .memdoc{ padding-left: 10px; } .memproto { background-color: #d5e1e8; width: 100%; border-width: 1px; border-style: solid; border-color: #84b0c7; font-weight: bold; -moz-border-radius: 8px 8px 8px 8px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; font-style: italic; white-space: nowrap; } /* End Styling for detailed member documentation */ /* for the tree view */ .ftvtree { font-family: sans-serif; margin:0.5em; } /* these are for tree view when used as main index */ .directory { font-size: 9pt; font-weight: bold; } .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } /* The following two styles can be used to replace the root node title */ /* with an image of your choice. Simply uncomment the next two styles, */ /* specify the name of your image and be sure to set 'height' to the */ /* proper pixel height of your image. */ /* .directory h3.swap { */ /* height: 61px; */ /* background-repeat: no-repeat; */ /* background-image: url("yourimage.gif"); */ /* } */ /* .directory h3.swap span { */ /* display: none; */ /* } */ .directory > h3 { margin-top: 0; } .directory p { margin: 0px; white-space: nowrap; } .directory div { display: none; margin: 0px; } .directory img { vertical-align: -30%; } /* these are for tree view when not used as main index */ .directory-alt { font-size: 100%; font-weight: bold; } .directory-alt h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } .directory-alt > h3 { margin-top: 0; } .directory-alt p { margin: 0px; white-space: nowrap; } .directory-alt div { display: none; margin: 0px; } .directory-alt img { vertical-align: -30%; } pywcs-1.12/wcslib/html/doxygen.png0000644001153600020070000000240112310355626021255 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRd-ok>ÂgAMAÖØÔOX2tEXtSoftwareAdobe ImageReadyqÉe<]PLTEǾÏ"&©ÈÎï¶»ÖÓÚú“¢Þ ¬à¶Âõ‡§ÕÙêÉÊÎáâæ{ŽÔ¡ëˆ™× ²ø§¬¹ÀÀ±ÝÝÎùùéõõçëëåED9×ÖËhg]_X<@:#mhUÿÿÿÝÀ1tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍvÿIDATxÚbC£: d#„„………h` @¡X",***LKˆ.–], ºX@t± €èb @ÑÅ€BµD„6–š%""´° € ˜% ˆ™B:H¢ˆ²Áf@• ˆRPy"K`\PbC(!II!h©…ëƒ(ñ„Ä!ꈬC„Ä…àl!0[X\J\$TMˆ(’>a$S„ Ù@ Ш@R.$‚¬LJBR¢‰AÌG1 ¬ Â(FȃÔPhhÁTÀ¢„%!`€&q°%u P ¹¢ ¬ € ¹CT$B¢à|‚ºW„¤Àl £!B`R$( …Ĉ‘’ž@AÅ%ĤÄ%@,(—ʂڱ%$ÁââRPmB U`1IˆYB  99€\1 yCCCÿf"[N 'Ü=TGÈ’øl8˜^Kû5<êSæRɤ”%î@@ à›Ê b1 qÅAXHˆ¸&ØB’R y n˜P„Ìã–4A €€j¹€€>Ü ˜ t!˜+(.ÈÅWQ±A2ÜÜMUÜ‚’’‚‚â `1 %`19€F< 3cZÄ`óe!\ˆ DÈ+. 83‹³Àä¸!lYYA -6‚EJŠ¢V €@©žXXX 4„å Ê@86Ð`RdB´€4I "Ý "–@xrÊŒ‚H€AÊ`—f ÉȰCŒ"XV0ɲ³C b@2…¬H ¬È“ p)!(ì‚ 0Ž4ˆ)(%RÁÎ ¶$€TÊ€¥Àþb‡b,säÐ@7À üѰ‚Òî?f¥Ö—\PIx!I´¦"”Ȉ’3¨ QY˜ÿt^^ÛØgv- }>WJOAV`$&#”¦8ùøø8€\FF ›SFJ$ÂÆ€ÐƊС䈉ÀÀ 4ª…Èäå -Á§‡ €H²…—ŸŸŸf ?ðâ5„ €k1Âd‰,ŒÃ ³ƒ“€.€"­F™ËË€àñ‚½ÁIÈ€"±Ù4ÉH gx|‚f©m)))9´. aMDƒ& ºX@t± €èb @ÑÅ€¢‹%DKˆ.–], ºX@t± €èb @€d`‚ɽSµOIEND®B`‚pywcs-1.12/wcslib/html/files.html0000644001153600020070000001047212310355626021071 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: File Index
      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/fitshdr_8h-source.html0000644001153600020070000014123112310355626023325 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: fitshdr.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/fitshdr_8h.html0000644001153600020070000005472712310355626022044 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: fitshdr.h File Reference

      fitshdr.h File Reference

      #include "wcsconfig.h"

      Go to the source code of this file.

      Data Structures

      struct  fitskeyid
       Keyword indexing. More...
      struct  fitskey
       Keyword/value information. More...

      Defines

      #define FITSHDR_KEYWORD   0x01
       Flag bit indicating illegal keyword syntax.
      #define FITSHDR_KEYVALUE   0x02
       Flag bit indicating illegal keyvalue syntax.
      #define FITSHDR_COMMENT   0x04
       Flag bit indicating illegal keycomment syntax.
      #define FITSHDR_KEYREC   0x08
       Flag bit indicating illegal keyrecord.
      #define FITSHDR_CARD   0x08
       Deprecated.
      #define FITSHDR_TRAILER   0x10
       Flag bit indicating keyrecord following a valid END keyrecord.
      #define KEYIDLEN   (sizeof(struct fitskeyid)/sizeof(int))
      #define KEYLEN   (sizeof(struct fitskey)/sizeof(int))

      Typedefs

      typedef int int64 [3]
       64-bit signed integer data type.

      Functions

      int fitshdr (const char header[], int nkeyrec, int nkeyids, struct fitskeyid keyids[], int *nreject, struct fitskey **keys)
       FITS header parser routine.

      Variables

      const char * fitshdr_errmsg []
       Status return messages.


      Detailed Description

      fitshdr() is a generic FITS header parser provided to handle keyrecords that are ignored by the WCS header parsers, wcspih() and wcsbth(). Typically the latter may be set to remove WCS keyrecords from a header leaving fitshdr() to handle the remainder.

      Define Documentation

      #define FITSHDR_KEYWORD   0x01

      Bit mask for the status flag bit-vector returned by fitshdr() indicating illegal keyword syntax.

      #define FITSHDR_KEYVALUE   0x02

      Bit mask for the status flag bit-vector returned by fitshdr() indicating illegal keyvalue syntax.

      #define FITSHDR_COMMENT   0x04

      Bit mask for the status flag bit-vector returned by fitshdr() indicating illegal keycomment syntax.

      #define FITSHDR_KEYREC   0x08

      Bit mask for the status flag bit-vector returned by fitshdr() indicating an illegal keyrecord, e.g. an END keyrecord with trailing text.

      #define FITSHDR_CARD   0x08

      Deprecated:
      Added for backwards compatibility, use FITSHDR_KEYREC instead.

      #define FITSHDR_TRAILER   0x10

      Bit mask for the status flag bit-vector returned by fitshdr() indicating a keyrecord following a valid END keyrecord.

      #define KEYIDLEN   (sizeof(struct fitskeyid)/sizeof(int))

      #define KEYLEN   (sizeof(struct fitskey)/sizeof(int))


      Typedef Documentation

      64-bit signed integer data type defined via preprocessor macro WCSLIB_INT64 which may be defined in wcsconfig.h. For example

         #define WCSLIB_INT64 long long int
      

      This is typedef'd in fitshdr.h as

         #ifdef WCSLIB_INT64
           typedef WCSLIB_INT64 int64;
         #else
           typedef int int64[3];
         #endif
      

      See fitskey::type.


      Function Documentation

      int fitshdr ( const char  header[],
      int  nkeyrec,
      int  nkeyids,
      struct fitskeyid  keyids[],
      int *  nreject,
      struct fitskey **  keys 
      )

      fitshdr() parses a character array containing a FITS header, extracting all keywords and their values into an array of fitskey structs.

      Parameters:
      [in] header Character array containing the (entire) FITS header, for example, as might be obtained conveniently via the CFITSIO routine fits_hdr2str().
      Each header "keyrecord" (formerly "card image") consists of exactly 80 7-bit ASCII printing characters in the range 0x20 to 0x7e (which excludes NUL, BS, TAB, LF, FF and CR) especially noting that the keyrecords are NOT null-terminated.
      [in] nkeyrec Number of keyrecords in header[].
      [in] nkeyids Number of entries in keyids[].
      [in,out] keyids While all keywords are extracted from the header, keyids[] provides a convienient way of indexing them. The fitskeyid struct contains three members; fitskeyid::name must be set by the user while fitskeyid::count and fitskeyid::name are returned by fitshdr(). All matched keywords will have their fitskey::keyno member negated.
      [out] nreject Number of header keyrecords rejected for syntax errors.
      [out] keys Pointer to an array of nkeyrec fitskey structs containing all keywords and keyvalues extracted from the header.
      Memory for the array is allocated by fitshdr() and this must be freed by the user by invoking free() on the array.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null fitskey pointer passed.
      • 2: Memory allocation failed.
      • 3: Fatal error returned by Flex parser.
      Notes:
      1. Keyword parsing is done in accordance with the syntax defined by NOST 100-2.0, noting the following points in particular:

        1. Sect. 5.1.2.1 specifies that keywords be left-justified in columns 1-8, blank-filled with no embedded spaces, composed only of the ASCII characters ABCDEFGHJKLMNOPQRSTUVWXYZ0123456789-_

          fitshdr() accepts any characters in columns 1-8 but flags keywords that do not conform to standard syntax.

        2. Sect. 5.1.2.2 defines the "value indicator" as the characters ''= '' occurring in columns 9 and 10. If these are absent then the keyword has no value and columns 9-80 may contain any ASCII text (but see note 2 for CONTINUE keyrecords). This is copied to the comment member of the fitskey struct.

        3. Sect. 5.1.2.3 states that a keyword may have a null (undefined) value if the value/comment field, columns 11-80, consists entirely of spaces, possibly followed by a comment.

        4. Sect. 5.1.1 states that trailing blanks in a string keyvalue are not significant and the parser always removes them. A string containing nothing but blanks will be replaced with a single blank.

          Sect. 5.2.1 also states that a quote character (') in a string value is to be represented by two successive quote characters and the parser removes the repeated quote.

        5. The parser recognizes free-format character (NOST 100-2.0, Sect. 5.2.1), integer (Sect. 5.2.3), and floating-point values (Sect. 5.2.4) for all keywords.

        6. Sect. 5.2.3 offers no comment on the size of an integer keyvalue except indirectly in limiting it to 70 digits. The parser will translates an integer keyvalue to a 32-bit signed integer if it lies in the range -2147483648 to +2147483647, otherwise it interprets it as a 64-bit signed integer if possible, or else a "very long" integer (see fitskey::type).

        7. END not followed by 77 blanks is not considered to be a legitimate end keyrecord.

      2. The parser supports a generalization of the OGIP Long String Keyvalue Convention (v1.0) whereby strings may be continued onto successive header keyrecords. A keyrecord contains a segment of a continued string if and only if

        1. it contains the pseudo-keyword CONTINUE,

        2. columns 9 and 10 are both blank,

        3. columns 11 to 80 contain what would be considered a valid string keyvalue, including optional keycomment, if column 9 had contained '=',

        4. the previous keyrecord contained either a valid string keyvalue or a valid CONTINUE keyrecord.

        If any of these conditions is violated, the keyrecord is considered in isolation.

        Syntax errors in keycomments in a continued string are treated more permissively than usual; the '/' delimiter may be omitted provided that parsing of the string keyvalue is not compromised. However, the FITSHDR_COMMENT status bit will be set for the keyrecord (see fitskey::status).

        As for normal strings, trailing blanks in a continued string are not significant.

        In the OGIP convention "the '&' character is used as the last non-blank character of the string to indicate that the string is (probably) continued on the following keyword". This additional syntax is not required by fitshdr(), but if '&' does occur as the last non-blank character of a continued string keyvalue then it will be removed, along with any trailing blanks. However, blanks that occur before the '&' will be preserved.


      Variable Documentation

      const char * fitshdr_errmsg[]

      Error messages to match the status value returned from each function.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/form_0.png0000644001153600020070000000044512310355626020770 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR"Û°W0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf£IDAT•c`À1DÔ‘Ø`r’ˆˆàp@á¼ Ì  .`mÒ< IGVlSØ&0m2¬Ø>¦y€E˜>€]ñ_& RËÀ:Až,ÂË Ã•À‘ÀÀ‘ÍÀ´l²¾[«ç¦©ÏXANd »ÄñÂÍL ¶œ æ—310°8Ãü…Ù6Ñ:êÞøIEND®B`‚pywcs-1.12/wcslib/html/form_1.png0000644001153600020070000000044612310355626020772 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR"Û°W0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf¤IDAT•c`À1DÔᬚ†D0=&À¬ØÀ ¢9`"LØ€4/B„®00R< áÒ@ûz† @ÚŠåëEÖMü Á"|Ìß@àM€Šð+0YQÀ¯áeà`ùÀÐÆÀ– 1‡‡µ8e›Á†)‹7E€Nùƒìv„›UÀ$˜”“ `²[PÏ2 ²6îÑIEND®B`‚pywcs-1.12/wcslib/html/form_10.png0000644001153600020070000000030312310355626021042 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ™É ²0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfAIDAT™c`@€Œ6ÆŽƒó#Ã1°ãWvˆÜ¾ÉPEúP†ÿÍâúÂpaø¦Ù&0Ì3f-`YÓÙŽ ¸Ì?¬9IEND®B`‚pywcs-1.12/wcslib/html/form_11.png0000644001153600020070000000031612310355626021047 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRÔ¹0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfLIDAT™c`ÀX€„DGG¿Q­(3Á$ÜÀ°†a*ˆaÀuáXe,¢Y?Aµú+°‚i¦O b`†~Ë#0£jæ¬ È–ýN °nì @IEND®B`‚pywcs-1.12/wcslib/html/form_12.png0000644001153600020070000000036712310355626021056 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR$ øÑð0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfuIDAT™c` 208À9nž@RZ€µÁ½ÔSÈIÀ ¤7FÙIŸ8€”L?H±ì !¾×Hñ ø€„"7 ˆ´<ÃR Á¬ Ò é( P4ÃÁÆ é2 ›AˆAn;3 ±®ïg|ðëÒ„IEND®B`‚pywcs-1.12/wcslib/html/form_13.png0000644001153600020070000000040512310355626021050 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR'•rË]0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfƒIDAT•c` LB冡 &€ÉT5L×âSÂ à‚® @dÒƒ€¯Ì à‚ A¤dÐŽÆŽŽ Œ @‚üìø ¹,@‚1l\ r¬píœ`7”ð XÁù@$‹3³\‹÷¾d`\V€E >m)#&žGIEND®B`‚pywcs-1.12/wcslib/html/form_14.png0000644001153600020070000000025512310355626021054 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ©E1“0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf+IDAT™c`€0ù…X @dàºDò€Eä™Ad‡1ˆ4O€©®Â‘y,IEND®B`‚pywcs-1.12/wcslib/html/form_15.png0000644001153600020070000000026312310355626021054 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR À(0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf1IDAT™c`@\JYŒ­L%x)iчê˜dÙ¦8@d./˜cÙ„0ðÒù½³IEND®B`‚pywcs-1.12/wcslib/html/form_16.png0000644001153600020070000000034712310355626021060 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR {;Ë0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfeIDAT™c`@F Ì  ¶nEÓÆr†C‘ ÎI†ÇüüÆ \ Î7†ò¼­ œ[ö¼ 4@œ*Æ_ Ä0ÖŽ Ã'~¾ç&Û®~¨VËZ›0š.ÈtœÝêIEND®B`‚pywcs-1.12/wcslib/html/form_17.png0000644001153600020070000000105312310355626021054 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRfŠ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf©IDAT(‘R1KÃPþ’4M[“n•vS1à ¤DA­ t "N™œ+T(ÒÁ Ý‚.vë¦cGB@p”TppóÞÕÚâà ÷.ßwïò½þÊ_¤ó{ãT öãý £hÚ–&¸lÄÚrqÍÚ;èð¾ÐP™Ä‰,Mk³â³<tXÓG¡<ÙÎŒ,3€WV”ôjLÓƒNS%ËU\\ÁªÚNZ2”öïÛT$/’ µ3”Œ}ˆ” ã°B/7Ê]Ø…MŒÐ¢=9wù9í!¤ÞV«Õ¤o-DÆAÓHøuš*D©ý Óc Ôˆ­ŒlGja¤QB# õóDãæ[£óDz#©ÉÕëõšôÃ'Ì[¡]X'ê Q_“Á„åyTšÞÔ€îËf³Ò¨ŒKž*]o—PÛ¹EGÔ•v؃¹ÕS‘êBm¾°Qƒ°ÙÆâ£O¨V{Ã5Æ+l3{)C ©D°†u–R‡WC¢øe0Í™÷@XJ•±0Ô”Ž)­H‚Ð;« “_6`’7C¥õZþ±oºC¸Dº³M‡\›„‹Å'»×WxLÝIEND®B`‚pywcs-1.12/wcslib/html/form_18.png0000644001153600020070000000027212310355626021057 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR F‡Z­0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf8IDAT™c`€µÉx  Dñ8t({†U jñwõ:í3ˆúÌôD}äJSÒ`Ýæpƒ« ª­¦¦BIEND®B`‚pywcs-1.12/wcslib/html/form_19.png0000644001153600020070000000043412310355626021060 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR÷áÜ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfšIDAT™c`ÀQ¹ê ® ‰pîN× œ0‡ƒ7ó¶0G‰—á3ËÆ —ÙG–œ.€¸+?X1püœ?á"ˆû‰uƒï~0—ùg›`Ëæ2}àWàeàN8ÄÑ[æÏÀÃÀ<-€qØ"ˆì@‚ßà2ÈU A››ƒˆU€á3½v­ºl}IEND®B`‚pywcs-1.12/wcslib/html/form_2.png0000644001153600020070000000046112310355626020770 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR"Û°W0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf¯IDAT•c`À1DÔX,ÌX™ÀÀÀ ÑâepÑ ¬`©K¼Ü šˆ5€ë¾. ƒ(`Qdðð°%V ŒŒAªùwîg`^á Hàj³gˆ…‰ð È2€DŽ@Dx8 1`ÐgÞÀÀž1yæJ¦§ \á \ ‡±0°Mf`’ÜP7³É0»LJ00Á}–€-(®ÚÛs óIEND®B`‚pywcs-1.12/wcslib/html/form_20.png0000644001153600020070000000027012310355626021046 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ™É ²0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf6IDAT™c`@F†r -~‹ËyH¤‹‹¡ÂàV<a0v*@P€É˜ ¥%WM`@5Ñ Â/IEND®B`‚pywcs-1.12/wcslib/html/form_21.png0000644001153600020070000000036212310355626021051 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR#WŸ‚0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfpIDAT•c`À\P…¬8€å˜ÀB ¼ -@ZüÓÆr¨CˆÑÅÀoÀo0sæL$!yÞˆ*.†…!{^°©–ÍŒ%¨Bp€Uˆ_/Eh6W?Šˆäª ­Mø} ÞýùƃNIEND®B`‚pywcs-1.12/wcslib/html/form_22.png0000644001153600020070000000031512310355626021050 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ™É ²0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfKIDAT™c`€F†r Ãþn—ó Ã"‰‹¡È0c`àV<dX¹0v*‚ _ ºnA7 ™>A³ ÔD îî› IEND®B`‚pywcs-1.12/wcslib/html/form_23.png0000644001153600020070000000036112310355626021052 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ¼ò0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfoIDAT™c` 0¯4`pKfˆ^°8IJWaLà4CoÇ‚p[ ýü ªVÀªæƒÀl‰ŽŽŽ®ýpFAAAU@ k=qOài@ÄZ%0ÔFvX‹qžŠcÄ]„IEND®B`‚pywcs-1.12/wcslib/html/form_24.png0000644001153600020070000000030112310355626021045 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR&:ãG0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf?IDAT™c`À “„f…P,U¥`z*;§b> ÂRÈ‘À«¤Ù "ÁòËV4€iæ¨v¨~d+µh r5lñIEND®B`‚pywcs-1.12/wcslib/html/form_25.png0000644001153600020070000000027212310355626021055 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR F‡Z­0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf8IDAT™c`€µÉx  Dñ8t({†U jñwõ:í3ˆúÌôD}äJSÒ`Ýæpƒ« ª­¦¦BIEND®B`‚pywcs-1.12/wcslib/html/form_26.png0000644001153600020070000000057012310355626021057 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRNJT©0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØföIDAT(‘c` 0TÂh$xÐ… ÑT0µ)N¨±+fncÐôÉV@ðÃ#¼²ÌêDg1°3p1|d~ÐÄ8Îg~À¾`k’:†.N– ŸR™à|ÎÌr ªcûÂñáç*ŸwóGéå ¨êæ©CæƒÔÙuž3gÎ Ù£°^Y/‹¬&nÍÀ• t2? è> uz \ŠÁâ20¾ÊŽ ¨ê$ïM`Û±”ÁÒ xz0~¹šy bH òÑÔÁ¤Ž·S*—yÈp,¢VFîuªäžIEND®B`‚pywcs-1.12/wcslib/html/form_27.png0000644001153600020070000000057212310355626021062 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRBP<´'0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØføIDAT(‘c` ˜ ðH*ƒžõ (ò>@ŠÂã\eÀ°t2Ãöi NõtŽôŽö H*V3<ä à.à²Y?pT1åb˜ˆ¬âÃ5~Þ¤ Ü@6ïŽ Ïº¹6 ª¸e/À» kÈi 8>|cègÞ€¬bÃ+ 0›õHUá9sæÌŽÐ›p i^PT@ÁgyÞ(›§áCšŠÌøøA¡±‰íÃ,†kh*ªg 0.i±n00Ÿ8ÌÀÖ€n Íf°@ 94wÀ€¬‚·MrLæ‚T0  ‚€Ö,Ô;ìTIEND®B`‚pywcs-1.12/wcslib/html/form_28.png0000644001153600020070000000057512310355626021066 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRV  mWU0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfûIDAT(‘c` 30” iaf#0‹É,`1€”p«,àrÞÀÀÀÚ¸˜a“ƒ¶xˆ5U[(`1×'Õ®`ØÎÅÐÈÀ Ï ÏÕÀ]ð™á3ÅzíPÁbà©ýÆÐË­x€!žß>ãâG†@–Õæ@  ¦¶Ÿ±S¡Ÿ??ãóG†[@Vîæ@  ®ìEj«½Æ0¬ÖŸ_6sÃ'†g@–Ä–@  ¢6›á2(ä.ð+ø°mà5XÆðÈbúÀÙ”@°ø@jÙÒ@dcˆ´RŽË<$`±ÌZNRwFu‹õRbûIEND®B`‚pywcs-1.12/wcslib/html/form_29.png0000644001153600020070000000047212310355626021063 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR,Ÿ€ä0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf¸IDAT•c` 0bŠ (‡y%ÃÌm š^^Ù@îD¨°è,v.†Ì°00,€éíbà1àdùÀði!‡H&Ìö;…ãÃ7éå @m¬ïß¿†3Ìÿ q$LÙ9`†(¬—€ 30ˆqB…­¸Rfƒ8š¬ Âz \Š™?ÙL lÁ¦Ý›À¶c)ƒ¥•áÀÀ²AÙÇ öqÃ.¼»0 ùô*^n£v´IEND®B`‚pywcs-1.12/wcslib/html/form_3.png0000644001153600020070000000032412310355626020767 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR¨‚!0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfRIDAT™c`À` &‹Æ`©*…²¦²s ƒÌT8R'Y ¼: Í@[BA$CHzÙŠ(‹¹€‡aØ8æä°yè–íx !½”9IEND®B`‚pywcs-1.12/wcslib/html/form_30.png0000644001153600020070000000026012310355626021046 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR Þ¹°0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf.IDAT™c`@LA¢@J…Ï{JàgR‰ÚA$+A*>cRŒG̃ຣöígQ(6IEND®B`‚pywcs-1.12/wcslib/html/form_31.png0000644001153600020070000000027512310355626021055 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ¤[AÔ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf;IDAT™c`€!0ÉäðH±ñ3|q£?€¨¥¬@ÔE®•/Réà âpLØ¢]à&tÒ ø6ÏwIEND®B`‚pywcs-1.12/wcslib/html/form_32.png0000644001153600020070000000030312310355626021046 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR  ®‘é0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfAIDAT™c`€–™¡`z&ƒ?ˆbüÀÀ¢™?20ƒÅÿ‡¨c]¿D11°~Ñn ¬@ôl9]2sÂLæ ¡Ì *)IEND®B`‚pywcs-1.12/wcslib/html/form_33.png0000644001153600020070000000027712310355626021061 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR  ®‘é0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf=IDAT™c`€ƒŒŽvͽPøˆæ`¸¢å¾è8é zýÌÉ`õß Ú˜>BhŽzÖ $€ žé»áÜIEND®B`‚pywcs-1.12/wcslib/html/form_34.png0000644001153600020070000000054612310355626021061 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR,Ÿ€ä0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfäIDAT•c` Qx ÌÆ ÂF Å  ,mÌ`a^Öú“00°\`Ø&|,ÌÏÀÏPÄÀÀÔTÝÀ1¡ $*l ”©T``à``–5àM`в5ÞŠ|²¸7Å3pþ )öe¸ ”û d…2ð:uÖþrž3|``pÙòџ¡HË'‰ÏÌXü0ô2\e˜ÀÀ2û#çT†0þ ì U >0ØÌ.wk³þÉÿh#ƒ´Ë6åU]›P<«¥PC¤ {@- –ãØ.ûÊ7íIEND®B`‚pywcs-1.12/wcslib/html/form_35.png0000644001153600020070000000054712310355626021063 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR,Ÿ€ä0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfåIDAT•…Ð/hqÆñ¯þüw7uª‡1Ø„cM¶ d6Á`°ù§Xua ,:Lf1Ïd¬›ƒF›õæ1 +ž¿äDðMïûá-ÏGûÞé$î6Ti-ž’2”~r‚â|G¹ùÓj Éטxê¨ÎjÂm©“.Bçb/p›‘êë¬ÈOu¡lo%çXàý¶qõxÇÕ’¼9ìÌðlÅš;ɶX4\!¬@¿þ!ùGy 9$y%úpàVö98<Áø¾Rúåsyœ{®Óüà)ŸíI½\%ìxf/}ã¹øöIEND®B`‚pywcs-1.12/wcslib/html/form_36.png0000644001153600020070000000031112310355626021051 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR Olú×0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfGIDAT™c`@UÓXÁ´_ËwÍò‰áˆÁŸÀÀ°Ä¨‡)½ËÀhlbÜb`ª/1æ20øƒ¥ä΀Œ«ÛY·¨ j¼ŸÁIEND®B`‚pywcs-1.12/wcslib/html/form_37.png0000644001153600020070000000030012310355626021050 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR Oï0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf>IDAT™c`ÀªÌ!, Fêž"ÃsŸƒ<ˆÁkÀÏbð3ø262l:>$á ‹¦"™e° t ¯IEND®B`‚pywcs-1.12/wcslib/html/form_38.png0000644001153600020070000000026412310355626021062 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR r¢É0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf2IDAT™c`@¦ ’3` ªað3Rßì €ÔG{ õˆ!Ÿ H©¹©Á4äÇÃÑ[…xIEND®B`‚pywcs-1.12/wcslib/html/form_39.png0000644001153600020070000000027712310355626021067 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR „Ì 0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf=IDAT™c`ÀFêC^0C«€"¯  e0L7P``ða¸X«1a0Uàác(20^Y¹Ê NIEND®B`‚pywcs-1.12/wcslib/html/form_4.png0000644001153600020070000000032412310355626020770 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRíf0â0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfRIDAT™c`€&=e˜bkèÓü]`º–á&˜¾?óƒþÆðQ]B€á#놅, @šWá"ó†Å© `šEaKX‹„9Ô ­Í­r‚‰ÛIEND®B`‚pywcs-1.12/wcslib/html/form_40.png0000644001153600020070000000027712310355626021057 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRÔ¹0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf=IDAT™c`@£Ƈ1¸  Ö0¡Pšã”15Bsð ôä³8'é‚D€(¦o’ì  \w3ÈuIEND®B`‚pywcs-1.12/wcslib/html/form_41.png0000644001153600020070000000031612310355626021052 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRíÝâR0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfLIDAT™c`@Œ0¿”¡)Ì † @Œ´©Ò  FÆ>°ÍiÃiU Ð1°¨/Ãe£k X®0_``˜ }ÎðáË e,8XëÁ¢Ÿ™0?à `bà¸ÀÀÁ“ýÈ9•}?;C1û~6Ö ¬@¢ånmÜ<Á@Ë·x'é•!y©[ p(`åÂf•õ'•ÒÍë±IEND®B`‚pywcs-1.12/wcslib/html/form_43.png0000644001153600020070000000024712310355626021057 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ÒŽ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf%IDAT™c`@Ì @‚s™¬ üš"?‚Ù›Á¤D¸T1ˆ2X}IEND®B`‚pywcs-1.12/wcslib/html/form_44.png0000644001153600020070000000053012310355626021053 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRL :áFt0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfÖIDAT•c` d´1v$ ñ9::‘åÙfš(Î Ç…¿ æ#ó2̆³+ (ûÀÀ€à²`›Æ°o2Š#X0ø#éã¸Àáé€H ‡ÄàšÀ|ª¤ˆ™þo…pü€Ì˜Ø´o"ÅrÌ0iCl?؃,®@þaàp`™ùÈ’{l&ÌÚ£ÀÀ2†Á…á;Doçt Up— Odàj3a>L˜DœF(3âg ö æ¬,«½*¹*Åãm³&0 '­.ª$@ÖIEND®B`‚pywcs-1.12/wcslib/html/form_45.png0000644001153600020070000000053412310355626021060 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRL :áFt0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfÚIDAT•c` °Ì Eâ1vt´"ËJt(d43ü‘Åõ¥6 q™~0D+€´`àBVÇÀü™?Ÿ©D™‘…W2p~@1½ Bÿ?™"¾2Ä- ``à rC5±®‡¹Å (Çøk&ÐΤÅ@{@‚\'01°ÕK΂y `ƒ(—ûÌ' fÃO°27Ö PÓ’€˜j4㌩l r0äƒù³ä Ê €˜?ÊaûŒé"?ا%37!ù‹eÖdo2D-e˜µœXU¢.2\©ñÙIEND®B`‚pywcs-1.12/wcslib/html/form_46.png0000644001153600020070000000033112310355626021054 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ­LØÖ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfWIDAT™c`ÀL\T@l®€%< ‹X‚89 ‡¶3tñ6€8ß?2œdû_â|d`þÀðÙ™åˆóˆ¡èû„£Œ`eâ. f© *®è–¤† $Y‹IEND®B`‚pywcs-1.12/wcslib/html/form_47.png0000644001153600020070000000033712310355626021063 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR {;Ë0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf]IDAT™c`ÀŒÈœ•˜ò  âÀ„® 6kÀB§‡l3€8¼  Ÿ0~qØþp40|`]â8³|àSf¾Àcâel°eãhàgæÊ YÀiÀ„f ПaQ1;IEND®B`‚pywcs-1.12/wcslib/html/form_48.png0000644001153600020070000000063012310355626021060 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRTzŒEˆ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfIDAT(‘c` 0¯T‡8³‡ Ì™€®†s•Ó”…ŒÇ6! ‚Tq80  ­fxÈ/`Ç¡ ‰,ž ļ@lˆ¢ôÃ5~µ d¥2@ÌÃÀ.m`€¢ôV?¬puZÓÁ&Z1°\`½è bWº‚áH)ÂDÆO@Ë@Jù ˜¿1Np‰ÍœùrfGèM˜RÉ™3g0p½œUʯÀü…=áS†Ïñ@A„©¼ SyøX>p$ð1´A•îd> /`z ßó0°§l³*UZ=K€yò"$¥ŒKS¤4[(j™ $X@Â@,€Û@^ Üu © * x8ä$`<\Ê€€Ÿ1Ê9a8 IEND®B`‚pywcs-1.12/wcslib/html/form_49.png0000644001153600020070000000063212310355626021063 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRTzŒEˆ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfIDAT(‘c` 0¯T‡8³‡ Ì™€®†s•Ó”…ŒÇ6! ‚Tq8 +]Íð_ÀŽCAÄi„ ¦1/¢(ýÆpÍŸ_-ÀY© ó00„K (½ÕÏÀŸ0k\©Öt°‰V ,X/:ˆ ¯`xR န2~Z.RÊWÀüq‚H"sæÌ™¡7aJ3g¾š9ëå¨R~æ/ì ¼HNøD˜Ê›1•—_€åGCTáNæòö ¥œ ßó0°§l³*•­ž%Àc0Mu9m¯IEND®B`‚pywcs-1.12/wcslib/html/form_5.png0000644001153600020070000000033212310355626020770 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRé(2o0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfXIDAT™c`@pVŒÁ"cyÂÄ4Õ¥ ¬ l-ì N\iŽ„^W›iAáf–ž A‹í Ì ø@,fæ Ö s¬‡ÈZ·n3„½ 4ÎJ IEND®B`‚pywcs-1.12/wcslib/html/form_50.png0000644001153600020070000000040012310355626021044 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ‡0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf~IDAT™c`ÀŒ Ì Œ† ¬M ®ø-¦¶ ReÚ .NÁL&°$@ø< œ¬>OåR€ð™ÿOâøÀð}2„ÏÔýćšßÅÀËoÌ·bàHùÀðÊŸÍ /ÀÍð‰å„+¹jÓÎI ž˜.­þݦàãmIEND®B`‚pywcs-1.12/wcslib/html/form_51.png0000644001153600020070000000030512310355626021051 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ™É ²0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfCIDAT™c`@c†r Í­²€Ëy±‚a;C#ñ¡—[ñ˜ÑÏØ©a@4Á×fCÙ —! ¶ôd|@…M@~IEND®B`‚pywcs-1.12/wcslib/html/form_52.png0000644001153600020070000000047512310355626021062 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR3I·Z0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf»IDAT•c` 0"X®hRp– kªÔDƒÙeªœËÆÀcUdP`` ``4óØ9OÀeXuØ?0p10´J¹Æ ü ,3À€Í—áƒ$û}°T¿\ÛR††b~¯€Áè– |`6`ØÀ`Ux¨”A€Ô6¦} Û@n7±@¸»Õ‰C=8ì(„Mà0â‚sØЀœÅ„.µ]ÚP×+ѶÿIEND®B`‚pywcs-1.12/wcslib/html/form_53.png0000644001153600020070000000043212310355626021054 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR.›çPÙ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf˜IDAT•c` `f7Àb^ $¸*× i$4Xp>@ÓÐÄÙ?0Ä"¾€õƒî¿ =™3gΜg ``à (Hh@SϤ–204,ñ3::: âR@—(0€­f€ˆ30L3nàRø€dŒä½ @kYÿÿ?ÀÇ€,L X‡vq.ìÂ( #¾PÌ”öIEND®B`‚pywcs-1.12/wcslib/html/form_54.png0000644001153600020070000000034512310355626021060 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR ñ:¢Š0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfcIDAT™c`À ŒÐø‘ÙP¾1|G¸Îp‹ÁØØÈRR ¡¯{ׯÒniii @šk‚;Š© ªR FæÌ™3'00°$°2,´BRÛÑÊpÁI`ÖªÅ,RX ±»+ÌÅùIEND®B`‚pywcs-1.12/wcslib/html/form_55.png0000644001153600020070000000041212310355626021054 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR(–ù ž0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfˆIDAT•c` °ˆ±p$ ó™W .ÖÈ‚¢³€„gŠÖ. žÈÀg¬€.¸€?qˆ“9sæÌ AÖ;†ih*¹:‚8 A)†ËŒ@‚Œ‚‚‚Áb†ì-H6IÞ›´‡ùk+ª˜°ø”CpaC›£¶:”¯IEND®B`‚pywcs-1.12/wcslib/html/form_56.png0000644001153600020070000000032112310355626021054 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR a)ÛE0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfOIDAT™c`ÀX ò?¢ð? )ÓÊÆÆÆ \›xÀ\·´´´>9dÅü ‘`:sæÌ™| ÉNgø€Ä]Ä0Óm–B' ‹ýèIEND®B`‚pywcs-1.12/wcslib/html/form_57.png0000644001153600020070000000030112310355626021053 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR \Gƒ[0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf?IDAT™c` L€„²±±±WÀ Ç----!‡áBÕ70™9sæÌ ‘õ?b(DpÄ]PM´Ž ßä$Ì·IEND®B`‚pywcs-1.12/wcslib/html/form_58.png0000644001153600020070000000037412310355626021066 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR&ˆ0-0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfzIDAT•c` 0…Ø P¸Ì+ªÑY@BM_Od`PF[ÀÀe4HgΜ9sDŒ5€á(ûTu\ ,ÀìŒŽŽŽˆ˜D£   D¬˜mCB«ä½ @+ZÝP]Ã4‚Í… ˜¾å‚©¹šÐ)-ÒIEND®B`‚pywcs-1.12/wcslib/html/form_59.png0000644001153600020070000000073212310355626021065 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR^m®ÕA0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfXIDAT(‘•‘¿KÃ@Ç¿—\Ò¦?HÀR ÉPœ‚„N]܃£ƒÍä BýºèœÅE…NBÿ„,îêà(Š›…RDÄ»KÒ\è }ÃËåó>—wï¬dEŠçÏJßÖ®e»=-ûЖzlßã%[¸‚  Û/|”0‚z•úfd» ‰(ß`êŸ>À9ô»…o[õ¸å†ÐÂ^ás`gœúlÞ”„ûu$ÉN9Á)È«Q h‡ô\T1¯ñÖ~\æ7Ç8þÆð† (_Ú³1MÞh±ïÖ>´Ÿ5fçÉÇ<Ó@K—T©FìþÙÿAoê¤Kí÷Ý’¿ßò,vC<ÖT• KA‚eö_üJãIÓa&d°IEND®B`‚pywcs-1.12/wcslib/html/form_6.png0000644001153600020070000000032512310355626020773 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR;x870PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfSIDAT™c`@µÍx  Âàqè‚0ìVAkŒ¿C¯Ó>CŸ™>@¹RC@ i~Æ @†yÃEˆ,?Ã(à jÌZS$7.íºi,8¦IEND®B`‚pywcs-1.12/wcslib/html/form_60.png0000644001153600020070000000025512310355626021055 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRÔ¹0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf+IDAT™c`ÀX¡4ûͱÊŸ •ØW9ÎBˆMƒ±˜Q H\XQÔ™¸IIEND®B`‚pywcs-1.12/wcslib/html/form_61.png0000644001153600020070000000063212310355626021055 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRPJ»†0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfIDAT(‘c` ÈûÉàH³œ_Ìø7EÊç—üU8·!Ìèe`I@5ƒãƒ‚Ço a¼`HB³Œ¯MÁóg-€0>i¢»Š_ionî0Íòu=4DVèõÉ€ÁÄ{Ãô‘Á󃚒] ó¾ɯ œ À62¼ºˆ 8?0T0/@Røœa>s%ƒ(0X>0øƒò+0~z4%€Í„€fÈ;0°j3Ú‚tõ}c˜¨mÿ¶ÿ  <ø'€PöO†ü/ ì|,¼ …‚ Äa0°68 lfd```ç ðDˆÙC}ë5n€ ‚Ëp‚4f:#9¶œ0˜IIEND®B`‚pywcs-1.12/wcslib/html/form_62.png0000644001153600020070000000031312310355626021052 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR6ÝšÀ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfIIDAT™c`@L ÂpŽÿoÖÿ`œ <ñ áR,¯‘u}#“UrÜÌÎüÛÀ`åp‰Ìa`àex`cS)ͼ #Õ™;µÏü¬IEND®B`‚pywcs-1.12/wcslib/html/form_63.png0000644001153600020070000000032212310355626021053 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR?6:º0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfPIDAT™c`Àò~2ø†0y’¡¢üj0þ¬0æÜÜ0æ¦ ~`æ'†W | Ë(³ïÃüC¦ ñ!¬´7„3ŒÁ™¾vIEND®B`‚pywcs-1.12/wcslib/html/form_64.png0000644001153600020070000000025512310355626021061 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRÔ¹0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf+IDAT™c`ÀX¡4ûͱÊŸ •ØW9ÎBˆMƒ±˜Q H\XQÔ™¸IIEND®B`‚pywcs-1.12/wcslib/html/form_65.png0000644001153600020070000000047612310355626021067 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR,Ÿ€ä0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf¼IDAT•c`À ± k ±•̉Œ> ž«8Ò 8Ú'À…0Ù&0&05T1åb˜e `àM`>ÀØðŒ¡››aPD÷ß¿ \ @a†ÿå ßú™w… $ÁÂ>¿@ÂP00ƒ„Y&ø/€ 3<`™Æ›À+ÀøáCD˜KáSH˜;€iÁ,†ka>†  ,ó3îìbà k@x† HÞuÃ" ° c•¢-6ŽIEND®B`‚pywcs-1.12/wcslib/html/form_66.png0000644001153600020070000000036112310355626021061 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDRþ ¢¦0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfoIDAT™c`ÀzïÞ½c36 À8œ Hª¤*Ã9“¸ ìá’ øð.€²ÙXøÀš'0p)ˆ2ã Í@êDÑs† \Pýþ `4ïÿÿ`Û {¡&OÀârysÄÌ,ÌIEND®B`‚pywcs-1.12/wcslib/html/form_67.png0000644001153600020070000000043312310355626021062 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR"Ì\0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf™IDAT•c` °¼{÷®Æ\H²ì ÒÂa^ —ÝÀ1{$4Àr +^]@<Äàd8ÇÐ)fâ5PÖ ÅLŸ "@ƒ¥0ò(@E¤€²9¼IÌP‘b µ(ÌåldIÞ›6ØÃüÿ? Ždy†o’8@æ1+ ‰ û ©Ë¤>Ø6ÞIEND®B`‚pywcs-1.12/wcslib/html/form_68.png0000644001153600020070000000031212310355626021057 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR&:ãG0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfHIDAT™c`@FJL<D1&0/Ñl \ šc%XZ…QL'0ð €è}0à Å”ÌÖ¢Y Ú!€Ù&¯'À†àh{IEND®B`‚pywcs-1.12/wcslib/html/form_69.png0000644001153600020070000000045712310355626021072 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR"Û°W0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf­IDAT•c`À1DÔá,W0=&ÀÆp€CHs8ÀD 2¤y˜$ÀdÀ|€áÁÃÀÀZb°±®c`ØdX10Ø2\2Ø8Ú "G¾ADÀD>0~2ŒøÀ"¼ L8&È00¤1è20›Ì~%ƒA/€!ÙuÃ< @¯0$€\Ðv3¿È½Ì @6Ø©l I glA>ƒt29DNIEND®B`‚pywcs-1.12/wcslib/html/form_7.png0000644001153600020070000000032012310355626020767 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR;x870PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfNIDAT™c`@¯ïPF”1&å/¡9â@l ŒÌPÆö-¡ Æ– @†z)ƒÃˆ¬5óÃÖj¤Ìl˜I¤°0ù¢IEND®B`‚pywcs-1.12/wcslib/html/form_70.png0000644001153600020070000000057312310355626021061 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR4«kAø0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfùIDAT•c` à”aq@°ÅQ¥4• HmÀà20+0 3n``4‰ñb V“NÐ=üÅK¦’¥A%Êh“Æ4 TËŽ ×8p$04Øs*00°ñ3|d°J±¥àXÀ°Œ³(ÅP¶'šñXj3H*<’$µ ,µ”uXê#óg‰ M@÷N`™ð‘aÃE®†2 T§ÉJŸç ùï3`½ÚšÄpƒ!=^€aÌLt205309ø"y’ñ ƒƒ˜éÄÀ1a»Üób® Ì –£«ƒÎ_<5–Mœ¶ IEND®B`‚pywcs-1.12/wcslib/html/form_71.png0000644001153600020070000000025512310355626021057 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR Þ¹°0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf+IDAT™c`@,ª *ðA<ˆ ÝÀ ¢x ØA?CˆâeHQl)]¡¤u½§ö€IEND®B`‚pywcs-1.12/wcslib/html/form_72.png0000644001153600020070000000135512310355626021062 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR¼^¹ 0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfkIDAT8½”MhQÇÿ»›ÝmIVë~@»¬S*9p]âô³?çùø8l‘½ï³O:jˆ~7¡å‰ ”Ê¿ï8*Nw\W¦ ÅÔ~Öø<¿öÂÿo…‰Á-áà-⦠IM*½\zñò7ާߍƒux˜…kâ4NzŒWϘ>Þ÷kûø (<zIŸÌjá´§/€+]$íé ÚëÛi¬}«=¡Înd]Lw‹?4Kô½V' ÛŃ„Í&m±Ú?þ¶Ãv¿íö%4žŸˆûÃDIEND®B`‚pywcs-1.12/wcslib/html/form_73.png0000644001153600020070000000035612310355626021063 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR4«kAø0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØflIDAT•c`À@#V© ÂŒx)Õ8¥œ RŠ B¤XuØ?àbóe8”b™  ¢.Ű”¡‡.†Ì@)æ P ©l` „@Hµ:a8>ëwXŠ‘¤Ð (… ò>$í_cñOIEND®B`‚pywcs-1.12/wcslib/html/form_8.png0000644001153600020070000000025312310355626020775 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR Olú×0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf)IDAT™c```H`€‚F\ŒÌ™¯fN  &£ãfGˆÁ((((À€&V ‘=JgDIEND®B`‚pywcs-1.12/wcslib/html/form_9.png0000644001153600020070000000030012310355626020767 0ustar cslocumSTSCI\science00000000000000‰PNG  IHDR  ®‘é0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf>IDAT™c`€‰ŽŽ]­(3D70¬‹p]€(ˆ…P¬Ÿ ´¿+ˆbúÄ ¢õX誙³&  ›*‚ö¥IEND®B`‚pywcs-1.12/wcslib/html/formula.repository0000644001153600020070000000303512310355626022704 0ustar cslocumSTSCI\science00000000000000\form#0:$(x,y)$ \form#1:$(\alpha,\delta)$ \form#2:$(\phi,\theta)$ \form#3:$\phi_0$ \form#4:$\theta_0$ \form#5:$\phi_{\mathrm p}$ \form#6:$\theta_{\mathrm p}$ \form#7:$\delta_{\mathrm p}$ \form#8:$\pm$ \form#9:$Z$ \form#10:$X$ \form#11:$Z'$ \form#12:$n \times n$ \form#13:$i n + j$ \form#14:$i$ \form#15:$j$ \form#16:$90^\circ$ \form#17:$ (x,y) = f(\phi) g(\theta) $ \form#18:$ \theta $ \form#19:$ g(\theta) $ \form#20:$1^\circ$ \form#21:$10^{-10}$ \form#22:$5^\circ$ \form#23:$-90^\circ$ \form#24:$\phi$ \form#25:$\theta$ \form#26:$[-180^\circ,180^\circ]$ \form#27:$[-90^\circ,90^\circ]$ \form#28:$0^\circ.0000000001$ \form#29:$180^\circ/\pi$ \form#30:$x$ \form#31:$y$ \form#32:$S$ \form#33:$P$ \form#34:$dX/dS$ \form#35:$dS/dX$ \form#36:$G$ \form#37:$m$ \form#38:$\alpha$ \form#39:$n_r$ \form#40:$\lambda_r$ \form#41:$n'_r$ \form#42:$dn/d\lambda$ \form#43:$\epsilon$ \form#44:$X\leadsto P\rightarrow S$ \form#45:$S\rightarrow P\leadsto X$ \form#46:$cos$ \form#47:$sin$ \form#48:$(\alpha_0,+90^\circ-\epsilon)$ \form#49:$(\alpha_0,-90^\circ+\epsilon)$ \form#50:$180^\circ$ \form#51:$0^\circ$ \form#52:$\beta = v/c$ \form#53:$= 1 / 2 \pi$ \form#54:$= 2 \pi$ \form#55:$= 1/h$ \form#56:$= h$ \form#57:$= c$ \form#58:$= 1/c$ \form#59:$(K_1, K_2,... K_M)$ \form#60:$\leq$ \form#61:$K_1 K_2 \ldots K_M$ \form#62:$\Upsilon_m$ \form#63:$K_1$ \form#64:$\le$ \form#65:$\pi/180^\circ$ \form#66:$\sqrt{2}$ \form#67:$1/\sqrt{2}$ \form#68:$\beta$ \form#69:$(\rho,\beta)$ \form#70:$\arg(x,y)$ \form#71:$v$ \form#72:$1 < |v| < 1 + WCSTRIG\_TOL$ \form#73:$|v| == 1$ \form#74:$10^6$ pywcs-1.12/wcslib/html/fortran.html0000644001153600020070000002134212310355626021440 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: WCSLIB Fortran wrappers

      WCSLIB Fortran wrappers

      The Fortran subdirectory contains wrappers, written in C, that allow Fortran programs to use WCSLIB.

      A prerequisite for using the wrappers is an understanding of the usage of the associated C routines, in particular the data structures they are based on. The principle difficulty in creating the wrappers was the need to manage these C structs from within Fortran, particularly as they contain pointers to allocated memory, pointers to C functions, and other structs that themselves contain similar entities.

      To this end, routines have been provided to set and retrieve values of the various structs, for example WCSPUT and WCSGET for the wcsprm struct, and CELPUT and CELGET for the celprm struct. These must be used in conjunction with wrappers on the routines provided to manage the structs in C, for example WCSINI, WCSSUB, WCSCOPY, WCSFREE, and WCSPRT which wrap wcsini(), wcssub(), wcscopy(), wcsfree(), and wcsprt().

      The various *PUT and *GET routines are based on codes defined in Fortran include files (*.inc), if your Fortran compiler does not support the INCLUDE statement then you will need to include these manually wherever necessary. Codes are defined as parameters with names like WCS_CRPIX which refers to wcsprm::crpix (if your Fortran compiler does not support long symbolic names then you will need to rename these).

      The include files also contain parameters, such as WCSLEN, that define the length of an INTEGER array that must be declared to hold the struct. This length may differ for different platforms depending on how the C compiler aligns data within the structs. A test program for the C library, twcs, prints the size of the struct in sizeof(int) units and the values in the Fortran include files must equal or exceed these. On some platforms, such as Suns, it is important that the start of the INTEGER array be aligned on a DOUBLE PRECISION boundary, otherwise a BUS error may result. This may be achieved via an EQUIVALENCE with a DOUBLE PRECISION variable, or by sequencing variables in a COMMON block so that the INTEGER array follows immediately after a DOUBLE PRECISION variable.

      The *PUT routines set only one element of an array at a time; the final one or two integer arguments of these routines specify 1-relative array indices (N.B. not 0-relative as in C). The one exception is the prjprm::pv array.

      The *PUT routines also reset the flag element to signal that the struct needs to be reinitialized. Therefore, if you wanted to set wcsprm::flag itself to -1 prior to the first call to WCSINI, for example, then that WCSPUT must be the last one before the call.

      The *GET routines retrieve whole arrays at a time and expect array arguments of the appropriate length where necessary. Note that they do not initialize the structs.

      A basic coding fragment is

            INTEGER   LNGIDX, STATUS
            CHARACTER CTYPE1*72
      
            INCLUDE 'wcs.inc'
      
      *     WCSLEN is defined as a parameter in wcs.inc.
            INTEGER   WCS(WCSLEN)
            DOUBLE PRECISION DUMMY
            EQUIVALENCE (WCS, DUMMY)
      
      *     Allocate memory and set default values for 2 axes.
            STATUS = WCSPUT (WCS, WCS_FLAG, -1, 0, 0)
            STATUS = WCSINI (2, WCS)
      
      *     Set CRPIX1, and CRPIX2; WCS_CRPIX is defined in wcs.inc.
            STATUS = WCSPUT (WCS, WCS_CRPIX, 512D0, 1, 0)
            STATUS = WCSPUT (WCS, WCS_CRPIX, 512D0, 2, 0)
      
      *     Set PC1_2 to 5.0 (I = 1, J = 2).
            STATUS = WCSPUT (WCS, WCS_PC, 5D0, 1, 2)
      
      *     Set CTYPE1 to 'RA---SIN'; N.B. must be given as CHARACTER*72.
            CTYPE1 = 'RA---SIN'
            STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE1, 1, 0)
      
      *     Set PV1_3 to -1.0 (I = 1, M = 3).
            STATUS = WCSPUT (WCS, WCS_PV, -1D0, 1, 3)
      
            etc.
      
      *     Initialize.
            STATUS = WCSSET (WCS)
            IF (STATUS.NE.0) THEN
              CALL FLUSH(6)
              STATUS = WCSPERR(WCS, CHAR(0))
            ENDIF
      
      *     Find the "longitude" axis.
            STATUS = WCSGET (WCS, WCS_LNG, LNGIDX)
      
      *     Free memory.
            STATUS = WCSFREE (WCS)
      

      Refer to the various Fortran test programs for further programming examples. In particular, twcs and twcsmix show how to retrieve elements of the celprm and prjprm structs contained within the wcsprm struct.

      Note that the data type of the third argument to the *PUT and *GET routines differs depending on the data type of the corresponding C struct member, be it int, double, or char[]. It is essential that the Fortran data type match that of the C struct for int and double types, and be a CHARACTER variable of the correct length for char[] types. Compilers (e.g. g77) may warn of inconsistent usage of this argument but this can (usually) be safely ignored. If these warnings become annoying, type-specific variants are provided for each of the *PUT routines, *PTI, *PTD, and *PTC for int, double, or char[] and likewise *GTI, *GTD, and *GTC for the *GET routines.

      When calling wrappers for C functions that print to stdout, such as WCSPRT, and WCSPERR, or that may print to stderr, such as WCSPIH, WCSBTH, WCSULEXE, or WCSUTRNE, it may be necessary to flush the Fortran I/O buffers beforehand so that the output appears in the correct order. The wrappers for these functions do call fflush(NULL), but depending on the particular system, this may not succeed in flushing the Fortran I/O buffers. Most Fortran compilers provide the non-standard intrinsic FLUSH(), which is called with unit number 6 to flush stdout (as in the example above), and unit 0 for stderr.

      A basic assumption made by the wrappers is that an INTEGER variable is no less than half the size of a DOUBLE PRECISION.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions.html0000644001153600020070000000733112310355626021777 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - a -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x62.html0000644001153600020070000000667612310355626022571 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - b -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x63.html0000644001153600020070000001320112310355626022550 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - c -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x64.html0000644001153600020070000001436212310355626022562 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - d -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x65.html0000644001153600020070000001113512310355626022556 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - e -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x66.html0000644001153600020070000001020212310355626022551 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - f -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x67.html0000644001153600020070000000654012310355626022564 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - g -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x69.html0000644001153600020070000001024012310355626022556 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - i -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x6b.html0000644001153600020070000000763712310355626022647 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - k -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x6c.html0000644001153600020070000001027012310355626022633 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - l -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x6d.html0000644001153600020070000001623212310355626022640 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - m -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x6e.html0000644001153600020070000001067012310355626022641 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - n -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x6f.html0000644001153600020070000000670012310355626022641 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - o -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x70.html0000644001153600020070000001257212310355626022560 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - p -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x72.html0000644001153600020070000001021512310355626022552 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - r -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x73.html0000644001153600020070000001122312310355626022553 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - s -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x74.html0000644001153600020070000000760512310355626022565 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - t -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x75.html0000644001153600020070000000667712310355626022576 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - u -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x76.html0000644001153600020070000001012212310355626022553 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - v -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x77.html0000644001153600020070000000761412310355626022570 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - w -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x78.html0000644001153600020070000000653412310355626022571 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - x -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x79.html0000644001153600020070000000653412310355626022572 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - y -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_0x7a.html0000644001153600020070000000667712310355626022652 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all struct and union fields with links to the structures/unions they belong to:

      - z -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars.html0000644001153600020070000000737512310355626023042 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - a -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x62.html0000644001153600020070000000674212310355626023616 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - b -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x63.html0000644001153600020070000001324512310355626023613 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - c -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x64.html0000644001153600020070000001442612310355626023616 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - d -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x65.html0000644001153600020070000001120112310355626023603 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - e -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x66.html0000644001153600020070000001024612310355626023614 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - f -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x67.html0000644001153600020070000000660412310355626023620 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - g -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x69.html0000644001153600020070000001030412310355626023612 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - i -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x6b.html0000644001153600020070000000770312310355626023674 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - k -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x6c.html0000644001153600020070000001033412310355626023667 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - l -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x6d.html0000644001153600020070000001627612310355626023703 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - m -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x6e.html0000644001153600020070000001073412310355626023675 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - n -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x6f.html0000644001153600020070000000674412310355626023704 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - o -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x70.html0000644001153600020070000001263612310355626023614 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - p -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x72.html0000644001153600020070000001026112310355626023606 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - r -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x73.html0000644001153600020070000001126712310355626023616 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - s -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x74.html0000644001153600020070000000765112310355626023621 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - t -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x75.html0000644001153600020070000000674312310355626023623 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - u -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x76.html0000644001153600020070000001016612310355626023616 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - v -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x77.html0000644001153600020070000000766012310355626023624 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - w -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x78.html0000644001153600020070000000660012310355626023616 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - x -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x79.html0000644001153600020070000000660012310355626023617 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - y -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/functions_vars_0x7a.html0000644001153600020070000000674312310355626023677 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields - Variables
       

      - z -


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/getwcstab_8h-source.html0000644001153600020070000005166612310355626023661 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: getwcstab.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/getwcstab_8h.html0000644001153600020070000002304512310355626022351 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: getwcstab.h File Reference

      getwcstab.h File Reference

      #include <fitsio.h>

      Go to the source code of this file.

      Data Structures

      struct  wtbarr
       Extraction of coordinate lookup tables from BINTABLE. More...

      Functions

      int fits_read_wcstab (fitsfile *fptr, int nwtb, wtbarr *wtb, int *status)
       FITS 'TAB' table reading routine.


      Detailed Description

      fits_read_wcstab(), an implementation of a FITS table reading routine for 'TAB' coordinates, is provided for CFITSIO programmers. It has been incorporated into CFITSIO as of v3.006 with the definitions in this file, getwcstab.h, moved into fitsio.h.

      fits_read_wcstab() is not included in the WCSLIB object library but the source code is presented here as it may be useful for programmers using an older version of CFITSIO than 3.006, or as a programming template for non-CFITSIO programmers.


      Function Documentation

      int fits_read_wcstab ( fitsfile *  fptr,
      int  nwtb,
      wtbarr wtb,
      int *  status 
      )

      fits_read_wcstab() extracts arrays from a binary table required in constructing 'TAB' coordinates.

      Parameters:
      [in] fptr Pointer to the file handle returned, for example, by the fits_open_file() routine in CFITSIO.
      [in] nwtb Number of arrays to be read from the binary table(s).
      [in,out] wtb Address of the first element of an array of wtbarr typedefs. This wtbarr typedef is defined to match the wtbarr struct defined in WCSLIB. An array of such structs returned by the WCSLIB function wcstab() as discussed in the notes below.
      [out] status CFITSIO status value.
      Returns:
      CFITSIO status value.
      Notes:
      In order to maintain WCSLIB and CFITSIO as independent libraries it is not permissible for any CFITSIO library code to include WCSLIB header files, or vice versa. However, the CFITSIO function fits_read_wcstab() accepts an array of wtbarr structs defined in wcs.h within WCSLIB.

      The problem therefore is to define the wtbarr struct within fitsio.h without including wcs.h, especially noting that wcs.h will often (but not always) be included together with fitsio.h in an applications program that uses fits_read_wcstab().

      The solution adopted is for WCSLIB to define "struct wtbarr" while fitsio.h defines "typedef wtbarr" as an untagged struct with identical members. This allows both wcs.h and fitsio.h to define a wtbarr data type without conflict by virtue of the fact that structure tags and typedef names share different name spaces in C; Appendix A, Sect. A11.1 (p227) of the K&R ANSI edition states that:

      Identifiers fall into several name spaces that do not interfere with one another; the same identifier may be used for different purposes, even in the same scope, if the uses are in different name spaces. These classes are: objects, functions, typedef names, and enum constants; labels; tags of structures, unions, and enumerations; and members of each structure or union individually.

      Therefore, declarations within WCSLIB look like

            struct wtbarr *w;
      

      while within CFITSIO they are simply

            wtbarr *w;
      

      As suggested by the commonality of the names, these are really the same aggregate data type. However, in passing a (struct wtbarr *) to fits_read_wcstab() a cast to (wtbarr *) is formally required.

      When using WCSLIB and CFITSIO together in C++ the situation is complicated by the fact that typedefs and structs share the same namespace; C++ Annotated Reference Manual, Sect. 7.1.3 (p105). In that case the wtbarr struct in wcs.h is renamed by preprocessor macro substitution to wtbarr_s to distinguish it from the typedef defined in fitsio.h. However, the scope of this macro substitution is limited to wcs.h itself and CFITSIO programmer code, whether in C++ or C, should always use the wtbarr typedef.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals.html0000644001153600020070000001233412310355626021411 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - a -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x62.html0000644001153600020070000000741112310355626022170 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - b -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x63.html0000644001153600020070000002137012310355626022171 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - c -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x64.html0000644001153600020070000000727112310355626022176 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - d -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x65.html0000644001153600020070000000712712310355626022177 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - e -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x66.html0000644001153600020070000001600412310355626022172 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - f -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x68.html0000644001153600020070000000740612310355626022202 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - h -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x69.html0000644001153600020070000000677312310355626022211 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - i -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x6b.html0000644001153600020070000000713712310355626022255 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - k -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x6c.html0000644001153600020070000001474612310355626022262 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - l -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x6d.html0000644001153600020070000001003012310355626022241 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - m -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x6e.html0000644001153600020070000000677312310355626022265 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - n -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x70.html0000644001153600020070000001525612310355626022175 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - p -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x71.html0000644001153600020070000000740712310355626022175 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - q -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x72.html0000644001153600020070000000677112310355626022201 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - r -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x73.html0000644001153600020070000002240512310355626022172 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - s -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x74.html0000644001153600020070000001467512310355626022205 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - t -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x75.html0000644001153600020070000001323712310355626022177 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - u -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x76.html0000644001153600020070000000771112310355626022200 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - v -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x77.html0000644001153600020070000004460712310355626022206 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - w -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_0x7a.html0000644001153600020070000001016512310355626022250 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
      Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:

      - z -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_defs.html0000644001153600020070000003755112310355626022422 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
       

      - c -

      - d -

      - e -

      - f -

      - k -

      - l -

      - n -

      - p -

      - r -

      - s -

      - t -

      - u -

      - w -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_func.html0000644001153600020070000001165712310355626022433 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
       

      - a -


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_type.html0000644001153600020070000000354412310355626022455 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
       


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/globals_vars.html0000644001153600020070000001014112310355626022436 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Data Fields
       


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/index.html0000644001153600020070000000612012310355626021071 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: WCSLIB 4.10 and PGSBOX 4.10

      WCSLIB 4.10 and PGSBOX 4.10

      Bonne.gif

      Bonne's projection

      Contents

      Copyright

        WCSLIB 4.10 - an implementation of the FITS WCS standard.
        Copyright (C) 1995-2012, Mark Calabretta
      
        WCSLIB is free software: you can redistribute it and/or modify it under the
        terms of the GNU Lesser General Public License as published by the Free
        Software Foundation, either version 3 of the License, or (at your option)
        any later version.
      
        WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY
        WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
        FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
        more details.
      
        You should have received a copy of the GNU Lesser General Public License
        along with WCSLIB.  If not, see <http://www.gnu.org/licenses/>.
      
        Correspondence concerning WCSLIB may be directed to:
          Internet email: mcalabre@atnf.csiro.au
          Postal address: Dr. Mark Calabretta
                          Australia Telescope National Facility, CSIRO
                          PO Box 76
                          Epping NSW 1710
                          AUSTRALIA
      

      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/intro.html0000644001153600020070000000626212310355626021124 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Introduction

      Introduction

      WCSLIB is a C library, supplied with a full set of Fortran wrappers, that implements the "World Coordinate System" (WCS) standard in FITS (Flexible Image Transport System). It also includes a PGPLOT-based routine, PGSBOX, for drawing general curvilinear coordinate graticules and a number of utility programs.

      The FITS data format is widely used within the international astronomical community, from the radio to gamma-ray regimes, for data interchange and archive, and also increasingly as an online format. It is described in

      • "Definition of The Flexible Image Transport System (FITS)", FITS Standard, Version 3.0, 2008 July 10.

      available from the FITS Support Office at http://fits.gsfc.nasa.gov.

      The FITS WCS standard is described in

      • "Representations of world coordinates in FITS" (Paper I), Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061-1075

      • "Representations of celestial coordinates in FITS" (Paper II), Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077-1122

      • "Representations of spectral coordinates in FITS" (Paper III), Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. 2006, A&A, 446, 747

      • "Mapping on the HEALPix Grid" (HPX), Calabretta, M.R., & Roukema, B.F. 2007, MNRAS, 381, 865

      Reprints of all published papers may be obtained from NASA's Astrophysics Data System (ADS), http://adsabs.harvard.edu/. Reprints of Papers I, II (+HPX) and III are available from http://www.atnf.csiro.au/~mcalabre/. This site also includes errata and supplementary material for Papers I, II and III.

      Additional information on all aspects of FITS and its various software implementations may be found at the FITS Support Office http://fits.gsfc.nasa.gov.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/lin_8h-source.html0000644001153600020070000014305412310355626022451 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: lin.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/lin_8h.html0000644001153600020070000012313212310355626021146 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: lin.h File Reference

      lin.h File Reference

      #include "wcserr.h"

      Go to the source code of this file.

      Data Structures

      struct  linprm
       Linear transformation parameters. More...

      Defines

      #define LINLEN   (sizeof(struct linprm)/sizeof(int))
       Size of the linprm struct in int units.
      #define linini_errmsg   lin_errmsg
       Deprecated.
      #define lincpy_errmsg   lin_errmsg
       Deprecated.
      #define linfree_errmsg   lin_errmsg
       Deprecated.
      #define linprt_errmsg   lin_errmsg
       Deprecated.
      #define linset_errmsg   lin_errmsg
       Deprecated.
      #define linp2x_errmsg   lin_errmsg
       Deprecated.
      #define linx2p_errmsg   lin_errmsg
       Deprecated.

      Enumerations

      enum  lin_errmsg_enum { LINERR_SUCCESS = 0, LINERR_NULL_POINTER = 1, LINERR_MEMORY = 2, LINERR_SINGULAR_MTX = 3 }

      Functions

      int linini (int alloc, int naxis, struct linprm *lin)
       Default constructor for the linprm struct.
      int lincpy (int alloc, const struct linprm *linsrc, struct linprm *lindst)
       Copy routine for the linprm struct.
      int linfree (struct linprm *lin)
       Destructor for the linprm struct.
      int linprt (const struct linprm *lin)
       Print routine for the linprm struct.
      int linset (struct linprm *lin)
       Setup routine for the linprm struct.
      int linp2x (struct linprm *lin, int ncoord, int nelem, const double pixcrd[], double imgcrd[])
       Pixel-to-world linear transformation.
      int linx2p (struct linprm *lin, int ncoord, int nelem, const double imgcrd[], double pixcrd[])
       World-to-pixel linear transformation.
      int matinv (int n, const double mat[], double inv[])
       Matrix inversion.

      Variables

      const char * lin_errmsg []
       Status return messages.


      Detailed Description

      These routines apply the linear transformation defined by the FITS WCS standard. They are based on the linprm struct which contains all information needed for the computations. The struct contains some members that must be set by the user, and others that are maintained by these routines, somewhat like a C++ class but with no encapsulation.

      Three routines, linini(), lincpy(), and linfree() are provided to manage the linprm struct, and another, linprt(), prints its contents.

      A setup routine, linset(), computes intermediate values in the linprm struct from parameters in it that were supplied by the user. The struct always needs to be set up by linset() but need not be called explicitly - refer to the explanation of linprm::flag.

      linp2x() and linx2p() implement the WCS linear transformations.

      An auxiliary matrix inversion routine, matinv(), is included. It uses LU-triangular factorization with scaled partial pivoting.


      Define Documentation

      #define LINLEN   (sizeof(struct linprm)/sizeof(int))

      Size of the linprm struct in int units, used by the Fortran wrappers.

      #define linini_errmsg   lin_errmsg

      Deprecated:
      Added for backwards compatibility, use lin_errmsg directly now instead.

      #define lincpy_errmsg   lin_errmsg

      Deprecated:
      Added for backwards compatibility, use lin_errmsg directly now instead.

      #define linfree_errmsg   lin_errmsg

      Deprecated:
      Added for backwards compatibility, use lin_errmsg directly now instead.

      #define linprt_errmsg   lin_errmsg

      Deprecated:
      Added for backwards compatibility, use lin_errmsg directly now instead.

      #define linset_errmsg   lin_errmsg

      Deprecated:
      Added for backwards compatibility, use lin_errmsg directly now instead.

      #define linp2x_errmsg   lin_errmsg

      Deprecated:
      Added for backwards compatibility, use lin_errmsg directly now instead.

      #define linx2p_errmsg   lin_errmsg

      Deprecated:
      Added for backwards compatibility, use lin_errmsg directly now instead.


      Enumeration Type Documentation

      Enumerator:
      LINERR_SUCCESS 
      LINERR_NULL_POINTER 
      LINERR_MEMORY 
      LINERR_SINGULAR_MTX 


      Function Documentation

      int linini ( int  alloc,
      int  naxis,
      struct linprm lin 
      )

      linini() allocates memory for arrays in a linprm struct and sets all members of the struct to default values.

      PLEASE NOTE: every linprm struct should be initialized by linini(), possibly repeatedly. On the first invokation, and only the first invokation, linprm::flag must be set to -1 to initialize memory management, regardless of whether linini() will actually be used to allocate memory.

      Parameters:
      [in] alloc If true, allocate memory unconditionally for arrays in the linprm struct.
      If false, it is assumed that pointers to these arrays have been set by the user except if they are null pointers in which case memory will be allocated for them regardless. (In other words, setting alloc true saves having to initalize these pointers to zero.)
      [in] naxis The number of world coordinate axes, used to determine array sizes.
      [in,out] lin Linear transformation parameters. Note that, in order to initialize memory management linprm::flag should be set to -1 when lin is initialized for the first time (memory leaks may result if it had already been initialized).
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null linprm pointer passed.
      • 2: Memory allocation failed.
      For returns > 1, a detailed error message is set in linprm::err if enabled, see wcserr_enable().

      int lincpy ( int  alloc,
      const struct linprm linsrc,
      struct linprm lindst 
      )

      lincpy() does a deep copy of one linprm struct to another, using linini() to allocate memory for its arrays if required. Only the "information to be provided" part of the struct is copied; a call to linset() is required to initialize the remainder.

      Parameters:
      [in] alloc If true, allocate memory for the crpix, pc, and cdelt arrays in the destination. Otherwise, it is assumed that pointers to these arrays have been set by the user except if they are null pointers in which case memory will be allocated for them regardless.
      [in] linsrc Struct to copy from.
      [in,out] lindst Struct to copy to. linprm::flag should be set to -1 if lindst was not previously initialized (memory leaks may result if it was previously initialized).
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null linprm pointer passed.
      • 2: Memory allocation failed.
      For returns > 1, a detailed error message is set in linprm::err if enabled, see wcserr_enable().

      int linfree ( struct linprm lin  ) 

      linfree() frees memory allocated for the linprm arrays by linini() and/or linset(). linini() keeps a record of the memory it allocates and linfree() will only attempt to free this.

      PLEASE NOTE: linfree() must not be invoked on a linprm struct that was not initialized by linini().

      Parameters:
      [in] lin Linear transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null linprm pointer passed.

      int linprt ( const struct linprm lin  ) 

      linprt() prints the contents of a linprm struct using wcsprintf(). Mainly intended for diagnostic purposes.

      Parameters:
      [in] lin Linear transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null linprm pointer passed.

      int linset ( struct linprm lin  ) 

      linset(), if necessary, allocates memory for the linprm::piximg and linprm::imgpix arrays and sets up the linprm struct according to information supplied within it - refer to the explanation of linprm::flag.

      Note that this routine need not be called directly; it will be invoked by linp2x() and linx2p() if the linprm::flag is anything other than a predefined magic value.

      Parameters:
      [in,out] lin Linear transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null linprm pointer passed.
      • 2: Memory allocation failed.
      • 3: PCi_ja matrix is singular.
      For returns > 1, a detailed error message is set in linprm::err if enabled, see wcserr_enable().

      int linp2x ( struct linprm lin,
      int  ncoord,
      int  nelem,
      const double  pixcrd[],
      double  imgcrd[] 
      )

      linp2x() transforms pixel coordinates to intermediate world coordinates.

      Parameters:
      [in,out] lin Linear transformation parameters.
      [in] ncoord,nelem The number of coordinates, each of vector length nelem but containing lin.naxis coordinate elements.
      [in] pixcrd Array of pixel coordinates.
      [out] imgcrd Array of intermediate world coordinates.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null linprm pointer passed.
      • 2: Memory allocation failed.
      • 3: PCi_ja matrix is singular.
      For returns > 1, a detailed error message is set in linprm::err if enabled, see wcserr_enable().

      int linx2p ( struct linprm lin,
      int  ncoord,
      int  nelem,
      const double  imgcrd[],
      double  pixcrd[] 
      )

      linx2p() transforms intermediate world coordinates to pixel coordinates.

      Parameters:
      [in,out] lin Linear transformation parameters.
      [in] ncoord,nelem The number of coordinates, each of vector length nelem but containing lin.naxis coordinate elements.
      [in] imgcrd Array of intermediate world coordinates.
      [out] pixcrd Array of pixel coordinates. Status return value:
      • 0: Success.
      • 1: Null linprm pointer passed.
      • 2: Memory allocation failed.
      • 3: PCi_ja matrix is singular.
      For returns > 1, a detailed error message is set in linprm::err if enabled, see wcserr_enable().

      matinv ( int  n,
      const double  mat[],
      double  inv[] 
      )

      matinv() performs matrix inversion using LU-triangular factorization with scaled partial pivoting.

      Parameters:
      [in] n Order of the matrix ($n \times n$).
      [in] mat Matrix to be inverted, stored as mat[$i n + j$] where $i$ and $j$ are the row and column indices respectively.
      [out] inv Inverse of mat with the same storage convention.
      Returns:
      Status return value:
      • 0: Success.
      • 2: Memory allocation failed.
      • 3: Singular matrix.


      Variable Documentation

      const char * lin_errmsg[]

      Error messages to match the status value returned from each function.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/log_8h-source.html0000644001153600020070000004465412310355626022456 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: log.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/log_8h.html0000644001153600020070000003324512310355626021152 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: log.h File Reference

      log.h File Reference

      Go to the source code of this file.

      Enumerations

      enum  log_errmsg_enum {
        LOGERR_SUCCESS = 0, LOGERR_NULL_POINTER = 1, LOGERR_BAD_LOG_REF_VAL = 2, LOGERR_BAD_X = 3,
        LOGERR_BAD_WORLD = 4
      }

      Functions

      int logx2s (double crval, int nx, int sx, int slogc, const double x[], double logc[], int stat[])
       Transform to logarithmic coordinates.
      int logs2x (double crval, int nlogc, int slogc, int sx, const double logc[], double x[], int stat[])
       Transform logarithmic coordinates.

      Variables

      const char * log_errmsg []
       Status return messages.


      Detailed Description

      These routines implement the part of the FITS WCS standard that deals with logarithmic coordinates. They define methods to be used for computing logarithmic world coordinates from intermediate world coordinates (a linear transformation of image pixel coordinates), and vice versa.

      logx2s() and logs2x() implement the WCS logarithmic coordinate transformations.

      Argument checking:
      The input log-coordinate values are only checked for values that would result in floating point exceptions and the same is true for the log-coordinate reference value.

      Accuracy:
      No warranty is given for the accuracy of these routines (refer to the copyright notice); intending users must satisfy for themselves their adequacy for the intended purpose. However, closure effectively to within double precision rounding error was demonstrated by test routine tlog.c which accompanies this software.


      Enumeration Type Documentation

      Enumerator:
      LOGERR_SUCCESS 
      LOGERR_NULL_POINTER 
      LOGERR_BAD_LOG_REF_VAL 
      LOGERR_BAD_X 
      LOGERR_BAD_WORLD 


      Function Documentation

      int logx2s ( double  crval,
      int  nx,
      int  sx,
      int  slogc,
      const double  x[],
      double  logc[],
      int  stat[] 
      )

      logx2s() transforms intermediate world coordinates to logarithmic coordinates.

      Parameters:
      [in,out] crval Log-coordinate reference value (CRVALia).
      [in] nx Vector length.
      [in] sx Vector stride.
      [in] slogc Vector stride.
      [in] x Intermediate world coordinates, in SI units.
      [out] logc Logarithmic coordinates, in SI units.
      [out] stat Status return value status for each vector element:
      • 0: Success.
      Returns:
      Status return value:
      • 0: Success.
      • 2: Invalid log-coordinate reference value.

      int logs2x ( double  crval,
      int  nlogc,
      int  slogc,
      int  sx,
      const double  logc[],
      double  x[],
      int  stat[] 
      )

      logs2x() transforms logarithmic world coordinates to intermediate world coordinates.

      Parameters:
      [in,out] crval Log-coordinate reference value (CRVALia).
      [in] nlogc Vector length.
      [in] slogc Vector stride.
      [in] sx Vector stride.
      [in] logc Logarithmic coordinates, in SI units.
      [out] x Intermediate world coordinates, in SI units.
      [out] stat Status return value status for each vector element:
      • 0: Success.
      • 1: Invalid value of logc.
      Returns:
      Status return value:
      • 0: Success.
      • 2: Invalid log-coordinate reference value.
      • 4: One or more of the world-coordinate values are incorrect, as indicated by the stat vector.


      Variable Documentation

      const char * log_errmsg[]

      Error messages to match the status value returned from each function.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/memory.html0000644001153600020070000002120012310355626021266 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Memory management

      Memory management

      The initialization routines for certain of the WCSLIB data structures allocate memory for some of their members:

      • wcsini() optionally allocates memory for the crpix, pc, cdelt, crval, cunit, ctype, pv, ps, cd, crota, colax, cname, crder, and csyer arrays in the wcsprm struct (using linini() for certain of these). Note that wcsini() does not allocate memory for the tab array - refer to the usage notes for wcstab() in wcshdr.h. If the pc matrix is not unity, wcsset() (via linset()) also allocates memory for the piximg and imgpix arrays.

      • linini(): optionally allocates memory for the crpix, pc, and cdelt arrays in the linprm struct. If the pc matrix is not unity, linset() also allocates memory for the piximg and imgpix arrays. Typically these would be used by wcsini() and wcsset().

      • tabini(): optionally allocates memory for the K, map, crval, index, and coord arrays (including the arrays referenced by index[]) in the tabprm struct. tabmem() takes control of any of these arrays that may have been allocated by the user, specifically in that tabfree() will then free it. tabset() also allocates memory for the sense, p0, delta and extrema arrays.

      The caller may load data into these arrays but must not modify the struct members (i.e. the pointers) themselves or else memory leaks will result.

      wcsini() maintains a record of memory it has allocated and this is used by wcsfree() which wcsini() uses to free any memory that it may have allocated on a previous invokation. Thus it is not necessary for the caller to invoke wcsfree() separately if wcsini() is invoked repeatedly on the same wcsprm struct. Likewise, wcsset() deallocates memory that it may have allocated on a previous invokation. The same comments apply to linini(), linfree(), and linset() and to tabini(), tabfree(), and tabset().

      A memory leak will result if a wcsprm, linprm or tabprm struct goes out of scope before the memory has been free'd, either by the relevant routine, wcsfree(), linfree() or tabfree(), or otherwise. Likewise, if one of these structs itself has been malloc'd and the allocated memory is not free'd when the memory for the struct is free'd. A leak may also arise if the caller interferes with the array pointers in the "private" part of these structs.

      Beware of making a shallow copy of a wcsprm, linprm or tabprm struct by assignment; any changes made to allocated memory in one would be reflected in the other, and if the memory allocated for one was free'd the other would reference unallocated memory. Use the relevant routine instead to make a deep copy: wcssub(), lincpy() or tabcpy().


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/overview.html0000644001153600020070000003030612310355626021633 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Overview of WCSLIB

      Overview of WCSLIB

      WCSLIB is documented in the prologues of its header files which provide a detailed description of the purpose of each function and its interface (this material is, of course, used to generate the doxygen manual). Here we explain how the library as a whole is structured. We will normally refer to WCSLIB 'routines', meaning C functions or Fortran 'subroutines', though the latter are actually wrappers implemented in C.

      WCSLIB is layered software, each layer depends only on those beneath; understanding WCSLIB first means understanding its stratigraphy. There are essentially three levels, though some intermediate levels exist within these:

      • The top layer consists of routines that provide the connection between FITS files and the high-level WCSLIB data structures, the main function being to parse a FITS header, extract WCS information, and copy it into a wcsprm struct. The lexical parsers among these are implemented as Flex descriptions (source files with .l suffix) and the C code generated from these by Flex is included in the source distribution.
        • wcshdr.h,c -- Routines for constructing wcsprm data structures from information in a FITS header and conversely for writing a wcsprm struct out as a FITS header.
        • wcspih.l -- Flex implementation of wcspih(), a lexical parser for WCS "keyrecords" in an image header. A keyrecord (formerly called "card image") consists of a keyword, its value - the keyvalue - and an optional comment, the keycomment.
        • wcsbth.l -- Flex implementation of wcsbth() which parses binary table image array and pixel list headers in addition to image array headers.
        • getwcstab.h,c -- Implementation of a -TAB binary table reader in CFITSIO.

        A generic FITS header parser is also provided to handle non-WCS keyrecords that are ignored by wcspih():
        • fitshdr.h,l -- Generic FITS header parser (not WCS-specific).

        The philosophy adopted for dealing with non-standard WCS usage is to translate it at this level so that the middle- and low-level routines need only deal with standard constructs:
        • wcsfix.h,c -- Translator for non-standard FITS WCS constructs (uses wcsutrne()).
        • wcsutrn.l -- Lexical translator for non-standard units specifications.

        As a concrete example, within this layer the CTYPEia keyvalues would be extracted from a FITS header and copied into the ctype[] array within a wcsprm struct. None of the header keyrecords are interpreted.

      • The middle layer analyses the WCS information obtained from the FITS header by the top-level routines, identifying the separate steps of the WCS algorithm chain for each of the coordinate axes in the image. It constructs the various data structures on which the low-level routines are based and invokes them in the correct sequence. Thus the wcsprm struct is essentially the glue that binds together the low-level routines into a complete coordinate description.
        • wcs.h,c -- Driver routines for the low-level routines.
        • wcsunits.h,c -- Unit conversions (uses wcsulexe()).
        • wcsulex.l -- Lexical parser for units specifications.

        To continue the above example, within this layer the ctype[] keyvalues in a wcsprm struct are analysed to determine the nature of the coordinate axes in the image.

      • Applications programmers who use the top- and middle-level routines generally need know nothing about the low-level routines. These are essentially mathematical in nature and largely independent of FITS itself. The mathematical formulae and algorithms cited in the WCS Papers, for example the spherical projection equations of Paper II and the lookup-table methods of Paper III, are implemented by the routines in this layer, some of which serve to aggregate others:
        • cel.h,c -- Celestial coordinate transformations, combines prj.h,c and sph.h,c.
        • spc.h,c -- Spectral coordinate transformations, combines transformations from spx.h,c.

        The remainder of the routines in this level are independent of everything other than the grass-roots mathematical functions:
        • lin.h,c -- Linear transformation matrix.
        • log.h,c -- Logarithmic coordinates.
        • prj.h,c -- Spherical projection equations.
        • sph.h,c -- Spherical coordinate transformations.
        • spx.h,c -- Basic spectral transformations.
        • tab.h,c -- Coordinate lookup tables.

        As the routines within this layer are quite generic, some, principally the implementation of the spherical projection equations, have been used in other packages (AST, wcstools) that provide their own implementations of the functionality of the top and middle-level routines.

      • At the grass-roots level there are a number of mathematical and utility routines.

        When dealing with celestial coordinate systems it is often desirable to use an angular measure that provides an exact representation of the latitude of the north or south pole. The WCSLIB routines use the following trigonometric functions that take or return angles in degrees:
        These "trigd" routines are expected to handle angles that are a multiple of $90^\circ$ returning an exact result. Some C implementations provide these as part of a system library and in such cases it may (or may not!) be preferable to use them. wcstrig.c provides wrappers on the standard trig functions based on radian measure, adding tests for multiples of $90^\circ$.

        However, wcstrig.h also provides the choice of using preprocessor macro implementations of the trigd functions that don't test for multiples of $90^\circ$ (compile with -DWCSTRIG_MACRO). These are typically 20% faster but may lead to problems near the poles.
        • wcsmath.h -- Defines mathematical and other constants.
        • wcstrig.h,c -- Various implementations of trigd functions.
        • wcsutil.h,c -- Simple utility functions for string manipulation, etc. used by WCSLIB.

      Complementary to the C library, a set of wrappers are provided that allow all WCSLIB C functions to be called by Fortran programs, see below.

      Plotting of coordinate graticules is one of the more important requirements of a world coordinate system. WCSLIB provides a PGPLOT-based subroutine, PGSBOX (Fortran), which handles general curvilinear coordinates via a user-supplied function - PGWCSL provides the interface to WCSLIB. A C wrapper, cpgsbox(), is also provided, see below.

      Several utility programs are distributed with WCSLIB:

      • wcsgrid extracts the WCS keywords for an image from the specified FITS file and uses cpgsbox() to plot a 2-D coordinate graticule for it. It requires WCSLIB, PGSBOX and CFITSIO.

      • wcsware extracts the WCS keywords for an image from the specified FITS file and constructs wcsprm structs for each coordinate representation found. The structs may then be printed or used to transform pixel coordinates to world coordinates. It requires WCSLIB and CFITSIO.

      • HPXcvt reorganises HEALPix data into a 2-D FITS image with HPX coordinate system. The input data may be stored in a FITS file as a primary image or image extension, or as a binary table extension. Both NESTED and RING pixel indices are supported. It uses CFITSIO.

      • fitshdr lists headers from a FITS file specified on the command line, or else on stdin, printing them as 80-character keyrecords without trailing blanks. It is independent of WCSLIB.

      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/pages.html0000644001153600020070000000223112310355626021060 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Page Index

      Related Pages

      Here is a list of all related documentation pages:

      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/pgsbox.html0000644001153600020070000000667412310355626021302 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: PGSBOX

      PGSBOX

      PGSBOX, which is provided as a separate part of WCSLIB, is a PGPLOT routine (PGPLOT being a Fortran graphics library) that draws and labels curvilinear coordinate grids. Example PGSBOX grids can be seen at http://www.atnf.csiro.au/~mcalabre/WCS/PGSBOX/index.html.

      The prologue to pgsbox.f contains usage instructions. pgtest.f and cpgtest.c serve as test and demonstration programs in Fortran and C and also as well- documented examples of usage.

      PGSBOX requires a separate routine, EXTERNAL NLFUNC, to define the coordinate transformation. Fortran subroutine PGCRFN (pgcrfn.f) is provided to define separable pairs of non-linear coordinate systems. Linear, logarithmic and power-law axis types are currently defined; further types may be added as required. A C function, pgwcsl_(), with Fortran-like interface defines an NLFUNC that interfaces to WCSLIB 4.x for PGSBOX to draw celestial coordinate grids.

      PGPLOT is implemented as a Fortran library with a set of C wrapper routines that are generated by a software tool. However, PGSBOX has a more complicated interface than any of the standard PGPLOT routines, especially in having an EXTERNAL function in its argument list. Consequently, PGSBOX is implemented in Fortran but with a hand-coded C wrapper, cpgsbox().

      As an example, in this suite the C test/demo program, cpgtest, calls the C wrapper, cpgsbox(), passing it a pointer to pgwcsl_(). In turn, cpgsbox() calls PGSBOX, which invokes pgwcsl_() as an EXTERNAL subroutine. In this sequence, a complicated C struct defined by cpgtest is passed through PGSBOX to pgwcsl_() as an INTEGER array.

      While there are no formal standards for calling Fortran from C, there are some fairly well established conventions. Nevertheless, it's possible that you may need to modify the code if you use a combination of Fortran and C compilers with linkage conventions that differ from that of the GNU compilers, gcc and g77.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/prj_8h-source.html0000644001153600020070000031330212310355626022455 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: prj.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/prj_8h.html0000644001153600020070000055020112310355626021160 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: prj.h File Reference

      prj.h File Reference

      #include "wcserr.h"

      Go to the source code of this file.

      Data Structures

      struct  prjprm
       Projection parameters. More...

      Defines

      #define PVN   30
       Total number of projection parameters.
      #define PRJX2S_ARGS
       For use in declaring deprojection function prototypes.
      #define PRJS2X_ARGS
       For use in declaring projection function prototypes.
      #define PRJLEN   (sizeof(struct prjprm)/sizeof(int))
       Size of the prjprm struct in int units.
      #define prjini_errmsg   prj_errmsg
       Deprecated.
      #define prjprt_errmsg   prj_errmsg
       Deprecated.
      #define prjset_errmsg   prj_errmsg
       Deprecated.
      #define prjx2s_errmsg   prj_errmsg
       Deprecated.
      #define prjs2x_errmsg   prj_errmsg
       Deprecated.

      Enumerations

      enum  prj_errmsg_enum {
        PRJERR_SUCCESS = 0, PRJERR_NULL_POINTER = 1, PRJERR_BAD_PARAM = 2, PRJERR_BAD_PIX = 3,
        PRJERR_BAD_WORLD = 4
      }

      Functions

      int prjini (struct prjprm *prj)
       Default constructor for the prjprm struct.
      int prjfree (struct prjprm *prj)
       Destructor for the prjprm struct.
      int prjprt (const struct prjprm *prj)
       Print routine for the prjprm struct.
      int prjset (struct prjprm *prj)
       Generic setup routine for the prjprm struct.
      int prjx2s (PRJX2S_ARGS)
       Generic Cartesian-to-spherical deprojection.
      int prjs2x (PRJS2X_ARGS)
       Generic spherical-to-Cartesian projection.
      int azpset (struct prjprm *prj)
       Set up a prjprm struct for the zenithal/azimuthal perspective (AZP) projection.
      int azpx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the zenithal/azimuthal perspective (AZP) projection.
      int azps2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the zenithal/azimuthal perspective (AZP) projection.
      int szpset (struct prjprm *prj)
       Set up a prjprm struct for the slant zenithal perspective (SZP) projection.
      int szpx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the slant zenithal perspective (SZP) projection.
      int szps2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the slant zenithal perspective (SZP) projection.
      int tanset (struct prjprm *prj)
       Set up a prjprm struct for the gnomonic (TAN) projection.
      int tanx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the gnomonic (TAN) projection.
      int tans2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the gnomonic (TAN) projection.
      int stgset (struct prjprm *prj)
       Set up a prjprm struct for the stereographic (STG) projection.
      int stgx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the stereographic (STG) projection.
      int stgs2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the stereographic (STG) projection.
      int sinset (struct prjprm *prj)
       Set up a prjprm struct for the orthographic/synthesis (SIN) projection.
      int sinx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the orthographic/synthesis (SIN) projection.
      int sins2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the orthographic/synthesis (SIN) projection.
      int arcset (struct prjprm *prj)
       Set up a prjprm struct for the zenithal/azimuthal equidistant (ARC) projection.
      int arcx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the zenithal/azimuthal equidistant (ARC) projection.
      int arcs2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the zenithal/azimuthal equidistant (ARC) projection.
      int zpnset (struct prjprm *prj)
       Set up a prjprm struct for the zenithal/azimuthal polynomial (ZPN) projection.
      int zpnx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the zenithal/azimuthal polynomial (ZPN) projection.
      int zpns2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the zenithal/azimuthal polynomial (ZPN) projection.
      int zeaset (struct prjprm *prj)
       Set up a prjprm struct for the zenithal/azimuthal equal area (ZEA) projection.
      int zeax2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the zenithal/azimuthal equal area (ZEA) projection.
      int zeas2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the zenithal/azimuthal equal area (ZEA) projection.
      int airset (struct prjprm *prj)
       Set up a prjprm struct for Airy's (AIR) projection.
      int airx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for Airy's (AIR) projection.
      int airs2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for Airy's (AIR) projection.
      int cypset (struct prjprm *prj)
       Set up a prjprm struct for the cylindrical perspective (CYP) projection.
      int cypx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the cylindrical perspective (CYP) projection.
      int cyps2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the cylindrical perspective (CYP) projection.
      int ceaset (struct prjprm *prj)
       Set up a prjprm struct for the cylindrical equal area (CEA) projection.
      int ceax2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the cylindrical equal area (CEA) projection.
      int ceas2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the cylindrical equal area (CEA) projection.
      int carset (struct prjprm *prj)
       Set up a prjprm struct for the plate carrée (CAR) projection.
      int carx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the plate carrée (CAR) projection.
      int cars2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the plate carrée (CAR) projection.
      int merset (struct prjprm *prj)
       Set up a prjprm struct for Mercator's (MER) projection.
      int merx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for Mercator's (MER) projection.
      int mers2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for Mercator's (MER) projection.
      int sflset (struct prjprm *prj)
       Set up a prjprm struct for the Sanson-Flamsteed (SFL) projection.
      int sflx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the Sanson-Flamsteed (SFL) projection.
      int sfls2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the Sanson-Flamsteed (SFL) projection.
      int parset (struct prjprm *prj)
       Set up a prjprm struct for the parabolic (PAR) projection.
      int parx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the parabolic (PAR) projection.
      int pars2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the parabolic (PAR) projection.
      int molset (struct prjprm *prj)
       Set up a prjprm struct for Mollweide's (MOL) projection.
      int molx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for Mollweide's (MOL) projection.
      int mols2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for Mollweide's (MOL) projection.
      int aitset (struct prjprm *prj)
       Set up a prjprm struct for the Hammer-Aitoff (AIT) projection.
      int aitx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the Hammer-Aitoff (AIT) projection.
      int aits2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the Hammer-Aitoff (AIT) projection.
      int copset (struct prjprm *prj)
       Set up a prjprm struct for the conic perspective (COP) projection.
      int copx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the conic perspective (COP) projection.
      int cops2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the conic perspective (COP) projection.
      int coeset (struct prjprm *prj)
       Set up a prjprm struct for the conic equal area (COE) projection.
      int coex2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the conic equal area (COE) projection.
      int coes2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the conic equal area (COE) projection.
      int codset (struct prjprm *prj)
       Set up a prjprm struct for the conic equidistant (COD) projection.
      int codx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the conic equidistant (COD) projection.
      int cods2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the conic equidistant (COD) projection.
      int cooset (struct prjprm *prj)
       Set up a prjprm struct for the conic orthomorphic (COO) projection.
      int coox2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the conic orthomorphic (COO) projection.
      int coos2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the conic orthomorphic (COO) projection.
      int bonset (struct prjprm *prj)
       Set up a prjprm struct for Bonne's (BON) projection.
      int bonx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for Bonne's (BON) projection.
      int bons2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for Bonne's (BON) projection.
      int pcoset (struct prjprm *prj)
       Set up a prjprm struct for the polyconic (PCO) projection.
      int pcox2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the polyconic (PCO) projection.
      int pcos2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the polyconic (PCO) projection.
      int tscset (struct prjprm *prj)
       Set up a prjprm struct for the tangential spherical cube (TSC) projection.
      int tscx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the tangential spherical cube (TSC) projection.
      int tscs2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the tangential spherical cube (TSC) projection.
      int cscset (struct prjprm *prj)
       Set up a prjprm struct for the COBE spherical cube (CSC) projection.
      int cscx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the COBE spherical cube (CSC) projection.
      int cscs2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the COBE spherical cube (CSC) projection.
      int qscset (struct prjprm *prj)
       Set up a prjprm struct for the quadrilateralized spherical cube (QSC) projection.
      int qscx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the quadrilateralized spherical cube (QSC) projection.
      int qscs2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the quadrilateralized spherical cube (QSC) projection.
      int hpxset (struct prjprm *prj)
       Set up a prjprm struct for the HEALPix (HPX) projection.
      int hpxx2s (PRJX2S_ARGS)
       Cartesian-to-spherical transformation for the HEALPix (HPX) projection.
      int hpxs2x (PRJS2X_ARGS)
       Spherical-to-Cartesian transformation for the HEALPix (HPX) projection.

      Variables

      const char * prj_errmsg []
       Status return messages.
      const int CONIC
       Identifier for conic projections.
      const int CONVENTIONAL
       Identifier for conventional projections.
      const int CYLINDRICAL
       Identifier for cylindrical projections.
      const int POLYCONIC
       Identifier for polyconic projections.
      const int PSEUDOCYLINDRICAL
       Identifier for pseudocylindrical projections.
      const int QUADCUBE
       Identifier for quadcube projections.
      const int ZENITHAL
       Identifier for zenithal/azimuthal projections.
      const int HEALPIX
       Identifier for the HEALPix projection.
      const char prj_categories [9][32]
       Projection categories.
      const int prj_ncode
       The number of recognized three-letter projection codes.
      const char prj_codes [27][4]
       Recognized three-letter projection codes.


      Detailed Description

      These routines implement the spherical map projections defined by the FITS WCS standard. They are based on the prjprm struct which contains all information needed for the computations. The struct contains some members that must be set by the user, and others that are maintained by these routines, somewhat like a C++ class but with no encapsulation.

      Routine prjini() is provided to initialize the prjprm struct with default values, prjfree() reclaims any memory that may have been allocated to store an error message, and prjprt() prints its contents.

      Setup routines for each projection with names of the form ???set(), where "???" is the down-cased three-letter projection code, compute intermediate values in the prjprm struct from parameters in it that were supplied by the user. The struct always needs to be set by the projection's setup routine but that need not be called explicitly - refer to the explanation of prjprm::flag.

      Each map projection is implemented via separate functions for the spherical projection, ???s2x(), and deprojection, ???x2s().

      A set of driver routines, prjset(), prjx2s(), and prjs2x(), provides a generic interface to the specific projection routines which they invoke via pointers-to-functions stored in the prjprm struct.

      In summary, the routines are:

      Argument checking (projection routines):
      The values of $\phi$ and $\theta$ (the native longitude and latitude) normally lie in the range $[-180^\circ,180^\circ]$ for $\phi$, and $[-90^\circ,90^\circ]$ for $\theta$. However, all projection routines will accept any value of $\phi$ and will not normalize it.

      The projection routines do not explicitly check that $\theta$ lies within the range $[-90^\circ,90^\circ]$. They do check for any value of $\theta$ that produces an invalid argument to the projection equations (e.g. leading to division by zero). The projection routines for AZP, SZP, TAN, SIN, ZPN, and COP also return error 2 if $(\phi,\theta)$ corresponds to the overlapped (far) side of the projection but also return the corresponding value of $(x,y)$. This strict bounds checking may be relaxed at any time by setting prjprm::bounds to 0 (rather than 1); the projections need not be reinitialized.

      Argument checking (deprojection routines):
      Error checking on the projected coordinates $(x,y)$ is limited to that required to ascertain whether a solution exists. Where a solution does exist no check is made that the value of $\phi$ and $\theta$ obtained lie within the ranges $[-180^\circ,180^\circ]$ for $\phi$, and $[-90^\circ,90^\circ]$ for $\theta$.

      Accuracy:
      No warranty is given for the accuracy of these routines (refer to the copyright notice); intending users must satisfy for themselves their adequacy for the intended purpose. However, closure to a precision of at least $0^\circ.0000000001$ of longitude and latitude has been verified for typical projection parameters on the $1^\circ$ degree graticule of native longitude and latitude (to within $5^\circ$ of any latitude where the projection may diverge). Refer to the tprj1.c and tprj2.c test routines that accompany this software.


      Define Documentation

      #define PVN   30

      The total number of projection parameters numbered 0 to PVN-1.

      #define PRJX2S_ARGS

      Value:

      struct prjprm *prj, int nx, int ny, int sxy, int spt, \
      const double x[], const double y[], double phi[], double theta[], int stat[]
      
      Preprocessor macro used for declaring deprojection function prototypes.

      #define PRJS2X_ARGS

      Value:

      struct prjprm *prj, int nx, int ny, int sxy, int spt, \
      const double phi[], const double theta[], double x[], double y[], int stat[]
      
      Preprocessor macro used for declaring projection function prototypes.

      #define PRJLEN   (sizeof(struct prjprm)/sizeof(int))

      Size of the prjprm struct in int units, used by the Fortran wrappers.

      #define prjini_errmsg   prj_errmsg

      Deprecated:
      Added for backwards compatibility, use prj_errmsg directly now instead.

      #define prjprt_errmsg   prj_errmsg

      Deprecated:
      Added for backwards compatibility, use prj_errmsg directly now instead.

      #define prjset_errmsg   prj_errmsg

      Deprecated:
      Added for backwards compatibility, use prj_errmsg directly now instead.

      #define prjx2s_errmsg   prj_errmsg

      Deprecated:
      Added for backwards compatibility, use prj_errmsg directly now instead.

      #define prjs2x_errmsg   prj_errmsg

      Deprecated:
      Added for backwards compatibility, use prj_errmsg directly now instead.


      Enumeration Type Documentation

      Enumerator:
      PRJERR_SUCCESS 
      PRJERR_NULL_POINTER 
      PRJERR_BAD_PARAM 
      PRJERR_BAD_PIX 
      PRJERR_BAD_WORLD 


      Function Documentation

      int prjini ( struct prjprm prj  ) 

      prjini() sets all members of a prjprm struct to default values. It should be used to initialize every prjprm struct.

      Parameters:
      [out] prj Projection parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null prjprm pointer passed.

      int prjfree ( struct prjprm prj  ) 

      prjfree() frees any memory that may have been allocated to store an error message in the prjprm struct.

      Parameters:
      [in] prj Projection parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null prjprm pointer passed.

      int prjprt ( const struct prjprm prj  ) 

      prjprt() prints the contents of a prjprm struct using wcsprintf(). Mainly intended for diagnostic purposes.

      Parameters:
      [in] prj Projection parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null prjprm pointer passed.

      int prjset ( struct prjprm prj  ) 

      prjset() sets up a prjprm struct according to information supplied within it.

      Note that this routine need not be called directly; it will be invoked by prjx2s() and prjs2x() if prj.flag is anything other than a predefined magic value.

      The one important distinction between prjset() and the setup routines for the specific projections is that the projection code must be defined in the prjprm struct in order for prjset() to identify the required projection. Once prjset() has initialized the prjprm struct, prjx2s() and prjs2x() use the pointers to the specific projection and deprojection routines contained therein.

      Parameters:
      [in,out] prj Projection parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null prjprm pointer passed.
      • 2: Invalid projection parameters.
      For returns > 1, a detailed error message is set in prjprm::err if enabled, see wcserr_enable().

      int prjx2s ( PRJX2S_ARGS   ) 

      Deproject Cartesian $(x,y)$ coordinates in the plane of projection to native spherical coordinates $(\phi,\theta)$.

      The projection is that specified by prjprm::code.

      Parameters:
      [in,out] prj Projection parameters.
      [in] nx,ny Vector lengths.
      [in] sxy,spt Vector strides.
      [in] x,y Projected coordinates.
      [out] phi,theta Longitude and latitude $(\phi,\theta)$ of the projected point in native spherical coordinates [deg].
      [out] stat Status return value for each vector element:
      • 0: Success.
      • 1: Invalid value of $(x,y)$.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null prjprm pointer passed.
      • 2: Invalid projection parameters.
      • 3: One or more of the $(x,y)$ coordinates were invalid, as indicated by the stat vector.
      For returns > 1, a detailed error message is set in prjprm::err if enabled, see wcserr_enable().

      int prjs2x ( PRJS2X_ARGS   ) 

      Project native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of projection.

      The projection is that specified by prjprm::code.

      Parameters:
      [in,out] prj Projection parameters.
      [in] nphi,ntheta Vector lengths.
      [in] spt,sxy Vector strides.
      [in] phi,theta Longitude and latitude $(\phi,\theta)$ of the projected point in native spherical coordinates [deg].
      [out] x,y Projected coordinates.
      [out] stat Status return value for each vector element:
      • 0: Success.
      • 1: Invalid value of $(\phi,\theta)$.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null prjprm pointer passed.
      • 2: Invalid projection parameters.
      • 4: One or more of the $(\phi,\theta)$ coordinates were, invalid, as indicated by the stat vector.
      For returns > 1, a detailed error message is set in prjprm::err if enabled, see wcserr_enable().

      int azpset ( struct prjprm prj  ) 

      azpset() sets up a prjprm struct for a zenithal/azimuthal perspective (AZP) projection.

      See prjset() for a description of the API.

      int azpx2s ( PRJX2S_ARGS   ) 

      azpx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a zenithal/azimuthal perspective (AZP) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int azps2x ( PRJS2X_ARGS   ) 

      azps2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a zenithal/azimuthal perspective (AZP) projection.

      See prjs2x() for a description of the API.

      int szpset ( struct prjprm prj  ) 

      szpset() sets up a prjprm struct for a slant zenithal perspective (SZP) projection.

      See prjset() for a description of the API.

      int szpx2s ( PRJX2S_ARGS   ) 

      szpx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a slant zenithal perspective (SZP) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int szps2x ( PRJS2X_ARGS   ) 

      szps2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a slant zenithal perspective (SZP) projection.

      See prjs2x() for a description of the API.

      int tanset ( struct prjprm prj  ) 

      tanset() sets up a prjprm struct for a gnomonic (TAN) projection.

      See prjset() for a description of the API.

      int tanx2s ( PRJX2S_ARGS   ) 

      tanx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a gnomonic (TAN) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int tans2x ( PRJS2X_ARGS   ) 

      tans2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a gnomonic (TAN) projection.

      See prjs2x() for a description of the API.

      int stgset ( struct prjprm prj  ) 

      stgset() sets up a prjprm struct for a stereographic (STG) projection.

      See prjset() for a description of the API.

      int stgx2s ( PRJX2S_ARGS   ) 

      stgx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a stereographic (STG) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int stgs2x ( PRJS2X_ARGS   ) 

      stgs2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a stereographic (STG) projection.

      See prjs2x() for a description of the API.

      int sinset ( struct prjprm prj  ) 

      stgset() sets up a prjprm struct for an orthographic/synthesis (SIN) projection.

      See prjset() for a description of the API.

      int sinx2s ( PRJX2S_ARGS   ) 

      sinx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of an orthographic/synthesis (SIN) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int sins2x ( PRJS2X_ARGS   ) 

      sins2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of an orthographic/synthesis (SIN) projection.

      See prjs2x() for a description of the API.

      int arcset ( struct prjprm prj  ) 

      arcset() sets up a prjprm struct for a zenithal/azimuthal equidistant (ARC) projection.

      See prjset() for a description of the API.

      int arcx2s ( PRJX2S_ARGS   ) 

      arcx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a zenithal/azimuthal equidistant (ARC) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int arcs2x ( PRJS2X_ARGS   ) 

      arcs2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a zenithal/azimuthal equidistant (ARC) projection.

      See prjs2x() for a description of the API.

      int zpnset ( struct prjprm prj  ) 

      zpnset() sets up a prjprm struct for a zenithal/azimuthal polynomial (ZPN) projection.

      See prjset() for a description of the API.

      int zpnx2s ( PRJX2S_ARGS   ) 

      zpnx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a zenithal/azimuthal polynomial (ZPN) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int zpns2x ( PRJS2X_ARGS   ) 

      zpns2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a zenithal/azimuthal polynomial (ZPN) projection.

      See prjs2x() for a description of the API.

      int zeaset ( struct prjprm prj  ) 

      zeaset() sets up a prjprm struct for a zenithal/azimuthal equal area (ZEA) projection.

      See prjset() for a description of the API.

      int zeax2s ( PRJX2S_ARGS   ) 

      zeax2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a zenithal/azimuthal equal area (ZEA) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int zeas2x ( PRJS2X_ARGS   ) 

      zeas2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a zenithal/azimuthal equal area (ZEA) projection.

      See prjs2x() for a description of the API.

      int airset ( struct prjprm prj  ) 

      airset() sets up a prjprm struct for an Airy (AIR) projection.

      See prjset() for a description of the API.

      int airx2s ( PRJX2S_ARGS   ) 

      airx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of an Airy (AIR) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int airs2x ( PRJS2X_ARGS   ) 

      airs2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of an Airy (AIR) projection.

      See prjs2x() for a description of the API.

      int cypset ( struct prjprm prj  ) 

      cypset() sets up a prjprm struct for a cylindrical perspective (CYP) projection.

      See prjset() for a description of the API.

      int cypx2s ( PRJX2S_ARGS   ) 

      cypx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a cylindrical perspective (CYP) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int cyps2x ( PRJS2X_ARGS   ) 

      cyps2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a cylindrical perspective (CYP) projection.

      See prjs2x() for a description of the API.

      int ceaset ( struct prjprm prj  ) 

      ceaset() sets up a prjprm struct for a cylindrical equal area (CEA) projection.

      See prjset() for a description of the API.

      int ceax2s ( PRJX2S_ARGS   ) 

      ceax2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a cylindrical equal area (CEA) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int ceas2x ( PRJS2X_ARGS   ) 

      ceas2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a cylindrical equal area (CEA) projection.

      See prjs2x() for a description of the API.

      int carset ( struct prjprm prj  ) 

      carset() sets up a prjprm struct for a plate carrée (CAR) projection.

      See prjset() for a description of the API.

      int carx2s ( PRJX2S_ARGS   ) 

      carx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a plate carrée (CAR) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int cars2x ( PRJS2X_ARGS   ) 

      cars2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a plate carrée (CAR) projection.

      See prjs2x() for a description of the API.

      int merset ( struct prjprm prj  ) 

      merset() sets up a prjprm struct for a Mercator (MER) projection.

      See prjset() for a description of the API.

      int merx2s ( PRJX2S_ARGS   ) 

      merx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a Mercator (MER) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int mers2x ( PRJS2X_ARGS   ) 

      mers2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a Mercator (MER) projection.

      See prjs2x() for a description of the API.

      int sflset ( struct prjprm prj  ) 

      sflset() sets up a prjprm struct for a Sanson-Flamsteed (SFL) projection.

      See prjset() for a description of the API.

      int sflx2s ( PRJX2S_ARGS   ) 

      sflx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a Sanson-Flamsteed (SFL) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int sfls2x ( PRJS2X_ARGS   ) 

      sfls2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a Sanson-Flamsteed (SFL) projection.

      See prjs2x() for a description of the API.

      int parset ( struct prjprm prj  ) 

      parset() sets up a prjprm struct for a parabolic (PAR) projection.

      See prjset() for a description of the API.

      int parx2s ( PRJX2S_ARGS   ) 

      parx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a parabolic (PAR) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int pars2x ( PRJS2X_ARGS   ) 

      pars2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a parabolic (PAR) projection.

      See prjs2x() for a description of the API.

      int molset ( struct prjprm prj  ) 

      molset() sets up a prjprm struct for a Mollweide (MOL) projection.

      See prjset() for a description of the API.

      int molx2s ( PRJX2S_ARGS   ) 

      molx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a Mollweide (MOL) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int mols2x ( PRJS2X_ARGS   ) 

      mols2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a Mollweide (MOL) projection.

      See prjs2x() for a description of the API.

      int aitset ( struct prjprm prj  ) 

      aitset() sets up a prjprm struct for a Hammer-Aitoff (AIT) projection.

      See prjset() for a description of the API.

      int aitx2s ( PRJX2S_ARGS   ) 

      aitx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a Hammer-Aitoff (AIT) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int aits2x ( PRJS2X_ARGS   ) 

      aits2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a Hammer-Aitoff (AIT) projection.

      See prjs2x() for a description of the API.

      int copset ( struct prjprm prj  ) 

      copset() sets up a prjprm struct for a conic perspective (COP) projection.

      See prjset() for a description of the API.

      int copx2s ( PRJX2S_ARGS   ) 

      copx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a conic perspective (COP) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int cops2x ( PRJS2X_ARGS   ) 

      cops2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a conic perspective (COP) projection.

      See prjs2x() for a description of the API.

      int coeset ( struct prjprm prj  ) 

      coeset() sets up a prjprm struct for a conic equal area (COE) projection.

      See prjset() for a description of the API.

      int coex2s ( PRJX2S_ARGS   ) 

      coex2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a conic equal area (COE) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int coes2x ( PRJS2X_ARGS   ) 

      coes2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a conic equal area (COE) projection.

      See prjs2x() for a description of the API.

      int codset ( struct prjprm prj  ) 

      codset() sets up a prjprm struct for a conic equidistant (COD) projection.

      See prjset() for a description of the API.

      int codx2s ( PRJX2S_ARGS   ) 

      codx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a conic equidistant (COD) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int cods2x ( PRJS2X_ARGS   ) 

      cods2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a conic equidistant (COD) projection.

      See prjs2x() for a description of the API.

      int cooset ( struct prjprm prj  ) 

      cooset() sets up a prjprm struct for a conic orthomorphic (COO) projection.

      See prjset() for a description of the API.

      int coox2s ( PRJX2S_ARGS   ) 

      coox2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a conic orthomorphic (COO) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int coos2x ( PRJS2X_ARGS   ) 

      coos2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a conic orthomorphic (COO) projection.

      See prjs2x() for a description of the API.

      int bonset ( struct prjprm prj  ) 

      bonset() sets up a prjprm struct for a Bonne (BON) projection.

      See prjset() for a description of the API.

      int bonx2s ( PRJX2S_ARGS   ) 

      bonx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a Bonne (BON) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int bons2x ( PRJS2X_ARGS   ) 

      bons2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a Bonne (BON) projection.

      See prjs2x() for a description of the API.

      int pcoset ( struct prjprm prj  ) 

      pcoset() sets up a prjprm struct for a polyconic (PCO) projection.

      See prjset() for a description of the API.

      int pcox2s ( PRJX2S_ARGS   ) 

      pcox2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a polyconic (PCO) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int pcos2x ( PRJS2X_ARGS   ) 

      pcos2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a polyconic (PCO) projection.

      See prjs2x() for a description of the API.

      int tscset ( struct prjprm prj  ) 

      tscset() sets up a prjprm struct for a tangential spherical cube (TSC) projection.

      See prjset() for a description of the API.

      int tscx2s ( PRJX2S_ARGS   ) 

      tscx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a tangential spherical cube (TSC) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int tscs2x ( PRJS2X_ARGS   ) 

      tscs2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a tangential spherical cube (TSC) projection.

      See prjs2x() for a description of the API.

      int cscset ( struct prjprm prj  ) 

      cscset() sets up a prjprm struct for a COBE spherical cube (CSC) projection.

      See prjset() for a description of the API.

      int cscx2s ( PRJX2S_ARGS   ) 

      cscx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a COBE spherical cube (CSC) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int cscs2x ( PRJS2X_ARGS   ) 

      cscs2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a COBE spherical cube (CSC) projection.

      See prjs2x() for a description of the API.

      int qscset ( struct prjprm prj  ) 

      qscset() sets up a prjprm struct for a quadrilateralized spherical cube (QSC) projection.

      See prjset() for a description of the API.

      int qscx2s ( PRJX2S_ARGS   ) 

      qscx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a quadrilateralized spherical cube (QSC) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int qscs2x ( PRJS2X_ARGS   ) 

      qscs2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a quadrilateralized spherical cube (QSC) projection.

      See prjs2x() for a description of the API.

      int hpxset ( struct prjprm prj  ) 

      hpxset() sets up a prjprm struct for a HEALPix (HPX) projection.

      See prjset() for a description of the API.

      int hpxx2s ( PRJX2S_ARGS   ) 

      hpxx2s() deprojects Cartesian $(x,y)$ coordinates in the plane of a HEALPix (HPX) projection to native spherical coordinates $(\phi,\theta)$.

      See prjx2s() for a description of the API.

      int hpxs2x ( PRJS2X_ARGS   ) 

      hpxs2x() projects native spherical coordinates $(\phi,\theta)$ to Cartesian $(x,y)$ coordinates in the plane of a HEALPix (HPX) projection.

      See prjs2x() for a description of the API.


      Variable Documentation

      const char * prj_errmsg[]

      Error messages to match the status value returned from each function.

      const int CONIC

      Identifier for conic projections, see prjprm::category.

      const int CONVENTIONAL

      Identifier for conventional projections, see prjprm::category.

      const int CYLINDRICAL

      Identifier for cylindrical projections, see prjprm::category.

      const int POLYCONIC

      Identifier for polyconic projections, see prjprm::category.

      const int PSEUDOCYLINDRICAL

      Identifier for pseudocylindrical projections, see prjprm::category.

      const int QUADCUBE

      Identifier for quadcube projections, see prjprm::category.

      const int ZENITHAL

      Identifier for zenithal/azimuthal projections, see prjprm::category.

      const int HEALPIX

      Identifier for the HEALPix projection, see prjprm::category.

      const char prj_categories[9][32]

      Names of the projection categories, all in lower-case except for "HEALPix".

      Provided for information only, not used by the projection routines.

      const int prj_ncode

      The number of recognized three-letter projection codes (currently 27), see prj_codes.

      const char prj_codes[27][4]

      List of all recognized three-letter projection codes (currently 27), e.g. SIN, TAN, etc.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/software.html0000644001153600020070000001341012310355626021614 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: FITS-WCS and related software

      FITS-WCS and related software

      Several implementations of the FITS WCS standards are available:

      • AST, developed by David Berry within the U.K. Starlink project, http://www.starlink.ac.uk/ast/ and now supported by JAC, Hawaii http://starlink.jach.hawaii.edu/starlink/.

        A useful utility for experimenting with FITS WCS descriptions (similar to wcsgrid) is also provided; go to the above site and then look at the section entitled "FITS-WCS Plotting Demo".

      Python wrappers to WCSLIB are provided by

      Java is supported via

      Recommended WCS-aware FITS image viewers:

      both handle 2-D images.

      Currently (2012/01/24) I know of no image viewers that handle 1-D spectra properly nor multi-dimensional data, not even multi-dimensional data with only two non-degenerate image axes (please inform me if you know otherwise).

      Pre-built WCSLIB packages are available, generally a little behind the main release (this list will probably be out-of-date by the time you read it, best do a web search):

      Bill Pence's general FITS IO library, CFITSIO is available from http://heasarc.gsfc.nasa.gov/fitsio/. It is used optionally by some of the high-level WCSLIB test programs and is required by two of the utility programs.

      PGPLOT, Tim Pearson's Fortran plotting package on which PGSBOX is based, also used by some of the WCSLIB self-test suite and a utility program, is available from http://astro.caltech.edu/~tjp/pgplot/.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/spc_8h-source.html0000644001153600020070000030375112310355626022456 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: spc.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/spc_8h.html0000644001153600020070000024355512310355626021165 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: spc.h File Reference

      spc.h File Reference

      #include "spx.h"
      #include "wcserr.h"

      Go to the source code of this file.

      Data Structures

      struct  spcprm
       Spectral transformation parameters. More...

      Defines

      #define SPCLEN   (sizeof(struct spcprm)/sizeof(int))
       Size of the spcprm struct in int units.
      #define spcini_errmsg   spc_errmsg
       Deprecated.
      #define spcprt_errmsg   spc_errmsg
       Deprecated.
      #define spcset_errmsg   spc_errmsg
       Deprecated.
      #define spcx2s_errmsg   spc_errmsg
       Deprecated.
      #define spcs2x_errmsg   spc_errmsg
       Deprecated.

      Enumerations

      enum  spc_errmsg_enum {
        SPCERR_NO_CHANGE = -1, SPCERR_SUCCESS = 0, SPCERR_NULL_POINTER = 1, SPCERR_BAD_SPEC_PARAMS = 2,
        SPCERR_BAD_X = 3, SPCERR_BAD_SPEC = 4
      }

      Functions

      int spcini (struct spcprm *spc)
       Default constructor for the spcprm struct.
      int spcfree (struct spcprm *spc)
       Destructor for the spcprm struct.
      int spcprt (const struct spcprm *spc)
       Print routine for the spcprm struct.
      int spcset (struct spcprm *spc)
       Setup routine for the spcprm struct.
      int spcx2s (struct spcprm *spc, int nx, int sx, int sspec, const double x[], double spec[], int stat[])
       Transform to spectral coordinates.
      int spcs2x (struct spcprm *spc, int nspec, int sspec, int sx, const double spec[], double x[], int stat[])
       Transform spectral coordinates.
      int spctype (const char ctype[], char stype[], char scode[], char sname[], char units[], char *ptype, char *xtype, int *restreq, struct wcserr **err)
       Spectral CTYPEia keyword analysis.
      int spcspxe (const char ctypeS[], double crvalS, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalX, double *dXdS, struct wcserr **err)
       Spectral keyword analysis.
      int spcxpse (const char ctypeS[], double crvalX, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalS, double *dSdX, struct wcserr **err)
       Spectral keyword synthesis.
      int spctrne (const char ctypeS1[], double crvalS1, double cdeltS1, double restfrq, double restwav, char ctypeS2[], double *crvalS2, double *cdeltS2, struct wcserr **err)
       Spectral keyword translation.
      int spcaips (const char ctypeA[], int velref, char ctype[], char specsys[])
       Translate AIPS-convention spectral keywords.
      int spctyp (const char ctype[], char stype[], char scode[], char sname[], char units[], char *ptype, char *xtype, int *restreq)
      int spcspx (const char ctypeS[], double crvalS, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalX, double *dXdS)
      int spcxps (const char ctypeS[], double crvalX, double restfrq, double restwav, char *ptype, char *xtype, int *restreq, double *crvalS, double *dSdX)
      int spctrn (const char ctypeS1[], double crvalS1, double cdeltS1, double restfrq, double restwav, char ctypeS2[], double *crvalS2, double *cdeltS2)

      Variables

      const char * spc_errmsg []
       Status return messages.


      Detailed Description

      These routines implement the part of the FITS WCS standard that deals with spectral coordinates. They define methods to be used for computing spectral world coordinates from intermediate world coordinates (a linear transformation of image pixel coordinates), and vice versa. They are based on the spcprm struct which contains all information needed for the computations. The struct contains some members that must be set by the user, and others that are maintained by these routines, somewhat like a C++ class but with no encapsulation.

      Routine spcini() is provided to initialize the spcprm struct with default values, spcfree() reclaims any memory that may have been allocated to store an error message, and spcprt() prints its contents.

      A setup routine, spcset(), computes intermediate values in the spcprm struct from parameters in it that were supplied by the user. The struct always needs to be set up by spcset() but it need not be called explicitly - refer to the explanation of spcprm::flag.

      spcx2s() and spcs2x() implement the WCS spectral coordinate transformations. In fact, they are high level driver routines for the lower level spectral coordinate transformation routines described in spx.h.

      A number of routines are provided to aid in analysing or synthesising sets of FITS spectral axis keywords:

      • spctype() checks a spectral CTYPEia keyword for validity and returns information derived from it.

      • Spectral keyword analysis routine spcspxe() computes the values of the $X$-type spectral variables for the $S$-type variables supplied.

      • Spectral keyword synthesis routine, spcxpse(), computes the $S$-type variables for the $X$-types supplied.

      • Given a set of spectral keywords, a translation routine, spctrne(), produces the corresponding set for the specified spectral CTYPEia.

      • spcaips() translates AIPS-convention spectral CTYPEia and VELREF keyvalues.

      Spectral variable types - $S$, $P$, and $X$:
      A few words of explanation are necessary regarding spectral variable types in FITS.

      Every FITS spectral axis has three associated spectral variables:

      $S$-type: the spectral variable in which coordinates are to be expressed. Each $S$-type is encoded as four characters and is linearly related to one of four basic types as follows:

      F: frequency 'FREQ': frequency 'AFRQ': angular frequency 'ENER': photon energy 'WAVN': wave number 'VRAD': radio velocity

      W: wavelength in vacuo 'WAVE': wavelength 'VOPT': optical velocity 'ZOPT': redshift

      A: wavelength in air 'AWAV': wavelength in air

      V: velocity 'VELO': relativistic velocity 'BETA': relativistic beta factor

      The $S$-type forms the first four characters of the CTYPEia keyvalue, and CRVALia and CDELTia are expressed as $S$-type quantities so that they provide a first-order approximation to the $S$-type variable at the reference point.

      Note that 'AFRQ', angular frequency, is additional to the variables defined in WCS Paper III.

      $P$-type: the basic spectral variable (F, W, A, or V) with which the $S$-type variable is associated (see list above).

      For non-grism axes, the $P$-type is encoded as the eighth character of CTYPEia.

      $X$-type: the basic spectral variable (F, W, A, or V) for which the spectral axis is linear, grisms excluded (see below).

      For non-grism axes, the $X$-type is encoded as the sixth character of CTYPEia.

      Grisms: Grism axes have normal $S$-, and $P$-types but the axis is linear, not in any spectral variable, but in a special "grism parameter". The $X$-type spectral variable is either W or A for grisms in vacuo or air respectively, but is encoded as 'w' or 'a' to indicate that an additional transformation is required to convert to or from the grism parameter. The spectral algorithm code for grisms also has a special encoding in CTYPEia, either 'GRI' (in vacuo) or 'GRA' (in air).

      In the algorithm chain, the non-linear transformation occurs between the $X$-type and the $P$-type variables; the transformation between $P$-type and $S$-type variables is always linear.

      When the $P$-type and $X$-type variables are the same, the spectral axis is linear in the $S$-type variable and the second four characters of CTYPEia are blank. This can never happen for grism axes.

      As an example, correlating radio spectrometers always produce spectra that are regularly gridded in frequency; a redshift scale on such a spectrum is non-linear. The required value of CTYPEia would be 'ZOPT-F2W', where the desired $S$-type is 'ZOPT' (redshift), the $P$-type is necessarily 'W' (wavelength), and the $X$-type is 'F' (frequency) by the nature of the instrument.

      Argument checking:
      The input spectral values are only checked for values that would result in floating point exceptions. In particular, negative frequencies and wavelengths are allowed, as are velocities greater than the speed of light. The same is true for the spectral parameters - rest frequency and wavelength.

      Accuracy:
      No warranty is given for the accuracy of these routines (refer to the copyright notice); intending users must satisfy for themselves their adequacy for the intended purpose. However, closure effectively to within double precision rounding error was demonstrated by test routine tspc.c which accompanies this software.


      Define Documentation

      #define SPCLEN   (sizeof(struct spcprm)/sizeof(int))

      Size of the spcprm struct in int units, used by the Fortran wrappers.

      #define spcini_errmsg   spc_errmsg

      Deprecated:
      Added for backwards compatibility, use spc_errmsg directly now instead.

      #define spcprt_errmsg   spc_errmsg

      Deprecated:
      Added for backwards compatibility, use spc_errmsg directly now instead.

      #define spcset_errmsg   spc_errmsg

      Deprecated:
      Added for backwards compatibility, use spc_errmsg directly now instead.

      #define spcx2s_errmsg   spc_errmsg

      Deprecated:
      Added for backwards compatibility, use spc_errmsg directly now instead.

      #define spcs2x_errmsg   spc_errmsg

      Deprecated:
      Added for backwards compatibility, use spc_errmsg directly now instead.


      Enumeration Type Documentation

      Enumerator:
      SPCERR_NO_CHANGE 
      SPCERR_SUCCESS 
      SPCERR_NULL_POINTER 
      SPCERR_BAD_SPEC_PARAMS 
      SPCERR_BAD_X 
      SPCERR_BAD_SPEC 


      Function Documentation

      int spcini ( struct spcprm spc  ) 

      spcini() sets all members of a spcprm struct to default values. It should be used to initialize every spcprm struct.

      Parameters:
      [in,out] spc Spectral transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null spcprm pointer passed.

      int spcfree ( struct spcprm spc  ) 

      spcfree() frees any memory that may have been allocated to store an error message in the spcprm struct.

      Parameters:
      [in] spc Spectral transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null spcprm pointer passed.

      int spcprt ( const struct spcprm spc  ) 

      spcprt() prints the contents of a spcprm struct using wcsprintf(). Mainly intended for diagnostic purposes.

      Parameters:
      [in] spc Spectral transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null spcprm pointer passed.

      int spcset ( struct spcprm spc  ) 

      spcset() sets up a spcprm struct according to information supplied within it.

      Note that this routine need not be called directly; it will be invoked by spcx2s() and spcs2x() if spcprm::flag is anything other than a predefined magic value.

      Parameters:
      [in,out] spc Spectral transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null spcprm pointer passed.
      • 2: Invalid spectral parameters.
      For returns > 1, a detailed error message is set in spcprm::err if enabled, see wcserr_enable().

      int spcx2s ( struct spcprm spc,
      int  nx,
      int  sx,
      int  sspec,
      const double  x[],
      double  spec[],
      int  stat[] 
      )

      spcx2s() transforms intermediate world coordinates to spectral coordinates.

      Parameters:
      [in,out] spc Spectral transformation parameters.
      [in] nx Vector length.
      [in] sx Vector stride.
      [in] sspec Vector stride.
      [in] x Intermediate world coordinates, in SI units.
      [out] spec Spectral coordinates, in SI units.
      [out] stat Status return value status for each vector element:
      • 0: Success.
      • 1: Invalid value of x.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null spcprm pointer passed.
      • 2: Invalid spectral parameters.
      • 3: One or more of the x coordinates were invalid, as indicated by the stat vector.
      For returns > 1, a detailed error message is set in spcprm::err if enabled, see wcserr_enable().

      int spcs2x ( struct spcprm spc,
      int  nspec,
      int  sspec,
      int  sx,
      const double  spec[],
      double  x[],
      int  stat[] 
      )

      spcs2x() transforms spectral world coordinates to intermediate world coordinates.

      Parameters:
      [in,out] spc Spectral transformation parameters.
      [in] nspec Vector length.
      [in] sspec Vector stride.
      [in] sx Vector stride.
      [in] spec Spectral coordinates, in SI units.
      [out] x Intermediate world coordinates, in SI units.
      [out] stat Status return value status for each vector element:
      • 0: Success.
      • 1: Invalid value of spec.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null spcprm pointer passed.
      • 2: Invalid spectral parameters.
      • 4: One or more of the spec coordinates were invalid, as indicated by the stat vector.
      For returns > 1, a detailed error message is set in spcprm::err if enabled, see wcserr_enable().

      int spctype ( const char  ctype[],
      char  stype[],
      char  scode[],
      char  sname[],
      char  units[],
      char *  ptype,
      char *  xtype,
      int *  restreq,
      struct wcserr **  err 
      )

      spctype() checks whether a CTYPEia keyvalue is a valid spectral axis type and if so returns information derived from it relating to the associated $S$-, $P$-, and $X$-type spectral variables (see explanation above).

      The return arguments are guaranteed not be modified if CTYPEia is not a valid spectral type; zero-pointers may be specified for any that are not of interest.

      A deprecated form of this function, spctyp(), lacks the wcserr** parameter.

      Parameters:
      [in] ctype The CTYPEia keyvalue, (eight characters with null termination).
      [out] stype The four-letter name of the $S$-type spectral variable copied or translated from ctype. If a non-zero pointer is given, the array must accomodate a null- terminated string of length 5.
      [out] scode The three-letter spectral algorithm code copied or translated from ctype. Logarithmic ('LOG') and tabular ('TAB') codes are also recognized. If a non-zero pointer is given, the array must accomodate a null-terminated string of length 4.
      [out] sname Descriptive name of the $S$-type spectral variable. If a non-zero pointer is given, the array must accomodate a null-terminated string of length 22.
      [out] units SI units of the $S$-type spectral variable. If a non-zero pointer is given, the array must accomodate a null-terminated string of length 8.
      [out] ptype Character code for the $P$-type spectral variable derived from ctype, one of 'F', 'W', 'A', or 'V'.
      [out] xtype Character code for the $X$-type spectral variable derived from ctype, one of 'F', 'W', 'A', or 'V'. Also, 'w' and 'a' are synonymous to 'W' and 'A' for grisms in vacuo and air respectively. Set to 'L' or 'T' for logarithmic ('LOG') and tabular ('TAB') axes.
      [out] restreq Multivalued flag that indicates whether rest frequency or wavelength is required to compute spectral variables for this CTYPEia:
      • 0: Not required.
      • 1: Required for the conversion between $S$- and $P$-types (e.g. 'ZOPT-F2W').
      • 2: Required for the conversion between $P$- and $X$-types (e.g. 'BETA-W2V').
      • 3: Required for the conversion between $S$- and $P$-types, and between $P$- and $X$-types, but not between $S$- and $X$-types (this applies only for 'VRAD-V2F', 'VOPT-V2W', and 'ZOPT-V2W').
      Thus the rest frequency or wavelength is required for spectral coordinate computations (i.e. between $S$- and $X$-types) only if
       restreq%3 != 0 
      
      .
      [out] err For function return values > 1, this struct will contain a detailed error message. May be NULL if an error message is not desired.
      Returns:
      Status return value:
      • 0: Success.
      • 2: Invalid spectral parameters (not a spectral CTYPEia).

      int spcspxe ( const char  ctypeS[],
      double  crvalS,
      double  restfrq,
      double  restwav,
      char *  ptype,
      char *  xtype,
      int *  restreq,
      double *  crvalX,
      double *  dXdS,
      struct wcserr **  err 
      )

      spcspxe() analyses the CTYPEia and CRVALia FITS spectral axis keyword values and returns information about the associated $X$-type spectral variable.

      A deprecated form of this function, spcspx(), lacks the wcserr** parameter.

      Parameters:
      [in] ctypeS Spectral axis type, i.e. the CTYPEia keyvalue, (eight characters with null termination). For non-grism axes, the character code for the $P$-type spectral variable in the algorithm code (i.e. the eighth character of CTYPEia) may be set to '?' (it will not be reset).
      [in] crvalS Value of the $S$-type spectral variable at the reference point, i.e. the CRVALia keyvalue, SI units.
      [in] restfrq,restwav Rest frequency [Hz] and rest wavelength in vacuo [m], only one of which need be given, the other should be set to zero. Neither are required if the translation is between wave-characteristic types, or between velocity-characteristic types. E.g., required for 'FREQ' -> 'ZOPT-F2W', but not required for 'VELO-F2V' -> 'ZOPT-F2W'.
      [out] ptype Character code for the $P$-type spectral variable derived from ctypeS, one of 'F', 'W', 'A', or 'V'.
      [out] xtype Character code for the $X$-type spectral variable derived from ctypeS, one of 'F', 'W', 'A', or 'V'. Also, 'w' and 'a' are synonymous to 'W' and 'A' for grisms in vacuo and air respectively; crvalX and dXdS (see below) will conform to these.
      [out] restreq Multivalued flag that indicates whether rest frequency or wavelength is required to compute spectral variables for this CTYPEia, as for spctype().
      [out] crvalX Value of the $X$-type spectral variable at the reference point, SI units.
      [out] dXdS The derivative, $dX/dS$, evaluated at the reference point, SI units. Multiply the CDELTia keyvalue by this to get the pixel spacing in the $X$-type spectral coordinate.
      [out] err For function return values > 1, this struct will contain a detailed error message. May be NULL if an error message is not desired.
      Returns:
      Status return value:
      • 0: Success.
      • 2: Invalid spectral parameters.

      int spcxpse ( const char  ctypeS[],
      double  crvalX,
      double  restfrq,
      double  restwav,
      char *  ptype,
      char *  xtype,
      int *  restreq,
      double *  crvalS,
      double *  dSdX,
      struct wcserr **  err 
      )

      spcxpse(), for the spectral axis type specified and the value provided for the $X$-type spectral variable at the reference point, deduces the value of the FITS spectral axis keyword CRVALia and also the derivative $dS/dX$ which may be used to compute CDELTia. See above for an explanation of the $S$-, $P$-, and $X$-type spectral variables.

      A deprecated form of this function, spcxps(), lacks the wcserr** parameter.

      Parameters:
      [in] ctypeS The required spectral axis type, i.e. the CTYPEia keyvalue, (eight characters with null termination). For non-grism axes, the character code for the $P$-type spectral variable in the algorithm code (i.e. the eighth character of CTYPEia) may be set to '?' (it will not be reset).
      [in] crvalX Value of the $X$-type spectral variable at the reference point (N.B. NOT the CRVALia keyvalue), SI units.
      [in] restfrq,restwav Rest frequency [Hz] and rest wavelength in vacuo [m], only one of which need be given, the other should be set to zero. Neither are required if the translation is between wave-characteristic types, or between velocity-characteristic types. E.g., required for 'FREQ' -> 'ZOPT-F2W', but not required for 'VELO-F2V' -> 'ZOPT-F2W'.
      [out] ptype Character code for the $P$-type spectral variable derived from ctypeS, one of 'F', 'W', 'A', or 'V'.
      [out] xtype Character code for the $X$-type spectral variable derived from ctypeS, one of 'F', 'W', 'A', or 'V'. Also, 'w' and 'a' are synonymous to 'W' and 'A' for grisms; crvalX and cdeltX must conform to these.
      [out] restreq Multivalued flag that indicates whether rest frequency or wavelength is required to compute spectral variables for this CTYPEia, as for spctype().
      [out] crvalS Value of the $S$-type spectral variable at the reference point (i.e. the appropriate CRVALia keyvalue), SI units.
      [out] dSdX The derivative, $dS/dX$, evaluated at the reference point, SI units. Multiply this by the pixel spacing in the $X$-type spectral coordinate to get the CDELTia keyvalue.
      [out] err For function return values > 1, this struct will contain a detailed error message. May be NULL if an error message is not desired.
      Returns:
      Status return value:
      • 0: Success.
      • 2: Invalid spectral parameters.

      int spctrne ( const char  ctypeS1[],
      double  crvalS1,
      double  cdeltS1,
      double  restfrq,
      double  restwav,
      char  ctypeS2[],
      double *  crvalS2,
      double *  cdeltS2,
      struct wcserr **  err 
      )

      spctrne() translates a set of FITS spectral axis keywords into the corresponding set for the specified spectral axis type. For example, a 'FREQ' axis may be translated into 'ZOPT-F2W' and vice versa.

      A deprecated form of this function, spctrn(), lacks the wcserr** parameter.

      Parameters:
      [in] ctypeS1 Spectral axis type, i.e. the CTYPEia keyvalue, (eight characters with null termination). For non-grism axes, the character code for the $P$-type spectral variable in the algorithm code (i.e. the eighth character of CTYPEia) may be set to '?' (it will not be reset).
      [in] crvalS1 Value of the $S$-type spectral variable at the reference point, i.e. the CRVALia keyvalue, SI units.
      [in] cdeltS1 Increment of the $S$-type spectral variable at the reference point, SI units.
      [in] restfrq,restwav Rest frequency [Hz] and rest wavelength in vacuo [m], only one of which need be given, the other should be set to zero. Neither are required if the translation is between wave-characteristic types, or between velocity-characteristic types. E.g., required for 'FREQ' -> 'ZOPT-F2W', but not required for 'VELO-F2V' -> 'ZOPT-F2W'.
      [in,out] ctypeS2 Required spectral axis type (eight characters with null termination). The first four characters are required to be given and are never modified. The remaining four, the algorithm code, are completely determined by, and must be consistent with, ctypeS1 and the first four characters of ctypeS2. A non-zero status value will be returned if they are inconsistent (see below). However, if the final three characters are specified as "???", or if just the eighth character is specified as '?', the correct algorithm code will be substituted (applies for grism axes as well as non-grism).
      [out] crvalS2 Value of the new $S$-type spectral variable at the reference point, i.e. the new CRVALia keyvalue, SI units.
      [out] cdeltS2 Increment of the new $S$-type spectral variable at the reference point, i.e. the new CDELTia keyvalue, SI units.
      [out] err For function return values > 1, this struct will contain a detailed error message. May be NULL if an error message is not desired.
      Returns:
      Status return value:
      • 0: Success.
      • 2: Invalid spectral parameters.
      A status value of 2 will be returned if restfrq or restwav are not specified when required, or if ctypeS1 or ctypeS2 are self-inconsistent, or have different spectral $X$-type variables.

      int spcaips ( const char  ctypeA[],
      int  velref,
      char  ctype[],
      char  specsys[] 
      )

      spcaips() translates AIPS-convention spectral CTYPEia and VELREF keyvalues.

      Parameters:
      [in] ctypeA CTYPEia keyvalue possibly containing an AIPS-convention spectral code (eight characters, need not be null-terminated).
      [in] velref AIPS-convention VELREF code. It has the following integer values:
      • 1: LSR kinematic, originally described simply as "LSR" without distinction between the kinematic and dynamic definitions.
      • 2: Barycentric, originally described as "HEL" meaning heliocentric.
      • 3: Topocentric, originally described as "OBS" meaning geocentric but widely interpreted as topocentric.
      AIPS++ extensions to VELREF are also recognized:
      • 4: LSR dynamic.
      • 5: Geocentric.
      • 6: Source rest frame.
      • 7: Galactocentric.
      For an AIPS 'VELO' axis, a radio convention velocity (VRAD) is denoted by adding 256 to VELREF, otherwise an optical velocity (VOPT) is indicated (this is not applicable to 'FREQ' or 'FELO' axes). Setting velref to 0 or 256 chooses between optical and radio velocity without specifying a Doppler frame, provided that a frame is encoded in ctypeA. If not, i.e. for ctypeA = 'VELO', ctype will be returned as 'VELO'.
      VELREF takes precedence over CTYPEia in defining the Doppler frame, e.g.
                                ctypeA = 'VELO-HEL'
                                velref = 1
      

      returns ctype = 'VOPT' with specsys set to 'LSRK'.
      [out] ctype Translated CTYPEia keyvalue, or a copy of ctypeA if no translation was performed (in which case any trailing blanks in ctypeA will be replaced with nulls).
      [out] specsys Doppler reference frame indicated by VELREF or else by CTYPEia with value corresponding to the SPECSYS keyvalue in the FITS WCS standard. May be returned blank if neither specifies a Doppler frame, e.g. ctypeA = 'FELO' and velref256 == 0.
      Returns:
      Status return value:
      • -1: No translation required (not an error).
      • 0: Success.
      • 2: Invalid value of VELREF.

      int spctyp ( const char  ctype[],
      char  stype[],
      char  scode[],
      char  sname[],
      char  units[],
      char *  ptype,
      char *  xtype,
      int *  restreq 
      )

      int spcspx ( const char  ctypeS[],
      double  crvalS,
      double  restfrq,
      double  restwav,
      char *  ptype,
      char *  xtype,
      int *  restreq,
      double *  crvalX,
      double *  dXdS 
      )

      int spcxps ( const char  ctypeS[],
      double  crvalX,
      double  restfrq,
      double  restwav,
      char *  ptype,
      char *  xtype,
      int *  restreq,
      double *  crvalS,
      double *  dSdX 
      )

      int spctrn ( const char  ctypeS1[],
      double  crvalS1,
      double  cdeltS1,
      double  restfrq,
      double  restwav,
      char  ctypeS2[],
      double *  crvalS2,
      double *  cdeltS2 
      )


      Variable Documentation

      const char * spc_errmsg[]

      Error messages to match the status value returned from each function.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/sph_8h-source.html0000644001153600020070000006474712310355626022474 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: sph.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/sph_8h.html0000644001153600020070000005224612310355626021165 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: sph.h File Reference

      sph.h File Reference

      Go to the source code of this file.

      Functions

      int sphx2s (const double eul[5], int nphi, int ntheta, int spt, int sxy, const double phi[], const double theta[], double lng[], double lat[])
       Rotation in the pixel-to-world direction.
      int sphs2x (const double eul[5], int nlng, int nlat, int sll, int spt, const double lng[], const double lat[], double phi[], double theta[])
       Rotation in the world-to-pixel direction.
      int sphdpa (int nfield, double lng0, double lat0, const double lng[], const double lat[], double dist[], double pa[])
       Compute angular distance and position angle.
      int sphpad (int nfield, double lng0, double lat0, const double dist[], const double pa[], double lng[], double lat[])
       Compute field points offset from a given point.


      Detailed Description

      The WCS spherical coordinate transformations are implemented via separate functions, sphx2s() and sphs2x(), for the transformation in each direction.

      A utility function, sphdpa(), computes the angular distances and position angles from a given point on the sky to a number of other points. sphpad() does the complementary operation - computes the coordinates of points offset by the given angular distances and position angles from a given point on the sky.


      Function Documentation

      int sphx2s ( const double  eul[5],
      int  nphi,
      int  ntheta,
      int  spt,
      int  sxy,
      const double  phi[],
      const double  theta[],
      double  lng[],
      double  lat[] 
      )

      sphx2s() transforms native coordinates of a projection to celestial coordinates.

      Parameters:
      [in] eul Euler angles for the transformation:
      • 0: Celestial longitude of the native pole [deg].
      • 1: Celestial colatitude of the native pole, or native colatitude of the celestial pole [deg].
      • 2: Native longitude of the celestial pole [deg].
      • 3: $cos$(eul[1])
      • 4: $sin$(eul[1])
      [in] nphi,ntheta Vector lengths.
      [in] spt,sxy Vector strides.
      [in] phi,theta Longitude and latitude in the native coordinate system of the projection [deg].
      [out] lng,lat Celestial longitude and latitude [deg]. These may refer to the same storage as phi and theta respectively.
      Returns:
      Status return value:
      • 0: Success.

      int sphs2x ( const double  eul[5],
      int  nlng,
      int  nlat,
      int  sll,
      int  spt,
      const double  lng[],
      const double  lat[],
      double  phi[],
      double  theta[] 
      )

      sphs2x() transforms celestial coordinates to the native coordinates of a projection.

      Parameters:
      [in] eul Euler angles for the transformation:
      • 0: Celestial longitude of the native pole [deg].
      • 1: Celestial colatitude of the native pole, or native colatitude of the celestial pole [deg].
      • 2: Native longitude of the celestial pole [deg].
      • 3: $cos$(eul[1])
      • 4: $sin$(eul[1])
      [in] nlng,nlat Vector lengths.
      [in] sll,spt Vector strides.
      [in] lng,lat Celestial longitude and latitude [deg].
      [out] phi,theta Longitude and latitude in the native coordinate system of the projection [deg]. These may refer to the same storage as lng and lat respectively.
      Returns:
      Status return value:
      • 0: Success.

      int sphdpa ( int  nfield,
      double  lng0,
      double  lat0,
      const double  lng[],
      const double  lat[],
      double  dist[],
      double  pa[] 
      )

      sphdpa() computes the angular distance and generalized position angle (see notes) from a "reference" point to a number of "field" points on the sphere. The points must be specified consistently in any spherical coordinate system.

      sphdpa() is complementary to sphpad().

      Parameters:
      [in] nfield The number of field points.
      [in] lng0,lat0 Spherical coordinates of the reference point [deg].
      [in] lng,lat Spherical coordinates of the field points [deg].
      [out] dist,pa Angular distances and position angles [deg]. These may refer to the same storage as lng and lat respectively.
      Returns:
      Status return value:
      • 0: Success.
      Notes:
      sphdpa() uses sphs2x() to rotate coordinates so that the reference point is at the north pole of the new system with the north pole of the old system at zero longitude in the new. The Euler angles required by sphs2x() for this rotation are
            eul[0] = lng0;
            eul[1] = 90.0 - lat0;
            eul[2] =  0.0;
      

      The angular distance and generalized position angle are readily obtained from the longitude and latitude of the field point in the new system. This applies even if the reference point is at one of the poles, in which case the "position angle" returned is as would be computed for a reference point at $(\alpha_0,+90^\circ-\epsilon)$ or $(\alpha_0,-90^\circ+\epsilon)$, in the limit as $\epsilon$ goes to zero.

      It is evident that the coordinate system in which the two points are expressed is irrelevant to the determination of the angular separation between the points. However, this is not true of the generalized position angle.

      The generalized position angle is here defined as the angle of intersection of the great circle containing the reference and field points with that containing the reference point and the pole. It has its normal meaning when the the reference and field points are specified in equatorial coordinates (right ascension and declination).

      Interchanging the reference and field points changes the position angle in a non-intuitive way (because the sum of the angles of a spherical triangle normally exceeds $180^\circ$).

      The position angle is undefined if the reference and field points are coincident or antipodal. This may be detected by checking for a distance of $0^\circ$ or $180^\circ$ (within rounding tolerance). sphdpa() will return an arbitrary position angle in such circumstances.

      int sphpad ( int  nfield,
      double  lng0,
      double  lat0,
      const double  dist[],
      const double  pa[],
      double  lng[],
      double  lat[] 
      )

      sphpad() computes the coordinates of a set of points that are offset by the specified angular distances and position angles from a given "reference" point on the sky. The distances and position angles must be specified consistently in any spherical coordinate system.

      sphpad() is complementary to sphdpa().

      Parameters:
      [in] nfield The number of field points.
      [in] lng0,lat0 Spherical coordinates of the reference point [deg].
      [in] dist,pa Angular distances and position angles [deg].
      [out] lng,lat Spherical coordinates of the field points [deg]. These may refer to the same storage as dist and pa respectively.
      Returns:
      Status return value:
      • 0: Success.
      Notes:
      sphpad() is implemented analogously to sphdpa() although using sphx2s() for the inverse transformation. In particular, when the reference point is at one of the poles, "position angle" is interpreted as though the reference point was at $(\alpha_0,+90^\circ-\epsilon)$ or $(\alpha_0,-90^\circ+\epsilon)$, in the limit as $\epsilon$ goes to zero.

      Applying sphpad() with the distances and position angles computed by sphdpa() should return the original field points.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/spx_8h-source.html0000644001153600020070000017622512310355626022507 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: spx.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/spx_8h.html0000644001153600020070000015465612310355626021215 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: spx.h File Reference

      spx.h File Reference

      #include "wcserr.h"

      Go to the source code of this file.

      Data Structures

      struct  spxprm
       Spectral variables and their derivatives. More...

      Defines

      #define SPXLEN   (sizeof(struct spxprm)/sizeof(int))
       Size of the spxprm struct in int units.
      #define SPX_ARGS
       For use in declaring spectral conversion function prototypes.

      Enumerations

      enum  spx_errmsg {
        SPXERR_SUCCESS = 0, SPXERR_NULL_POINTER = 1, SPXERR_BAD_SPEC_PARAMS = 2, SPXERR_BAD_SPEC_VAR = 3,
        SPXERR_BAD_INSPEC_COORD = 4
      }

      Functions

      int specx (const char *type, double spec, double restfrq, double restwav, struct spxprm *specs)
       Spectral cross conversions (scalar).
      int freqafrq (SPX_ARGS)
       Convert frequency to angular frequency (vector).
      int afrqfreq (SPX_ARGS)
       Convert angular frequency to frequency (vector).
      int freqener (SPX_ARGS)
       Convert frequency to photon energy (vector).
      int enerfreq (SPX_ARGS)
       Convert photon energy to frequency (vector).
      int freqwavn (SPX_ARGS)
       Convert frequency to wave number (vector).
      int wavnfreq (SPX_ARGS)
       Convert wave number to frequency (vector).
      int freqwave (SPX_ARGS)
       Convert frequency to vacuum wavelength (vector).
      int wavefreq (SPX_ARGS)
       Convert vacuum wavelength to frequency (vector).
      int freqawav (SPX_ARGS)
       Convert frequency to air wavelength (vector).
      int awavfreq (SPX_ARGS)
       Convert air wavelength to frequency (vector).
      int waveawav (SPX_ARGS)
       Convert vacuum wavelength to air wavelength (vector).
      int awavwave (SPX_ARGS)
       Convert air wavelength to vacuum wavelength (vector).
      int velobeta (SPX_ARGS)
       Convert relativistic velocity to relativistic beta (vector).
      int betavelo (SPX_ARGS)
       Convert relativistic beta to relativistic velocity (vector).
      int freqvelo (SPX_ARGS)
       Convert frequency to relativistic velocity (vector).
      int velofreq (SPX_ARGS)
       Convert relativistic velocity to frequency (vector).
      int freqvrad (SPX_ARGS)
       Convert frequency to radio velocity (vector).
      int vradfreq (SPX_ARGS)
       Convert radio velocity to frequency (vector).
      int wavevelo (SPX_ARGS)
       Conversions between wavelength and velocity types (vector).
      int velowave (SPX_ARGS)
       Convert relativistic velocity to vacuum wavelength (vector).
      int awavvelo (SPX_ARGS)
       Convert air wavelength to relativistic velocity (vector).
      int veloawav (SPX_ARGS)
       Convert relativistic velocity to air wavelength (vector).
      int wavevopt (SPX_ARGS)
       Convert vacuum wavelength to optical velocity (vector).
      int voptwave (SPX_ARGS)
       Convert optical velocity to vacuum wavelength (vector).
      int wavezopt (SPX_ARGS)
       Convert vacuum wavelength to redshift (vector).
      int zoptwave (SPX_ARGS)
       Convert redshift to vacuum wavelength (vector).

      Variables

      const char * spx_errmsg []


      Detailed Description

      specx() is a scalar routine that, given one spectral variable (e.g. frequency), computes all the others (e.g. wavelength, velocity, etc.) plus the required derivatives of each with respect to the others. The results are returned in the spxprm struct.

      The remaining routines are all vector conversions from one spectral variable to another. The API of these functions only differ in whether the rest frequency or wavelength need be supplied.

      Non-linear:

      Linear:

      These are the workhorse routines, to be used for fast transformations. Conversions may be done "in place" by calling the routine with the output vector set to the input.

      Argument checking:
      The input spectral values are only checked for values that would result in floating point exceptions. In particular, negative frequencies and wavelengths are allowed, as are velocities greater than the speed of light. The same is true for the spectral parameters - rest frequency and wavelength.

      Accuracy:
      No warranty is given for the accuracy of these routines (refer to the copyright notice); intending users must satisfy for themselves their adequacy for the intended purpose. However, closure effectively to within double precision rounding error was demonstrated by test routine tspec.c which accompanies this software.


      Define Documentation

      #define SPXLEN   (sizeof(struct spxprm)/sizeof(int))

      Size of the spxprm struct in int units, used by the Fortran wrappers.

      #define SPX_ARGS

      Value:

      double param, int nspec, int instep, int outstep, \
          const double inspec[], double outspec[], int stat[]
      
      Preprocessor macro used for declaring spectral conversion function prototypes.


      Enumeration Type Documentation

      enum spx_errmsg

      Enumerator:
      SPXERR_SUCCESS 
      SPXERR_NULL_POINTER 
      SPXERR_BAD_SPEC_PARAMS 
      SPXERR_BAD_SPEC_VAR 
      SPXERR_BAD_INSPEC_COORD 


      Function Documentation

      int specx ( const char *  type,
      double  spec,
      double  restfrq,
      double  restwav,
      struct spxprm specs 
      )

      Given one spectral variable specx() computes all the others, plus the required derivatives of each with respect to the others.

      Parameters:
      [in] type The type of spectral variable given by spec, FREQ, AFRQ, ENER, WAVN, VRAD, WAVE, VOPT, ZOPT, AWAV, VELO, or BETA (case sensitive).
      [in] spec The spectral variable given, in SI units.
      [in] restfrq,restwav Rest frequency [Hz] or rest wavelength in vacuo [m], only one of which need be given. The other should be set to zero. If both are zero, only a subset of the spectral variables can be computed, the remainder are set to zero. Specifically, given one of FREQ, AFRQ, ENER, WAVN, WAVE, or AWAV the others can be computed without knowledge of the rest frequency. Likewise, VRAD, VOPT, ZOPT, VELO, and BETA.
      [in,out] specs Data structure containing all spectral variables and their derivatives, in SI units.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null spxprm pointer passed.
      • 2: Invalid spectral parameters.
      • 3: Invalid spectral variable.
      For returns > 1, a detailed error message is set in spxprm::err if enabled, see wcserr_enable().
      freqafrq(), afrqfreq(), freqener(), enerfreq(), freqwavn(), wavnfreq(), freqwave(), wavefreq(), freqawav(), awavfreq(), waveawav(), awavwave(), velobeta(), and betavelo() implement vector conversions between wave-like or velocity-like spectral types (i.e. conversions that do not need the rest frequency or wavelength). They all have the same API.

      int freqafrq ( SPX_ARGS   ) 

      freqafrq() converts frequency to angular frequency.

      Parameters:
      [in] param Ignored.
      [in] nspec Vector length.
      [in] instep,outstep Vector strides.
      [in] inspec Input spectral variables, in SI units.
      [out] outspec Output spectral variables, in SI units.
      [out] stat Status return value for each vector element:
      • 0: Success.
      • 1: Invalid value of inspec.
      Returns:
      Status return value:
      • 0: Success.
      • 2: Invalid spectral parameters.
      • 4: One or more of the inspec coordinates were invalid, as indicated by the stat vector.

      int afrqfreq ( SPX_ARGS   ) 

      afrqfreq() converts angular frequency to frequency.

      See freqafrq() for a description of the API.

      int freqener ( SPX_ARGS   ) 

      freqener() converts frequency to photon energy.

      See freqafrq() for a description of the API.

      int enerfreq ( SPX_ARGS   ) 

      enerfreq() converts photon energy to frequency.

      See freqafrq() for a description of the API.

      int freqwavn ( SPX_ARGS   ) 

      freqwavn() converts frequency to wave number.

      See freqafrq() for a description of the API.

      int wavnfreq ( SPX_ARGS   ) 

      wavnfreq() converts wave number to frequency.

      See freqafrq() for a description of the API.

      int freqwave ( SPX_ARGS   ) 

      freqwave() converts frequency to vacuum wavelength.

      See freqafrq() for a description of the API.

      int wavefreq ( SPX_ARGS   ) 

      wavefreq() converts vacuum wavelength to frequency.

      See freqafrq() for a description of the API.

      int freqawav ( SPX_ARGS   ) 

      freqawav() converts frequency to air wavelength.

      See freqafrq() for a description of the API.

      int awavfreq ( SPX_ARGS   ) 

      awavfreq() converts air wavelength to frequency.

      See freqafrq() for a description of the API.

      int waveawav ( SPX_ARGS   ) 

      waveawav() converts vacuum wavelength to air wavelength.

      See freqafrq() for a description of the API.

      int awavwave ( SPX_ARGS   ) 

      awavwave() converts air wavelength to vacuum wavelength.

      See freqafrq() for a description of the API.

      int velobeta ( SPX_ARGS   ) 

      velobeta() converts relativistic velocity to relativistic beta.

      See freqafrq() for a description of the API.

      int betavelo ( SPX_ARGS   ) 

      betavelo() converts relativistic beta to relativistic velocity.

      See freqafrq() for a description of the API.

      int freqvelo ( SPX_ARGS   ) 

      freqvelo() converts frequency to relativistic velocity.

      Parameters:
      [in] param Rest frequency [Hz].
      [in] nspec Vector length.
      [in] instep,outstep Vector strides.
      [in] inspec Input spectral variables, in SI units.
      [out] outspec Output spectral variables, in SI units.
      [out] stat Status return value for each vector element:
      • 0: Success.
      • 1: Invalid value of inspec.
      Returns:
      Status return value:
      • 0: Success.
      • 2: Invalid spectral parameters.
      • 4: One or more of the inspec coordinates were invalid, as indicated by the stat vector.

      int velofreq ( SPX_ARGS   ) 

      velofreq() converts relativistic velocity to frequency.

      See freqvelo() for a description of the API.

      int freqvrad ( SPX_ARGS   ) 

      freqvrad() converts frequency to radio velocity.

      See freqvelo() for a description of the API.

      int vradfreq ( SPX_ARGS   ) 

      vradfreq() converts radio velocity to frequency.

      See freqvelo() for a description of the API.

      int wavevelo ( SPX_ARGS   ) 

      wavevelo() converts vacuum wavelength to relativistic velocity.

      Parameters:
      [in] param Rest wavelength in vacuo [m].
      [in] nspec Vector length.
      [in] instep,outstep Vector strides.
      [in] inspec Input spectral variables, in SI units.
      [out] outspec Output spectral variables, in SI units.
      [out] stat Status return value for each vector element:
      • 0: Success.
      • 1: Invalid value of inspec.
      Returns:
      Status return value:
      • 0: Success.
      • 2: Invalid spectral parameters.
      • 4: One or more of the inspec coordinates were invalid, as indicated by the stat vector.

      int velowave ( SPX_ARGS   ) 

      velowave() converts relativistic velocity to vacuum wavelength.

      See freqvelo() for a description of the API.

      int awavvelo ( SPX_ARGS   ) 

      awavvelo() converts air wavelength to relativistic velocity.

      See freqvelo() for a description of the API.

      int veloawav ( SPX_ARGS   ) 

      veloawav() converts relativistic velocity to air wavelength.

      See freqvelo() for a description of the API.

      int wavevopt ( SPX_ARGS   ) 

      wavevopt() converts vacuum wavelength to optical velocity.

      See freqvelo() for a description of the API.

      int voptwave ( SPX_ARGS   ) 

      voptwave() converts optical velocity to vacuum wavelength.

      See freqvelo() for a description of the API.

      int wavezopt ( SPX_ARGS   ) 

      wavevopt() converts vacuum wavelength to redshift.

      See freqvelo() for a description of the API.

      int zoptwave ( SPX_ARGS   ) 

      zoptwave() converts redshift to vacuum wavelength.

      See freqvelo() for a description of the API.


      Variable Documentation

      const char* spx_errmsg[]


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structcelprm.html0000644001153600020070000004174112310355626022521 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: celprm Struct Reference

      celprm Struct Reference

      Celestial transformation parameters. More...

      #include <cel.h>


      Data Fields

      int flag
      int offset
      double phi0
      double theta0
      double ref [4]
      struct prjprm prj
      double euler [5]
      int latpreq
      int isolat
      struct wcserrerr
      void * padding


      Detailed Description

      The celprm struct contains information required to transform celestial coordinates. It consists of certain members that must be set by the user (given) and others that are set by the WCSLIB routines (returned). Some of the latter are supplied for informational purposes and others are for internal use only.

      Returned celprm struct members must not be modified by the user.


      Field Documentation

      (Given and returned) This flag must be set to zero whenever any of the following celprm struct members are set or changed:

      This signals the initialization routine, celset(), to recompute the returned members of the celprm struct. celset() will reset flag to indicate that this has been done.

      (Given) If true (non-zero), an offset will be applied to $(x,y)$ to force $(x,y)$ = (0,0) at the fiducial point, ($\phi_0$,$\theta_0$). Default is 0 (false).

      double celprm::phi0

      (Given) The native longitude, $\phi_0$ [deg], and ...

      (Given) ... the native latitude, $\theta_0$ [deg], of the fiducial point, i.e. the point whose celestial coordinates are given in celprm::ref[1:2]. If undefined (set to a magic value by prjini()) the initialization routine, celset(), will set this to a projection-specific default.

      double celprm::ref

      (Given) The first pair of values should be set to the celestial longitude and latitude of the fiducial point [deg] - typically right ascension and declination. These are given by the CRVALia keywords in FITS.

      (Given and returned) The second pair of values are the native longitude, $\phi_{\mathrm p}$ [deg], and latitude, $\theta_{\mathrm p}$ [deg], of the celestial pole (the latter is the same as the celestial latitude of the native pole, $\delta_{\mathrm p}$) and these are given by the FITS keywords LONPOLEa and LATPOLEa (or by PVi_2a and PVi_3a attached to the longitude axis which take precedence if defined).

      LONPOLEa defaults to $\phi_0$ (see above) if the celestial latitude of the fiducial point of the projection is greater than or equal to the native latitude, otherwise $\phi_0$ + 180 [deg]. (This is the condition for the celestial latitude to increase in the same direction as the native latitude at the fiducial point.) ref[2] may be set to UNDEFINED (from wcsmath.h) or 999.0 to indicate that the correct default should be substituted.

      $\theta_{\mathrm p}$, the native latitude of the celestial pole (or equally the celestial latitude of the native pole, $\delta_{\mathrm p}$) is often determined uniquely by CRVALia and LONPOLEa in which case LATPOLEa is ignored. However, in some circumstances there are two valid solutions for $\theta_{\mathrm p}$ and LATPOLEa is used to choose between them. LATPOLEa is set in ref[3] and the solution closest to this value is used to reset ref[3]. It is therefore legitimate, for example, to set ref[3] to +90.0 to choose the more northerly solution - the default if the LATPOLEa keyword is omitted from the FITS header. For the special case where the fiducial point of the projection is at native latitude zero, its celestial latitude is zero, and LONPOLEa = $\pm$ 90.0 then the celestial latitude of the native pole is not determined by the first three reference values and LATPOLEa specifies it completely.

      The returned value, celprm::latpreq, specifies how LATPOLEa was actually used.

      struct prjprm celprm::prj [read]

      (Given and returned) Projection parameters described in the prologue to prj.h.

      double celprm::euler

      (Returned) Euler angles and associated intermediaries derived from the coordinate reference values. The first three values are the $Z$-, $X$-, and $Z'$-Euler angles [deg], and the remaining two are the cosine and sine of the $X$-Euler angle.

      (Returned) For informational purposes, this indicates how the LATPOLEa keyword was used

      • 0: Not required, $\theta_{\mathrm p}$ (== $\delta_{\mathrm p}$) was determined uniquely by the CRVALia and LONPOLEa keywords.
      • 1: Required to select between two valid solutions of $\theta_{\mathrm p}$.
      • 2: $\theta_{\mathrm p}$ was specified solely by LATPOLEa.

      (Returned) True if the spherical rotation preserves the magnitude of the latitude, which occurs iff the axes of the native and celestial coordinates are coincident. It signals an opportunity to cache intermediate calculations common to all elements in a vector computation.

      struct wcserr * celprm::err [read]

      (Returned) If enabled, when an error status is returned this struct contains detailed information about the error, see wcserr_enable().

      void *padding (An unused variable inserted for alignment purposes only.)

      Global variable: const char *cel_errmsg[] - Status return messages Status messages to match the status value returned from each function.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structfitskey.html0000644001153600020070000005257712310355626022726 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: fitskey Struct Reference

      fitskey Struct Reference

      Keyword/value information. More...

      #include <fitshdr.h>


      Data Fields

      int keyno
      int keyid
      int status
      char keyword [12]
      int type
      int padding
      union {
         int   i
         int64   k
         int   l [8]
         double   f
         double   c [2]
         char   s [72]
      keyvalue
      int ulen
      char comment [84]


      Detailed Description

      fitshdr() returns an array of fitskey structs, each of which contains the result of parsing one FITS header keyrecord. All members of the fitskey struct are returned by fitshdr(), none are given by the user.

      Field Documentation

      (Returned) Keyrecord number (1-relative) in the array passed as input to fitshdr(). This will be negated if the keyword matched any specified in the keyids[] index.

      (Returned) Index into the first entry in keyids[] with which the keyrecord matches, else -1.

      (Returned) Status flag bit-vector for the header keyrecord employing the following bit masks defined as preprocessor macros:

      • FITSHDR_KEYWORD: Illegal keyword syntax.
      • FITSHDR_KEYVALUE: Illegal keyvalue syntax.
      • FITSHDR_COMMENT: Illegal keycomment syntax.
      • FITSHDR_KEYREC: Illegal keyrecord, e.g. an END keyrecord with trailing text.
      • FITSHDR_TRAILER: Keyrecord following a valid END keyrecord.

      The header keyrecord is syntactically correct if no bits are set.

      (Returned) Keyword name, null-filled for keywords of less than eight characters (trailing blanks replaced by nulls).

      Use

              sprintf(dst, "%.8s", keyword)
      

      to copy it to a character array with null-termination, or

              sprintf(dst, "%8.8s", keyword)
      

      to blank-fill to eight characters followed by null-termination.

      (Returned) Keyvalue data type:

      • 0: No keyvalue.
      • 1: Logical, represented as int.
      • 2: 32-bit signed integer.
      • 3: 64-bit signed integer (see below).
      • 4: Very long integer (see below).
      • 5: Floating point (stored as double).
      • 6: Integer complex (stored as double[2]).
      • 7: Floating point complex (stored as double[2]).
      • 8: String.
      • 8+10*n: Continued string (described below and in fitshdr() note 2).

      A negative type indicates that a syntax error was encountered when attempting to parse a keyvalue of the particular type.

      Comments on particular data types:

      • 64-bit signed integers lie in the range
                    (-9223372036854775808 <= int64 <  -2147483648) ||
                             (+2147483647 <  int64 <= +9223372036854775807)
        

        A native 64-bit data type may be defined via preprocessor macro WCSLIB_INT64 defined in wcsconfig.h, e.g. as 'long long int'; this will be typedef'd to 'int64' here. If WCSLIB_INT64 is not set, then int64 is typedef'd to int[3] instead and fitskey::keyvalue is to be computed as

                    ((keyvalue.k[2]) * 1000000000 +
                      keyvalue.k[1]) * 1000000000 +
                      keyvalue.k[0]
        

        and may reported via

                     if (keyvalue.k[2]) {
                       printf("%d%09d%09d", keyvalue.k[2], abs(keyvalue.k[1]),
                                            abs(keyvalue.k[0]));
                     } else {
                       printf("%d%09d", keyvalue.k[1], abs(keyvalue.k[0]));
                     }
        

        where keyvalue.k[0] and keyvalue.k[1] range from -999999999 to +999999999.

      • Very long integers, up to 70 decimal digits in length, are encoded in keyvalue.l as an array of int[8], each of which stores 9 decimal digits. fitskey::keyvalue is to be computed as
                    (((((((keyvalue.l[7]) * 1000000000 +
                           keyvalue.l[6]) * 1000000000 +
                           keyvalue.l[5]) * 1000000000 +
                           keyvalue.l[4]) * 1000000000 +
                           keyvalue.l[3]) * 1000000000 +
                           keyvalue.l[2]) * 1000000000 +
                           keyvalue.l[1]) * 1000000000 +
                           keyvalue.l[0]
        

      • Continued strings are not reconstructed, they remain split over successive fitskey structs in the keys[] array returned by fitshdr(). fitskey::keyvalue data type, 8 + 10n, indicates the segment number, n, in the continuation.

      (An unused variable inserted for alignment purposes only.)

      (Returned) Logical (fitskey::type == 1) and 32-bit signed integer (fitskey::type == 2) data types in the fitskey::keyvalue union.

      (Returned) 64-bit signed integer (fitskey::type == 3) data type in the fitskey::keyvalue union.

      (Returned) Very long integer (fitskey::type == 4) data type in the fitskey::keyvalue union.

      double fitskey::f

      (Returned) Floating point (fitskey::type == 5) data type in the fitskey::keyvalue union.

      double fitskey::c

      (Returned) Integer and floating point complex (fitskey::type == 6 || 7) data types in the fitskey::keyvalue union.

      char fitskey::s

      (Returned) Null-terminated string (fitskey::type == 8) data type in the fitskey::keyvalue union.

      (Returned) A union comprised of

      used by the fitskey struct to contain the value associated with a keyword.

      (Returned) Where a keycomment contains a units string in the standard form, e.g. [m/s], the ulen member indicates its length, inclusive of square brackets. Otherwise ulen is zero.

      (Returned) Keycomment, i.e. comment associated with the keyword or, for keyrecords rejected because of syntax errors, the compete keyrecord itself with null-termination.

      Comments are null-terminated with trailing spaces removed. Leading spaces are also removed from keycomments (i.e. those immediately following the '/' character), but not from COMMENT or HISTORY keyrecords or keyrecords without a value indicator (''= '' in columns 9-80).


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structfitskeyid.html0000644001153600020070000001203512310355626023224 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: fitskeyid Struct Reference

      fitskeyid Struct Reference

      Keyword indexing. More...

      #include <fitshdr.h>


      Data Fields

      char name [12]
      int count
      int idx [2]


      Detailed Description

      fitshdr() uses the fitskeyid struct to return indexing information for specified keywords. The struct contains three members, the first of which, fitskeyid::name, must be set by the user with the remainder returned by fitshdr().

      Field Documentation

      (Given) Name of the required keyword. This is to be set by the user; the '.' character may be used for wildcarding. Trailing blanks will be replaced with nulls.

      (Returned) The number of matches found for the keyword.

      (Returned) Indices into keys[], the array of fitskey structs returned by fitshdr(). Note that these are 0-relative array indices, not keyrecord numbers.

      If the keyword is found in the header the first index will be set to the array index of its first occurrence, otherwise it will be set to -1.

      If multiples of the keyword are found, the second index will be set to the array index of its last occurrence, otherwise it will be set to -1.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structlinprm.html0000644001153600020070000004337012310355626022540 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: linprm Struct Reference

      linprm Struct Reference

      Linear transformation parameters. More...

      #include <lin.h>


      Data Fields

      int flag
      int naxis
      double * crpix
      double * pc
      double * cdelt
      double * piximg
      double * imgpix
      int unity
      int padding
      struct wcserrerr
      int i_naxis
      int m_flag
      int m_naxis
      int m_padding
      double * m_crpix
      double * m_pc
      double * m_cdelt
      void * padding2


      Detailed Description

      The linprm struct contains all of the information required to perform a linear transformation. It consists of certain members that must be set by the user (given) and others that are set by the WCSLIB routines (returned).

      Field Documentation

      (Given and returned) This flag must be set to zero whenever any of the following members of the linprm struct are set or modified:

      This signals the initialization routine, linset(), to recompute the returned members of the linprm struct. linset() will reset flag to indicate that this has been done.

      PLEASE NOTE: flag should be set to -1 when linini() is called for the first time for a particular linprm struct in order to initialize memory management. It must ONLY be used on the first initialization otherwise memory leaks may result.

      (Given or returned) Number of pixel and world coordinate elements.

      If linini() is used to initialize the linprm struct (as would normally be the case) then it will set naxis from the value passed to it as a function argument. The user should not subsequently modify it.

      double * linprm::crpix

      (Given) Pointer to the first element of an array of double containing the coordinate reference pixel, CRPIXja.

      double * linprm::pc

      (Given) Pointer to the first element of the PCi_ja (pixel coordinate) transformation matrix. The expected order is

              struct linprm lin;
              lin.pc = {PC1_1, PC1_2, PC2_1, PC2_2};
      

      This may be constructed conveniently from a 2-D array via

              double m[2][2] = {{PC1_1, PC1_2},
                                {PC2_1, PC2_2}};
      

      which is equivalent to

              double m[2][2];
              m[0][0] = PC1_1;
              m[0][1] = PC1_2;
              m[1][0] = PC2_1;
              m[1][1] = PC2_2;
      

      The storage order for this 2-D array is the same as for the 1-D array, whence

              lin.pc = *m;
      

      would be legitimate.

      double * linprm::cdelt

      (Given) Pointer to the first element of an array of double containing the coordinate increments, CDELTia.

      double * linprm::piximg

      (Returned) Pointer to the first element of the matrix containing the product of the CDELTia diagonal matrix and the PCi_ja matrix.

      double * linprm::imgpix

      (Returned) Pointer to the first element of the inverse of the linprm::piximg matrix.

      (Returned) True if the linear transformation matrix is unity.

      (An unused variable inserted for alignment purposes only.)

      struct wcserr * linprm::err [read]

      (Returned) If enabled, when an error status is returned this struct contains detailed information about the error, see wcserr_enable().

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      double * linprm::m_crpix

      (For internal use only.)

      double * linprm::m_pc

      (For internal use only.)

      double * linprm::m_cdelt

      (For internal use only.) void *padding2 (For internal use only.)


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structprjprm.html0000644001153600020070000005771112310355626022555 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: prjprm Struct Reference

      prjprm Struct Reference

      Projection parameters. More...

      #include <prj.h>


      Data Fields

      int flag
      char code [4]
      double r0
      double pv [PVN]
      double phi0
      double theta0
      int bounds
      char name [40]
      int category
      int pvrange
      int simplezen
      int equiareal
      int conformal
      int global
      int divergent
      double x0
      double y0
      struct wcserrerr
      void * padding
      double w [10]
      int m
      int n
      int(* prjx2s )(PRJX2S_ARGS)
      int(* prjs2x )(PRJS2X_ARGS)


      Detailed Description

      The prjprm struct contains all information needed to project or deproject native spherical coordinates. It consists of certain members that must be set by the user (given) and others that are set by the WCSLIB routines (returned). Some of the latter are supplied for informational purposes while others are for internal use only.

      Field Documentation

      (Given and returned) This flag must be set to zero whenever any of the following prjprm struct members are set or changed:

      This signals the initialization routine (prjset() or ???set()) to recompute the returned members of the prjprm struct. flag will then be reset to indicate that this has been done.

      Note that flag need not be reset when prjprm::bounds is changed.

      (Given) Three-letter projection code defined by the FITS standard.

      double prjprm::r0

      (Given) The radius of the generating sphere for the projection, a linear scaling parameter. If this is zero, it will be reset to its default value of $180^\circ/\pi$ (the value for FITS WCS).

      double prjprm::pv

      (Given) Projection parameters. These correspond to the PVi_ma keywords in FITS, so pv[0] is PVi_0a, pv[1] is PVi_1a, etc., where i denotes the latitude-like axis. Many projections use pv[1] (PVi_1a), some also use pv[2] (PVi_2a) and SZP uses pv[3] (PVi_3a). ZPN is currently the only projection that uses any of the others.

      Usage of the pv[] array as it applies to each projection is described in the prologue to each trio of projection routines in prj.c.

      double prjprm::phi0

      (Given) The native longitude, $\phi_0$ [deg], and ...

      (Given) ... the native latitude, $\theta_0$ [deg], of the reference point, i.e. the point $(x,y)$ = (0,0). If undefined (set to a magic value by prjini()) the initialization routine will set this to a projection-specific default.

      (Given) Controls strict bounds checking for the AZP, SZP, TAN, SIN, ZPN, and COP projections; set to zero to disable checking.

      The remaining members of the prjprm struct are maintained by the setup routines and must not be modified elsewhere:

      (Returned) Long name of the projection.

      Provided for information only, not used by the projection routines.

      (Returned) Projection category matching the value of the relevant global variable:

      • ZENITHAL,
      • CYLINDRICAL,
      • PSEUDOCYLINDRICAL,
      • CONVENTIONAL,
      • CONIC,
      • POLYCONIC,
      • QUADCUBE, and
      • HEALPIX.

      The category name may be identified via the prj_categories character array, e.g.

              struct prjprm prj;
                ...
              printf("%s\n", prj_categories[prj.category]);
      

      Provided for information only, not used by the projection routines.

      (Returned) Range of projection parameter indices: 100 times the first allowed index plus the number of parameters, e.g. TAN is 0 (no parameters), SZP is 103 (1 to 3), and ZPN is 30 (0 to 29).

      Provided for information only, not used by the projection routines.

      (Returned) True if the projection is a radially-symmetric zenithal projection.

      Provided for information only, not used by the projection routines.

      (Returned) True if the projection is equal area.

      Provided for information only, not used by the projection routines.

      (Returned) True if the projection is conformal.

      Provided for information only, not used by the projection routines.

      (Returned) True if the projection can represent the whole sphere in a finite, non-overlapped mapping.

      Provided for information only, not used by the projection routines.

      (Returned) True if the projection diverges in latitude.

      Provided for information only, not used by the projection routines.

      double prjprm::x0

      (Returned) The offset in $x$,and ...

      double prjprm::y0

      (Returned) ... the offset in $y$ used to force $(x,y)$ = (0,0) at ($\phi_0$,$\theta_0$).

      struct wcserr * prjprm::err [read]

      (Returned) If enabled, when an error status is returned this struct contains detailed information about the error, see wcserr_enable().

      void *padding (An unused variable inserted for alignment purposes only.)

      double prjprm::w

      (Returned) Intermediate floating-point values derived from the projection parameters, cached here to save recomputation.

      Usage of the w[] array as it applies to each projection is described in the prologue to each trio of projection routines in prj.c.

      int prjprm::m

      int prjprm::n

      (Returned) Intermediate integer value (used only for the ZPN and HPX projections).

      (Returned) Pointer to the projection ...

      (Returned) ... and deprojection routines.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structpscard.html0000644001153600020070000001037412310355626022511 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: pscard Struct Reference

      pscard Struct Reference

      Store for PSi_ma keyrecords. More...

      #include <wcs.h>


      Data Fields

      int i
      int m
      char value [72]


      Detailed Description

      The pscard struct is used to pass the parsed contents of PSi_ma keyrecords to wcsset() via the wcsprm struct.

      All members of this struct are to be set by the user.


      Field Documentation

      int pscard::i

      (Given) Axis number (1-relative), as in the FITS PSi_ma keyword.

      int pscard::m

      (Given) Parameter number (non-negative), as in the FITS PSi_ma keyword.

      (Given) Parameter value.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structpvcard.html0000644001153600020070000001065512310355626022516 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: pvcard Struct Reference

      pvcard Struct Reference

      Store for PVi_ma keyrecords. More...

      #include <wcs.h>


      Data Fields

      int i
      int m
      double value


      Detailed Description

      The pvcard struct is used to pass the parsed contents of PVi_ma keyrecords to wcsset() via the wcsprm struct.

      All members of this struct are to be set by the user.


      Field Documentation

      int pvcard::i

      (Given) Axis number (1-relative), as in the FITS PVi_ma keyword. If i == 0, wcsset() will replace it with the latitude axis number.

      int pvcard::m

      (Given) Parameter number (non-negative), as in the FITS PVi_ma keyword.

      double pvcard::value

      (Given) Parameter value.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structs.html0000644001153600020070000001527712310355626021506 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: WCSLIB data structures

      WCSLIB data structures

      The WCSLIB routines are based on data structures specific to them: wcsprm for the wcs.h,c routines, celprm for cel.h,c, and likewise spcprm, linprm, prjprm and tabprm, with struct definitions contained in the corresponding header files: wcs.h, cel.h, etc. The structs store the parameters that define a coordinate transformation and also intermediate values derived from those parameters. As a high-level object, the wcsprm struct contains linprm, tabprm, spcprm, and celprm structs, and in turn the celprm struct contains a prjprm struct. Hence the wcsprm struct contains everything needed for a complete coordinate description.

      Applications programmers who use the top- and middle-level routines generally only need to pass wcsprm structs from one routine that fills them to another that uses them. However, since these structs are fundamental to WCSLIB it is worthwhile knowing something about the way they work.

      Three basic operations apply to all WCSLIB structs:

      • Initialize. Each struct has a specific initialization routine, e.g. wcsini(), celini(), spcini(), etc. These allocate memory (if required) and set all struct members to default values.

      • Fill in the required values. Each struct has members whose values must be provided. For example, for wcsprm these values correspond to FITS WCS header keyvalues as are provided by the top-level header parsing routine, wcspih().

      • Compute intermediate values. Specific setup routines, e.g. wcsset(), celset(), spcset(), etc., compute intermediate values from the values provided. In particular, wcsset() analyses the FITS WCS keyvalues provided, fills the required values in the lower-level structs contained in wcsprm, and invokes the setup routine for each of them.

      Each struct contains a flag member that records its setup state. This is cleared by the initialization routine and checked by the routines that use the struct; they will invoke the setup routine automatically if necessary, hence it need not be invoked specifically by the application programmer. However, if any of the required values in a struct are changed then either the setup routine must be invoked on it, or else the flag must be zeroed to signal that the struct needs to be reset.

      The initialization routine may be invoked repeatedly on a struct if it is desired to reuse it. However, the flag member of structs that contain allocated memory (wcsprm, linprm and tabprm) must be set to -1 before the first initialization to initialize memory management, but not subsequently or else memory leaks will result.

      Each struct has one or more service routines: to do deep copies from one to another, to print its contents, and to free allocated memory. Refer to the header files for a detailed description.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structspcprm.html0000644001153600020070000004325312310355626022543 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: spcprm Struct Reference

      spcprm Struct Reference

      Spectral transformation parameters. More...

      #include <spc.h>


      Data Fields

      int flag
      char type [8]
      char code [4]
      double crval
      double restfrq
      double restwav
      double pv [7]
      double w [6]
      int isGrism
      int padding1
      struct wcserrerr
      void * padding2
      int(* spxX2P )(SPX_ARGS)
      int(* spxP2S )(SPX_ARGS)
      int(* spxS2P )(SPX_ARGS)
      int(* spxP2X )(SPX_ARGS)


      Detailed Description

      The spcprm struct contains information required to transform spectral coordinates. It consists of certain members that must be set by the user (given) and others that are set by the WCSLIB routines (returned). Some of the latter are supplied for informational purposes while others are for internal use only.

      Field Documentation

      (Given and returned) This flag must be set to zero whenever any of the following spcprm structure members are set or changed:

      This signals the initialization routine, spcset(), to recompute the returned members of the spcprm struct. spcset() will reset flag to indicate that this has been done.

      (Given) Four-letter spectral variable type, e.g "ZOPT" for CTYPEia = 'ZOPT-F2W'. (Declared as char[8] for alignment reasons.)

      (Given) Three-letter spectral algorithm code, e.g "F2W" for CTYPEia = 'ZOPT-F2W'.

      double spcprm::crval

      (Given) Reference value (CRVALia), SI units.

      (Given) The rest frequency [Hz], and ...

      (Given) ... the rest wavelength in vacuo [m], only one of which need be given, the other should be set to zero. Neither are required if the $X$ and $S$ spectral variables are both wave-characteristic, or both velocity-characteristic, types.

      double spcprm::pv

      (Given) Grism parameters for 'GRI' and 'GRA' algorithm codes:

      • 0: $G$, grating ruling density.
      • 1: $m$, interference order.
      • 2: $\alpha$, angle of incidence [deg].
      • 3: $n_r$, refractive index at the reference wavelength, $\lambda_r$.
      • 4: $n'_r$, $dn/d\lambda$ at the reference wavelength, $\lambda_r$ (/m).
      • 5: $\epsilon$, grating tilt angle [deg].
      • 6: $\theta$, detector tilt angle [deg].

      The remaining members of the spcprm struct are maintained by spcset() and must not be modified elsewhere:

      double spcprm::w

      (Returned) Intermediate values:

      • 0: Rest frequency or wavelength (SI).
      • 1: The value of the $X$-type spectral variable at the reference point (SI units).
      • 2: $dX/dS$ at the reference point (SI units).
      The remainder are grism intermediates.

      (Returned) Grism coordinates?

      • 0: no,
      • 1: in vacuum,
      • 2: in air.

      (An unused variable inserted for alignment purposes only.)

      struct wcserr * spcprm::err [read]

      (Returned) If enabled, when an error status is returned this structure contains detailed information about the error, see wcserr_enable().

      void *padding2 (An unused variable inserted for alignment purposes only.)

      (Returned) The first and ...

      (Returned) ... the second of the pointers to the transformation functions in the two-step algorithm chain $X\leadsto P\rightarrow S$ in the pixel-to-spectral direction where the non-linear transformation is from $X$ to $P$. The argument list, SPX_ARGS, is defined in spx.h.

      (Returned) The first and ...

      (Returned) ... the second of the pointers to the transformation functions in the two-step algorithm chain $S\rightarrow P\leadsto X$ in the spectral-to-pixel direction where the non-linear transformation is from $P$ to $X$. The argument list, SPX_ARGS, is defined in spx.h.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structspxprm.html0000644001153600020070000010663212310355626022571 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: spxprm Struct Reference

      spxprm Struct Reference

      Spectral variables and their derivatives. More...

      #include <spx.h>


      Data Fields

      double restfrq
      double restwav
      int wavetype
      int velotype
      double freq
      double afrq
      double ener
      double wavn
      double vrad
      double wave
      double vopt
      double zopt
      double awav
      double velo
      double beta
      double dfreqafrq
      double dafrqfreq
      double dfreqener
      double denerfreq
      double dfreqwavn
      double dwavnfreq
      double dfreqvrad
      double dvradfreq
      double dfreqwave
      double dwavefreq
      double dfreqawav
      double dawavfreq
      double dfreqvelo
      double dvelofreq
      double dwavevopt
      double dvoptwave
      double dwavezopt
      double dzoptwave
      double dwaveawav
      double dawavwave
      double dwavevelo
      double dvelowave
      double dawavvelo
      double dveloawav
      double dvelobeta
      double dbetavelo
      struct wcserrerr
      void * padding


      Detailed Description

      The spxprm struct contains the value of all spectral variables and their derivatives. It is used solely by specx() which constructs it from information provided via its function arguments.

      This struct should be considered read-only, no members need ever be set nor should ever be modified by the user.


      Field Documentation

      (Returned) Rest frequency [Hz].

      (Returned) Rest wavelength [m].

      (Returned) True if wave types have been computed, and ...

      (Returned) ... true if velocity types have been computed; types are defined below.

      If one or other of spxprm::restfrq and spxprm::restwav is given (non-zero) then all spectral variables may be computed. If both are given, restfrq is used. If restfrq and restwav are both zero, only wave characteristic xor velocity type spectral variables may be computed depending on the variable given. These flags indicate what is available.

      double spxprm::freq

      (Returned) Frequency [Hz] (wavetype).

      double spxprm::afrq

      (Returned) Angular frequency [rad/s] (wavetype).

      double spxprm::ener

      (Returned) Photon energy [J] (wavetype).

      double spxprm::wavn

      (Returned) Wave number [/m] (wavetype).

      double spxprm::vrad

      (Returned) Radio velocity [m/s] (velotype).

      double spxprm::wave

      (Returned) Vacuum wavelength [m] (wavetype).

      double spxprm::vopt

      (Returned) Optical velocity [m/s] (velotype).

      double spxprm::zopt

      (Returned) Redshift [dimensionless] (velotype).

      double spxprm::awav

      (Returned) Air wavelength [m] (wavetype).

      double spxprm::velo

      (Returned) Relativistic velocity [m/s] (velotype).

      double spxprm::beta

      (Returned) Relativistic beta [dimensionless] (velotype).

      (Returned) Derivative of frequency with respect to angular frequency [/rad] (constant, $= 1 / 2 \pi$), and ...

      (Returned) ... vice versa [rad] (constant, $= 2 \pi$, always available).

      (Returned) Derivative of frequency with respect to photon energy [/J/s] (constant, $= 1/h$), and ...

      (Returned) ... vice versa [Js] (constant, $= h$, Planck's constant, always available).

      (Returned) Derivative of frequency with respect to wave number [m/s] (constant, $= c$, the speed of light in vacuuo), and ...

      (Returned) ... vice versa [s/m] (constant, $= 1/c$, always available).

      (Returned) Derivative of frequency with respect to radio velocity [/m], and ...

      (Returned) ... vice versa [m] (wavetype && velotype).

      (Returned) Derivative of frequency with respect to vacuum wavelength [/m/s], and ...

      (Returned) ... vice versa [m s] (wavetype).

      (Returned) Derivative of frequency with respect to air wavelength, [/m/s], and ...

      (Returned) ... vice versa [m s] (wavetype).

      (Returned) Derivative of frequency with respect to relativistic velocity [/m], and ...

      (Returned) ... vice versa [m] (wavetype && velotype).

      (Returned) Derivative of vacuum wavelength with respect to optical velocity [s], and ...

      (Returned) ... vice versa [/s] (wavetype && velotype).

      (Returned) Derivative of vacuum wavelength with respect to redshift [m], and ...

      (Returned) ... vice versa [/m] (wavetype && velotype).

      (Returned) Derivative of vacuum wavelength with respect to air wavelength [dimensionless], and ...

      (Returned) ... vice versa [dimensionless] (wavetype).

      (Returned) Derivative of vacuum wavelength with respect to relativistic velocity [s], and ...

      (Returned) ... vice versa [/s] (wavetype && velotype).

      (Returned) Derivative of air wavelength with respect to relativistic velocity [s], and ...

      (Returned) ... vice versa [/s] (wavetype && velotype).

      (Returned) Derivative of relativistic velocity with respect to relativistic beta [m/s] (constant, $= c$, the speed of light in vacuu0), and ...

      (Returned) ... vice versa [s/m] (constant, $= 1/c$, always available).

      struct wcserr * spxprm::err [read]

      (Returned) If enabled, when an error status is returned this struct contains detailed information about the error, see wcserr_enable().

      void *padding (An unused variable inserted for alignment purposes only.)

      Global variable: const char *spx_errmsg[] - Status return messages Error messages to match the status value returned from each function.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structtabprm.html0000644001153600020070000006444112310355626022526 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: tabprm Struct Reference

      tabprm Struct Reference

      Tabular transformation parameters. More...

      #include <tab.h>


      Data Fields

      int flag
      int M
      int * K
      int * map
      double * crval
      double ** index
      double * coord
      int nc
      int padding
      int * sense
      int * p0
      double * delta
      double * extrema
      struct wcserrerr
      int m_flag
      int m_M
      int m_N
      int set_M
      int * m_K
      int * m_map
      double * m_crval
      double ** m_index
      double ** m_indxs
      double * m_coord


      Detailed Description

      The tabprm struct contains information required to transform tabular coordinates. It consists of certain members that must be set by the user (given) and others that are set by the WCSLIB routines (returned). Some of the latter are supplied for informational purposes while others are for internal use only.

      Field Documentation

      (Given and returned) This flag must be set to zero whenever any of the following tabprm structure members are set or changed:

      This signals the initialization routine, tabset(), to recompute the returned members of the tabprm struct. tabset() will reset flag to indicate that this has been done.

      PLEASE NOTE: flag should be set to -1 when tabini() is called for the first time for a particular tabprm struct in order to initialize memory management. It must ONLY be used on the first initialization otherwise memory leaks may result.

      int tabprm::M

      (Given or returned) Number of tabular coordinate axes.

      If tabini() is used to initialize the linprm struct (as would normally be the case) then it will set M from the value passed to it as a function argument. The user should not subsequently modify it.

      int * tabprm::K

      (Given or returned) Pointer to the first element of a vector of length tabprm::M whose elements $(K_1, K_2,... K_M)$ record the lengths of the axes of the coordinate array and of each indexing vector.

      If tabini() is used to initialize the linprm struct (as would normally be the case) then it will set K from the array passed to it as a function argument. The user should not subsequently modify it.

      int * tabprm::map

      (Given) Pointer to the first element of a vector of length tabprm::M that defines the association between axis m in the M-dimensional coordinate array (1 $\leq$ m $\leq$ M) and the indices of the intermediate world coordinate and world coordinate arrays, x[] and world[], in the argument lists for tabx2s() and tabs2x().

      When x[] and world[] contain the full complement of coordinate elements in image-order, as will usually be the case, then map[m-1] == i-1 for axis i in the N-dimensional image (1 $\leq$ i $\leq$ N). In terms of the FITS keywords

      map[PVi_3a - 1] == i - 1.

      However, a different association may result if x[], for example, only contains a (relevant) subset of intermediate world coordinate elements. For example, if M == 1 for an image with N > 1, it is possible to fill x[] with the relevant coordinate element with nelem set to 1. In this case map[0] = 0 regardless of the value of i.

      double * tabprm::crval

      (Given) Pointer to the first element of a vector of length tabprm::M whose elements contain the index value for the reference pixel for each of the tabular coordinate axes.

      double ** tabprm::index

      (Given) Pointer to the first element of a vector of length tabprm::M of pointers to vectors of lengths $(K_1, K_2,... K_M)$ of 0-relative indexes (see tabprm::K).

      The address of any or all of these index vectors may be set to zero, i.e.

              index[m] == 0;
      

      this is interpreted as default indexing, i.e.

              index[m][k] = k;
      

      double * tabprm::coord

      (Given) Pointer to the first element of the tabular coordinate array, treated as though it were defined as

              double coord[K_M]...[K_2][K_1][M];
      

      (see tabprm::K) i.e. with the M dimension varying fastest so that the M elements of a coordinate vector are stored contiguously in memory.

      (Returned) Total number of coordinate vectors in the coordinate array being the product$K_1 K_2 \ldots K_M$(see tabprm::K).

      (An unused variable inserted for alignment purposes only.)

      (Returned) Pointer to the first element of a vector of length tabprm::M whose elements indicate whether the corresponding indexing vector is monotonic increasing (+1), or decreasing (-1).

      int * tabprm::p0

      (Returned) Pointer to the first element of a vector of length tabprm::M of interpolated indices into the coordinate array such that $\Upsilon_m$, as defined in Paper III, is equal to (p0[m] + 1) + tabprm::delta[m].

      double * tabprm::delta

      (Returned) Pointer to the first element of a vector of length tabprm::M of interpolated indices into the coordinate array such that $\Upsilon_m$, as defined in Paper III, is equal to (tabprm::p0[m] + 1) + delta[m].

      double * tabprm::extrema

      (Returned) Pointer to the first element of an array that records the minimum and maximum value of each element of the coordinate vector in each row of the coordinate array, treated as though it were defined as

              double extrema[K_M]...[K_2][2][M]
      

      (see tabprm::K). The minimum is recorded in the first element of the compressed $K_1$ dimension, then the maximum. This array is used by the inverse table lookup function, tabs2x(), to speed up table searches.

      struct wcserr * tabprm::err [read]

      (Returned) If enabled, when an error status is returned this struct contains detailed information about the error, see wcserr_enable().

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structwcsprm.html0000644001153600020070000024511012310355626022546 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcsprm Struct Reference

      wcsprm Struct Reference

      Coordinate transformation parameters. More...

      #include <wcs.h>


      Data Fields

      int flag
      int naxis
      double * crpix
      double * pc
      double * cdelt
      double * crval
      char(* cunit )[72]
      char(* ctype )[72]
      double lonpole
      double latpole
      double restfrq
      double restwav
      int npv
      int npvmax
      struct pvcardpv
      int nps
      int npsmax
      struct pscardps
      double * cd
      double * crota
      int altlin
      int velref
      char alt [4]
      int colnum
      int * colax
      char(* cname )[72]
      double * crder
      double * csyer
      char dateavg [72]
      char dateobs [72]
      double equinox
      double mjdavg
      double mjdobs
      double obsgeo [3]
      char radesys [72]
      char specsys [72]
      char ssysobs [72]
      double velosys
      double zsource
      char ssyssrc [72]
      double velangl
      char wcsname [72]
      int ntab
      int nwtb
      struct tabprmtab
      struct wtbarrwtb
      char lngtyp [8]
      char lattyp [8]
      int lng
      int lat
      int spec
      int cubeface
      int * types
      void * padding
      struct linprm lin
      struct celprm cel
      struct spcprm spc
      struct wcserrerr
      void * m_padding
      int m_flag
      int m_naxis
      double * m_crpix
      double * m_pc
      double * m_cdelt
      double * m_crval
      char(* m_cunit )[72]
      char((* m_ctype )[72]
      struct pvcardm_pv
      struct pscardm_ps
      double * m_cd
      double * m_crota
      int * m_colax
      char(* m_cname )[72]
      double * m_crder
      double * m_csyer
      struct tabprmm_tab
      struct wtbarrm_wtb


      Detailed Description

      The wcsprm struct contains information required to transform world coordinates. It consists of certain members that must be set by the user (given) and others that are set by the WCSLIB routines (returned). Some of the former are not actually required for transforming coordinates. These are described as "auxiliary"; the struct simply provides a place to store them, though they may be used by wcshdo() in constructing a FITS header from a wcsprm struct. Some of the returned values are supplied for informational purposes and others are for internal use only as indicated.

      In practice, it is expected that a WCS parser would scan the FITS header to determine the number of coordinate axes. It would then use wcsini() to allocate memory for arrays in the wcsprm struct and set default values. Then as it reread the header and identified each WCS keyrecord it would load the value into the relevant wcsprm array element. This is essentially what wcspih() does - refer to the prologue of wcshdr.h. As the final step, wcsset() is invoked, either directly or indirectly, to set the derived members of the wcsprm struct. wcsset() strips off trailing blanks in all string members and null-fills the character array.


      Field Documentation

      (Given and returned) This flag must be set to zero whenever any of the following wcsprm struct members are set or changed:

      This signals the initialization routine, wcsset(), to recompute the returned members of the celprm struct. celset() will reset flag to indicate that this has been done.

      PLEASE NOTE: flag should be set to -1 when wcsini() is called for the first time for a particular wcsprm struct in order to initialize memory management. It must ONLY be used on the first initialization otherwise memory leaks may result.

      (Given or returned) Number of pixel and world coordinate elements.

      If wcsini() is used to initialize the linprm struct (as would normally be the case) then it will set naxis from the value passed to it as a function argument. The user should not subsequently modify it.

      double * wcsprm::crpix

      (Given) Address of the first element of an array of double containing the coordinate reference pixel, CRPIXja.

      double * wcsprm::pc

      (Given) Address of the first element of the PCi_ja (pixel coordinate) transformation matrix. The expected order is

              struct wcsprm wcs;
              wcs.pc = {PC1_1, PC1_2, PC2_1, PC2_2};
      

      This may be constructed conveniently from a 2-D array via

              double m[2][2] = {{PC1_1, PC1_2},
                                {PC2_1, PC2_2}};
      

      which is equivalent to

              double m[2][2];
              m[0][0] = PC1_1;
              m[0][1] = PC1_2;
              m[1][0] = PC2_1;
              m[1][1] = PC2_2;
      

      The storage order for this 2-D array is the same as for the 1-D array, whence

              wcs.pc = *m;
      

      would be legitimate.

      double * wcsprm::cdelt

      (Given) Address of the first element of an array of double containing the coordinate increments, CDELTia.

      double * wcsprm::crval

      (Given) Address of the first element of an array of double containing the coordinate reference values, CRVALia.

      (Given) Address of the first element of an array of char[72] containing the CUNITia keyvalues which define the units of measurement of the CRVALia, CDELTia, and CDi_ja keywords.

      As CUNITia is an optional header keyword, cunit[][72] may be left blank but otherwise is expected to contain a standard units specification as defined by WCS Paper I. Utility function wcsutrn(), described in wcsunits.h, is available to translate commonly used non-standard units specifications but this must be done as a separate step before invoking wcsset().

      For celestial axes, if cunit[][72] is not blank, wcsset() uses wcsunits() to parse it and scale cdelt[], crval[], and cd[][*] to degrees. It then resets cunit[][72] to "deg".

      For spectral axes, if cunit[][72] is not blank, wcsset() uses wcsunits() to parse it and scale cdelt[], crval[], and cd[][*] to SI units. It then resets cunit[][72] accordingly.

      wcsset() ignores cunit[][72] for other coordinate types; cunit[][72] may be used to label coordinate values.

      These variables accomodate the longest allowed string-valued FITS keyword, being limited to 68 characters, plus the null-terminating character.

      (Given) Address of the first element of an array of char[72] containing the coordinate axis types, CTYPEia.

      The ctype[][72] keyword values must be in upper case and there must be zero or one pair of matched celestial axis types, and zero or one spectral axis. The ctype[][72] strings should be padded with blanks on the right and null-terminated so that they are at least eight characters in length.

      These variables accomodate the longest allowed string-valued FITS keyword, being limited to 68 characters, plus the null-terminating character.

      (Given and returned) The native longitude of the celestial pole, $\phi_{\mathrm p}$, given by LONPOLEa [deg] or by PVi_2a [deg] attached to the longitude axis which takes precedence if defined, and ...

      (Given and returned) ... the native latitude of the celestial pole, $\theta_{\mathrm p}$, given by LATPOLEa [deg] or by PVi_3a [deg] attached to the longitude axis which takes precedence if defined.

      lonpole and latpole may be left to default to values set by wcsini() (see celprm::ref), but in any case they will be reset by wcsset() to the values actually used. Note therefore that if the wcsprm struct is reused without resetting them, whether directly or via wcsini(), they will no longer have their default values.

      (Given) The rest frequency [Hz], and/or ...

      (Given) ... the rest wavelength in vacuuo [m], only one of which need be given, the other should be set to zero.

      (Given) The number of entries in the wcsprm::pv[] array.

      (Given or returned) The length of the wcsprm::pv[] array.

      npvmax will be set by wcsini() if it allocates memory for wcsprm::pv[], otherwise it must be set by the user. See also wcsnpv().

      struct pvcard * wcsprm::pv [read]

      (Given or returned) Address of the first element of an array of length npvmax of pvcard structs. Set by wcsini() if it allocates memory for pv[], otherwise it must be set by the user. See also wcsnpv().

      As a FITS header parser encounters each PVi_ma keyword it should load it into a pvcard struct in the array and increment npv. wcsset() interprets these as required.

      Note that, if they were not given, wcsset() resets the entries for PVi_1a, PVi_2a, PVi_3a, and PVi_4a for longitude axis i to match phi_0 and theta_0 (the native longitude and latitude of the reference point), LONPOLEa and LATPOLEa respectively.

      (Given) The number of entries in the wcsprm::ps[] array.

      (Given or returned) The length of the wcsprm::ps[] array.

      npsmax will be set by wcsini() if it allocates memory for wcsprm::ps[], otherwise it must be set by the user. See also wcsnps().

      struct pscard * wcsprm::ps [read]

      (Given or returned) Address of the first element of an array of length npsmax of pscard structs. Set by wcsini() if it allocates memory for ps[], otherwise it must be set by the user. See also wcsnps().

      As a FITS header parser encounters each PSi_ma keyword it should load it into a pscard struct in the array and increment nps. wcsset() interprets these as required (currently no PSi_ma keyvalues are recognized).

      double * wcsprm::cd

      (Given) For historical compatibility, the wcsprm struct supports two alternate specifications of the linear transformation matrix, those associated with the CDi_ja keywords, and ...

      double * wcsprm::crota

      (Given) ... those associated with the CROTAia keywords. Although these may not formally co-exist with PCi_ja, the approach taken here is simply to ignore them if given in conjunction with PCi_ja.

      (Given) altlin is a bit flag that denotes which of the PCi_ja, CDi_ja and CROTAia keywords are present in the header:

      • Bit 0: PCi_ja is present.

      • Bit 1: CDi_ja is present.

        Matrix elements in the IRAF convention are equivalent to the product CDi_ja = CDELTia * PCi_ja, but the defaults differ from that of the PCi_ja matrix. If one or more CDi_ja keywords are present then all unspecified CDi_ja default to zero. If no CDi_ja (or CROTAia) keywords are present, then the header is assumed to be in PCi_ja form whether or not any PCi_ja keywords are present since this results in an interpretation of CDELTia consistent with the original FITS specification.

        While CDi_ja may not formally co-exist with PCi_ja, it may co-exist with CDELTia and CROTAia which are to be ignored.

      • Bit 2: CROTAia is present.

        In the AIPS convention, CROTAia may only be associated with the latitude axis of a celestial axis pair. It specifies a rotation in the image plane that is applied AFTER the CDELTia; any other CROTAia keywords are ignored.

        CROTAia may not formally co-exist with PCi_ja.

        CROTAia and CDELTia may formally co-exist with CDi_ja but if so are to be ignored.

      CDi_ja and CROTAia keywords, if found, are to be stored in the wcsprm::cd and wcsprm::crota arrays which are dimensioned similarly to wcsprm::pc and wcsprm::cdelt. FITS header parsers should use the following procedure:

      • Whenever a PCi_ja keyword is encountered:
         altlin |= 1; 
        

      • Whenever a CDi_ja keyword is encountered:
         altlin |= 2; 
        

      • Whenever a CROTAia keyword is encountered:
         altlin |= 4; 
        

      If none of these bits are set the PCi_ja representation results, i.e. wcsprm::pc and wcsprm::cdelt will be used as given.

      These alternate specifications of the linear transformation matrix are translated immediately to PCi_ja by wcsset() and are invisible to the lower-level WCSLIB routines. In particular, wcsset() resets wcsprm::cdelt to unity if CDi_ja is present (and no PCi_ja).

      If CROTAia are present but none is associated with the latitude axis (and no PCi_ja or CDi_ja), then wcsset() reverts to a unity PCi_ja matrix.

      (Given) AIPS velocity code VELREF, refer to spcaips().

      (Given, auxiliary) Character code for alternate coordinate descriptions (i.e. the 'a' in keyword names such as CTYPEia). This is blank for the primary coordinate description, or one of the 26 upper-case letters, A-Z.

      An array of four characters is provided for alignment purposes, only the first is used.

      (Given, auxiliary) Where the coordinate representation is associated with an image-array column in a FITS binary table, this variable may be used to record the relevant column number.

      It should be set to zero for an image header or pixel list.

      (Given, auxiliary) Address of the first element of an array of int recording the column numbers for each axis in a pixel list.

      The array elements should be set to zero for an image header or image array in a binary table.

      (Given, auxiliary) The address of the first element of an array of char[72] containing the coordinate axis names, CNAMEia.

      These variables accomodate the longest allowed string-valued FITS keyword, being limited to 68 characters, plus the null-terminating character.

      double * wcsprm::crder

      (Given, auxiliary) Address of the first element of an array of double recording the random error in the coordinate value, CRDERia.

      double * wcsprm::csyer

      (Given, auxiliary) Address of the first element of an array of double recording the systematic error in the coordinate value, CSYERia.

      (Given, auxiliary) The date of a representative mid-point of the observation in ISO format, yyyy-mm-ddThh:mm:ss.

      (Given, auxiliary) The date of the start of the observation unless otherwise explained in the comment field of the DATE-OBS keyword, in ISO format, yyyy-mm-ddThh:mm:ss.

      (Given, auxiliary) The equinox associated with dynamical equatorial or ecliptic coordinate systems, EQUINOXa (or EPOCH in older headers). Not applicable to ICRS equatorial or ecliptic coordinates.

      (Given, auxiliary) Modified Julian Date (MJD = JD - 2400000.5), MJD-AVG, corresponding to DATE-AVG.

      (Given, auxiliary) Modified Julian Date (MJD = JD - 2400000.5), MJD-OBS, corresponding to DATE-OBS.

      (Given, auxiliary) Location of the observer in a standard terrestrial reference frame, OBSGEO-X, OBSGEO-Y, OBSGEO-Z [m].

      (Given, auxiliary) The equatorial or ecliptic coordinate system type, RADESYSa.

      (Given, auxiliary) Spectral reference frame (standard of rest), SPECSYSa, and ...

      (Given, auxiliary) ... the actual frame in which there is no differential variation in the spectral coordinate across the field-of-view, SSYSOBSa.

      (Given, auxiliary) The relative radial velocity [m/s] between the observer and the selected standard of rest in the direction of the celestial reference coordinate, VELOSYSa.

      (Given, auxiliary) The redshift, ZSOURCEa, of the source, and ...

      (Given, auxiliary) ... the spectral reference frame (standard of rest) in which this was measured, SSYSSRCa.

      (Given, auxiliary) The angle [deg] that should be used to decompose an observed velocity into radial and transverse components.

      (Given, auxiliary) The name given to the coordinate representation, WCSNAMEa. This variable accomodates the longest allowed string-valued FITS keyword, being limited to 68 characters, plus the null-terminating character.

      (Given) See wcsprm::tab.

      (Given) See wcsprm::wtb.

      struct tabprm * wcsprm::tab [read]

      (Given) Address of the first element of an array of ntab tabprm structs for which memory has been allocated. These are used to store tabular transformation parameters.

      Although technically wcsprm::ntab and tab are "given", they will normally be set by invoking wcstab(), whether directly or indirectly.

      The tabprm structs contain some members that must be supplied and others that are derived. The information to be supplied comes primarily from arrays stored in one or more FITS binary table extensions. These arrays, referred to here as "wcstab arrays", are themselves located by parameters stored in the FITS image header.

      struct wtbarr * wcsprm::wtb [read]

      (Given) Address of the first element of an array of nwtb wtbarr structs for which memory has been allocated. These are used in extracting wcstab arrays from a FITS binary table.

      Although technically wcsprm::nwtb and wtb are "given", they will normally be set by invoking wcstab(), whether directly or indirectly.

      (Returned) Four-character WCS celestial longitude and ...

      (Returned) ... latitude axis types. e.g. "RA", "DEC", "GLON", "GLAT", etc. extracted from 'RA--', 'DEC-', 'GLON', 'GLAT', etc. in the first four characters of CTYPEia but with trailing dashes removed. (Declared as char[8] for alignment reasons.)

      (Returned) Index for the longitude coordinate, and ...

      (Returned) ... index for the latitude coordinate, and ...

      (Returned) ... index for the spectral coordinate in the imgcrd[][] and world[][] arrays in the API of wcsp2s(), wcss2p() and wcsmix().

      These may also serve as indices into the pixcrd[][] array provided that the PCi_ja matrix does not transpose axes.

      (Returned) Index into the pixcrd[][] array for the CUBEFACE axis. This is used for quadcube projections where the cube faces are stored on a separate axis (see wcs.h).

      (Returned) Address of the first element of an array of int containing a four-digit type code for each axis.

      • First digit (i.e. 1000s):
        • 0: Non-specific coordinate type.
        • 1: Stokes coordinate.
        • 2: Celestial coordinate (including CUBEFACE).
        • 3: Spectral coordinate.

      • Second digit (i.e. 100s):
        • 0: Linear axis.
        • 1: Quantized axis (STOKES, CUBEFACE).
        • 2: Non-linear celestial axis.
        • 3: Non-linear spectral axis.
        • 4: Logarithmic axis.
        • 5: Tabular axis.

      • Third digit (i.e. 10s):
        • 0: Group number, e.g. lookup table number, being an index into the tabprm array (see above).

      • The fourth digit is used as a qualifier depending on the axis type.

        • For celestial axes:
          • 0: Longitude coordinate.
          • 1: Latitude coordinate.
          • 2: CUBEFACE number.

        • For lookup tables: the axis number in a multidimensional table.

      CTYPEia in "4-3" form with unrecognized algorithm code will have its type set to -1 and generate an error.

      void *padding (An unused variable inserted for alignment purposes only.)

      struct linprm wcsprm::lin [read]

      (Returned) Linear transformation parameters (usage is described in the prologue to lin.h).

      struct celprm wcsprm::cel [read]

      (Returned) Celestial transformation parameters (usage is described in the prologue to cel.h).

      struct spcprm wcsprm::spc [read]

      (Returned) Spectral transformation parameters (usage is described in the prologue to spc.h).

      struct wcserr * wcsprm::err [read]

      (Returned) If enabled, when an error status is returned this struct contains detailed information about the error, see wcserr_enable().

      void *m_padding (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      double * wcsprm::m_crpix

      (For internal use only.)

      double * wcsprm::m_pc

      (For internal use only.)

      double * wcsprm::m_cdelt

      (For internal use only.)

      double * wcsprm::m_crval

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      struct pvcard * wcsprm::m_pv [read]

      (For internal use only.)

      struct pscard * wcsprm::m_ps [read]

      (For internal use only.)

      double * wcsprm::m_cd

      (For internal use only.)

      double * wcsprm::m_crota

      (For internal use only.)

      (For internal use only.)

      (For internal use only.)

      double * wcsprm::m_crder

      (For internal use only.)

      double * wcsprm::m_csyer

      (For internal use only.)

      struct tabprm * wcsprm::m_tab [read]

      (For internal use only.)

      struct wtbarr * wcsprm::m_wtb [read]

      (For internal use only.)


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/structwtbarr.html0000644001153600020070000002621412310355626022536 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wtbarr Struct Reference

      wtbarr Struct Reference

      Extraction of coordinate lookup tables from BINTABLE. More...

      #include <getwcstab.h>


      Data Fields

      int i
      int m
      int kind
      char extnam [72]
      int extver
      int extlev
      char ttype [72]
      long row
      int ndim
      int * dimlen
      double ** arrayp


      Detailed Description

      Function wcstab(), which is invoked automatically by wcspih(), sets up an array of wtbarr structs to assist in extracting coordinate lookup tables from a binary table extension (BINTABLE) and copying them into the tabprm structs stored in wcsprm. Refer to the usage notes for wcspih() and wcstab() in wcshdr.h, and also the prologue to tab.h.

      For C++ usage, because of a name space conflict with the wtbarr typedef defined in CFITSIO header fitsio.h, the wtbarr struct is renamed to wtbarr_s by preprocessor macro substitution with scope limited to wcs.h itself.


      Field Documentation

      int wtbarr::i

      (Given) Image axis number.

      int wtbarr::m

      (Given) wcstab array axis number for index vectors.

      (Given) Character identifying the wcstab array type:

      • c: coordinate array,
      • i: index vector.

      (Given) EXTNAME identifying the binary table extension.

      (Given) EXTVER identifying the binary table extension.

      (Given) EXTLEV identifying the binary table extension.

      (Given) TTYPEn identifying the column of the binary table that contains the wcstab array.

      (Given) Table row number.

      (Given) Expected dimensionality of the wcstab array.

      (Given) Address of the first element of an array of int of length ndim into which the wcstab array axis lengths are to be written.

      double ** wtbarr::arrayp

      (Given) Pointer to an array of double which is to be allocated by the user and into which the wcstab array is to be written.


      Generated on Mon Feb 6 10:41:58 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/tab_8h-source.html0000644001153600020070000020236712310355626022440 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: tab.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/tab_8h.html0000644001153600020070000013063312310355626021136 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: tab.h File Reference

      tab.h File Reference

      #include "wcserr.h"

      Go to the source code of this file.

      Data Structures

      struct  tabprm
       Tabular transformation parameters. More...

      Defines

      #define TABLEN   (sizeof(struct tabprm)/sizeof(int))
       Size of the tabprm struct in int units.
      #define tabini_errmsg   tab_errmsg
       Deprecated.
      #define tabcpy_errmsg   tab_errmsg
       Deprecated.
      #define tabfree_errmsg   tab_errmsg
       Deprecated.
      #define tabprt_errmsg   tab_errmsg
       Deprecated.
      #define tabset_errmsg   tab_errmsg
       Deprecated.
      #define tabx2s_errmsg   tab_errmsg
       Deprecated.
      #define tabs2x_errmsg   tab_errmsg
       Deprecated.

      Enumerations

      enum  tab_errmsg_enum {
        TABERR_SUCCESS = 0, TABERR_NULL_POINTER = 1, TABERR_MEMORY = 2, TABERR_BAD_PARAMS = 3,
        TABERR_BAD_X = 4, TABERR_BAD_WORLD = 5
      }

      Functions

      int tabini (int alloc, int M, const int K[], struct tabprm *tab)
       Default constructor for the tabprm struct.
      int tabmem (struct tabprm *tab)
       Acquire tabular memory.
      int tabcpy (int alloc, const struct tabprm *tabsrc, struct tabprm *tabdst)
       Copy routine for the tabprm struct.
      int tabfree (struct tabprm *tab)
       Destructor for the tabprm struct.
      int tabprt (const struct tabprm *tab)
       Print routine for the tabprm struct.
      int tabset (struct tabprm *tab)
       Setup routine for the tabprm struct.
      int tabx2s (struct tabprm *tab, int ncoord, int nelem, const double x[], double world[], int stat[])
       Pixel-to-world transformation.
      int tabs2x (struct tabprm *tab, int ncoord, int nelem, const double world[], double x[], int stat[])
       World-to-pixel transformation.

      Variables

      const char * tab_errmsg []
       Status return messages.


      Detailed Description

      These routines implement the part of the FITS WCS standard that deals with tabular coordinates, i.e. coordinates that are defined via a lookup table. They define methods to be used for computing tabular world coordinates from intermediate world coordinates (a linear transformation of image pixel coordinates), and vice versa. They are based on the tabprm struct which contains all information needed for the computations. The struct contains some members that must be set by the user, and others that are maintained by these routines, somewhat like a C++ class but with no encapsulation.

      tabini(), tabmem(), tabcpy(), and tabfree() are provided to manage the tabprm struct, and another, tabprt(), to print its contents.

      A setup routine, tabset(), computes intermediate values in the tabprm struct from parameters in it that were supplied by the user. The struct always needs to be set up by tabset() but it need not be called explicitly - refer to the explanation of tabprm::flag.

      tabx2s() and tabs2x() implement the WCS tabular coordinate transformations.

      Accuracy:
      No warranty is given for the accuracy of these routines (refer to the copyright notice); intending users must satisfy for themselves their adequacy for the intended purpose. However, closure effectively to within double precision rounding error was demonstrated by test routine ttab.c which accompanies this software.


      Define Documentation

      #define TABLEN   (sizeof(struct tabprm)/sizeof(int))

      Size of the tabprm struct in int units, used by the Fortran wrappers.

      #define tabini_errmsg   tab_errmsg

      Deprecated:
      Added for backwards compatibility, use tab_errmsg directly now instead.

      #define tabcpy_errmsg   tab_errmsg

      Deprecated:
      Added for backwards compatibility, use tab_errmsg directly now instead.

      #define tabfree_errmsg   tab_errmsg

      Deprecated:
      Added for backwards compatibility, use tab_errmsg directly now instead.

      #define tabprt_errmsg   tab_errmsg

      Deprecated:
      Added for backwards compatibility, use tab_errmsg directly now instead.

      #define tabset_errmsg   tab_errmsg

      Deprecated:
      Added for backwards compatibility, use tab_errmsg directly now instead.

      #define tabx2s_errmsg   tab_errmsg

      Deprecated:
      Added for backwards compatibility, use tab_errmsg directly now instead.

      #define tabs2x_errmsg   tab_errmsg

      Deprecated:
      Added for backwards compatibility, use tab_errmsg directly now instead.


      Enumeration Type Documentation

      Enumerator:
      TABERR_SUCCESS 
      TABERR_NULL_POINTER 
      TABERR_MEMORY 
      TABERR_BAD_PARAMS 
      TABERR_BAD_X 
      TABERR_BAD_WORLD 


      Function Documentation

      int tabini ( int  alloc,
      int  M,
      const int  K[],
      struct tabprm tab 
      )

      tabini() allocates memory for arrays in a tabprm struct and sets all members of the struct to default values.

      PLEASE NOTE: every tabprm struct should be initialized by tabini(), possibly repeatedly. On the first invokation, and only the first invokation, the flag member of the tabprm struct must be set to -1 to initialize memory management, regardless of whether tabini() will actually be used to allocate memory.

      Parameters:
      [in] alloc If true, allocate memory unconditionally for arrays in the tabprm struct.
      If false, it is assumed that pointers to these arrays have been set by the user except if they are null pointers in which case memory will be allocated for them regardless. (In other words, setting alloc true saves having to initalize these pointers to zero.)
      [in] M The number of tabular coordinate axes.
      [in] K Vector of length M whose elements $(K_1, K_2,... K_M)$ record the lengths of the axes of the coordinate array and of each indexing vector. M and K[] are used to determine the length of the various tabprm arrays and therefore the amount of memory to allocate for them. Their values are copied into the tabprm struct.
      It is permissible to set K (i.e. the address of the array) to zero which has the same effect as setting each element of K[] to zero. In this case no memory will be allocated for the index vectors or coordinate array in the tabprm struct. These together with the K vector must be set separately before calling tabset().
      [in,out] tab Tabular transformation parameters. Note that, in order to initialize memory management tabprm::flag should be set to -1 when tab is initialized for the first time (memory leaks may result if it had already been initialized).
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null tabprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Invalid tabular parameters.
      For returns > 1, a detailed error message is set in tabprm::err if enabled, see wcserr_enable().

      int tabmem ( struct tabprm tab  ) 

      tabmem() takes control of memory allocated by the user for arrays in the tabprm struct.

      Parameters:
      [in,out] tab Tabular transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null tabprm pointer passed.
      • 2: Memory allocation failed.
      For returns > 1, a detailed error message is set in tabprm::err if enabled, see wcserr_enable().

      int tabcpy ( int  alloc,
      const struct tabprm tabsrc,
      struct tabprm tabdst 
      )

      tabcpy() does a deep copy of one tabprm struct to another, using tabini() to allocate memory for its arrays if required. Only the "information to be provided" part of the struct is copied; a call to tabset() is required to set up the remainder.

      Parameters:
      [in] alloc If true, allocate memory unconditionally for arrays in the tabprm struct.
      If false, it is assumed that pointers to these arrays have been set by the user except if they are null pointers in which case memory will be allocated for them regardless. (In other words, setting alloc true saves having to initalize these pointers to zero.)
      [in] tabsrc Struct to copy from.
      [in,out] tabdst Struct to copy to. tabprm::flag should be set to -1 if tabdst was not previously initialized (memory leaks may result if it was previously initialized).
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null tabprm pointer passed.
      • 2: Memory allocation failed.
      For returns > 1, a detailed error message is set in tabprm::err (associated with tabdst) if enabled, see wcserr_enable().

      int tabfree ( struct tabprm tab  ) 

      tabfree() frees memory allocated for the tabprm arrays by tabini(). tabini() records the memory it allocates and tabfree() will only attempt to free this.

      PLEASE NOTE: tabfree() must not be invoked on a tabprm struct that was not initialized by tabini().

      Parameters:
      [out] tab Coordinate transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null tabprm pointer passed.

      int tabprt ( const struct tabprm tab  ) 

      tabprt() prints the contents of a tabprm struct using wcsprintf(). Mainly intended for diagnostic purposes.

      Parameters:
      [in] tab Tabular transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null tabprm pointer passed.

      int tabset ( struct tabprm tab  ) 

      tabset() allocates memory for work arrays in the tabprm struct and sets up the struct according to information supplied within it.

      Note that this routine need not be called directly; it will be invoked by tabx2s() and tabs2x() if tabprm::flag is anything other than a predefined magic value.

      Parameters:
      [in,out] tab Tabular transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null tabprm pointer passed.
      • 3: Invalid tabular parameters.
      For returns > 1, a detailed error message is set in tabprm::err if enabled, see wcserr_enable().

      int tabx2s ( struct tabprm tab,
      int  ncoord,
      int  nelem,
      const double  x[],
      double  world[],
      int  stat[] 
      )

      tabx2s() transforms intermediate world coordinates to world coordinates using coordinate lookup.

      Parameters:
      [in,out] tab Tabular transformation parameters.
      [in] ncoord,nelem The number of coordinates, each of vector length nelem.
      [in] x Array of intermediate world coordinates, SI units.
      [out] world Array of world coordinates, in SI units.
      [out] stat Status return value status for each coordinate:
      • 0: Success.
      • 1: Invalid intermediate world coordinate.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null tabprm pointer passed.
      • 3: Invalid tabular parameters.
      • 4: One or more of the x coordinates were invalid, as indicated by the stat vector.
      For returns > 1, a detailed error message is set in tabprm::err if enabled, see wcserr_enable().

      int tabs2x ( struct tabprm tab,
      int  ncoord,
      int  nelem,
      const double  world[],
      double  x[],
      int  stat[] 
      )

      tabs2x() transforms world coordinates to intermediate world coordinates.

      Parameters:
      [in,out] tab Tabular transformation parameters.
      [in] ncoord,nelem The number of coordinates, each of vector length nelem.
      [in] world Array of world coordinates, in SI units.
      [out] x Array of intermediate world coordinates, SI units.
      [out] stat Status return value status for each vector element:
      • 0: Success.
      • 1: Invalid world coordinate.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null tabprm pointer passed.
      • 3: Invalid tabular parameters.
      • 5: One or more of the world coordinates were invalid, as indicated by the stat vector.
      For returns > 1, a detailed error message is set in tabprm::err if enabled, see wcserr_enable().


      Variable Documentation

      const char * tab_errmsg[]

      Error messages to match the status value returned from each function.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/tab_b.gif0000644001153600020070000000004312310355626020630 0ustar cslocumSTSCI\science00000000000000GIF89a€„°Ç,D;pywcs-1.12/wcslib/html/tab_l.gif0000644001153600020070000000130212310355626020641 0ustar cslocumSTSCI\science00000000000000GIF89a ,Õö÷ùñô÷öøúüýþúûüùúûøùúêïóïóöÆÕßÒÞæØâéÞçíÝæìåìñèîòô÷ùóöø³ÈÕÁÒÝËÙâÏÜäÖá薴ŹɯÂÍ»ÎÙÃÔÞÂÓÝÈ×àÌÚâÕáèÙäê×âèåìðëðó„°ÇÑÞåÜæëãëïëñôîóõ÷úûûüüÿÿÿþþþ, ,ÿ@–P±É`H$!%CqVe2X­ŠÌJ(“Ä +€˜3 2$ÀÆ ¼kvŠä-Ëçõu*…"}ã|}|~q(" $f„ 'Žl(Œ&&$r‘™ › & ! )¢¤›{¨£¥r­ª°©¯„±¯¬´¦·»º³®«§¾¶ÃÂÀ¿²¹ÇÄËÆ²ÌÉεҽͼ„ÔÈÓ×иÙÝÕÏÙÊâÜßãçæê¾äÛÅëÇíáîÖìéïøñ÷õüÑðåùü¤Pß?‚ƒœÇÛBm åAœÎáÀ†%V܈î!Çk÷Ø/áÄ;^¤¨²$Æ–#Mf)f͇(WÎL‰“æKçÒ„° ’I)L:eD ¡Cµ´x*4 U¨h  %A«£^ÁNKb¬Ùe§X±‚´k»x!ÁÖí—2tÝÖ !¯š5tÛæé—À]$¬´%ƒXíâ.i[¬]Y­•ÊfžEëõkg`µ††:zëçÒž;£}ºµj×aa‹–Mš¶é׸cçž½»vïÛºƒóî›8ðáÈ‹'?®¼9óç©G_>Ýyuè¬_ßž]zwêß­‡Ç¾º¼mîæµG~½ûôÞთ/ž>ùööÙ«Ïÿ¿ÿýÿÅà|ÖWà}v;pywcs-1.12/wcslib/html/tab_r.gif0000644001153600020070000000503112310355626020652 0ustar cslocumSTSCI\science00000000000000GIF89a,Õö÷ùñô÷öøúüýþúûüùúûøùúêïóïóöÆÕßÒÞæØâéÞçíÝæìåìñèîòô÷ùóöø³ÈÕÁÒÝËÙâÏÜäÖá薴ŹɯÂÍ»ÎÙÃÔÞÂÓÝÈ×àÌÚâÕáèÙäê×âèåìðëðó„°ÇÑÞåÜæëãëïëñôîóõ÷úûûüüÿÿÿþþþ,,ÿ@’pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬v •h<¬pkL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~ÏwVa+‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ “*)^,*ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂö)'ÆÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæÚ¥(" ðñòóôõö÷øùúûüýþÿ H° ÁƒòK"ƒRHœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\éÅu&@€ Á²¦Í›8sêÜɳ§Oÿ–(±€DУH“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯S84± ‰hÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€Ó} âDÌf(^̸±ãÇ#KžL¹²å˘3kÞ̹³çÏ C‹m¹ðCÄHœXͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N÷ÃJ” Á®¹óçУKŸN½ºõëØ³kßν»÷ïàËO¾úñ€ dÇ@€‚‚L¤"ÉÈF:ò‘Œ¤$9† (8…&ÉÉNzò“  ¥(G©FB^²!˨)WÉÊVºò•°l¤)1™ wÄò–¸Ì¥.wÊYºäƒà¥0‡IÌbó¾|ÉHpÌf:ó™Ðìe pJ±ˆ€}Ȧ6·ÉÍnzó›à §8û0Â%"¸æ8×ÉÎvºóðŒ§<ÉPÎQ`ò%×$€>÷ÉÏ~úóŸ ¨@JЂô M¨BÊІ:ô¡¨D'ZPKF Ö¼&16ÊÑŽzô£ ©HGJRb ÷Lç5ÏÁÒ–ºô¥ÿ0©LgJÓšš#(e>¯‰Óžúô§@ ªP‡JÔ¢õ¨HMªR—ÊÔ¦:õ©PªT§JÕª&5;%U·ÊÕ®zõ«` «XÇJV«ÂC§‹ÑjY×ÊÖ¶ºõ­p«\ŠU´À¦xÍ«^÷Ê×¾úõ¯ÐÀi)$‚”ô°ˆM¬bËØÆ:vˆ, ಘͬf7ËÙÎzö³  ­hGKÚÒšö´¨M­jWËÚÖºöµ°­*$ÛSPô¶¸Í­nwËÛÞúö·ÀÅm +„â¸ÈM®r—ËÜæ:÷¹ÐE®?±9ÏêZ÷ºØÍ®v¿9€î"‚ºÛ ¯xÇKÞòb—™ÑLÿ¯z×Ë^A¢·½ð¯|ç†÷Ò÷¾øÍ¯0í«ßþú÷¿¡ä/€Là»×ÀN°‚ï(à;øÁ n0„'LaýJ¸ÂÎ0{/¬á{ؘþ°ˆG|Ë“øÄ(¥‰SÌâCrÅ.ޱŒ ãÛøÆv¬1ŽwÌc6ê¸Ç@ÞñƒLd¹ÈHNñ‘“Ìd/¹ÉPÎð“£LeO¹ÊXŽp–·|â+sùËýõ2˜ÇL_1“ùÌí53š×M5³ùÍÇt3œç¼_:ÛÙÂwÎs™õÌgøÊ¹Ï€p ýÌ?úÐ/F´¢ë¼èFãÒÐŽŽt!-éJã‘Ò–Îô1­éN»‘ÓžuÿA-êP“ºÔ>5ª3­êUWºÕ®Ž4¬cÝèYÓZѶ¾õ¡s­ëAóº×€þ5°ù,ìaç¹ØÆ¶3²“=çe3ûÍÎ~öš£-í3S»Úc¾6¶¿¬ímo¹ÛÞÆ2¸ÃMåq“Êæ>7“Ó­n$³»ÝD~7¼,ïyó¸ÞöÆ1¾ómã}óÛÈÿvµ¿Þâ\É/µÁNâ…3ÜÉ÷´Ã#Þá‰S\ÊguÆ-mñO¸ã0ÈC¾à‘“\Ë'_´ÉS^à•³|À.ùc.ó0לÐ4¿9~s®ó=÷¼Ï<ÿy|ƒ.ô4]ÏD?ºz“®ô67]ÙO§3Ó£ÞÌ©SÄW‡vÖÙl>õ­3Úëdî:Øu)ö±?ÚìÙF;˜Ë®öW²½í­|;ÜW)÷¹²îvtÞ˽w¾÷Ý|à×=xÂÞÝA;pywcs-1.12/wcslib/html/tabs.css0000644001153600020070000000334212310355626020542 0ustar cslocumSTSCI\science00000000000000/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ DIV.tabs { float : left; width : 100%; background : url("tab_b.gif") repeat-x bottom; margin-bottom : 4px; } DIV.tabs UL { margin : 0px; padding-left : 10px; list-style : none; } DIV.tabs LI, DIV.tabs FORM { display : inline; margin : 0px; padding : 0px; } DIV.tabs FORM { float : right; } DIV.tabs A { float : left; background : url("tab_r.gif") no-repeat right top; border-bottom : 1px solid #84B0C7; font-size : x-small; font-weight : bold; text-decoration : none; } DIV.tabs A:hover { background-position: 100% -150px; } DIV.tabs A:link, DIV.tabs A:visited, DIV.tabs A:active, DIV.tabs A:hover { color: #1A419D; } DIV.tabs SPAN { float : left; display : block; background : url("tab_l.gif") no-repeat left top; padding : 5px 9px; white-space : nowrap; } DIV.tabs INPUT { float : right; display : inline; font-size : 1em; } DIV.tabs TD { font-size : x-small; font-weight : bold; text-decoration : none; } /* Commented Backslash Hack hides rule from IE5-Mac \*/ DIV.tabs SPAN {float : none;} /* End IE5-Mac hack */ DIV.tabs A:hover SPAN { background-position: 0% -150px; } DIV.tabs LI.current A { background-position: 100% -150px; border-width : 0px; } DIV.tabs LI.current SPAN { background-position: 0% -150px; padding-bottom : 6px; } DIV.navpath { background : none; border : none; border-bottom : 1px solid #84B0C7; } pywcs-1.12/wcslib/html/testing.html0000644001153600020070000001776412310355626021457 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Example code, testing and verification

      Example code, testing and verification

      WCSLIB has an extensive test suite that also provides programming templates as well as demonstrations. Test programs, with names that indicate the main WCSLIB routine under test, reside in ./{C,Fortran}/test and each contains a brief description of its purpose.

      The high- and middle-level test programs are more instructive for applications programming, while the low-level tests are vital for verifying the integrity of the mathematical routines.

      • High level:
        twcstab provides an example of high-level applications programming using WCSLIB and CFITSIO. It constructs an input FITS test file, specifically for testing TAB coordinates, partly using wcstab.keyrec, and then extracts the coordinate description from it following the steps outlined in wcshdr.h.

        tpih1 and tpih2 verify wcspih(). The first prints the contents of the structs returned by wcspih() using wcsprt() and the second uses cpgsbox() to draw coordinate graticules. Input for these comes from a FITS WCS test header implemented as a list of keyrecords, wcs.keyrec, one keyrecord per line, together with a program, tofits, that compiles these into a valid FITS file.

        tfitshdr also uses wcs.keyrec to test the generic FITS header parsing routine.

        twcsfix sets up a wcsprm struct containing various non-standard constructs and then invokes wcsfix() to translate them all to standard usage.

      • Middle level:
        twcs tests closure of wcss2p() and wcsp2s() for a number of selected projections. twcsmix verifies wcsmix() on the $1^\circ$ grid of celestial longitude and latitude for a number of selected projections. It plots a test grid for each projection and indicates the location of successful and failed solutions. twcssub tests the extraction of a coordinate description for a subimage from a wcsprm struct by wcssub().

        tunits tests wcsutrne(), wcsunitse() and wcsulexe(), the units specification translator, converter and parser, either interactively or using a list of units specifications contained in units_test.

      • Low level:
        tlin, tlog, tprj1, tsph, tspc, tspc, and ttab1 test "closure" of the respective routines. Closure tests apply the forward and reverse transformations in sequence and compare the result with the original value. Ideally, the result should agree exactly, but because of floating point rounding errors there is usually a small discrepancy so it is only required to agree within a "closure tolerance".

        tprj1 tests for closure separately for longitude and latitude except at the poles where it only tests for closure in latitude. Note that closure in longitude does not deal with angular displacements on the sky. This is appropriate for many projections such as the cylindricals where circumpolar parallels are projected at the same length as the equator. On the other hand, tsph does test for closure in angular displacement.

        The tolerance for reporting closure discrepancies is set at $10^{-10}$ degree for most projections; this is slightly less than 3 microarcsec. The worst case closure figure is reported for each projection and this is usually better than the reporting tolerance by several orders of magnitude. tprj1 and tsph test closure at all points on the $1^\circ$ grid of native longitude and latitude and to within $5^\circ$ of any latitude of divergence for those projections that cannot represent the full sphere. Closure is also tested at a sequence of points close to the reference point (tprj1) or pole (tsph).

        Closure has been verified at all test points for SUN workstations. However, non-closure may be observed for other machines near native latitude $-90^\circ$ for the zenithal, cylindrical and conic equal area projections (ZEA, CEA and COE), and near divergent latitudes of projections such as the azimuthal perspective and stereographic projections (AZP and STG). Rounding errors may also carry points between faces of the quad-cube projections (CSC, QSC, and TSC). Although such excursions may produce long lists of non-closure points, this is not necessarily indicative of a fundamental problem.

        Note that the inverse of the COBE quad-qube projection (CSC) is a polynomial approximation and its closure tolerance is intrinsically poor.

        Although tests for closure help to verify the internal consistency of the routines they do not verify them in an absolute sense. This is partly addressed by tcel1, tcel2, tprj2, ttab2 and ttab3 which plot graticules for visual inspection of scaling, orientation, and other macroscopic characteristics of the projections.

      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/threads.html0000644001153600020070000000750712310355626021426 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Thread-safety

      Thread-safety

      With the following exceptions WCSLIB 4.10 is thread-safe:

      • The C code generated by Flex is not re-entrant. Flex does have the capacity for producing re-entrant scanners but they have a different API. This may be handled by a compile-time option in future but in the meantime calls to the header parsers should be serialized via a mutex.

      • The low-level functions wcsnpv() and wcsnps() are not thread-safe but within the library itself they are only used by the Flex scanners wcspih() and wcsbth(). They would rarely need to be used by application programmers.

      • Diagnostic functions that print the contents of the various structs, namely celprt(), linprt(), prjprt(), spcprt(), tabprt(), wcsprt(), and wcsperr() use printf() which is thread-safe by the POSIX requirement on stdio. However, this is only at the function level. Where multiple threads invoke these functions simultaneously their output is likely to be interleaved.

      • wcserr_enable() sets a static variable and so is not thread-safe. However, this facility is not intended to be used dynamically. If detailed error messages are required, enable wcserr when execution starts and don't change it.

      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/vector.html0000644001153600020070000003175512310355626021300 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: Vector API

      Vector API

      WCSLIB's API is vector-oriented. At the least, this allows the function call overhead to be amortised by spreading it over multiple coordinate transformations. However, vector computations may provide an opportunity for caching intermediate calculations and this can produce much more significant efficiencies. For example, many of the spherical projection equations are partially or fully separable in the mathematical sense, i.e. $ (x,y) = f(\phi) g(\theta) $, so if $ \theta $ was invariant for a set of coordinate transformations then $ g(\theta) $ would only need to be computed once. Depending on the circumstances, this may well lead to speedups of a factor of two or more.

      WCSLIB has two different categories of vector API:

      • Certain steps in the WCS algorithm chain operate on coordinate vectors as a whole rather than particular elements of it. For example, the linear transformation takes one or more pixel coordinate vectors, multiples by the transformation matrix, and returns whole intermediate world coordinate vectors.
        The routines that implement these steps, wcsp2s(), wcss2p(), linp2x(), linx2p(), tabx2s(), and tabs2x(), accept and return two-dimensional arrays, i.e. a number of coordinate vectors. Because WCSLIB permits these arrays to contain unused elements, three parameters are needed to describe them:
        • naxis: the number of coordinate elements, as per the FITS NAXIS or WCSAXES keyvalues,
        • ncoord: the number of coordinate vectors,
        • nelem: the total number of elements in each vector, unused as well as used. Clearly, nelem must equal or exceed naxis. (Note that when ncoord is unity, nelem is irrelevant and so is ignored. It may be set to 0.)
        ncoord and nelem are specified as function arguments while naxis is provided as a member of the wcsprm (or linprm) struct.
        For example, wcss2p() accepts an array of world coordinate vectors, world[ncoord][nelem]. In the following example, naxis = 4, ncoord = 5, and nelem = 7:
            s1  x1  y1  t1  u   u   u
            s2  x2  y2  t2  u   u   u
            s3  x3  y3  t3  u   u   u
            s4  x4  y4  t4  u   u   u
            s5  x5  y5  t5  u   u   u
          
        where u indicates unused array elements, and the array is laid out in memory as
            s1  x1  y1  t1  u   u   u   s2  x2  y2  ...
          
        Note that the stat[] vector returned by routines in this category is of length ncoord, as are the intermediate phi[] and theta[] vectors returned by wcsp2s() and wcss2p().
        Note also that the function prototypes for routines in this category have to declare these two-dimensional arrays as one-dimensional vectors in order to avoid warnings from the C compiler about declaration of "incomplete types". This was considered preferable to declaring them as simple pointers-to-double which gives no indication that storage is associated with them.

      • Other steps in the WCS algorithm chain typically operate only on a part of the coordinate vector. For example, a spectral transformation operates on only one element of an intermediate world coordinate that may also contain celestial coordinate elements. In the above example, spcx2s() might operate only on the s (spectral) coordinate elements.
        Routines like spcx2s() and celx2s() that implement these steps accept and return one-dimensional vectors in which the coordinate element of interest is specified via a starting address, a length, and a stride. To continue the previous example, the starting address for the spectral elements is s1, the length is 5, and the stride is 7.

      Vector lengths

      Routines such as spcx2s() and celx2s() accept and return either one coordinate vector, or a pair of coordinate vectors (one-dimensional C arrays). As explained above, the coordinate elements of interest are usually embedded in a two-dimensional array and must be selected by specifying a starting point, length and stride through the array. For routines such as spcx2s() that operate on a single element of each coordinate vector these parameters have a straightforward interpretation.

      However, for routines such as celx2s() that operate on a pair of elements in each coordinate vector, WCSLIB allows these parameters to be specified independently for each input vector, thereby providing a much more general interpretation than strictly needed to traverse an array.

      This is best described by illustration. The following diagram describes the situation for cels2x(), as a specific example, with nlng = 5, and nlat = 3:

                   lng[0]   lng[1]   lng[2]  lng[3]   lng[4]
                   ------   ------   ------  ------   ------
        lat[0]  |  x,y[0]   x,y[1]   x,y[2]  x,y[3]   x,y[4]
        lat[1]  |  x,y[5]   x,y[6]   x,y[7]  x,y[8]   x,y[9]
        lat[2]  |  x,y[10]  x,y[11]  x,y[12] x,y[13]  x,y[14]
      

      In this case, while only 5 longitude elements and 3 latitude elements are specified, the world-to-pixel routine would calculate nlng * nlat = 15 (x,y) coordinate pairs. It is the responsibility of the caller to ensure that sufficient space has been allocated in all of the output arrays, in this case phi[], theta[], x[], y[] and stat[].

      Vector computation will often be required where neither lng nor lat is constant. This is accomplished by setting nlat = 0 which is interpreted to mean nlat = nlng but only the matrix diagonal is to be computed. Thus, for nlng = 3 and nlat = 0 only three (x,y) coordinate pairs are computed:

                   lng[0]   lng[1]   lng[2]
                   ------   ------   ------
        lat[0]  |  x,y[0]
        lat[1]  |           x,y[1]
        lat[2]  |                    x,y[2]
      

      Note how this differs from nlng = 3, nlat = 1:

                   lng[0]   lng[1]   lng[2]
                   ------   ------   ------
        lat[0]  |  x,y[0]   x,y[1]   x,y[2]
      

      The situation for celx2s() is similar; the x-coordinate (like lng) varies fastest.

      Similar comments can be made for all routines that accept arguments specifying vector length(s) and stride(s). (tabx2s() and tabs2x() do not fall into this category because the -TAB algorithm is fully N-dimensional so there is no way to know in advance how many coordinate elements may be involved.)

      The reason that WCSLIB allows this generality is related to the aforementioned opportunities that vector computations may provide for caching intermediate calculations and the significant efficiencies that can result. The high-level routines, wcsp2s() and wcss2p(), look for opportunities to collapse a set of coordinate transformations where one of the coordinate elements is invariant, and the low-level routines take advantage of such to cache intermediate calculations.

      Vector strides

      As explained above, the vector stride arguments allow the caller to specify that successive elements of a vector are not contiguous in memory. This applies equally to vectors given to, or returned from a function.

      As a further example consider the following two arrangements in memory of the elements of four (x,y) coordinate pairs together with an s coordinate element (e.g. spectral):

      • x1 x2 x3 x4 y1 y2 y3 y4 s1 s2 s3 s4
        the address of x[] is x1, its stride is 1, and length 4,
        the address of y[] is y1, its stride is 1, and length 4,
        the address of s[] is s1, its stride is 1, and length 4.

      • x1 y1 s1 x2 y2 s2 x3 y3 s3 x4 y4 s4
        the address of x[] is x1, its stride is 3, and length 4,
        the address of y[] is y1, its stride is 3, and length 4,
        the address of s[] is s1, its stride is 3, and length 4.

      For routines such as cels2x(), each of the pair of input vectors is assumed to have the same stride. Each of the output vectors also has the same stride, though it may differ from the input stride. For example, for cels2x() the input lng[] and lat[] vectors each have vector stride sll, while the x[] and y[] output vectors have stride sxy. However, the intermediate phi[] and theta[] arrays each have unit stride, as does the stat[] vector.

      If the vector length is 1 then the stride is irrelevant and so ignored. It may be set to 0.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcs_8h-source.html0000644001153600020070000053226012310355626022464 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcs.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcs_8h.html0000644001153600020070000026640112310355626021167 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcs.h File Reference

      wcs.h File Reference

      #include "lin.h"
      #include "cel.h"
      #include "spc.h"
      #include "tab.h"
      #include "wcserr.h"

      Go to the source code of this file.

      Data Structures

      struct  pvcard
       Store for PVi_ma keyrecords. More...
      struct  pscard
       Store for PSi_ma keyrecords. More...
      struct  wtbarr
       Extraction of coordinate lookup tables from BINTABLE. More...
      struct  wcsprm
       Coordinate transformation parameters. More...

      Defines

      #define WCSSUB_LONGITUDE   0x1001
       Mask for extraction of longitude axis by wcssub().
      #define WCSSUB_LATITUDE   0x1002
       Mask for extraction of latitude axis by wcssub().
      #define WCSSUB_CUBEFACE   0x1004
       Mask for extraction of CUBEFACE axis by wcssub().
      #define WCSSUB_CELESTIAL   0x1007
       Mask for extraction of celestial axes by wcssub().
      #define WCSSUB_SPECTRAL   0x1008
       Mask for extraction of spectral axis by wcssub().
      #define WCSSUB_STOKES   0x1010
       Mask for extraction of STOKES axis by wcssub().
      #define WCSLEN   (sizeof(struct wcsprm)/sizeof(int))
       Size of the wcsprm struct in int units.
      #define wcscopy(alloc, wcssrc, wcsdst)   wcssub(alloc, wcssrc, 0x0, 0x0, wcsdst)
       Copy routine for the wcsprm struct.
      #define wcsini_errmsg   wcs_errmsg
       Deprecated.
      #define wcssub_errmsg   wcs_errmsg
       Deprecated.
      #define wcscopy_errmsg   wcs_errmsg
       Deprecated.
      #define wcsfree_errmsg   wcs_errmsg
       Deprecated.
      #define wcsprt_errmsg   wcs_errmsg
       Deprecated.
      #define wcsset_errmsg   wcs_errmsg
       Deprecated.
      #define wcsp2s_errmsg   wcs_errmsg
       Deprecated.
      #define wcss2p_errmsg   wcs_errmsg
       Deprecated.
      #define wcsmix_errmsg   wcs_errmsg
       Deprecated.

      Enumerations

      enum  wcs_errmsg_enum {
        WCSERR_SUCCESS = 0, WCSERR_NULL_POINTER = 1, WCSERR_MEMORY = 2, WCSERR_SINGULAR_MTX = 3,
        WCSERR_BAD_CTYPE = 4, WCSERR_BAD_PARAM = 5, WCSERR_BAD_COORD_TRANS = 6, WCSERR_ILL_COORD_TRANS = 7,
        WCSERR_BAD_PIX = 8, WCSERR_BAD_WORLD = 9, WCSERR_BAD_WORLD_COORD = 10, WCSERR_NO_SOLUTION = 11,
        WCSERR_BAD_SUBIMAGE = 12, WCSERR_NON_SEPARABLE = 13
      }

      Functions

      int wcsnpv (int n)
       Memory allocation for PVi_ma.
      int wcsnps (int n)
       Memory allocation for PSi_ma.
      int wcsini (int alloc, int naxis, struct wcsprm *wcs)
       Default constructor for the wcsprm struct.
      int wcssub (int alloc, const struct wcsprm *wcssrc, int *nsub, int axes[], struct wcsprm *wcsdst)
       Subimage extraction routine for the wcsprm struct.
      int wcsfree (struct wcsprm *wcs)
       Destructor for the wcsprm struct.
      int wcsprt (const struct wcsprm *wcs)
       Print routine for the wcsprm struct.
      int wcsperr (const struct wcsprm *wcs, const char *prefix)
       Print error messages from a wcsprm struct.
      int wcsset (struct wcsprm *wcs)
       Setup routine for the wcsprm struct.
      int wcsp2s (struct wcsprm *wcs, int ncoord, int nelem, const double pixcrd[], double imgcrd[], double phi[], double theta[], double world[], int stat[])
       Pixel-to-world transformation.
      int wcss2p (struct wcsprm *wcs, int ncoord, int nelem, const double world[], double phi[], double theta[], double imgcrd[], double pixcrd[], int stat[])
       World-to-pixel transformation.
      int wcsmix (struct wcsprm *wcs, int mixpix, int mixcel, const double vspan[], double vstep, int viter, double world[], double phi[], double theta[], double imgcrd[], double pixcrd[])
       Hybrid coordinate transformation.
      int wcssptr (struct wcsprm *wcs, int *i, char ctype[9])
       Spectral axis translation.

      Variables

      const char * wcs_errmsg []
       Status return messages.


      Detailed Description

      These routines implement the FITS World Coordinate System (WCS) standard which defines methods to be used for computing world coordinates from image pixel coordinates, and vice versa. They are based on the wcsprm struct which contains all information needed for the computations. The struct contains some members that must be set by the user, and others that are maintained by these routines, somewhat like a C++ class but with no encapsulation.

      Three routines, wcsini(), wcssub(), and wcsfree() are provided to manage the wcsprm struct and another, wcsprt(), to prints its contents. Refer to the description of the wcsprm struct for an explanation of the anticipated usage of these routines. wcscopy(), which does a deep copy of one wcsprm struct to another, is defined as a preprocessor macro function that invokes wcssub().

      wcsperr() prints the error message(s) (if any) stored in a wcsprm struct, and the linprm, celprm, prjprm, spcprm, and tabprm structs that it contains.

      A setup routine, wcsset(), computes intermediate values in the wcsprm struct from parameters in it that were supplied by the user. The struct always needs to be set up by wcsset() but this need not be called explicitly - refer to the explanation of wcsprm::flag.

      wcsp2s() and wcss2p() implement the WCS world coordinate transformations. In fact, they are high level driver routines for the WCS linear, logarithmic, celestial, spectral and tabular transformation routines described in lin.h, log.h, cel.h, spc.h and tab.h.

      Given either the celestial longitude or latitude plus an element of the pixel coordinate a hybrid routine, wcsmix(), iteratively solves for the unknown elements.

      wcssptr() translates the spectral axis in a wcsprm struct. For example, a 'FREQ' axis may be translated into 'ZOPT-F2W' and vice versa.

      Quadcube projections:
      The quadcube projections (TSC, CSC, QSC) may be represented in FITS in either of two ways:

      a: The six faces may be laid out in one plane and numbered as follows:

                                        0
       
                               4  3  2  1  4  3  2
       
                                        5
      

      Faces 2, 3 and 4 may appear on one side or the other (or both). The world-to-pixel routines map faces 2, 3 and 4 to the left but the pixel-to-world routines accept them on either side.

      b: The "COBE" convention in which the six faces are stored in a three-dimensional structure using a CUBEFACE axis indexed from 0 to 5 as above.

      These routines support both methods; wcsset() determines which is being used by the presence or absence of a CUBEFACE axis in ctype[]. wcsp2s() and wcss2p() translate the CUBEFACE axis representation to the single plane representation understood by the lower-level WCSLIB projection routines.


      Define Documentation

      #define WCSSUB_LONGITUDE   0x1001

      Mask to use for extracting the longitude axis when sub-imaging, refer to the axes argument of wcssub().

      #define WCSSUB_LATITUDE   0x1002

      Mask to use for extracting the latitude axis when sub-imaging, refer to the axes argument of wcssub().

      #define WCSSUB_CUBEFACE   0x1004

      Mask to use for extracting the CUBEFACE axis when sub-imaging, refer to the axes argument of wcssub().

      #define WCSSUB_CELESTIAL   0x1007

      Mask to use for extracting the celestial axes (longitude, latitude and cubeface) when sub-imaging, refer to the axes argument of wcssub().

      #define WCSSUB_SPECTRAL   0x1008

      Mask to use for extracting the spectral axis when sub-imaging, refer to the axes argument of wcssub().

      #define WCSSUB_STOKES   0x1010

      Mask to use for extracting the STOKES axis when sub-imaging, refer to the axes argument of wcssub().

      #define WCSLEN   (sizeof(struct wcsprm)/sizeof(int))

      Size of the wcsprm struct in int units, used by the Fortran wrappers.

      #define wcscopy ( alloc,
      wcssrc,
      wcsdst   )     wcssub(alloc, wcssrc, 0x0, 0x0, wcsdst)

      wcscopy() does a deep copy of one wcsprm struct to another. As of WCSLIB 3.6, it is implemented as a preprocessor macro that invokes wcssub() with the nsub and axes pointers both set to zero.

      #define wcsini_errmsg   wcs_errmsg

      Deprecated:
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      #define wcssub_errmsg   wcs_errmsg

      Deprecated:
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      #define wcscopy_errmsg   wcs_errmsg

      Deprecated:
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      #define wcsfree_errmsg   wcs_errmsg

      Deprecated:
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      #define wcsprt_errmsg   wcs_errmsg

      Deprecated:
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      #define wcsset_errmsg   wcs_errmsg

      Deprecated:
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      #define wcsp2s_errmsg   wcs_errmsg

      Deprecated:
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      #define wcss2p_errmsg   wcs_errmsg

      Deprecated:
      Added for backwards compatibility, use wcs_errmsg directly now instead.

      #define wcsmix_errmsg   wcs_errmsg

      Deprecated:
      Added for backwards compatibility, use wcs_errmsg directly now instead.


      Enumeration Type Documentation

      Enumerator:
      WCSERR_SUCCESS 
      WCSERR_NULL_POINTER 
      WCSERR_MEMORY 
      WCSERR_SINGULAR_MTX 
      WCSERR_BAD_CTYPE 
      WCSERR_BAD_PARAM 
      WCSERR_BAD_COORD_TRANS 
      WCSERR_ILL_COORD_TRANS 
      WCSERR_BAD_PIX 
      WCSERR_BAD_WORLD 
      WCSERR_BAD_WORLD_COORD 
      WCSERR_NO_SOLUTION 
      WCSERR_BAD_SUBIMAGE 
      WCSERR_NON_SEPARABLE 


      Function Documentation

      int wcsnpv ( int  n  ) 

      wcsnpv() changes the value of NPVMAX (default 64). This global variable controls the number of PVi_ma keywords that wcsini() should allocate space for.

      PLEASE NOTE: This function is not thread-safe.

      Parameters:
      [in] n Value of NPVMAX; ignored if < 0.
      Returns:
      Current value of NPVMAX.

      int wcsnps ( int  n  ) 

      wcsnps() changes the values of NPSMAX (default 8). This global variable controls the number of PSi_ma keywords that wcsini() should allocate space for.

      PLEASE NOTE: This function is not thread-safe.

      Parameters:
      [in] n Value of NPSMAX; ignored if < 0.
      Returns:
      Current value of NPSMAX.

      int wcsini ( int  alloc,
      int  naxis,
      struct wcsprm wcs 
      )

      wcsini() optionally allocates memory for arrays in a wcsprm struct and sets all members of the struct to default values. Memory is allocated for up to NPVMAX PVi_ma keywords or NPSMAX PSi_ma keywords per WCS representation. These may be changed via wcsnpv() and wcsnps() before wcsini() is called.

      PLEASE NOTE: every wcsprm struct should be initialized by wcsini(), possibly repeatedly. On the first invokation, and only the first invokation, wcsprm::flag must be set to -1 to initialize memory management, regardless of whether wcsini() will actually be used to allocate memory.

      Parameters:
      [in] alloc If true, allocate memory unconditionally for the crpix, etc. arrays.
      If false, it is assumed that pointers to these arrays have been set by the user except if they are null pointers in which case memory will be allocated for them regardless. (In other words, setting alloc true saves having to initalize these pointers to zero.)
      [in] naxis The number of world coordinate axes. This is used to determine the length of the various wcsprm vectors and matrices and therefore the amount of memory to allocate for them.
      [in,out] wcs Coordinate transformation parameters.
      Note that, in order to initialize memory management, wcsprm::flag should be set to -1 when wcs is initialized for the first time (memory leaks may result if it had already been initialized).
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().

      int wcssub ( int  alloc,
      const struct wcsprm wcssrc,
      int *  nsub,
      int  axes[],
      struct wcsprm wcsdst 
      )

      wcssub() extracts the coordinate description for a subimage from a wcsprm struct. It does a deep copy, using wcsini() to allocate memory for its arrays if required. Only the "information to be provided" part of the struct is extracted; a call to wcsset() is required to set up the remainder.

      The world coordinate system of the subimage must be separable in the sense that the world coordinates at any point in the subimage must depend only on the pixel coordinates of the axes extracted. In practice, this means that the PCi_ja matrix of the original image must not contain non-zero off-diagonal terms that associate any of the subimage axes with any of the non-subimage axes.

      Note that while the required elements of the tabprm array are extracted, the wtbarr array is not. (Thus it is not appropriate to call wcssub() after wcstab() but before filling the tabprm structs - refer to wcshdr.h.)

      wcssub() can also add axes to a wcsprm struct. The new axes will be created using the defaults set by wcsini() which produce a simple, unnamed, linear axis with world coordinate equal to the pixel coordinate. These default values can be changed in before invoking wcsset().

      Parameters:
      [in] alloc If true, allocate memory for the crpix, etc. arrays in the destination. Otherwise, it is assumed that pointers to these arrays have been set by the user except if they are null pointers in which case memory will be allocated for them regardless.
      [in] wcssrc Struct to extract from.
      [in,out] nsub 
      [in,out] axes Vector of length *nsub containing the image axis numbers (1-relative) to extract. Order is significant; axes[0] is the axis number of the input image that corresponds to the first axis in the subimage, etc.
      Use an axis number of 0 to create a new axis using the defaults set by wcsini().
      nsub (the pointer) may be set to zero, and so also may nsub, to indicate the number of axes in the input image; the number of axes will be returned if nsub != 0x0. axes itself (the pointer) may be set to zero to indicate the first *nsub axes in their original order.
      Set both nsub and axes to zero to do a deep copy of one wcsprm struct to another.
      Subimage extraction by coordinate axis type may be done by setting the elements of axes[] to the following special preprocessor macro values:
      • WCSSUB_LONGITUDE: Celestial longitude.
      • WCSSUB_LATITUDE: Celestial latitude.
      • WCSSUB_CUBEFACE: Quadcube CUBEFACE axis.
      • WCSSUB_SPECTRAL: Spectral axis.
      • WCSSUB_STOKES: Stokes axis.
      Refer to the notes (below) for further usage examples.
      On return, *nsub will contain the number of axes in the subimage; this may be zero if there were no axes of the required type(s) (in which case no memory will be allocated). axes[] will contain the axis numbers that were extracted, or 0 for newly created axes. The vector length must be sufficient to contain all axis numbers. No checks are performed to verify that the coordinate axes are consistent, this is done by wcsset().
      [in,out] wcsdst Struct describing the subimage. wcsprm::flag should be set to -1 if wcsdst was not previously initialized (memory leaks may result if it was previously initialized).
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 12: Invalid subimage specification.
      • 13: Non-separable subimage coordinate system.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().
      Notes:
      Combinations of subimage axes of particular types may be extracted in the same order as they occur in the input image by combining preprocessor codes, for example

      would extract the longitude, latitude, and spectral axes in the same order as the input image. If one of each were present, *nsub = 3 would be returned.

      For convenience, WCSSUB_CELESTIAL is defined as the combination WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_CUBEFACE.

      The codes may also be negated to extract all but the types specified, for example

            *nsub = 4;
            axes[0] = WCSSUB_LONGITUDE;
            axes[1] = WCSSUB_LATITUDE;
            axes[2] = WCSSUB_CUBEFACE;
            axes[3] = -(WCSSUB_SPECTRAL | WCSSUB_STOKES);
      

      The last of these specifies all axis types other than spectral or Stokes. Extraction is done in the order specified by axes[] a longitude axis (if present) would be extracted first (via axes[0]) and not subsequently (via axes[3]). Likewise for the latitude and cubeface axes in this example.

      From the foregoing, it is apparent that the value of *nsub returned may be less than or greater than that given. However, it will never exceed the number of axes in the input image (plus the number of newly-created axes if any were specified on input).

      int wcsfree ( struct wcsprm wcs  ) 

      wcsfree() frees memory allocated for the wcsprm arrays by wcsini() and/or wcsset(). wcsini() records the memory it allocates and wcsfree() will only attempt to free this.

      PLEASE NOTE: wcsfree() must not be invoked on a wcsprm struct that was not initialized by wcsini().

      Parameters:
      [out] wcs Coordinate transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.

      int wcsprt ( const struct wcsprm wcs  ) 

      wcsprt() prints the contents of a wcsprm struct using wcsprintf(). Mainly intended for diagnostic purposes.

      Parameters:
      [in] wcs Coordinate transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.

      int wcsperr ( const struct wcsprm wcs,
      const char *  prefix 
      )

      wcsperr() prints the error message(s), if any, stored in a wcsprm struct, and the linprm, celprm, prjprm, spcprm, and tabprm structs that it contains. If there are no errors then nothing is printed. It uses wcserr_prt(), q.v.

      Parameters:
      [in] wcs Coordinate transformation parameters.
      [in] prefix If non-NULL, each output line will be prefixed with this string.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.

      int wcsset ( struct wcsprm wcs  ) 

      wcsset() sets up a wcsprm struct according to information supplied within it (refer to the description of the wcsprm struct).

      wcsset() recognizes the NCP projection and converts it to the equivalent SIN projection and likewise translates GLS into SFL. It also translates the AIPS spectral types ('FREQ-LSR', 'FELO-HEL', etc.), possibly changing the input header keywords wcsprm::ctype and/or wcsprm::specsys if necessary.

      Note that this routine need not be called directly; it will be invoked by wcsp2s() and wcss2p() if the wcsprm::flag is anything other than a predefined magic value.

      Parameters:
      [in,out] wcs Coordinate transformation parameters.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Linear transformation matrix is singular.
      • 4: Inconsistent or unrecognized coordinate axis types.
      • 5: Invalid parameter value.
      • 6: Invalid coordinate transformation parameters.
      • 7: Ill-conditioned coordinate transformation parameters.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().

      int wcsp2s ( struct wcsprm wcs,
      int  ncoord,
      int  nelem,
      const double  pixcrd[],
      double  imgcrd[],
      double  phi[],
      double  theta[],
      double  world[],
      int  stat[] 
      )

      wcsp2s() transforms pixel coordinates to world coordinates.

      Parameters:
      [in,out] wcs Coordinate transformation parameters.
      [in] ncoord,nelem The number of coordinates, each of vector length nelem but containing wcs.naxis coordinate elements. Thus nelem must equal or exceed the value of the NAXIS keyword unless ncoord == 1, in which case nelem is not used.
      [in] pixcrd Array of pixel coordinates.
      [out] imgcrd Array of intermediate world coordinates. For celestial axes, imgcrd[][wcs.lng] and imgcrd[][wcs.lat] are the projected $x$-, and $y$-coordinates in pseudo "degrees". For spectral axes, imgcrd[][wcs.spec] is the intermediate spectral coordinate, in SI units.
      [out] phi,theta Longitude and latitude in the native coordinate system of the projection [deg].
      [out] world Array of world coordinates. For celestial axes, world[][wcs.lng] and world[][wcs.lat] are the celestial longitude and latitude [deg]. For spectral axes, imgcrd[][wcs.spec] is the intermediate spectral coordinate, in SI units.
      [out] stat Status return value for each coordinate:
      • 0: Success.
      • 1+: A bit mask indicating invalid pixel coordinate element(s).
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Linear transformation matrix is singular.
      • 4: Inconsistent or unrecognized coordinate axis types.
      • 5: Invalid parameter value.
      • 6: Invalid coordinate transformation parameters.
      • 7: Ill-conditioned coordinate transformation parameters.
      • 8: One or more of the pixel coordinates were invalid, as indicated by the stat vector.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().

      int wcss2p ( struct wcsprm wcs,
      int  ncoord,
      int  nelem,
      const double  world[],
      double  phi[],
      double  theta[],
      double  imgcrd[],
      double  pixcrd[],
      int  stat[] 
      )

      wcss2p() transforms world coordinates to pixel coordinates.

      Parameters:
      [in,out] wcs Coordinate transformation parameters.
      [in] ncoord,nelem The number of coordinates, each of vector length nelem but containing wcs.naxis coordinate elements. Thus nelem must equal or exceed the value of the NAXIS keyword unless ncoord == 1, in which case nelem is not used.
      [in] world Array of world coordinates. For celestial axes, world[][wcs.lng] and world[][wcs.lat] are the celestial longitude and latitude [deg]. For spectral axes, world[][wcs.spec] is the spectral coordinate, in SI units.
      [out] phi,theta Longitude and latitude in the native coordinate system of the projection [deg].
      [out] imgcrd Array of intermediate world coordinates. For celestial axes, imgcrd[][wcs.lng] and imgcrd[][wcs.lat] are the projected $x$-, and $y$-coordinates in pseudo "degrees". For quadcube projections with a CUBEFACE axis the face number is also returned in imgcrd[][wcs.cubeface]. For spectral axes, imgcrd[][wcs.spec] is the intermediate spectral coordinate, in SI units.
      [out] pixcrd Array of pixel coordinates.
      [out] stat Status return value for each coordinate:
      • 0: Success.
      • 1+: A bit mask indicating invalid world coordinate element(s).
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Linear transformation matrix is singular.
      • 4: Inconsistent or unrecognized coordinate axis types.
      • 5: Invalid parameter value.
      • 6: Invalid coordinate transformation parameters.
      • 7: Ill-conditioned coordinate transformation parameters.
      • 9: One or more of the world coordinates were invalid, as indicated by the stat vector.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().

      int wcsmix ( struct wcsprm wcs,
      int  mixpix,
      int  mixcel,
      const double  vspan[],
      double  vstep,
      int  viter,
      double  world[],
      double  phi[],
      double  theta[],
      double  imgcrd[],
      double  pixcrd[] 
      )

      wcsmix(), given either the celestial longitude or latitude plus an element of the pixel coordinate, solves for the remaining elements by iterating on the unknown celestial coordinate element using wcss2p(). Refer also to the notes below.

      Parameters:
      [in,out] wcs Indices for the celestial coordinates obtained by parsing the wcsprm::ctype[].
      [in] mixpix Which element of the pixel coordinate is given.
      [in] mixcel Which element of the celestial coordinate is given:
      • 1: Celestial longitude is given in world[wcs.lng], latitude returned in world[wcs.lat].
      • 2: Celestial latitude is given in world[wcs.lat], longitude returned in world[wcs.lng].
      [in] vspan Solution interval for the celestial coordinate [deg]. The ordering of the two limits is irrelevant. Longitude ranges may be specified with any convenient normalization, for example [-120,+120] is the same as [240,480], except that the solution will be returned with the same normalization, i.e. lie within the interval specified.
      [in] vstep Step size for solution search [deg]. If zero, a sensible, although perhaps non-optimal default will be used.
      [in] viter If a solution is not found then the step size will be halved and the search recommenced. viter controls how many times the step size is halved. The allowed range is 5 - 10.
      [in,out] world World coordinate elements. world[wcs.lng] and world[wcs.lat] are the celestial longitude and latitude [deg]. Which is given and which returned depends on the value of mixcel. All other elements are given.
      [out] phi,theta Longitude and latitude in the native coordinate system of the projection [deg].
      [out] imgcrd Image coordinate elements. imgcrd[wcs.lng] and imgcrd[wcs.lat] are the projected $x$-, and $y$-coordinates in pseudo "degrees".
      [in,out] pixcrd Pixel coordinate. The element indicated by mixpix is given and the remaining elements are returned.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Linear transformation matrix is singular.
      • 4: Inconsistent or unrecognized coordinate axis types.
      • 5: Invalid parameter value.
      • 6: Invalid coordinate transformation parameters.
      • 7: Ill-conditioned coordinate transformation parameters.
      • 10: Invalid world coordinate.
      • 11: No solution found in the specified interval.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().
      Notes:
      Initially the specified solution interval is checked to see if it's a "crossing" interval. If it isn't, a search is made for a crossing solution by iterating on the unknown celestial coordinate starting at the upper limit of the solution interval and decrementing by the specified step size. A crossing is indicated if the trial value of the pixel coordinate steps through the value specified. If a crossing interval is found then the solution is determined by a modified form of "regula falsi" division of the crossing interval. If no crossing interval was found within the specified solution interval then a search is made for a "non-crossing" solution as may arise from a point of tangency. The process is complicated by having to make allowance for the discontinuities that occur in all map projections.

      Once one solution has been determined others may be found by subsequent invokations of wcsmix() with suitably restricted solution intervals.

      Note the circumstance that arises when the solution point lies at a native pole of a projection in which the pole is represented as a finite curve, for example the zenithals and conics. In such cases two or more valid solutions may exist but wcsmix() only ever returns one.

      Because of its generality wcsmix() is very compute-intensive. For compute-limited applications more efficient special-case solvers could be written for simple projections, for example non-oblique cylindrical projections.

      int wcssptr ( struct wcsprm wcs,
      int *  i,
      char  ctype[9] 
      )

      wcssptr() translates the spectral axis in a wcsprm struct. For example, a 'FREQ' axis may be translated into 'ZOPT-F2W' and vice versa.

      Parameters:
      [in,out] wcs Coordinate transformation parameters.
      [in,out] i Index of the spectral axis (0-relative). If given < 0 it will be set to the first spectral axis identified from the ctype[] keyvalues in the wcsprm struct.
      [in,out] ctype Desired spectral CTYPEia. Wildcarding may be used as for the ctypeS2 argument to spctrn() as described in the prologue of spc.h, i.e. if the final three characters are specified as "???", or if just the eighth character is specified as '?', the correct algorithm code will be substituted and returned.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Linear transformation matrix is singular.
      • 4: Inconsistent or unrecognized coordinate axis types.
      • 5: Invalid parameter value.
      • 6: Invalid coordinate transformation parameters.
      • 7: Ill-conditioned coordinate transformation parameters.
      • 12: Invalid subimage specification (no spectral axis).
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().


      Variable Documentation

      const char * wcs_errmsg[]

      Error messages to match the status value returned from each function.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcsfix_8h-source.html0000644001153600020070000013506612310355626023176 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcsfix.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcsfix_8h.html0000644001153600020070000014255412310355626021700 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcsfix.h File Reference

      wcsfix.h File Reference

      #include "wcs.h"
      #include "wcserr.h"

      Go to the source code of this file.

      Defines

      #define CDFIX   0
       Index of cdfix() status value in vector returned by wcsfix().
      #define DATFIX   1
       Index of datfix() status value in vector returned by wcsfix().
      #define UNITFIX   2
       Index of unitfix() status value in vector returned by wcsfix().
      #define SPCFIX   3
       Index of spcfix() status value in vector returned by wcsfix().
      #define CELFIX   4
       Index of celfix() status value in vector returned by wcsfix().
      #define CYLFIX   5
       Index of cylfix() status value in vector returned by wcsfix().
      #define NWCSFIX   6
       Number of elements in the status vector returned by wcsfix().
      #define cylfix_errmsg   wcsfix_errmsg
       Deprecated.

      Enumerations

      enum  wcsfix_errmsg_enum {
        FIXERR_DATE_FIX = -4, FIXERR_SPC_UPDATE = -3, FIXERR_UNITS_ALIAS = -2, FIXERR_NO_CHANGE = -1,
        FIXERR_SUCCESS = 0, FIXERR_NULL_POINTER = 1, FIXERR_MEMORY = 2, FIXERR_SINGULAR_MTX = 3,
        FIXERR_BAD_CTYPE = 4, FIXERR_BAD_PARAM = 5, FIXERR_BAD_COORD_TRANS = 6, FIXERR_ILL_COORD_TRANS = 7,
        FIXERR_BAD_CORNER_PIX = 8, FIXERR_NO_REF_PIX_COORD = 9, FIXERR_NO_REF_PIX_VAL = 10
      }

      Functions

      int wcsfix (int ctrl, const int naxis[], struct wcsprm *wcs, int stat[])
       Translate a non-standard WCS struct.
      int wcsfixi (int ctrl, const int naxis[], struct wcsprm *wcs, int stat[], struct wcserr info[])
       Translate a non-standard WCS struct.
      int cdfix (struct wcsprm *wcs)
       Fix erroneously omitted CDi_ja keywords.
      int datfix (struct wcsprm *wcs)
       Translate DATE-OBS and derive MJD-OBS or vice versa.
      int unitfix (int ctrl, struct wcsprm *wcs)
       Correct aberrant CUNITia keyvalues.
      int spcfix (struct wcsprm *wcs)
       Translate AIPS-convention spectral types.
      int celfix (struct wcsprm *wcs)
       Translate AIPS-convention celestial projection types.
      int cylfix (const int naxis[], struct wcsprm *wcs)
       Fix malformed cylindrical projections.

      Variables

      const char * wcsfix_errmsg []
       Status return messages.


      Detailed Description

      Routines in this suite identify and translate various forms of non-standard construct that are known to occur in FITS WCS headers. These range from the translation of non-standard values for standard WCS keywords, to the repair of malformed coordinate representations.

      Non-standard keyvalues:
      AIPS-convention celestial projection types, NCP and GLS, and spectral types, 'FREQ-LSR', 'FELO-HEL', etc., set in CTYPEia are translated on-the-fly by wcsset() but without modifying the relevant ctype[], pv[] or specsys members of the wcsprm struct. That is, only the information extracted from ctype[] is translated when wcsset() fills in wcsprm::cel (celprm struct) or wcsprm::spc (spcprm struct).

      On the other hand, these routines do change the values of wcsprm::ctype[], wcsprm::pv[], wcsprm::specsys and other wcsprm struct members as appropriate to produce the same result as if the FITS header itself had been translated.

      Auxiliary WCS header information not used directly by WCSLIB may also be translated. For example, the older DATE-OBS date format (wcsprm::dateobs) is recast to year-2000 standard form, and MJD-OBS (wcsprm::mjdobs) will be deduced from it if not already set.

      Certain combinations of keyvalues that result in malformed coordinate systems, as described in Sect. 7.3.4 of Paper I, may also be repaired. These are handled by cylfix().

      Non-standard keywords:
      The AIPS-convention CROTAn keywords are recognized as quasi-standard and as such are accomodated by the wcsprm::crota[] and translated to wcsprm::pc[][] by wcsset(). These are not dealt with here, nor are any other non-standard keywords since these routines work only on the contents of a wcsprm struct and do not deal with FITS headers per se. In particular, they do not identify or translate CD00i00j, PC00i00j, PROJPn, EPOCH, VELREF or VSOURCEa keywords; this may be done by the FITS WCS header parser supplied with WCSLIB, refer to wcshdr.h.

      wcsfix() and wcsfixi() apply all of the corrections handled by the following specific functions which may also be invoked separately:

      • cdfix(): Sets the diagonal element of the CDi_ja matrix to 1.0 if all CDi_ja keywords associated with a particular axis are omitted.

      • datfix(): recast an older DATE-OBS date format in dateobs to year-2000 standard form and derive mjdobs from it if not already set. Alternatively, if mjdobs is set and dateobs isn't, then derive dateobs from it.

      • unitfix(): translate some commonly used but non-standard unit strings in the CUNITia keyvalues, e.g. 'DEG' -> 'deg'.

      • spcfix(): translate AIPS-convention spectral types, 'FREQ-LSR', 'FELO-HEL', etc., in ctype[] as set from CTYPEia.

      • celfix(): translate AIPS-convention celestial projection types, NCP and GLS, in ctype[] as set from CTYPEia.

      • cylfix(): fixes WCS keyvalues for malformed cylindrical projections that suffer from the problem described in Sect. 7.3.4 of Paper I.

      Define Documentation

      #define CDFIX   0

      Index of the status value returned by cdfix() in the status vector returned by wcsfix().

      #define DATFIX   1

      Index of the status value returned by datfix() in the status vector returned by wcsfix().

      #define UNITFIX   2

      Index of the status value returned by unitfix() in the status vector returned by wcsfix().

      #define SPCFIX   3

      Index of the status value returned by spcfix() in the status vector returned by wcsfix().

      #define CELFIX   4

      Index of the status value returned by celfix() in the status vector returned by wcsfix().

      #define CYLFIX   5

      Index of the status value returned by cylfix() in the status vector returned by wcsfix().

      #define NWCSFIX   6

      Number of elements in the status vector returned by wcsfix().

      #define cylfix_errmsg   wcsfix_errmsg

      Deprecated:
      Added for backwards compatibility, use wcsfix_errmsg directly now instead.


      Enumeration Type Documentation

      Enumerator:
      FIXERR_DATE_FIX 
      FIXERR_SPC_UPDATE 
      FIXERR_UNITS_ALIAS 
      FIXERR_NO_CHANGE 
      FIXERR_SUCCESS 
      FIXERR_NULL_POINTER 
      FIXERR_MEMORY 
      FIXERR_SINGULAR_MTX 
      FIXERR_BAD_CTYPE 
      FIXERR_BAD_PARAM 
      FIXERR_BAD_COORD_TRANS 
      FIXERR_ILL_COORD_TRANS 
      FIXERR_BAD_CORNER_PIX 
      FIXERR_NO_REF_PIX_COORD 
      FIXERR_NO_REF_PIX_VAL 


      Function Documentation

      int wcsfix ( int  ctrl,
      const int  naxis[],
      struct wcsprm wcs,
      int  stat[] 
      )

      wcsfix() is identical to wcsfixi(), but lacks the info argument.

      int wcsfixi ( int  ctrl,
      const int  naxis[],
      struct wcsprm wcs,
      int  stat[],
      struct wcserr  info[] 
      )

      wcsfix() applies all of the corrections handled separately by cdfix(), datfix(), unitfix(), spcfix(), celfix(), and cylfix().

      Parameters:
      [in] ctrl Do potentially unsafe translations of non-standard unit strings as described in the usage notes to wcsutrn().
      [in] naxis Image axis lengths. If this array pointer is set to zero then cylfix() will not be invoked.
      [in,out] wcs Coordinate transformation parameters.
      [out] stat Status returns from each of the functions. Use the preprocessor macros NWCSFIX to dimension this vector and CDFIX, DATFIX, UNITFIX, SPCFIX, CELFIX, and CYLFIX to access its elements. A status value of -2 is set for functions that were not invoked.
      [out] info Status messages from each of the functions. Use the preprocessor macros NWCSFIX to dimension this vector and CDFIX, DATFIX, UNITFIX, SPCFIX, CELFIX, and CYLFIX to access its elements.
      Returns:
      Status return value:
      • 0: Success.
      • 1: One or more of the translation functions returned an error.

      int cdfix ( struct wcsprm wcs  ) 

      cdfix() sets the diagonal element of the CDi_ja matrix to unity if all CDi_ja keywords associated with a given axis were omitted. According to Paper I, if any CDi_ja keywords at all are given in a FITS header then those not given default to zero. This results in a singular matrix with an intersecting row and column of zeros.

      Parameters:
      [in,out] wcs Coordinate transformation parameters.
      Returns:
      Status return value:
      • -1: No change required (not an error).
      • 0: Success.
      • 1: Null wcsprm pointer passed.

      int datfix ( struct wcsprm wcs  ) 

      datfix() translates the old DATE-OBS date format set in wcsprm::dateobs to year-2000 standard form (yyyy-mm-ddThh:mm:ss) and derives MJD-OBS from it if not already set. Alternatively, if wcsprm::mjdobs is set and wcsprm::dateobs isn't, then datfix() derives wcsprm::dateobs from it. If both are set but disagree by more than half a day then status 5 is returned.

      Parameters:
      [in,out] wcs Coordinate transformation parameters. wcsprm::dateobs and/or wcsprm::mjdobs may be changed.
      Returns:
      Status return value:
      • -1: No change required (not an error).
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 5: Invalid parameter value.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().
      Notes:
      The MJD algorithms used by datfix() are from D.A. Hatcher, 1984, QJRAS, 25, 53-55, as modified by P.T. Wallace for use in SLALIB subroutines CLDJ and DJCL.

      int unitfix ( int  ctrl,
      struct wcsprm wcs 
      )

      unitfix() applies wcsutrn() to translate non-standard CUNITia keyvalues, e.g. 'DEG' -> 'deg', also stripping off unnecessary whitespace.

      Parameters:
      [in] ctrl Do potentially unsafe translations described in the usage notes to wcsutrn().
      [in,out] wcs Coordinate transformation parameters.
      Returns:
      Status return value:
      • -1: No change required (not an error).
      • 0: Success (an alias was applied).
      • 1: Null wcsprm pointer passed.
      When units are translated (i.e. status 0), status -2 is set in the wcserr struct to allow an informative message to be returned.

      int spcfix ( struct wcsprm wcs  ) 

      spcfix() translates AIPS-convention spectral coordinate types, '{FREQ,FELO,VELO}-{LSR,HEL,OBS}' (e.g. 'FREQ-OBS', 'FELO-HEL', 'VELO-LSR') set in wcsprm::ctype[], subject to VELREF set in wcsprm::velref.

      Note that if wcs::specsys is already set then it will not be overridden.

      Parameters:
      [in,out] wcs Coordinate transformation parameters. wcsprm::ctype[] and/or wcsprm::specsys may be changed.
      Returns:
      Status return value:
      • -1: No change required (not an error).
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Linear transformation matrix is singular.
      • 4: Inconsistent or unrecognized coordinate axis types.
      • 5: Invalid parameter value.
      • 6: Invalid coordinate transformation parameters.
      • 7: Ill-conditioned coordinate transformation parameters.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().

      int celfix ( struct wcsprm wcs  ) 

      celfix() translates AIPS-convention celestial projection types, NCP and GLS, set in the ctype[] member of the wcsprm struct.

      Two additional pv[] keyvalues are created when translating NCP. If the pv[] array was initially allocated by wcsini() then the array will be expanded if necessary. Otherwise, error 2 will be returned if two empty slots are not already available for use.

      Parameters:
      [in,out] wcs Coordinate transformation parameters. wcsprm::ctype[] and/or wcsprm::pv[] may be changed.
      Returns:
      Status return value:
      • -1: No change required (not an error).
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Linear transformation matrix is singular.
      • 4: Inconsistent or unrecognized coordinate axis types.
      • 5: Invalid parameter value.
      • 6: Invalid coordinate transformation parameters.
      • 7: Ill-conditioned coordinate transformation parameters.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().

      int cylfix ( const int  naxis[],
      struct wcsprm wcs 
      )

      cylfix() fixes WCS keyvalues for malformed cylindrical projections that suffer from the problem described in Sect. 7.3.4 of Paper I.

      Parameters:
      [in] naxis Image axis lengths.
      [in,out] wcs Coordinate transformation parameters.
      Returns:
      Status return value:
      • -1: No change required (not an error).
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Linear transformation matrix is singular.
      • 4: Inconsistent or unrecognized coordinate axis types.
      • 5: Invalid parameter value.
      • 6: Invalid coordinate transformation parameters.
      • 7: Ill-conditioned coordinate transformation parameters.
      • 8: All of the corner pixel coordinates are invalid.
      • 9: Could not determine reference pixel coordinate.
      • 10: Could not determine reference pixel value.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().


      Variable Documentation

      const char * wcsfix_errmsg[]

      Error messages to match the status value returned from each function.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcshdr_8h-source.html0000644001153600020070000036417212310355626023167 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcshdr.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcshdr_8h.html0000644001153600020070000042505112310355626021663 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcshdr.h File Reference

      wcshdr.h File Reference

      #include "wcs.h"

      Go to the source code of this file.

      Defines

      #define WCSHDR_none   0x00000000
       Bit mask for wcspih() and wcsbth() - reject all extensions.
      #define WCSHDR_all   0x000FFFFF
       Bit mask for wcspih() and wcsbth() - accept all extensions.
      #define WCSHDR_reject   0x10000000
       Bit mask for wcspih() and wcsbth() - reject non-standard keywords.
      #define WCSHDR_CROTAia   0x00000001
       Bit mask for wcspih() and wcsbth() - accept CROTAia, iCROTna, TCROTna.
      #define WCSHDR_EPOCHa   0x00000002
       Bit mask for wcspih() and wcsbth() - accept EPOCHa.
      #define WCSHDR_VELREFa   0x00000004
       Bit mask for wcspih() and wcsbth() - accept VELREFa.
      #define WCSHDR_CD00i00j   0x00000008
       Bit mask for wcspih() and wcsbth() - accept CD00i00j.
      #define WCSHDR_PC00i00j   0x00000010
       Bit mask for wcspih() and wcsbth() - accept PC00i00j.
      #define WCSHDR_PROJPn   0x00000020
       Bit mask for wcspih() and wcsbth() - accept PROJPn.
      #define WCSHDR_RADECSYS   0x00000040
       Bit mask for wcspih() and wcsbth() - accept RADECSYS.
      #define WCSHDR_VSOURCE   0x00000080
       Bit mask for wcspih() and wcsbth() - accept VSOURCEa.
      #define WCSHDR_DOBSn   0x00000100
       Bit mask for wcspih() and wcsbth() - accept DOBSn.
      #define WCSHDR_LONGKEY   0x00000200
       Bit mask for wcspih() and wcsbth() - accept long forms of the alternate binary table and pixel list WCS keywords.
      #define WCSHDR_CNAMn   0x00000400
       Bit mask for wcspih() and wcsbth() - accept iCNAMn, TCNAMn, iCRDEn, TCRDEn, iCSYEn, TCSYEn.
      #define WCSHDR_AUXIMG   0x00000800
       Bit mask for wcspih() and wcsbth() - allow the image-header form of an auxiliary WCS keyword to provide a default value for all images.
      #define WCSHDR_ALLIMG   0x00001000
       Bit mask for wcspih() and wcsbth() - allow the image-header form of all image header WCS keywords to provide a default value for all images.
      #define WCSHDR_IMGHEAD   0x00010000
       Bit mask for wcsbth() - restrict to image header keywords only.
      #define WCSHDR_BIMGARR   0x00020000
       Bit mask for wcsbth() - restrict to binary table image array keywords only.
      #define WCSHDR_PIXLIST   0x00040000
       Bit mask for wcsbth() - restrict to pixel list keywords only.
      #define WCSHDO_none   0x00
       Bit mask for wcshdo() - don't write any extensions.
      #define WCSHDO_all   0xFF
       Bit mask for wcshdo() - write all extensions.
      #define WCSHDO_safe   0x0F
       Bit mask for wcshdo() - write safe extensions only.
      #define WCSHDO_DOBSn   0x01
       Bit mask for wcshdo() - write DOBSn.
      #define WCSHDO_TPCn_ka   0x02
       Bit mask for wcshdo() - write TPCn_ka.
      #define WCSHDO_PVn_ma   0x04
       Bit mask for wcshdo() - write iPVn_ma, TPVn_ma, iPSn_ma, TPSn_ma.
      #define WCSHDO_CRPXna   0x08
       Bit mask for wcshdo() - write jCRPXna, TCRPXna, iCDLTna, TCDLTna, iCUNIna, TCUNIna, iCTYPna, TCTYPna, iCRVLna, TCRVLna.
      #define WCSHDO_CNAMna   0x10
       Bit mask for wcshdo() - write iCNAMna, TCNAMna, iCRDEna, TCRDEna, iCSYEna, TCSYEna.
      #define WCSHDO_WCSNna   0x20
       Bit mask for wcshdo() - write WCSNna instead of TWCSna.

      Enumerations

      enum  wcshdr_errmsg_enum {
        WCSHDRERR_SUCCESS = 0, WCSHDRERR_NULL_POINTER = 1, WCSHDRERR_MEMORY = 2, WCSHDRERR_BAD_COLUMN = 3,
        WCSHDRERR_PARSER = 4, WCSHDRERR_BAD_TABULAR_PARAMS = 5
      }

      Functions

      int wcspih (char *header, int nkeyrec, int relax, int ctrl, int *nreject, int *nwcs, struct wcsprm **wcs)
       FITS WCS parser routine for image headers.
      int wcsbth (char *header, int nkeyrec, int relax, int ctrl, int keysel, int *colsel, int *nreject, int *nwcs, struct wcsprm **wcs)
       FITS WCS parser routine for binary table and image headers.
      int wcstab (struct wcsprm *wcs)
       Tabular construction routine.
      int wcsidx (int nwcs, struct wcsprm **wcs, int alts[27])
       Index alternate coordinate representations.
      int wcsbdx (int nwcs, struct wcsprm **wcs, int type, short alts[1000][28])
       Index alternate coordinate representions.
      int wcsvfree (int *nwcs, struct wcsprm **wcs)
       Free the array of wcsprm structs.
      int wcshdo (int relax, struct wcsprm *wcs, int *nkeyrec, char **header)
       Write out a wcsprm struct as a FITS header.

      Variables

      const char * wcshdr_errmsg []
       Status return messages.


      Detailed Description

      Routines in this suite are aimed at extracting WCS information from a FITS file. They provide the high-level interface between the FITS file and the WCS coordinate transformation routines.

      Additionally, function wcshdo() is provided to write out the contents of a wcsprm struct as a FITS header.

      Briefly, the anticipated sequence of operations is as follows:

      • 1: Open the FITS file and read the image or binary table header, e.g. using CFITSIO routine fits_hdr2str().

      • 2: Parse the header using wcspih() or wcsbth(); they will automatically interpret 'TAB' header keywords using wcstab().

      • 3: Allocate memory for, and read 'TAB' arrays from the binary table extension, e.g. using CFITSIO routine fits_read_wcstab() - refer to the prologue of getwcstab.h. wcsset() will automatically take control of this allocated memory, in particular causing it to be free'd by wcsfree().

      • 4: Translate non-standard WCS usage using wcsfix(), see wcsfix.h.

      • 5: Initialize wcsprm struct(s) using wcsset() and calculate coordinates using wcsp2s() and/or wcss2p(). Refer to the prologue of wcs.h for a description of these and other high-level WCS coordinate transformation routines.

      • 6: Clean up by freeing memory with wcsvfree().

      In detail:

      • wcspih() is a high-level FITS WCS routine that parses an image header. It returns an array of up to 27 wcsprm structs on each of which it invokes wcstab().

      • wcsbth() is the analogue of wcspih() for use with binary tables; it handles image array and pixel list keywords. As an extension of the FITS WCS standard, it also recognizes image header keywords which may be used to provide default values via an inheritance mechanism.

      • wcstab() assists in filling in members of the wcsprm struct associated with coordinate lookup tables ('TAB'). These are based on arrays stored in a FITS binary table extension (BINTABLE) that are located by PVi_ma keywords in the image header.


      Define Documentation

      #define WCSHDR_none   0x00000000

      Bit mask for the relax argument of wcspih() and wcsbth() - reject all extensions.

      Refer to wcsbth() note 5.

      #define WCSHDR_all   0x000FFFFF

      Bit mask for the relax argument of wcspih() and wcsbth() - accept all extensions.

      Refer to wcsbth() note 5.

      #define WCSHDR_reject   0x10000000

      Bit mask for the relax argument of wcspih() and wcsbth() - reject non-standard keywords.

      Refer to wcsbth() note 5.

      #define WCSHDR_CROTAia   0x00000001

      Bit mask for the relax argument of wcspih() and wcsbth() - accept CROTAia, iCROTna, TCROTna.

      Refer to wcsbth() note 5.

      #define WCSHDR_EPOCHa   0x00000002

      Bit mask for the relax argument of wcspih() and wcsbth() - accept EPOCHa.

      Refer to wcsbth() note 5.

      #define WCSHDR_VELREFa   0x00000004

      Bit mask for the relax argument of wcspih() and wcsbth() - accept VELREFa.

      Refer to wcsbth() note 5.

      #define WCSHDR_CD00i00j   0x00000008

      Bit mask for the relax argument of wcspih() and wcsbth() - accept CD00i00j.

      Refer to wcsbth() note 5.

      #define WCSHDR_PC00i00j   0x00000010

      Bit mask for the relax argument of wcspih() and wcsbth() - accept PC00i00j.

      Refer to wcsbth() note 5.

      #define WCSHDR_PROJPn   0x00000020

      Bit mask for the relax argument of wcspih() and wcsbth() - accept PROJPn.

      Refer to wcsbth() note 5.

      #define WCSHDR_RADECSYS   0x00000040

      Bit mask for the relax argument of wcspih() and wcsbth() - accept RADECSYS.

      Refer to wcsbth() note 5.

      #define WCSHDR_VSOURCE   0x00000080

      Bit mask for the relax argument of wcspih() and wcsbth() - accept VSOURCEa.

      Refer to wcsbth() note 5.

      #define WCSHDR_DOBSn   0x00000100

      Bit mask for the relax argument of wcspih() and wcsbth() - accept DOBSn.

      Refer to wcsbth() note 5.

      #define WCSHDR_LONGKEY   0x00000200

      Bit mask for the relax argument of wcspih() and wcsbth() - accept long forms of the alternate binary table and pixel list WCS keywords.

      Refer to wcsbth() note 5.

      #define WCSHDR_CNAMn   0x00000400

      Bit mask for the relax argument of wcspih() and wcsbth() - accept iCNAMn, TCNAMn, iCRDEn, TCRDEn, iCSYEn, TCSYEn.

      Refer to wcsbth() note 5.

      #define WCSHDR_AUXIMG   0x00000800

      Bit mask for the relax argument of wcspih() and wcsbth() - allow the image-header form of an auxiliary WCS keyword with representation-wide scope to provide a default value for all images.

      Refer to wcsbth() note 5.

      #define WCSHDR_ALLIMG   0x00001000

      Bit mask for the relax argument of wcspih() and wcsbth() - allow the image-header form of all image header WCS keywords to provide a default value for all image arrays in a binary table (n.b. not pixel list).

      Refer to wcsbth() note 5.

      #define WCSHDR_IMGHEAD   0x00010000

      Bit mask for the keysel argument of wcsbth() - restrict keyword types considered to image header keywords only.

      #define WCSHDR_BIMGARR   0x00020000

      Bit mask for the keysel argument of wcsbth() - restrict keyword types considered to binary table image array keywords only.

      #define WCSHDR_PIXLIST   0x00040000

      Bit mask for the keysel argument of wcsbth() - restrict keyword types considered to pixel list keywords only.

      #define WCSHDO_none   0x00

      Bit mask for the relax argument of wcshdo() - don't write any extensions.

      Refer to the notes for wcshdo().

      #define WCSHDO_all   0xFF

      Bit mask for the relax argument of wcshdo() - write all extensions.

      Refer to the notes for wcshdo().

      #define WCSHDO_safe   0x0F

      Bit mask for the relax argument of wcshdo() - write only extensions that are considered safe.

      Refer to the notes for wcshdo().

      #define WCSHDO_DOBSn   0x01

      Bit mask for the relax argument of wcshdo() - write DOBSn, the column-specific analogue of DATE-OBS for use in binary tables and pixel lists.

      Refer to the notes for wcshdo().

      #define WCSHDO_TPCn_ka   0x02

      Bit mask for the relax argument of wcshdo() - write TPCn_ka if less than eight characters instead of TPn_ka.

      Refer to the notes for wcshdo().

      #define WCSHDO_PVn_ma   0x04

      Bit mask for the relax argument of wcshdo() - write iPVn_ma, TPVn_ma, iPSn_ma, TPSn_ma, if less than eight characters instead of iVn_ma, TVn_ma, iSn_ma, TSn_ma.

      Refer to the notes for wcshdo().

      #define WCSHDO_CRPXna   0x08

      Bit mask for the relax argument of wcshdo() - write jCRPXna, TCRPXna, iCDLTna, TCDLTna, iCUNIna, TCUNIna, iCTYPna, TCTYPna, iCRVLna, TCRVLna, if less than eight characters instead of jCRPna, TCRPna, iCDEna, TCDEna, iCUNna, TCUNna, iCTYna, TCTYna, iCRVna, TCRVna.

      Refer to the notes for wcshdo().

      #define WCSHDO_CNAMna   0x10

      Bit mask for the relax argument of wcshdo() - write iCNAMna, TCNAMna, iCRDEna, TCRDEna, iCSYEna, TCSYEna, if less than eight characters instead of iCNAna, TCNAna, iCRDna, TCRDna, iCSYna, TCSYna.

      Refer to the notes for wcshdo().

      #define WCSHDO_WCSNna   0x20

      Bit mask for the relax argument of wcshdo() - write WCSNna instead of TWCSna.

      Refer to the notes for wcshdo().


      Enumeration Type Documentation

      Enumerator:
      WCSHDRERR_SUCCESS 
      WCSHDRERR_NULL_POINTER 
      WCSHDRERR_MEMORY 
      WCSHDRERR_BAD_COLUMN 
      WCSHDRERR_PARSER 
      WCSHDRERR_BAD_TABULAR_PARAMS 


      Function Documentation

      int wcspih ( char *  header,
      int  nkeyrec,
      int  relax,
      int  ctrl,
      int *  nreject,
      int *  nwcs,
      struct wcsprm **  wcs 
      )

      wcspih() is a high-level FITS WCS routine that parses an image header, either that of a primary HDU or of an image extension. All WCS keywords defined in Papers I, II, and III are recognized, and also those used by the AIPS convention and certain other keywords that existed in early drafts of the WCS papers as explained in wcsbth() note 5.

      Given a character array containing a FITS image header, wcspih() identifies and reads all WCS keywords for the primary coordinate representation and up to 26 alternate representations. It returns this information as an array of wcsprm structs.

      wcspih() invokes wcstab() on each of the wcsprm structs that it returns.

      Use wcsbth() in preference to wcspih() for FITS headers of unknown type; wcsbth() can parse image headers as well as binary table and pixel list headers.

      Parameters:
      [in,out] header Character array containing the (entire) FITS image header from which to identify and construct the coordinate representations, for example, as might be obtained conveniently via the CFITSIO routine fits_hdr2str().
      Each header "keyrecord" (formerly "card image") consists of exactly 80 7-bit ASCII printing characters in the range 0x20 to 0x7e (which excludes NUL, BS, TAB, LF, FF and CR) especially noting that the keyrecords are NOT null-terminated.
      For negative values of ctrl (see below), header[] is modified so that WCS keyrecords processed by wcspih() are removed from it.
      [in] nkeyrec Number of keyrecords in header[].
      [in] relax Degree of permissiveness:
      • 0: Recognize only FITS keywords defined by the published WCS standard.
      • WCSHDR_all: Admit all recognized informal extensions of the WCS standard.
      Fine-grained control of the degree of permissiveness is also possible as explained in wcsbth() note 5.
      [in] ctrl Error reporting and other control options for invalid WCS and other header keyrecords:
      • 0: Do not report any rejected header keyrecords.
      • 1: Produce a one-line message stating the number of WCS keyrecords rejected (nreject).
      • 2: Report each rejected keyrecord and the reason why it was rejected.
      • 3: As above, but also report all non-WCS keyrecords that were discarded, and the number of coordinate representations (nwcs) found.
      The report is written to stderr.
      For ctrl < 0, WCS keyrecords processed by wcspih() are removed from header[]:
      • -1: Remove only valid WCS keyrecords whose values were successfully extracted, nothing is reported.
      • -2: Also remove WCS keyrecords that were rejected, reporting each one and the reason that it was rejected.
      • -3: As above, and also report the number of coordinate representations (nwcs) found.
      • -11: Same as -1 but preserving the basic keywords '{DATE,MJD}-{OBS,AVG}' and 'OBSGEO-{X,Y,Z}'.
      If any keyrecords are removed from header[] it will be null-terminated (NUL not being a legal FITS header character), otherwise it will contain its original complement of nkeyrec keyrecords and possibly not be null-terminated.
      [out] nreject Number of WCS keywords rejected for syntax errors, illegal values, etc. Keywords not recognized as WCS keywords are simply ignored. Refer also to wcsbth() note 5.
      [out] nwcs Number of coordinate representations found.
      [out] wcs Pointer to an array of wcsprm structs containing up to 27 coordinate representations.
      Memory for the array is allocated by wcspih() which also invokes wcsini() for each struct to allocate memory for internal arrays and initialize their members to default values. Refer also to wcsbth() note 8. Note that wcsset() is not invoked on these structs.
      This allocated memory must be freed by the user, first by invoking wcsfree() for each struct, and then by freeing the array itself. A routine, wcsvfree(), is provided to do this (see below).
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 4: Fatal error returned by Flex parser.
      Notes:
      Refer to wcsbth() notes 1, 2, 3, 5, 7, and 8.

      int wcsbth ( char *  header,
      int  nkeyrec,
      int  relax,
      int  ctrl,
      int  keysel,
      int *  colsel,
      int *  nreject,
      int *  nwcs,
      struct wcsprm **  wcs 
      )

      wcsbth() is a high-level FITS WCS routine that parses a binary table header. It handles image array and pixel list WCS keywords which may be present together in one header.

      As an extension of the FITS WCS standard, wcsbth() also recognizes image header keywords in a binary table header. These may be used to provide default values via an inheritance mechanism discussed in note 5 (c.f. WCSHDR_AUXIMG and WCSHDR_ALLIMG), or may instead result in wcsprm structs that are not associated with any particular column. Thus wcsbth() can handle primary image and image extension headers in addition to binary table headers (it ignores NAXIS and does not rely on the presence of the TFIELDS keyword).

      All WCS keywords defined in Papers I, II, and III are recognized, and also those used by the AIPS convention and certain other keywords that existed in early drafts of the WCS papers as explained in note 5 below.

      wcsbth() sets the colnum or colax[] members of the wcsprm structs that it returns with the column number of an image array or the column numbers associated with each pixel coordinate element in a pixel list. wcsprm structs that are not associated with any particular column, as may be derived from image header keywords, have colnum == 0.

      Note 6 below discusses the number of wcsprm structs returned by wcsbth(), and the circumstances in which image header keywords cause a struct to be created. See also note 9 concerning the number of separate images that may be stored in a pixel list.

      The API to wcsbth() is similar to that of wcspih() except for the addition of extra arguments that may be used to restrict its operation. Like wcspih(), wcsbth() invokes wcstab() on each of the wcsprm structs that it returns.

      Parameters:
      [in,out] header Character array containing the (entire) FITS binary table, primary image, or image extension header from which to identify and construct the coordinate representations, for example, as might be obtained conveniently via the CFITSIO routine fits_hdr2str().
      Each header "keyrecord" (formerly "card image") consists of exactly 80 7-bit ASCII printing characters in the range 0x20 to 0x7e (which excludes NUL, BS, TAB, LF, FF and CR) especially noting that the keyrecords are NOT null-terminated.
      For negative values of ctrl (see below), header[] is modified so that WCS keyrecords processed by wcsbth() are removed from it.
      [in] nkeyrec Number of keyrecords in header[].
      [in] relax Degree of permissiveness:
      • 0: Recognize only FITS keywords defined by the published WCS standard.
      • WCSHDR_all: Admit all recognized informal extensions of the WCS standard.
      Fine-grained control of the degree of permissiveness is also possible, as explained in note 5 below.
      [in] ctrl Error reporting and other control options for invalid WCS and other header keyrecords:
      • 0: Do not report any rejected header keyrecords.
      • 1: Produce a one-line message stating the number of WCS keyrecords rejected (nreject).
      • 2: Report each rejected keyrecord and the reason why it was rejected.
      • 3: As above, but also report all non-WCS keyrecords that were discarded, and the number of coordinate representations (nwcs) found.
      The report is written to stderr.
      For ctrl < 0, WCS keyrecords processed by wcsbth() are removed from header[]:
      • -1: Remove only valid WCS keyrecords whose values were successfully extracted, nothing is reported.
      • -2: Also remove WCS keyrecords that were rejected, reporting each one and the reason that it was rejected.
      • -3: As above, and also report the number of coordinate representations (nwcs) found.
      • -11: Same as -1 but preserving the basic keywords '{DATE,MJD}-{OBS,AVG}' and 'OBSGEO-{X,Y,Z}'.
      If any keyrecords are removed from header[] it will be null-terminated (NUL not being a legal FITS header character), otherwise it will contain its original complement of nkeyrec keyrecords and possibly not be null-terminated.
      [in] keysel Vector of flag bits that may be used to restrict the keyword types considered: If zero, there is no restriction.
      Keywords such as EQUIna or RFRQna that are common to binary table image arrays and pixel lists (including WCSNna and TWCSna, as explained in note 4 below) are selected by both WCSHDR_BIMGARR and WCSHDR_PIXLIST. Thus if inheritance via WCSHDR_ALLIMG is enabled as discussed in note 5 and one of these shared keywords is present, then WCSHDR_IMGHEAD and WCSHDR_PIXLIST alone may be sufficient to cause the construction of coordinate descriptions for binary table image arrays.
      [in] colsel Pointer to an array of table column numbers used to restrict the keywords considered by wcsbth().
      A null pointer may be specified to indicate that there is no restriction. Otherwise, the magnitude of cols[0] specifies the length of the array:
      • cols[0] > 0: the columns are included,
      • cols[0] < 0: the columns are excluded.
      For the pixel list keywords TPn_ka and TCn_ka (and TPCn_ka and TCDn_ka if WCSHDR_LONGKEY is enabled), it is an error for one column to be selected but not the other. This is unlike the situation with invalid keyrecords, which are simply rejected, because the error is not intrinsic to the header itself but arises in the way that it is processed.
      [out] nreject Number of WCS keywords rejected for syntax errors, illegal values, etc. Keywords not recognized as WCS keywords are simply ignored, refer also to note 5 below.
      [out] nwcs Number of coordinate representations found.
      [out] wcs Pointer to an array of wcsprm structs containing up to 27027 coordinate representations, refer to note 6 below.
      Memory for the array is allocated by wcsbth() which also invokes wcsini() for each struct to allocate memory for internal arrays and initialize their members to default values. Refer also to note 8 below. Note that wcsset() is not invoked on these structs.
      This allocated memory must be freed by the user, first by invoking wcsfree() for each struct, and then by freeing the array itself. A routine, wcsvfree(), is provided to do this (see below).
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Invalid column selection.
      • 4: Fatal error returned by Flex parser.
      Notes:
      1. wcspih() determines the number of coordinate axes independently for each alternate coordinate representation (denoted by the "a" value in keywords like CTYPEia) from the higher of

        1. NAXIS,
        2. WCSAXESa,
        3. The highest axis number in any parameterized WCS keyword. The keyvalue, as well as the keyword, must be syntactically valid otherwise it will not be considered.

        If none of these keyword types is present, i.e. if the header only contains auxiliary WCS keywords for a particular coordinate representation, then no coordinate description is constructed for it.

        wcsbth() is similar except that it ignores the NAXIS keyword if given an image header to process.

        The number of axes, which is returned as a member of the wcsprm struct, may differ for different coordinate representations of the same image.

      2. wcspih() and wcsbth() enforce correct FITS "keyword = value" syntax with regard to "= " occurring in columns 9 and 10.

        However, they do recognize free-format character (NOST 100-2.0, Sect. 5.2.1), integer (Sect. 5.2.3), and floating-point values (Sect. 5.2.4) for all keywords.

      3. Where CROTAn, CDi_ja, and PCi_ja occur together in one header wcspih() and wcsbth() treat them as described in the prologue to wcs.h.

      4. WCS Paper I mistakenly defined the pixel list form of WCSNAMEa as TWCSna instead of WCSNna; the 'T' is meant to substitute for the axis number in the binary table form of the keyword - note that keywords defined in WCS Papers II and III that are not parameterised by axis number have identical forms for binary tables and pixel lists. Consequently wcsbth() always treats WCSNna and TWCSna as equivalent.

      5. wcspih() and wcsbth() interpret the relax argument as a vector of flag bits to provide fine-grained control over what non-standard WCS keywords to accept. The flag bits are subject to change in future and should be set by using the preprocessor macros (see below) for the purpose.

        • WCSHDR_none: Don't accept any extensions (not even those in the errata). Treat non-conformant keywords in the same way as non-WCS keywords in the header, i.e. simply ignore them.

        • WCSHDR_all: Accept all extensions recognized by the parser.

        • WCSHDR_reject: Reject non-standard keywords (that are not otherwise accepted). A message will optionally be printed on stderr, as determined by the ctrl argument, and nreject will be incremented.

          This flag may be used to signal the presence of non-standard keywords, otherwise they are simply passed over as though they did not exist in the header.

          Useful for testing conformance of a FITS header to the WCS standard.

        • WCSHDR_CROTAia: Accept CROTAia (wcspih()), iCROTna (wcsbth()), TCROTna (wcsbth()).
        • WCSHDR_EPOCHa: Accept EPOCHa.
        • WCSHDR_VELREFa: Accept VELREFa. wcspih() always recognizes the AIPS-convention keywords, CROTAn, EPOCH, and VELREF for the primary representation (a = ' ') but alternates are non-standard.

          wcsbth() accepts EPOCHa and VELREFa only if WCSHDR_AUXIMG is also enabled.

        • WCSHDR_CD00i00j: Accept CD00i00j (wcspih()).
        • WCSHDR_PC00i00j: Accept PC00i00j (wcspih()).
        • WCSHDR_PROJPn: Accept PROJPn (wcspih()). These appeared in early drafts of WCS Paper I+II (before they were split) and are equivalent to CDi_ja, PCi_ja, and PVi_ma for the primary representation (a = ' '). PROJPn is equivalent to PVi_ma with m = n $\le$ 9, and is associated exclusively with the latitude axis.

        • WCSHDR_RADECSYS: Accept RADECSYS. This appeared in early drafts of WCS Paper I+II and was subsequently replaced by RADESYSa.

          wcsbth() accepts RADECSYS only if WCSHDR_AUXIMG is also enabled.

        • WCSHDR_VSOURCE: Accept VSOURCEa or VSOUna (wcsbth()). This appeared in early drafts of WCS Paper III and was subsequently dropped in favour of ZSOURCEa and ZSOUna.

          wcsbth() accepts VSOURCEa only if WCSHDR_AUXIMG is also enabled.

        • WCSHDR_DOBSn (wcsbth() only): Allow DOBSn, the column-specific analogue of DATE-OBS. By an oversight this was never formally defined in the standard.

        • WCSHDR_LONGKEY (wcsbth() only): Accept long forms of the alternate binary table and pixel list WCS keywords, i.e. with "a" non- blank. Specifically
          jCRPXna TCRPXna : jCRPXn jCRPna TCRPXn TCRPna CRPIXja
          TPCn_ka : ijPCna TPn_ka PCi_ja
          TCDn_ka : ijCDna TCn_ka CDi_ja
          iCDLTna TCDLTna : iCDLTn iCDEna TCDLTn TCDEna CDELTia
          iCUNIna TCUNIna : iCUNIn iCUNna TCUNIn TCUNna CUNITia
          iCTYPna TCTYPna : iCTYPn iCTYna TCTYPn TCTYna CTYPEia
          iCRVLna TCRVLna : iCRVLn iCRVna TCRVLn TCRVna CRVALia
          iPVn_ma TPVn_ma : iVn_ma TVn_ma PVi_ma
          iPSn_ma TPSn_ma : iSn_ma TSn_ma PSi_ma

          where the primary and standard alternate forms together with the image-header equivalent are shown rightwards of the colon.

          The long form of these keywords could be described as quasi- standard. TPCn_ka, iPVn_ma, and TPVn_ma appeared by mistake in the examples in WCS Paper II and subsequently these and also TCDn_ka, iPSn_ma and TPSn_ma were legitimized by the errata to the WCS papers.

          Strictly speaking, the other long forms are non-standard and in fact have never appeared in any draft of the WCS papers nor in the errata. However, as natural extensions of the primary form they are unlikely to be written with any other intention. Thus it should be safe to accept them provided, of course, that the resulting keyword does not exceed the 8-character limit.

          If WCSHDR_CNAMn is enabled then also accept


          iCNAMna TCNAMna : --- iCNAna --- TCNAna CNAMEia
          iCRDEna TCRDEna : --- iCRDna --- TCRDna CRDERia
          iCSYEna TCSYEna : --- iCSYna --- TCSYna CSYERia

          Note that CNAMEia, CRDERia, CSYERia, and their variants are not used by WCSLIB but are stored in the wcsprm struct as auxiliary information.

        • WCSHDR_CNAMn (wcsbth() only): Accept iCNAMn, iCRDEn, iCSYEn, TCNAMn, TCRDEn, and TCSYEn, i.e. with "a" blank. While non-standard, these are the obvious analogues of iCTYPn, TCTYPn, etc.

        • WCSHDR_AUXIMG (wcsbth() only): Allow the image-header form of an auxiliary WCS keyword with representation-wide scope to provide a default value for all images. This default may be overridden by the column-specific form of the keyword.

          For example, a keyword like EQUINOXa would apply to all image arrays in a binary table, or all pixel list columns with alternate representation "a" unless overridden by EQUIna.

          Specifically the keywords are:


          LATPOLEa for LATPna
          LONPOLEa for LONPna
          RESTFREQ for RFRQna
          RESTFRQa for RFRQna
          RESTWAVa for RWAVna

          whose keyvalues are actually used by WCSLIB, and also keywords that provide auxiliary information that is simply stored in the wcsprm struct:


          EPOCH ... (No column-specific form.)
          EPOCHa ... Only if WCSHDR_EPOCHa is set.
          EQUINOXa for EQUIna
          RADESYSa for RADEna
          RADECSYS for RADEna ... Only if WCSHDR_RADECSYS is set.
          SPECSYSa for SPECna
          SSYSOBSa for SOBSna
          SSYSSRCa for SSRCna
          VELOSYSa for VSYSna
          VELANGLa for VANGna
          VELREF ... (No column-specific form.)
          VELREFa ... Only if WCSHDR_VELREFa is set.
          VSOURCEa for VSOUna ... Only if WCSHDR_VSOURCE is set.
          WCSNAMEa for WCSNna ... Or TWCSna (see below).
          ZSOURCEa for ZSOUna


          DATE-AVG for DAVGn
          DATE-OBS for DOBSn
          MJD-AVG for MJDAn
          MJD-OBS for MJDOBn
          OBSGEO-X for OBSGXn
          OBSGEO-Y for OBSGYn
          OBSGEO-Z for OBSGZn

          where the image-header keywords on the left provide default values for the column specific keywords on the right.

          Keywords in the last group, such as MJD-OBS, apply to all alternate representations, so MJD-OBS would provide a default value for all images in the header.

          This auxiliary inheritance mechanism applies to binary table image arrays and pixel lists alike. Most of these keywords have no default value, the exceptions being LONPOLEa and LATPOLEa, and also RADESYSa and EQUINOXa which provide defaults for each other. Thus the only potential difficulty in using WCSHDR_AUXIMG is that of erroneously inheriting one of these four keywords.

          Unlike WCSHDR_ALLIMG, the existence of one (or all) of these auxiliary WCS image header keywords will not by itself cause a wcsprm struct to be created for alternate representation "a". This is because they do not provide sufficient information to create a non-trivial coordinate representation when used in conjunction with the default values of those keywords, such as CTYPEia, that are parameterized by axis number.

        • WCSHDR_ALLIMG (wcsbth() only): Allow the image-header form of *all* image header WCS keywords to provide a default value for all image arrays in a binary table (n.b. not pixel list). This default may be overridden by the column-specific form of the keyword.

          For example, a keyword like CRPIXja would apply to all image arrays in a binary table with alternate representation "a" unless overridden by jCRPna.

          Specifically the keywords are those listed above for WCSHDR_AUXIMG plus


          WCSAXESa for WCAXna

          which defines the coordinate dimensionality, and the following keywords which are parameterized by axis number:


          CRPIXja for jCRPna
          PCi_ja for ijPCna
          CDi_ja for ijCDna
          CDELTia for iCDEna
          CROTAi for iCROTn
          CROTAia ... Only if WCSHDR_CROTAia is set.
          CUNITia for iCUNna
          CTYPEia for iCTYna
          CRVALia for iCRVna
          PVi_ma for iVn_ma
          PSi_ma for iSn_ma


          CNAMEia for iCNAna
          CRDERia for iCRDna
          CSYERia for iCSYna

          where the image-header keywords on the left provide default values for the column specific keywords on the right.

          This full inheritance mechanism only applies to binary table image arrays, not pixel lists, because in the latter case there is no well-defined association between coordinate axis number and column number.

          Note that CNAMEia, CRDERia, CSYERia, and their variants are not used by WCSLIB but are stored in the wcsprm struct as auxiliary information.

          Note especially that at least one wcsprm struct will be returned for each "a" found in one of the image header keywords listed above:

          • If the image header keywords for "a" are not inherited by a binary table, then the struct will not be associated with any particular table column number and it is up to the user to provide an association.

          • If the image header keywords for "a" are inherited by a binary table image array, then those keywords are considered to be "exhausted" and do not result in a separate wcsprm struct.

        For example, to accept CD00i00j and PC00i00j and reject all other extensions, use

        The parser always treats EPOCH as subordinate to EQUINOXa if both are present, and VSOURCEa is always subordinate to ZSOURCEa.

        Likewise, VELREF is subordinate to the formalism of WCS Paper III, see spcaips().

        Neither wcspih() nor wcsbth() currently recognize the AIPS-convention keywords ALTRPIX or ALTRVAL which effectively define an alternative representation for a spectral axis.

      6. Depending on what flags have been set in its relax argument, wcsbth() could return as many as 27027 wcsprm structs:

        • Up to 27 unattached representations derived from image header keywords.

        • Up to 27 structs for each of up to 999 columns containing an image arrays.

        • Up to 27 structs for a pixel list.

        Note that it is considered legitimate for a column to contain an image array and also form part of a pixel list, and in particular that wcsbth() does not check the TFORM keyword for a pixel list column to check that it is scalar.

        In practice, of course, a realistic binary table header is unlikely to contain more than a handful of images.

        In order for wcsbth() to create a wcsprm struct for a particular coordinate representation, at least one WCS keyword that defines an axis number must be present, either directly or by inheritance if WCSHDR_ALLIMG is set.

        When the image header keywords for an alternate representation are inherited by a binary table image array via WCSHDR_ALLIMG, those keywords are considered to be "exhausted" and do not result in a separate wcsprm struct. Otherwise they do.

      7. Neither wcspih() nor wcsbth() check for duplicated keywords, in most cases they accept the last encountered.

      8. wcspih() and wcsbth() use wcsnpv() and wcsnps() (refer to the prologue of wcs.h) to match the size of the pv[] and ps[] arrays in the wcsprm structs to the number in the header. Consequently there are no unused elements in the pv[] and ps[] arrays, indeed they will often be of zero length.

      9. The FITS WCS standard for pixel lists assumes that a pixel list defines one and only one image, i.e. that each row of the binary table refers to just one event, e.g. the detection of a single photon or neutrino.

        In the absence of a formal mechanism for identifying the columns containing pixel coordinates (as opposed to pixel values or ancillary data recorded at the time the photon or neutrino was detected), Paper I discusses how the WCS keywords themselves may be used to identify them.

        In practice, however, pixel lists have been used to store multiple images. Besides not specifying how to identify columns, the pixel list convention is also silent on the method to be used to associate table columns with image axes.

        wcsbth() simply collects all WCS keywords for a particular coordinate representation (i.e. the "a" value in TCTYna) into one wcsprm struct. However, these alternates need not be associated with the same table columns and this allows a pixel list to contain up to 27 separate images. As usual, if one of these representations happened to contain more than two celestial axes, for example, then an error would result when wcsset() is invoked on it. In this case the "colsel" argument could be used to restrict the columns used to construct the representation so that it only contained one pair of celestial axes.

      int wcstab ( struct wcsprm wcs  ) 

      wcstab() assists in filling in the information in the wcsprm struct relating to coordinate lookup tables.

      Tabular coordinates ('TAB') present certain difficulties in that the main components of the lookup table - the multidimensional coordinate array plus an index vector for each dimension - are stored in a FITS binary table extension (BINTABLE). Information required to locate these arrays is stored in PVi_ma and PSi_ma keywords in the image header.

      wcstab() parses the PVi_ma and PSi_ma keywords associated with each 'TAB' axis and allocates memory in the wcsprm struct for the required number of tabprm structs. It sets as much of the tabprm struct as can be gleaned from the image header, and also sets up an array of wtbarr structs (described in the prologue of wcs.h) to assist in extracting the required arrays from the BINTABLE extension(s).

      It is then up to the user to allocate memory for, and copy arrays from the BINTABLE extension(s) into the tabprm structs. A CFITSIO routine, fits_read_wcstab(), has been provided for this purpose, see getwcstab.h. wcsset() will automatically take control of this allocated memory, in particular causing it to be free'd by wcsfree(); the user must not attempt to free it after wcsset() has been called.

      Note that wcspih() and wcsbth() automatically invoke wcstab() on each of the wcsprm structs that they return.

      Parameters:
      [in,out] wcs Coordinate transformation parameters (see below).
      wcstab() sets ntab, tab, nwtb and wtb, allocating memory for the tab and wtb arrays. This allocated memory will be free'd automatically by wcsfree().
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Invalid tabular parameters.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().

      int wcsidx ( int  nwcs,
      struct wcsprm **  wcs,
      int  alts[27] 
      )

      wcsidx() returns an array of 27 indices for the alternate coordinate representations in the array of wcsprm structs returned by wcspih(). For the array returned by wcsbth() it returns indices for the unattached (colnum == 0) representations derived from image header keywords - use wcsbdx() for those derived from binary table image arrays or pixel lists keywords.

      Parameters:
      [in] nwcs Number of coordinate representations in the array.
      [in] wcs Pointer to an array of wcsprm structs returned by wcspih() or wcsbth().
      [out] alts Index of each alternate coordinate representation in the array: alts[0] for the primary, alts[1] for 'A', etc., set to -1 if not present.
      For example, if there was no 'P' representation then
                                alts['P'-'A'+1] == -1;
      

      Otherwise, the address of its wcsprm struct would be
                                wcs + alts['P'-'A'+1];
      
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.

      int wcsbdx ( int  nwcs,
      struct wcsprm **  wcs,
      int  type,
      short  alts[1000][28] 
      )

      wcsbdx() returns an array of 999 x 27 indices for the alternate coordinate representions for binary table image arrays xor pixel lists in the array of wcsprm structs returned by wcsbth(). Use wcsidx() for the unattached representations derived from image header keywords.

      Parameters:
      [in] nwcs Number of coordinate representations in the array.
      [in] wcs Pointer to an array of wcsprm structs returned by wcsbth().
      [in] type Select the type of coordinate representation:
      • 0: binary table image arrays,
      • 1: pixel lists.
      [out] alts Index of each alternate coordinate represention in the array: alts[col][0] for the primary, alts[col][1] for 'A', to alts[col][26] for 'Z', where col is the 1-relative column number, and col == 0 is used for unattached image headers. Set to -1 if not present.
      alts[col][27] counts the number of coordinate representations of the chosen type for each column.
      For example, if there was no 'P' represention for column 13 then
                                alts[13]['P'-'A'+1] == -1;
      

      Otherwise, the address of its wcsprm struct would be
                                wcs + alts[13]['P'-'A'+1];
      
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.

      int wcsvfree ( int *  nwcs,
      struct wcsprm **  wcs 
      )

      wcsvfree() frees the memory allocated by wcspih() or wcsbth() for the array of wcsprm structs, first invoking wcsfree() on each of the array members.

      Parameters:
      [in,out] nwcs Number of coordinate representations found; set to 0 on return.
      [in,out] wcs Pointer to the array of wcsprm structs; set to 0 on return.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Null wcsprm pointer passed.

      int wcshdo ( int  relax,
      struct wcsprm wcs,
      int *  nkeyrec,
      char **  header 
      )

      wcshdo() translates a wcsprm struct into a FITS header. If the colnum member of the struct is non-zero then a binary table image array header will be produced. Otherwise, if the colax[] member of the struct is set non-zero then a pixel list header will be produced. Otherwise, a primary image or image extension header will be produced.

      If the struct was originally constructed from a header, e.g. by wcspih(), the output header will almost certainly differ in a number of respects:

      • The output header only contains WCS-related keywords. In particular, it does not contain syntactically-required keywords such as SIMPLE, NAXIS, BITPIX, or END.

      • Deprecated (e.g. CROTAn) or non-standard usage will be translated to standard (this is partially dependent on whether wcsfix() was applied).

      • Quantities will be converted to the units used internally, basically SI with the addition of degrees.

      • Floating-point quantities may be given to a different decimal precision.

      • Elements of the PCi_ja matrix will be written if and only if they differ from the unit matrix. Thus, if the matrix is unity then no elements will be written.

      • Additional keywords such as WCSAXESa, CUNITia, LONPOLEa and LATPOLEa may appear.

      • The original keycomments will be lost, although wcshdo() tries hard to write meaningful comments.

      • Keyword order may be changed.

      Keywords can be translated between the image array, binary table, and pixel lists forms by manipulating the colnum or colax[] members of the wcsprm struct.

      Parameters:
      [in] relax Degree of permissiveness:
      • 0: Recognize only FITS keywords defined by the published WCS standard.
      • -1: Admit all informal extensions of the WCS standard.
      Fine-grained control of the degree of permissiveness is also possible as explained in the notes below.
      [in,out] wcs Pointer to a wcsprm struct containing coordinate transformation parameters. Will be initialized if necessary.
      [out] nkeyrec Number of FITS header keyrecords returned in the "header" array.
      [out] header Pointer to an array of char holding the header. Storage for the array is allocated by wcshdo() in blocks of 2880 bytes (32 x 80-character keyrecords) and must be free'd by the user to avoid memory leaks.
      Each keyrecord is 80 characters long and is *NOT* null-terminated, so the first keyrecord starts at (*header)[0], the second at (*header)[80], etc.
      Returns:
      Status return value (associated with wcs_errmsg[]):
      • 0: Success.
      • 1: Null wcsprm pointer passed.
      • 2: Memory allocation failed.
      • 3: Linear transformation matrix is singular.
      • 4: Inconsistent or unrecognized coordinate axis types.
      • 5: Invalid parameter value.
      • 6: Invalid coordinate transformation parameters.
      • 7: Ill-conditioned coordinate transformation parameters.
      For returns > 1, a detailed error message is set in wcsprm::err if enabled, see wcserr_enable().
      Notes:
      wcshdo() interprets the relax argument as a vector of flag bits to provide fine-grained control over what non-standard WCS keywords to write. The flag bits are subject to change in future and should be set by using the preprocessor macros (see below) for the purpose.

      • WCSHDO_none: Don't use any extensions.

      • WCSHDO_all: Write all recognized extensions, equivalent to setting each flag bit.

      • WCSHDO_safe: Write all extensions that are considered to be safe and recommended.

      • WCSHDO_DOBSn: Write DOBSn, the column-specific analogue of DATE-OBS for use in binary tables and pixel lists. WCS Paper III introduced DATE-AVG and DAVGn but by an oversight DOBSn (the obvious analogy) was never formally defined by the standard. The alternative to using DOBSn is to write DATE-OBS which applies to the whole table. This usage is considered to be safe and is recommended.

      • WCSHDO_TPCn_ka: WCS Paper I defined

        • TPn_ka and TCn_ka for pixel lists

        but WCS Paper II uses TPCn_ka in one example and subsequently the errata for the WCS papers legitimized the use of

        • TPCn_ka and TCDn_ka for pixel lists

        provided that the keyword does not exceed eight characters. This usage is considered to be safe and is recommended because of the non-mnemonic terseness of the shorter forms.

      • WCSHDO_PVn_ma: WCS Paper I defined

        • iVn_ma and iSn_ma for bintables and
        • TVn_ma and TSn_ma for pixel lists

        but WCS Paper II uses iPVn_ma and TPVn_ma in the examples and subsequently the errata for the WCS papers legitimized the use of

        • iPVn_ma and iPSn_ma for bintables and
        • TPVn_ma and TPSn_ma for pixel lists

        provided that the keyword does not exceed eight characters. This usage is considered to be safe and is recommended because of the non-mnemonic terseness of the shorter forms.

      • WCSHDO_CRPXna: For historical reasons WCS Paper I defined

        • jCRPXn, iCDLTn, iCUNIn, iCTYPn, and iCRVLn for bintables and
        • TCRPXn, TCDLTn, TCUNIn, TCTYPn, and TCRVLn for pixel lists

        for use without an alternate version specifier. However, because of the eight-character keyword constraint, in order to accommodate column numbers greater than 99 WCS Paper I also defined

        • jCRPna, iCDEna, iCUNna, iCTYna and iCRVna for bintables and
        • TCRPna, TCDEna, TCUNna, TCTYna and TCRVna for pixel lists

        for use with an alternate version specifier (the "a"). Like the PC, CD, PV, and PS keywords there is an obvious tendency to confuse these two forms for column numbers up to 99. It is very unlikely that any parser would reject keywords in the first set with a non-blank alternate version specifier so this usage is considered to be safe and is recommended.

      • WCSHDO_CNAMna: WCS Papers I and III defined

        • iCNAna, iCRDna, and iCSYna for bintables and
        • TCNAna, TCRDna, and TCSYna for pixel lists

        By analogy with the above, the long forms would be

        • iCNAMna, iCRDEna, and iCSYEna for bintables and
        • TCNAMna, TCRDEna, and TCSYEna for pixel lists

        Note that these keywords provide auxiliary information only, none of them are needed to compute world coordinates. This usage is potentially unsafe and is not recommended at this time.

      • WCSHDO_WCSNna: In light of wcsbth() note 4, write WCSNna instead of TWCSna for pixel lists. While wcsbth() treats WCSNna and TWCSna as equivalent, other parsers may not. Consequently, this usage is potentially unsafe and is not recommended at this time.


      Variable Documentation

      const char * wcshdr_errmsg[]

      Error messages to match the status value returned from each function. Use wcs_errmsg[] for status returns from wcshdo().


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcslib_8h-source.html0000644001153600020070000003235712310355626023155 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcslib.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcslib_8h.html0000644001153600020070000000575412310355626021660 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcslib.h File Reference

      wcslib.h File Reference

      #include "cel.h"
      #include "fitshdr.h"
      #include "lin.h"
      #include "log.h"
      #include "prj.h"
      #include "spc.h"
      #include "sph.h"
      #include "spx.h"
      #include "tab.h"
      #include "wcs.h"
      #include "wcserr.h"
      #include "wcsfix.h"
      #include "wcshdr.h"
      #include "wcsmath.h"
      #include "wcsprintf.h"
      #include "wcstrig.h"
      #include "wcsunits.h"
      #include "wcsutil.h"

      Go to the source code of this file.


      Detailed Description

      This header file is provided purely for convenience. Use it to include all of the separate WCSLIB headers.

      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcsmath_8h-source.html0000644001153600020070000002120212310355626023323 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcsmath.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcsmath_8h.html0000644001153600020070000001716412310355626022041 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcsmath.h File Reference

      wcsmath.h File Reference

      Go to the source code of this file.

      Defines

      #define PI   3.141592653589793238462643
      #define D2R   PI/180.0
       Degrees to radians conversion factor.
      #define R2D   180.0/PI
       Radians to degrees conversion factor.
      #define SQRT2   1.4142135623730950488
      #define SQRT2INV   1.0/SQRT2
      #define UNDEFINED   987654321.0e99
       Value used to indicate an undefined quantity.
      #define undefined(value)   (value == UNDEFINED)
       Macro used to test for an undefined quantity.


      Detailed Description

      Definition of mathematical constants used by WCSLIB.

      Define Documentation

      #define PI   3.141592653589793238462643

      #define D2R   PI/180.0

      Factor $\pi/180^\circ$ to convert from degrees to radians.

      #define R2D   180.0/PI

      Factor $180^\circ/\pi$ to convert from radians to degrees.

      #define SQRT2   1.4142135623730950488

      $\sqrt{2}$, used only by molset() (MOL projection).

      #define SQRT2INV   1.0/SQRT2

      $1/\sqrt{2}$, used only by qscx2s() (QSC projection).

      #define UNDEFINED   987654321.0e99

      Value used to indicate an undefined quantity (noting that NaNs cannot be used portably).

      #define undefined ( value   )     (value == UNDEFINED)

      Macro used to test for an undefined value.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcstrig_8h-source.html0000644001153600020070000005240312310355626023346 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcstrig.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcstrig_8h.html0000644001153600020070000004202212310355626022044 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcstrig.h File Reference

      wcstrig.h File Reference

      #include <math.h>
      #include "wcsconfig.h"

      Go to the source code of this file.

      Defines

      #define WCSTRIG_TOL   1e-10
       Domain tolerance for asin() and acos() functions.

      Functions

      double cosd (double angle)
       Cosine of an angle in degrees.
      double sind (double angle)
       Sine of an angle in degrees.
      void sincosd (double angle, double *sin, double *cos)
       Sine and cosine of an angle in degrees.
      double tand (double angle)
       Tangent of an angle in degrees.
      double acosd (double x)
       Inverse cosine, returning angle in degrees.
      double asind (double y)
       Inverse sine, returning angle in degrees.
      double atand (double s)
       Inverse tangent, returning angle in degrees.
      double atan2d (double y, double x)
       Polar angle of $(x,y)$, in degrees.


      Detailed Description

      When dealing with celestial coordinate systems and spherical projections (some moreso than others) it is often desirable to use an angular measure that provides an exact representation of the latitude of the north or south pole. The WCSLIB routines use the following trigonometric functions that take or return angles in degrees:

      These "trigd" routines are expected to handle angles that are a multiple of $90^\circ$ returning an exact result. Some C implementations provide these as part of a system library and in such cases it may (or may not!) be preferable to use them. WCSLIB provides wrappers on the standard trig functions based on radian measure, adding tests for multiples of $90^\circ$.

      However, wcstrig.h also provides the choice of using preprocessor macro implementations of the trigd functions that don't test for multiples of $90^\circ$ (compile with -DWCSTRIG_MACRO). These are typically 20% faster but may lead to problems near the poles.


      Define Documentation

      #define WCSTRIG_TOL   1e-10

      Domain tolerance for the asin() and acos() functions to allow for floating point rounding errors.

      If $v$ lies in the range $1 < |v| < 1 + WCSTRIG\_TOL$ then it will be treated as $|v| == 1$.


      Function Documentation

      double cosd ( double  angle  ) 

      cosd() returns the cosine of an angle given in degrees.

      Parameters:
      [in] angle [deg].
      Returns:
      Cosine of the angle.

      double sind ( double  angle  ) 

      sind() returns the sine of an angle given in degrees.

      Parameters:
      [in] angle [deg].
      Returns:
      Sine of the angle.

      void sincosd ( double  angle,
      double *  sin,
      double *  cos 
      )

      sincosd() returns the sine and cosine of an angle given in degrees.

      Parameters:
      [in] angle [deg].
      [out] sin Sine of the angle.
      [out] cos Cosine of the angle.
      Returns:

      double tand ( double  angle  ) 

      tand() returns the tangent of an angle given in degrees.

      Parameters:
      [in] angle [deg].
      Returns:
      Tangent of the angle.

      double acosd ( double  x  ) 

      acosd() returns the inverse cosine in degrees.

      Parameters:
      [in] x in the range [-1,1].
      Returns:
      Inverse cosine of x [deg].

      double asind ( double  y  ) 

      asind() returns the inverse sine in degrees.

      Parameters:
      [in] y in the range [-1,1].
      Returns:
      Inverse sine of y [deg].

      double atand ( double  s  ) 

      atand() returns the inverse tangent in degrees.

      Parameters:
      [in] s 
      Returns:
      Inverse tangent of s [deg].

      double atan2d ( double  y,
      double  x 
      )

      atan2d() returns the polar angle, $\beta$, in degrees, of polar coordinates $(\rho,\beta)$ corresponding Cartesian coordinates $(x,y)$. It is equivalent to the $\arg(x,y)$ function of WCS Paper II, though with transposed arguments.

      Parameters:
      [in] y Cartesian $y$-coordinate.
      [in] x Cartesian $x$-coordinate.
      Returns:
      Polar angle of $(x,y)$ [deg].


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcsunits_8h-source.html0000644001153600020070000013665012310355626023552 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcsunits.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcsunits_8h.html0000644001153600020070000015634512310355626022257 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcsunits.h File Reference

      wcsunits.h File Reference

      #include "wcserr.h"

      Go to the source code of this file.

      Defines

      #define WCSUNITS_PLANE_ANGLE   0
       Array index for plane angle units type.
      #define WCSUNITS_SOLID_ANGLE   1
       Array index for solid angle units type.
      #define WCSUNITS_CHARGE   2
       Array index for charge units type.
      #define WCSUNITS_MOLE   3
       Array index for mole units type.
      #define WCSUNITS_TEMPERATURE   4
       Array index for temperature units type.
      #define WCSUNITS_LUMINTEN   5
       Array index for luminous intensity units type.
      #define WCSUNITS_MASS   6
       Array index for mass units type.
      #define WCSUNITS_LENGTH   7
       Array index for length units type.
      #define WCSUNITS_TIME   8
       Array index for time units type.
      #define WCSUNITS_BEAM   9
       Array index for beam units type.
      #define WCSUNITS_BIN   10
       Array index for bin units type.
      #define WCSUNITS_BIT   11
       Array index for bit units type.
      #define WCSUNITS_COUNT   12
       Array index for count units type.
      #define WCSUNITS_MAGNITUDE   13
       Array index for stellar magnitude units type.
      #define WCSUNITS_PIXEL   14
       Array index for pixel units type.
      #define WCSUNITS_SOLRATIO   15
       Array index for solar mass ratio units type.
      #define WCSUNITS_VOXEL   16
       Array index for voxel units type.
      #define WCSUNITS_NTYPE   17
       Number of entries in the units array.

      Enumerations

      enum  wcsunits_errmsg_enum {
        UNITSERR_SUCCESS = 0, UNITSERR_BAD_NUM_MULTIPLIER = 1, UNITSERR_DANGLING_BINOP = 2, UNITSERR_BAD_INITIAL_SYMBOL = 3,
        UNITSERR_FUNCTION_CONTEXT = 4, UNITSERR_BAD_EXPON_SYMBOL = 5, UNITSERR_UNBAL_BRACKET = 6, UNITSERR_UNBAL_PAREN = 7,
        UNITSERR_CONSEC_BINOPS = 8, UNITSERR_PARSER_ERROR = 9, UNITSERR_BAD_UNIT_SPEC = 10, UNITSERR_BAD_FUNCS = 11,
        UNITSERR_UNSAFE_TRANS = 12
      }

      Functions

      int wcsunitse (const char have[], const char want[], double *scale, double *offset, double *power, struct wcserr **err)
       FITS units specification conversion.
      int wcsutrne (int ctrl, char unitstr[], struct wcserr **err)
       Translation of non-standard unit specifications.
      int wcsulexe (const char unitstr[], int *func, double *scale, double units[], struct wcserr **err)
       FITS units specification parser.
      int wcsunits (const char have[], const char want[], double *scale, double *offset, double *power)
      int wcsutrn (int ctrl, char unitstr[])
      int wcsulex (const char unitstr[], int *func, double *scale, double units[])

      Variables

      const char * wcsunits_errmsg []
       Status return messages.
      const char * wcsunits_types []
       Names of physical quantities.
      const char * wcsunits_units []
       Names of units.


      Detailed Description

      Routines in this suite deal with units specifications and conversions:

      • wcsunitse(): given two unit specifications, derive the conversion from one to the other.

      • wcsutrne(): translates certain commonly used but non-standard unit strings. It is intended to be called before wcsulexe() which only handles standard FITS units specifications.

      • wcsulexe(): parses a standard FITS units specification of arbitrary complexity, deriving the conversion to canonical units.

      Define Documentation

      #define WCSUNITS_PLANE_ANGLE   0

      Array index for plane angle units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_SOLID_ANGLE   1

      Array index for solid angle units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_CHARGE   2

      Array index for charge units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_MOLE   3

      Array index for mole ("gram molecular weight") units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_TEMPERATURE   4

      Array index for temperature units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_LUMINTEN   5

      Array index for luminous intensity units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_MASS   6

      Array index for mass units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_LENGTH   7

      Array index for length units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_TIME   8

      Array index for time units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_BEAM   9

      Array index for beam units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_BIN   10

      Array index for bin units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_BIT   11

      Array index for bit units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_COUNT   12

      Array index for count units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_MAGNITUDE   13

      Array index for stellar magnitude units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_PIXEL   14

      Array index for pixel units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_SOLRATIO   15

      Array index for solar mass ratio units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_VOXEL   16

      Array index for voxel units in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.

      #define WCSUNITS_NTYPE   17

      Number of entries in the units array returned by wcsulex(), and the wcsunits_types[] and wcsunits_units[] global variables.


      Enumeration Type Documentation

      Enumerator:
      UNITSERR_SUCCESS 
      UNITSERR_BAD_NUM_MULTIPLIER 
      UNITSERR_DANGLING_BINOP 
      UNITSERR_BAD_INITIAL_SYMBOL 
      UNITSERR_FUNCTION_CONTEXT 
      UNITSERR_BAD_EXPON_SYMBOL 
      UNITSERR_UNBAL_BRACKET 
      UNITSERR_UNBAL_PAREN 
      UNITSERR_CONSEC_BINOPS 
      UNITSERR_PARSER_ERROR 
      UNITSERR_BAD_UNIT_SPEC 
      UNITSERR_BAD_FUNCS 
      UNITSERR_UNSAFE_TRANS 


      Function Documentation

      int wcsunitse ( const char  have[],
      const char  want[],
      double *  scale,
      double *  offset,
      double *  power,
      struct wcserr **  err 
      )

      wcsunitse() derives the conversion from one system of units to another.

      A deprecated form of this function, wcsunits(), lacks the wcserr** parameter.

      Parameters:
      [in] have FITS units specification to convert from (null- terminated), with or without surrounding square brackets (for inline specifications); text following the closing bracket is ignored.
      [in] want FITS units specification to convert to (null- terminated), with or without surrounding square brackets (for inline specifications); text following the closing bracket is ignored.
      [out] scale,offset,power Convert units using
                                pow(scale*value + offset, power);
      

      Normally offset is zero except for log() or ln() conversions, e.g. "log(MHz)" to "ln(Hz)". Likewise, power is normally unity except for exp() conversions, e.g. "exp(ms)" to "exp(/Hz)". Thus conversions ordinarily consist of
                                value *= scale;
      
      [out] err If enabled, for function return values > 1, this struct will contain a detailed error message, see wcserr_enable(). May be NULL if an error message is not desired.
      Returns:
      Status return value:
      • 0: Success.
      • 1-9: Status return from wcsulexe().
      • 10: Non-conformant unit specifications.
      • 11: Non-conformant functions.
      scale is zeroed on return if an error occurs.

      int wcsutrne ( int  ctrl,
      char  unitstr[],
      struct wcserr **  err 
      )

      wcsutrne() translates certain commonly used but non-standard unit strings, e.g. "DEG", "MHZ", "KELVIN", that are not recognized by wcsulexe(), refer to the notes below for a full list. Compounds are also recognized, e.g. "JY/BEAM" and "KM/SEC/SEC". Extraneous embedded blanks are removed.

      A deprecated form of this function, wcsutrn(), lacks the wcserr** parameter.

      Parameters:
      [in] ctrl Although "S" is commonly used to represent seconds, its translation to "s" is potentially unsafe since the standard recognizes "S" formally as Siemens, however rarely that may be used. The same applies to "H" for hours (Henry), and "D" for days (Debye). This bit-flag controls what to do in such cases:
      • 1: Translate "S" to "s".
      • 2: Translate "H" to "h".
      • 4: Translate "D" to "d".
      Thus ctrl == 0 doesn't do any unsafe translations, whereas ctrl == 7 does all of them.
      [in,out] unitstr Null-terminated character array containing the units specification to be translated.
      Inline units specifications in the a FITS header keycomment are also handled. If the first non-blank character in unitstr is '[' then the unit string is delimited by its matching ']'. Blanks preceding '[' will be stripped off, but text following the closing bracket will be preserved without modification.
      [in,out] err If enabled, for function return values > 1, this struct will contain a detailed error message, see wcserr_enable(). May be NULL if an error message is not desired.
      Returns:
      Status return value:
      • -1: No change was made, other than stripping blanks (not an error).
      • 0: Success.
      • 9: Internal parser error.
      • 12: Potentially unsafe translation, whether applied or not (see notes).
      Notes:
      Translation of non-standard unit specifications: apart from leading and trailing blanks, a case-sensitive match is required for the aliases listed below, in particular the only recognized aliases with metric prefixes are "KM", "KHZ", "MHZ", and "GHZ". Potentially unsafe translations of "D", "H", and "S", shown in parentheses, are optional.
            Unit       Recognized aliases
            ----       -------------------------------------------------------------
            Angstrom   angstrom
            arcmin     arcmins, ARCMIN, ARCMINS
            arcsec     arcsecs, ARCSEC, ARCSECS
            beam       BEAM
            byte       Byte
            d          day, days, (D), DAY, DAYS
            deg        degree, degrees, DEG, DEGREE, DEGREES
            GHz        GHZ
            h          hr, (H), HR
            Hz         hz, HZ
            kHz        KHZ
            Jy         JY
            K          kelvin, kelvins, Kelvin, Kelvins, KELVIN, KELVINS
            km         KM
            m          metre, meter, metres, meters, M, METRE, METER, METRES, METERS
            min        MIN
            MHz        MHZ
            Ohm        ohm
            Pa         pascal, pascals, Pascal, Pascals, PASCAL, PASCALS
            pixel      pixels, PIXEL, PIXELS
            rad        radian, radians, RAD, RADIAN, RADIANS
            s          sec, second, seconds, (S), SEC, SECOND, SECONDS
            V          volt, volts, Volt, Volts, VOLT, VOLTS
            yr         year, years, YR, YEAR, YEARS
      

      The aliases "angstrom", "ohm", and "Byte" for (Angstrom, Ohm, and byte) are recognized by wcsulexe() itself as an unofficial extension of the standard, but they are converted to the standard form here.

      int wcsulexe ( const char  unitstr[],
      int *  func,
      double *  scale,
      double  units[],
      struct wcserr **  err 
      )

      wcsulexe() parses a standard FITS units specification of arbitrary complexity, deriving the scale factor required to convert to canonical units - basically SI with degrees and "dimensionless" additions such as byte, pixel and count.

      A deprecated form of this function, wcsulex(), lacks the wcserr** parameter.

      Parameters:
      [in] unitstr Null-terminated character array containing the units specification, with or without surrounding square brackets (for inline specifications); text following the closing bracket is ignored.
      [out] func Special function type, see note 4:
      • 0: None
      • 1: log() ...base 10
      • 2: ln() ...base e
      • 3: exp()
      [out] scale Scale factor for the unit specification; multiply a value expressed in the given units by this factor to convert it to canonical units.
      [out] units A units specification is decomposed into powers of 16 fundamental unit types: angle, mass, length, time, count, pixel, etc. Preprocessor macro WCSUNITS_NTYPE is defined to dimension this vector, and others such WCSUNITS_PLANE_ANGLE, WCSUNITS_LENGTH, etc. to access its elements.
      Corresponding character strings, wcsunits_types[] and wcsunits_units[], are predefined to describe each quantity and its canonical units.
      [out] err If enabled, for function return values > 1, this struct will contain a detailed error message, see wcserr_enable(). May be NULL if an error message is not desired.
      Returns:
      Status return value:
      • 0: Success.
      • 1: Invalid numeric multiplier.
      • 2: Dangling binary operator.
      • 3: Invalid symbol in INITIAL context.
      • 4: Function in invalid context.
      • 5: Invalid symbol in EXPON context.
      • 6: Unbalanced bracket.
      • 7: Unbalanced parenthesis.
      • 8: Consecutive binary operators.
      • 9: Internal parser error.
      scale and units[] are zeroed on return if an error occurs.
      Notes:
      1. wcsulexe() is permissive in accepting whitespace in all contexts in a units specification where it does not create ambiguity (e.g. not between a metric prefix and a basic unit string), including in strings like "log (m ** 2)" which is formally disallowed.

      2. Supported extensions:
        • "angstrom" (OGIP usage) is allowed in addition to "Angstrom".
        • "ohm" (OGIP usage) is allowed in addition to "Ohm".
        • "Byte" (common usage) is allowed in addition to "byte".

      3. Table 6 of WCS Paper I lists eleven units for which metric prefixes are allowed. However, in this implementation only prefixes greater than unity are allowed for "a" (annum), "yr" (year), "pc" (parsec), "bit", and "byte", and only prefixes less than unity are allowed for "mag" (stellar magnitude).

        Metric prefix "P" (peta) is specifically forbidden for "a" (annum) to avoid confusion with "Pa" (Pascal, not peta-annum). Note that metric prefixes are specifically disallowed for "h" (hour) and "d" (day) so that "ph" (photons) cannot be interpreted as pico-hours, nor "cd" (candela) as centi-days.

      4. Function types log(), ln() and exp() may only occur at the start of the units specification. The scale and units[] returned for these refers to the string inside the function "argument", e.g. to "MHz" in log(MHz) for which a scale of $10^6$ will be returned.

      int wcsunits ( const char  have[],
      const char  want[],
      double *  scale,
      double *  offset,
      double *  power 
      )

      int wcsutrn ( int  ctrl,
      char  unitstr[] 
      )

      int wcsulex ( const char  unitstr[],
      int *  func,
      double *  scale,
      double  units[] 
      )


      Variable Documentation

      const char * wcsunits_errmsg[]

      Error messages to match the status value returned from each function.

      const char * wcsunits_types[]

      Names for physical quantities to match the units vector returned by wcsulexe():

      • 0: plane angle
      • 1: solid angle
      • 2: charge
      • 3: mole
      • 4: temperature
      • 5: luminous intensity
      • 6: mass
      • 7: length
      • 8: time
      • 9: beam
      • 10: bin
      • 11: bit
      • 12: count
      • 13: stellar magnitude
      • 14: pixel
      • 15: solar ratio
      • 16: voxel

      const char * wcsunits_units[]

      Names for the units (SI) to match the units vector returned by wcsulexe():

      • 0: degree
      • 1: steradian
      • 2: Coulomb
      • 3: mole
      • 4: Kelvin
      • 5: candela
      • 6: kilogram
      • 7: metre
      • 8: second

      The remainder are dimensionless.


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcsutil_8h-source.html0000644001153600020070000005524612310355626023366 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcsutil.h Source File
      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/html/wcsutil_8h.html0000644001153600020070000004171712310355626022066 0ustar cslocumSTSCI\science00000000000000 WCSLIB 4.10: wcsutil.h File Reference

      wcsutil.h File Reference

      Go to the source code of this file.

      Functions

      void wcsutil_blank_fill (int n, char c[])
       Fill a character string with blanks.
      void wcsutil_null_fill (int n, char c[])
       Fill a character string with NULLs.
      int wcsutil_allEq (int nvec, int nelem, const double *first)
       Test for equality of a particular vector element.
      void wcsutil_setAll (int nvec, int nelem, double *first)
       Set a particular vector element.
      void wcsutil_setAli (int nvec, int nelem, int *first)
       Set a particular vector element.
      void wcsutil_setBit (int nelem, const int *sel, int bits, int *array)
       Set bits in selected elements of an array.
      char * wcsutil_fptr2str (int(*func)(), char hext[])


      Detailed Description

      Simple utility functions for internal use only by WCSLIB. They are documented here solely as an aid to understanding the code. They are not intended for external use - the API may change without notice!

      Function Documentation

      void wcsutil_blank_fill ( int  n,
      char  c[] 
      )

      INTERNAL USE ONLY.

      wcsutil_blank_fill() pads a character string with blanks starting with the terminating NULL character.

      Used by the Fortran wrapper functions in translating C character strings into Fortran CHARACTER variables.

      Parameters:
      [in] n Length of the character array, c[].
      [in,out] c The character string. It will not be null-terminated on return.
      Returns:

      void wcsutil_null_fill ( int  n,
      char  c[] 
      )

      INTERNAL USE ONLY.

      wcsutil_null_fill() strips off trailing blanks and pads the character array holding the string with NULL characters.

      Used mainly to make character strings intelligible in the GNU debugger which prints the rubbish following the terminating NULL, obscuring the valid part of the string.

      Parameters:
      [in] n Number of characters.
      [in,out] c The character string.
      Returns:

      int wcsutil_allEq ( int  nvec,
      int  nelem,
      const double *  first 
      )

      INTERNAL USE ONLY.

      wcsutil_allEq() tests for equality of a particular element in a set of vectors.

      Parameters:
      [in] nvec The number of vectors.
      [in] nelem The length of each vector.
      [in] first Pointer to the first element to test in the array. The elements tested for equality are
                                *first == *(first + nelem)
                                       == *(first + nelem*2)
                                                  :
                                       == *(first + nelem*(nvec-1));
      

      The array might be dimensioned as
                                double v[nvec][nelem];
      
      Returns:
      Status return value:
      • 0: Not all equal.
      • 1: All equal.

      void wcsutil_setAll ( int  nvec,
      int  nelem,
      double *  first 
      )

      INTERNAL USE ONLY.

      wcsutil_setAll() sets the value of a particular element in a set of vectors.

      Parameters:
      [in] nvec The number of vectors.
      [in] nelem The length of each vector.
      [in,out] first Pointer to the first element in the array, the value of which is used to set the others
                                *(first + nelem) = *first;
                                *(first + nelem*2) = *first;
                                        :
                                *(first + nelem*(nvec-1)) = *first;
      

      The array might be dimensioned as
                                double v[nvec][nelem];
      
      Returns:

      void wcsutil_setAli ( int  nvec,
      int  nelem,
      int *  first 
      )

      INTERNAL USE ONLY.

      wcsutil_setAli() sets the value of a particular element in a set of vectors.

      Parameters:
      [in] nvec The number of vectors.
      [in] nelem The length of each vector.
      [in,out] first Pointer to the first element in the array, the value of which is used to set the others
                                *(first + nelem) = *first;
                                *(first + nelem*2) = *first;
                                        :
                                *(first + nelem*(nvec-1)) = *first;
      

      The array might be dimensioned as
                                int v[nvec][nelem];
      
      Returns:

      void wcsutil_setBit ( int  nelem,
      const int *  sel,
      int  bits,
      int *  array 
      )

      INTERNAL USE ONLY.

      wcsutil_setBit() sets bits in selected elements of an array.

      Parameters:
      [in] nelem Number of elements in the array.
      [in] sel Address of a selection array of length nelem. May be specified as the null pointer in which case all elements are selected.
      [in] bits Bit mask.
      [in,out] array Address of the array of length nelem.
      Returns:

      char* wcsutil_fptr2str ( int(*)()  func,
      char  hext[] 
      )


      Generated on Mon Feb 6 10:41:57 2012 for WCSLIB 4.10 by  doxygen 1.5.6
      pywcs-1.12/wcslib/INSTALL0000644001153600020070000003104412310355626017164 0ustar cslocumSTSCI\science00000000000000------------------------------------------------------------------------------ WCSLIB 4.10 and PGSBOX 4.10 INSTALLATION -------------------------------------- WCSLIB requires an ANSI C compiler with standard ANSI C environment, that is, a standard C library and header files as defined in Appendix B of Kernigan & Ritchie, 2nd ed. Installation of WCSLIB is handled by GNU autoconf; GNU make (referred to here as 'gmake') must be used. The WCSLIB distribution also includes PGSBOX (refer to the README file), to unpack it type zcat wcslib-4.10.tar.gz | tar pvxf - cd wcslib-4.10 then if you do not need to specify any configuration options, simply run gmake This will run 'configure' to generate "makedefs" which is included by the top- level GNUmakefile and those in each subdirectory, and then build 'libwcs.a', which includes both the C library and Fortran wrappers, and also libpgsbox.a. (WARNING: The build may fail with gmake 3.79, upgrade to 3.79.1 or later.) configure tries to determine the location of the PGPLOT and CFITSIO libraries required by some programs in the test suite. If it fails to find them you can, if you wish, tailor the few variables found at the start of "makedefs". Of course you do not need to exercise the test suite in order to build and install the library - if configure fails to find anything required for that it will issue an explicit error message. To build and exercise the test suite use gmake check To install the object libraries and header files, do gmake install TWEAKING THE INSTALLATION DEFAULTS ---------------------------------- By default the library and header files are installed in the lib and include subdirectories of /usr/local/. To change this, or any other options, run configure separately before gmake: ./configure --prefix=/some/other/dir gmake Use ./configure --help to list configure's options. Useful options are --with-pgplotinc --with-pgplotlib --with-cfitsioinc --with-cfitsiolib Which allow additional directories to be added to the library and include file search path. Installation of WCSLIB differs a little from most packages in that all configurable makefile variables are defined in a single file, "makedefs", which configure generates from "makedefs.in". If you need to redefine any of the makefile variables you can modify makedefs, or preferably makedefs.in. The makefile will automatically detect this and re-run config.status to re-generate a new makedefs. configure also creates four header files: wcsconfig.h: Contains general purpose preprocessor definitions. It is included by the other wcsconfig header files. wcsconfig_f77.h: By common convention the WCSLIB Fortran wrappers have been written (in C) using function names in lower case with an underscore ("_") suffix. wcsconfig_f77.h defines a preprocessor macro, F77_FUNC(name,NAME), that may redefine these to suit different name mangling schemes used by some Fortran compilers. wcsconfig_tests.h: Contains C preprocessor definitions for compiling the test/demo programs. wcsconfig_utils.h: Contains C preprocessor macro definitions for compiling the utility programs provided with WCSLIB. If you do have trouble building the library please send me config.log. The INSTALL file provided with GNU autoconf 2.53 is appended without change. Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: INSTALL,v 4.10 2012/02/05 23:41:45 cal103 Exp $ ============================================================================== Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for variables by setting them in the environment. You can do that on the command line like this: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. pywcs-1.12/wcslib/makedefs.in0000644001153600020070000002020312310355626020235 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # GNU makefile definitions for building WCSLIB 4.10 # # makedefs is generated from makedefs.in by configure. It contains variable # definitions and some general-purpose rules for building WCSLIB. # # Targets defined here # -------------------- # printenv: Print the environment as seen within makefile rules. # show: Print the values of all makefile variables used. # # Notes: # 1) If you need to make changes then it may be preferable to modify # makedefs.in (not makedefs). The makefile will detect this and # automatically re-run config.status to regenerate makedefs. # # 2) There are three choices for trigd functions - cosd(), sind(), tand(), # acosd(), asind(), atand(), and atan2d(), made by setting WCSTRIG: # # 1: Use the wrapper functions supplied with WCSLIB (default): # WCSTRIG := WRAPPER # # 2: Use native trigd functions supplied in a mathematics library such # as libsunmath (you will also need to add the library to the LIBS # variable below): # WCSTRIG := NATIVE # # 3: Use C preprocessor macro implementations of the trigd functions # (this method is typically 20% faster but may lead to rounding # errors near the poles): # WCSTRIG := MACRO # # 3) Variables for creating the shared (dynamic) library are currently # only set by 'configure' if the GNU C compiler is used. However, # you can set these variables by hand, preferably in makedefs.in. # # Shared libraries require position-independent code (PIC) which imposes # a performance overhead. Consequently the static libraries are # compiled separately without this option. # # The shared library will be installed with version number, e.g. as # libwcs.so.4.10 or libwcs.4.10.dylib with or without the symlink # required to make it visible to the linker (controlled by the SHRLN # variable). On Macs it is deliberately not created because its very # existence precludes static linking with the cctools linker. You can # still link dynamically by using -lwcs.4.10. # # 4) PGPLOT is Tim Pearson's Fortran graphics library with separate C # interface available from astro.caltech.edu. It is only required by # one utility, wcsgrid, and the test programs that plot test grids # (tprj2, tcel1, tcel2, tspc, ttab2, ttab3, twcsmix, and tpih2). You can # skip these by setting PGPLOTLIB to blank. # # It is difficult for configure to deduce what auxiliary graphics # libraries may be needed for PGPLOT since it depends on which of many # possible graphics drivers were selected when PGPLOT was installed. # Therefore it is quite likely that you will need to add additional # libraries to PGPLOTLIB. # # 5) CFITSIO is Bill Pence's FITS I/O library written in C with Fortran # wrappers, available from http://heasarc.gsfc.nasa.gov/fitsio. # # CFITSIO is required by three utilities, HPXcvt, wcsgrid, and wcsware, # and also by the test programs twcstab and twcshdr. wcsware and the # test programs use fits_read_wcstab() which is implemented by # getwcstab.c. However, this implementation is included in CFITSIO post # 3.004beta, so getwcstab.c is required here only for older releases # (controlled by variable GETWCSTAB). getwcstab.o itself is not inserted # into the WCSLIB object library. # # If available, CFITSIO is also optionally used for test programs # tfitshdr, tbth1, tpih1 and tpih2 by setting preprocessor macro # -DDO_CFITSIO. # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: makedefs.in,v 4.10 2012/02/05 23:41:45 cal103 Exp $ #----------------------------------------------------------------------------- # Version. LIBVER := @LIBVER@ WCSLIBPKG := wcslib-@PACKAGE_VERSION@ # System architecture. ARCH := @ARCH@ # Flex and options. FLEX := @FLEX@ FLFLAGS := # C preprocessor and options. CPP := @CPP@ CPPFLAGS := @DEFS@ WCSTRIG := WRAPPER # C compiler and options. CC := @CC@ CFLAGS := @CFLAGS@ # Fortran compiler and options. FC := @F77@ FFLAGS := @FFLAGS@ # Static object library. WCSLIB := libwcs-$(LIBVER).a RANLIB := @RANLIB@ # Shared (dynamic) library (see note 3 above). SHRLIB := @SHRLIB@ SONAME := @SONAME@ SHRFLAGS := @SHRFLAGS@ SHRLD := @SHRLD@ SHRLN := @SHRLN@ # What subdirectories to build. SUBDIRS := @SUBDIRS@ TSTDIRS := @TSTDIRS@ # Top of the 'make install' hierarchy: pgsbox -> Fortran -> C. INSTDIR := @INSTDIR@ # Installation utilities and locations. LN_S := @LN_S@ INSTALL := @INSTALL@ # Needed for the definitions provided by autoconf. prefix := @prefix@ exec_prefix := @exec_prefix@ datarootdir := @datarootdir@ PACKAGE_TARNAME := @PACKAGE_TARNAME@ docdir := @docdir@ LIBDIR := $(DESTDIR)@libdir@ BINDIR := $(DESTDIR)@bindir@ INCDIR := $(DESTDIR)@includedir@/wcslib-$(LIBVER) INCLINK := $(DESTDIR)@includedir@/wcslib DOCDIR := $(DESTDIR)@docdir@ HTMLDIR := $(DESTDIR)@htmldir@ PDFDIR := $(DESTDIR)@pdfdir@ MANDIR := $(DESTDIR)@mandir@ # For putting timestamps in the build log. TIMER := date +"%a %Y/%m/%d %X %z, executing on $$HOST" # The remaining options are for building utilities and test programs. # ------------------------------------------------------------------- # Linker options (use CC for linking). LD = $(CC) LDFLAGS := @LDFLAGS@ # PGPLOT (see note 4 above). PGPLOTINC := @PGPLOTINC@ PGPLOTLIB := @PGPLOTLIB@ # CFITSIO (see note 5 above). CFITSIOINC := @CFITSIOINC@ CFITSIOLIB := @CFITSIOLIB@ GETWCSTAB := @GETWCSTAB@ # Libraries required by the above Fortran compiler. FLIBS := @FLIBS@ # Libraries required by WCSLIB itself. LIBS := @LIBS@ #----------------------------------------------------------------------------- # You shouldn't need to change anything below here. #----------------------------------------------------------------------------- SHELL := /bin/sh VPATH := .. # Common targets. .PHONY : all build printenv show all : show build # Print the environment as seen by makefile rules. printenv : -@ printenv | sort # Print variable definitions. show :: wcsconfig.h -@ echo '' -@ uname -a -@ echo '' -@ $(MAKE) --version | head -1 -@ echo ' MAKEFLAGS := $(MAKEFLAGS)' -@ echo '' -@ echo 'For building and installing $(WCSLIBPKG)...' -@ echo ' ARCH := $(ARCH)' -@ echo ' FLEX := $(FLEX)' -@ echo ' FLFLAGS := $(FLFLAGS)' -@ echo ' CPP := $(CPP)' -@ echo ' CPPFLAGS := $(CPPFLAGS)' -@ echo ' WCSTRIG := $(WCSTRIG)' -@ echo ' CC := $(CC)' -@ echo ' CFLAGS := $(CFLAGS)' -@ echo ' FC := $(FC)' -@ echo ' FFLAGS := $(FFLAGS)' -@ echo ' WCSLIB := $(WCSLIB)' -@ echo ' RANLIB := $(RANLIB)' -@ echo ' SHRLIB := $(SHRLIB)' -@ echo ' SONAME := $(SONAME)' -@ echo ' SHRFLAGS := $(SHRFLAGS)' -@ echo ' SHRLD := $(SHRLD)' -@ echo ' SHRLN := $(SHRLN)' -@ echo ' LN_S := $(LN_S)' -@ echo ' INSTALL := $(INSTALL)' -@ echo ' LIBDIR := $(LIBDIR)' -@ echo ' BINDIR := $(BINDIR)' -@ echo ' INCDIR := $(INCDIR)' -@ echo ' INCLINK := $(INCLINK)' -@ echo ' DOCDIR := $(DOCDIR)' -@ echo ' HTMLDIR := $(HTMLDIR)' -@ echo ' PDFDIR := $(PDFDIR)' -@ echo ' MANDIR := $(MANDIR)' -@ echo ' TIMER := $(TIMER)' -@ echo '' -@ echo 'Important wcsconfig.h defines...' -@ echo " `grep HAVE_SINCOS $<`" -@ echo " `grep WCSLIB_INT64 $<`" -@ echo '' -@ echo 'To build utilities and test programs...' -@ echo ' LD := $(LD)' -@ echo ' LDFLAGS := $(LDFLAGS)' -@ echo ' PGPLOTINC := $(PGPLOTINC)' -@ echo ' PGPLOTLIB := $(PGPLOTLIB)' -@ echo ' CFITSIOINC := $(CFITSIOINC)' -@ echo ' CFITSIOLIB := $(CFITSIOLIB)' -@ echo ' GETWCSTAB := $(GETWCSTAB)' -@ echo ' FLIBS := $(FLIBS)' -@ echo ' LIBS := $(LIBS)' -@ echo '' # Code development overrides, for use in the code subdirectories. -include ../flavours pywcs-1.12/wcslib/pgsbox/0000755001153600020070000000000012310355732017431 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/pgsbox/cpgsbox.c0000644001153600020070000001031212310355626021241 0ustar cslocumSTSCI\science00000000000000/*============================================================================ PGSBOX 4.10 - draw curvilinear coordinate axes for PGPLOT. Copyright (C) 1997-2012, Mark Calabretta This file is part of PGSBOX. PGSBOX is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PGSBOX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with PGSBOX. If not, see . Correspondence concerning PGSBOX may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: cpgsbox.c,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *===========================================================================*/ #include #include "cpgsbox.h" /* Fortran name mangling. */ #include #define pgsbok_ F77_FUNC(pgsbok, PGSBOK) #define pglbok_ F77_FUNC(pglbok, PGLBOK) void pgsbok_(const float blc[2], const float trc[2], char idents[3][80], const char opt[2], const int *labctl, const int *labden, const int ci[7], const int gcode[2], const double *tiklen, const int *ng1, const double *grid1, const int *ng2, const double *grid2, const int *doeq, nlfunc_t nlfunc, const int *nlc, const int *nli, const int *nld, char *nlcprm, int *nliprm, double *nldprm, const int *nc, int *ic, double cache[][4], int *ierr); void pglbok_(char idents[3][80], const char opt[2], const int *labctl, const int *labden, const int ci[7], const int gcode[2], const double *tiklen, const int *ng1, const double *grid1, const int *ng2, const double *grid2, const int *doeq, const int *nc, int *ic, double cache[][4], int *ierr); void cpgsbox( const float blc[2], const float trc[2], char (*idents)[80], const char opt[2], int labctl, int labden, const int ci[7], const int gcode[2], double tiklen, int ng1, const double *grid1, int ng2, const double *grid2, int doeq, nlfunc_t nlfunc, int nlc, int nli, int nld, char nlcprm[], int nliprm[], double nldprm[], int nc, int *ic, double cache[][4], int *ierr) { char ids[3][80]; int j, k; /* Convert variable length strings to fixed-length char arrays. */ k = 0; for (j = 0; j < 3; j++) { if (strlen(idents[j]) > 80) { strncpy(ids[j], idents[j], 80); } else { strcpy(ids[j], idents[j]); for (k = strlen(idents[j]); k < 80; k++) { ids[j][k] = ' '; } } } pgsbok_(blc, trc, ids, opt, &labctl, &labden, ci, gcode, &tiklen, &ng1, grid1, &ng2, grid2, &doeq, nlfunc, &nlc, &nli, &nld, nlcprm, nliprm, nldprm, &nc, ic, cache, ierr); return; } /*==========================================================================*/ void cpglbox( char (*idents)[80], const char opt[2], int labctl, int labden, const int ci[7], const int gcode[2], double tiklen, int ng1, const double *grid1, int ng2, const double *grid2, int doeq, int nc, int *ic, double cache[][4], int *ierr) { char ids[3][80]; int j, k; /* Convert variable length strings to fixed-length char arrays. */ k = 0; for (j = 0; j < 3; j++) { if (strlen(idents[j]) > 80) { strncpy(ids[j], idents[j], 80); } else { strcpy(ids[j], idents[j]); for (k = strlen(idents[j]); k < 80; k++) { ids[j][k] = ' '; } } } pglbok_(ids, opt, &labctl, &labden, ci, gcode, &tiklen, &ng1, grid1, &ng2, grid2, &doeq, &nc, ic, cache, ierr); return; } pywcs-1.12/wcslib/pgsbox/cpgsbox.h0000644001153600020070000000675312310355626021264 0ustar cslocumSTSCI\science00000000000000/*============================================================================ PGSBOX 4.10 - draw curvilinear coordinate axes for PGPLOT. Copyright (C) 1997-2012, Mark Calabretta This file is part of PGSBOX. PGSBOX is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PGSBOX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with PGSBOX. If not, see . Correspondence concerning PGSBOX may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: cpgsbox.h,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *============================================================================= * * cpgsbox() and cpglbox() are C wrappers for PGSBOX and PGLBOX. Refer to the * prologue of pgsbox.f for an explanation of the argument list and usage * notes. * * The argument lists for cpgsbox()/cpglbox() differ from PGSBOX/PGLBOX in * the following respects: * * idents char[3][80] * Fixed length character array. * opt char[2] Fixed length character array. * nlfunc nlfunc_t typedef for external function defined in cpgsbox.h. * cache double[][4] * Array indices reversed. * * Note also that the array arguments to cpgsbox()/cpglbox() are all * 0-relative, while several of those of PGSBOX/PGLBOX are 0-relative (GRID1, * GRID2, and CACHE) with the remainder 1-relative. In particular, the two- * dimensional CACHE array has a mixture of 0-, and 1-relative indices, and * the indices are reversed in C because of the differing C and FORTRAN array * indexing policy. Moreover, as in PGSBOX/PGLBOX, nc is the upper array * index, not the array length, so the array should be dimensioned as * cache[nc+1][4]. * *===========================================================================*/ #ifndef PGSBOX_CPGSBOX #define PGSBOX_CPGSBOX #ifdef __cplusplus extern "C" { #endif typedef void nlfunc_t(int *, int *, int *, int *, char *, int *, double *, double *, double *, int *, double *, int *); void cpgsbox( const float blc[2], const float trc[2], char (*idents)[80], const char opt[2], int labctl, int labden, const int ci[7], const int gcode[2], double tiklen, int ng1, const double *grid1, int ng2, const double *grid2, int doeq, nlfunc_t nlfunc, int nlc, int nli, int nld, char nlcprm[], int nliprm[], double nldprm[], int nc, int *ic, double cache[][4], int *ierr); void cpglbox( char (*idents)[80], const char opt[2], int labctl, int labden, const int ci[7], const int gcode[2], double tiklen, int ng1, const double *grid1, int ng2, const double *grid2, int doeq, int nc, int *ic, double cache[][4], int *ierr); #ifdef __cplusplus } #endif #endif /* PGSBOX_CPGSBOX */ pywcs-1.12/wcslib/pgsbox/cpgtest.c0000644001153600020070000011416212310355626021255 0ustar cslocumSTSCI\science00000000000000/*============================================================================ PGSBOX 4.10 - draw curvilinear coordinate axes for PGPLOT. Copyright (C) 1997-2012, Mark Calabretta This file is part of PGSBOX. PGSBOX is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PGSBOX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with PGSBOX. If not, see . Correspondence concerning PGSBOX may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: cpgtest.c,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *============================================================================= * * cpgtest * *---------------------------------------------------------------------------*/ #include #include #include #include #include #include #include /* Fortran name mangling. */ #include #define lngvel_ F77_FUNC(lngvel, LNGVEL) #define fscan_ F77_FUNC(fscan, FSCAN) #define pgcrfn_ F77_FUNC(pgcrfn, PGCRFN) #define pgwcsl_ F77_FUNC(pgwcsl, PGWCSL) int main() { const double pi = 3.141592653589793238462643; const double d2r = pi/180.0; char devtyp[16], fcode[2][4], idents[3][80], nlcprm[1], opt[2]; int c0[7], ci[7], gcode[2], ic, ierr, j, large, naxis[2], nliprm[2], status; float blc[2], scl, trc[2]; double cache[257][4], dec0, grid1[9], grid2[9], nldprm[8], rotn, tiklen; struct wcsprm wcs; nlfunc_t lngvel_, fscan_, pgcrfn_, pgwcsl_; /* Setup. */ naxis[0] = 512; naxis[1] = 512; blc[0] = 0.5f; blc[1] = 0.5f; trc[0] = naxis[0] + 0.5f; trc[1] = naxis[1] + 0.5f; strcpy(devtyp, "/XWINDOW"); cpgbeg(0, devtyp, 1, 1); j = 16; cpgqinf("TYPE", devtyp, &j); if (strcmp(devtyp, "PS") == 0 || strcmp(devtyp, "VPS") == 0 || strcmp(devtyp, "CPS") == 0 || strcmp(devtyp, "VCPS") == 0) { /* Switch black and white. */ cpgscr(0, 1.0f, 1.0f, 1.0f); cpgscr(1, 0.0f, 0.0f, 0.0f); } large = strcmp(devtyp, "XWINDOW") == 0; if (large) { scl = 1.0f; cpgvstd(); } else { scl = 0.7f; cpgvsiz(1.0f, 3.0f, 1.0f, 3.0f); } /* Yellow. */ cpgscr(2, 1.0f, 1.0f, 0.0f); /* White. */ cpgscr(3, 1.0f, 1.0f, 1.0f); /* Pale blue. */ cpgscr(4, 0.5f, 0.5f, 0.8f); /* Pale red. */ cpgscr(5, 0.8f, 0.5f, 0.5f); /* Grey. */ cpgscr(6, 0.7f, 0.7f, 0.7f); /* Dark green. */ cpgscr(7, 0.3f, 0.5f, 0.3f); c0[0] = -1; c0[1] = -1; c0[2] = -1; c0[3] = -1; c0[4] = -1; c0[5] = -1; c0[6] = -1; cpgwnad(0.0f, 1.0f, 0.0f, 1.0f); cpgask(1); cpgpage(); wcs.flag = -1; /*-------------------------------------------------------------------------- * Longitude-velocity map; the y-axis is regularly spaced in frequency but is * to be labelled as a true relativistic velocity. * - PGSBOX uses subroutine LNGVEL. * - Separable (i.e. orthogonal), non-linear coordinate system. * - Automatic choice of coordinate increments. * - Extraction of a common scaling factor. * - Automatic choice of what edges to label. * - Request for tickmarks (internal) for one coordinate and grid lines * for the other. * - Simple two-colour grid using two calls with deferred labelling on * the first call. * - Degree labelling. * - Suppression of zero arcmin and arcsec fields in sexagesimal degree * format. *------------------------------------------------------------------------*/ printf("\nLongitude-velocity map\n"); /* Reference pixel coordinates. */ nldprm[0] = 1.0; nldprm[1] = 256.0; /* Reference pixel values. */ nldprm[2] = 0.0; nldprm[3] = 1.420e9; /* Coordinate increments. */ nldprm[4] = 360.0/(naxis[0]-1); nldprm[5] = 4e6; /* Rest frequency. */ nldprm[6] = 1.420e9; /* Annotation. */ strcpy(idents[0], "galactic longitude"); strcpy(idents[1], "velocity (m/s)"); strcpy(idents[2], "HI line"); opt[0] = 'F'; opt[1] = ' '; /* Normal size lettering. */ cpgsch(1.0f*scl); /* Yellow tick marks for longitude and grid lines for velocity. */ cpgsci(2); gcode[0] = 1; gcode[1] = 2; grid1[0] = 0.0; grid2[0] = 0.0; /* Defer labelling. */ ic = -1; cpgsbox(blc, trc, idents, opt, -1, 0, c0, gcode, 2.0, 0, grid1, 0, grid2, 0, lngvel_, 1, 1, 7, nlcprm, nliprm, nldprm, 256, &ic, cache, &ierr); /* Draw fiducial grid lines in white and do labelling. */ cpgsci(1); gcode[0] = 2; gcode[1] = 2; grid1[1] = 180.0; grid2[1] = 0.0; cpgsbox(blc, trc, idents, opt, 0, 0, c0, gcode, 0.0, 1, grid1, 1, grid2, 0, lngvel_, 1, 1, 7, nlcprm, nliprm, nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Azimuth-frequency scan; this sort of output might be obtained from an * antenna that scans in azimuth with a receiver that scans simultaneously * in frequency. * - PGSBOX uses subroutine FSCAN. * - Non-separable (i.e. non-orthogonal) non-linear coordinate system. * - Automatic choice of what edges to label; results in labelling the * bottom, left and right sides of the plot. * - Cyclic labelling. FSCAN returns the azimuth in the range * 0 - 720 degrees but PGSBOX is set to normalize this to two cycles of * 0 - 360 degrees. * - Logarithmic labelling. * - Automatic choice of coordinate increments but with request for all * grid lines for the logarithmic coordinate. * - Degree labelling. * - Suppression of common zero arcmin and arcsec fields in sexagesimal * degree format. *------------------------------------------------------------------------*/ printf("\nAzimuth-frequency scan\n"); /* Reference pixel coordinates. */ nldprm[0] = 0.5; nldprm[1] = 0.5; /* Reference pixel values. */ nldprm[2] = 0.0; nldprm[3] = 8.5; /* Coordinate increments. */ nldprm[4] = 720.0/(naxis[0]+1); nldprm[5] = 0.002; /* Rate of change of NLDPRM[3] with x-pixel. */ nldprm[6] = -0.002; /* Annotation. */ strcpy(idents[0], "azimuth"); strcpy(idents[1], "\\gn/Hz"); strcpy(idents[2], "Frequency/azimuth scan"); opt[0] = 'D'; opt[1] = 'L'; /* Normal size lettering. */ cpgsch(1.0f*scl); /* Draw full grid lines. */ cpgsci(1); gcode[0] = 2; gcode[1] = 2; grid1[0] = 0.0; grid2[0] = 0.0; /* Setting labden = 9900 forces all logarithmic grid lines to be drawn. */ ic = -1; cpgsbox(blc, trc, idents, opt, 0, 9900, c0, gcode, 2.0, 0, grid1, 0, grid2, 0, fscan_, 1, 1, 7, nlcprm, nliprm, nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Z versus time plot. * - PGSBOX uses subroutine PGCRFN. * - Separable (i.e. orthogonal), non-linear coordinate system. * - Use of function PGCRFN for separable axis types. * - Automatic choice of what edges to label; results in labelling the * bottom and left sides of the plot. * - Automatic choice of coordinate increments. * - Logarithmic labelling over many orders of magnitude. * - Single-character annotation on a vertical axis is upright. *------------------------------------------------------------------------*/ printf("\nZ versus time plot\n"); /* Function types. */ strncpy(fcode[0], "Lin ", 4); strncpy(fcode[1], "Log ", 4); /* Reference pixel coordinates. */ nldprm[0] = 0.5; nldprm[1] = -50.0; /* Coordinate increments. */ nldprm[2] = 0.04; nldprm[3] = 0.02; /* Reference pixel values. */ nldprm[4] = -3.0; nldprm[5] = 1.0; /* Annotation. */ strcpy(idents[0], "Age of universe (sec)"); strcpy(idents[1], "Y"); strcpy(idents[2], ""); opt[0] = 'L'; opt[1] = ' '; /* Normal size lettering. */ cpgsch(1.0f*scl); /* Draw ticks for the first coordinate, grid lines for the second. */ cpgsci(1); gcode[0] = 1; gcode[1] = 2; grid1[0] = 0.0; grid2[0] = 0.0; ic = -1; cpgsbox(blc, trc, idents, opt, 0, 0, c0, gcode, 2.0, 0, grid1, 0, grid2, 0, pgcrfn_, 8, 2, 4, fcode[0], nliprm, nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Simple SIN projection near the south celestial pole. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - Non-separable (i.e. non-orthogonal) curvilinear coordinate system. * - Demonstrate parameter definition for PGWCSL. * - Discovery of grid lines that do not cross any axis. * - Automatic choice of what edges to label; results in labelling all * sides of the plot. * - Automatic choice of coordinate increments but with request for * increased grid density for each coordinate. * - Double precision accuracy. * - Cyclic coordinates. PGWCSL returns the right ascension in the range * -180 to +180 degrees, i.e. with a discontinuity at +/- 180 degrees. * - Labelling of degrees as time in the range 0 - 24h. * - Suppression of labels that would overlap one another. * - Sexagesimal degree labelling with automatically determined * precision. * - Suppression of common zero minute and second fields in sexagesimal * time format. *------------------------------------------------------------------------*/ printf("\nSimple SIN projection\n"); wcs.flag = -1; status = wcsini(1, 2, &wcs); /* Set projection type to SIN. */ strcpy(wcs.ctype[0], "RA---SIN"); strcpy(wcs.ctype[1], "DEC--SIN"); /* Reference pixel coordinates. */ wcs.crpix[0] = 384.0; wcs.crpix[1] = 256.0; /* Coordinate increments. */ wcs.cdelt[0] = -1.0/3600000.0; wcs.cdelt[1] = 1.0/3600000.0; /* Spherical coordinate references. */ dec0 = -89.99995; wcs.crval[0] = 25.0; wcs.crval[1] = dec0; /* Set parameters for an NCP projection. */ dec0 *= d2r; wcs.pv[0].i = 2; wcs.pv[0].m = 1; wcs.pv[0].value = 0.0; wcs.pv[0].i = 2; wcs.pv[1].m = 2; wcs.pv[1].value = cos(dec0)/sin(dec0); /* Annotation. */ strcpy(idents[0], "Right ascension"); strcpy(idents[1], "Declination"); strcpy(idents[2], "WCS SIN projection"); opt[0] = 'G'; opt[1] = 'E'; /* Compact lettering. */ cpgsch(0.8f*scl); /* Draw full grid lines. */ cpgsci(1); gcode[0] = 2; gcode[1] = 2; grid1[0] = 0.0; grid2[0] = 0.0; /* Draw the celestial grid. The grid density is set for each world */ /* coordinate by specifying LABDEN = 1224. */ ic = -1; cpgsbox(blc, trc, idents, opt, 0, 1224, c0, gcode, 0.0, 0, grid1, 0, grid2, 0, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*------------------------------------------------------------------------- * Conic equal area projection. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - Non-separable (i.e. non-orthogonal) curvilinear coordinate system. * - Coordinate system undefined in areas of the plot. * - Demonstrate parameter definition for PGWCSL. * - Discontinuous grid lines handled by PGWCSL. * - Discovery of grid lines that do not cross any axis. * - Colour control for grid and labelling. * - Reduced size lettering. * - Automatic choice of what edges to label; results in labelling all * sides of the plot. * - Automatic choice of coordinate increments. * - Cyclic coordinates. PGWCSL returns the longitude in the range -180 * to +180 degrees, i.e. with a discontinuity at +/- 180 degrees. * - Suppression of labels that would overlap one another. * - Suppression of common zero arcmin and arcsec fields in sexagesimal * degree format. *------------------------------------------------------------------------*/ printf("\nConic equal area projection\n"); status = wcsini(1, 2, &wcs); /* Set projection type to conic equal-area. */ strcpy(wcs.ctype[0], "RA---COE"); strcpy(wcs.ctype[1], "DEC--COE"); /* Reference pixel coordinates. */ wcs.crpix[0] = 256.0; wcs.crpix[1] = 256.0; /* Coordinate increments. */ wcs.cdelt[0] = -1.0/3.0; wcs.cdelt[1] = 1.0/3.0; /* Spherical coordinate references. */ wcs.crval[0] = 90.0; wcs.crval[1] = 30.0; wcs.lonpole = 150.0; /* Middle latitude and offset from standard parallels. */ wcs.npv = 2; wcs.pv[0].i = 2; wcs.pv[0].m = 1; wcs.pv[0].value = 60.0; wcs.pv[1].i = 2; wcs.pv[1].m = 2; wcs.pv[1].value = 15.0; /* Annotation. */ strcpy(idents[0], "longitude"); strcpy(idents[1], "latitude"); strcpy(idents[2], "WCS conic equal area projection"); opt[0] = 'E'; opt[1] = 'E'; /* Reduced size lettering. */ cpgsch(0.8f*scl); /* Draw full grid lines. */ gcode[0] = 2; gcode[1] = 2; grid1[0] = 0.0; grid2[0] = 0.0; /* Use colour to associate grid lines and labels. */ /* Meridians in red. */ cpgscr(10, 0.5f, 0.0f, 0.0f); /* Parallels in blue. */ cpgscr(11, 0.0f, 0.2f, 0.5f); /* Longitudes in red. */ cpgscr(12, 0.8f, 0.3f, 0.0f); /* Latitudes in blue. */ cpgscr(13, 0.0f, 0.4f, 0.7f); /* Longitude labels in red. */ cpgscr(14, 0.8f, 0.3f, 0.0f); /* Latitude labels in blue. */ cpgscr(15, 0.0f, 0.4f, 0.7f); /* Title in cyan. */ cpgscr(16, 0.3f, 1.0f, 1.0f); ci[0] = 10; ci[1] = 11; ci[2] = 12; ci[3] = 13; ci[4] = 14; ci[5] = 15; ci[6] = 16; /* Draw the celestial grid letting PGSBOX choose the increments. */ ic = -1; cpgsbox(blc, trc, idents, opt, 0, 0, ci, gcode, 0.0, 0, grid1, 0, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Set parameters to draw the native grid. */ wcs.crval[0] = 0.0; wcs.crval[1] = 60.0; wcs.lonpole = 999.0; wcs.latpole = 999.0; status = wcsset(&wcs); /* We just want to delineate the boundary, in green. */ cpgsci(7); grid1[1] = -180.0; grid1[2] = 180.0; grid2[1] = -90.0; grid2[2] = 90.0; ic = -1; cpgsbox(blc, trc, idents, opt, -1, 0, c0, gcode, 0.0, 2, grid1, 2, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgsci(1); cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Polyconic projection with colour-coded grid. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - Non-separable (i.e. non-orthogonal) curvilinear coordinate system. * - Coordinate system undefined in areas of the plot. * - Demonstrate parameter definition for PGWCSL. * - Discontinuous grid lines handled by PGWCSL. * - Colour coded labelling. * - Colour coded grid implemented by the caller. * - Basic management of the axis-crossing table (see code). * - Reduced size lettering. * - Tick marks external to the frame. * - User selection of what edges to label with request for both * coordinates to be labelled on bottom, left and top edges. * - User selection of grid lines to plot. * - Concatenation of annotation at bottom and left; automatically * suppressed at the top since only one coordinate is labelled there. * - Suppression of labels that would overlap one another. * - Degree labelling. * - Labelling of degrees as time in the range -12 - +12h. * - Suppression of common zero minute and second fields in sexagesimal * time format. *------------------------------------------------------------------------*/ printf("\nPolyconic projection with colour-coded grid\n"); status = wcsini(1, 2, &wcs); /* Set projection type to polyconic. */ strcpy(wcs.ctype[0], "RA---PCO"); strcpy(wcs.ctype[1], "DEC--PCO"); /* Reference pixel coordinates. */ wcs.crpix[0] = 192.0; wcs.crpix[1] = 640.0; /* Rotate 30 degrees. */ rotn = 30.0*d2r; *(wcs.pc) = cos(rotn); *(wcs.pc+1) = sin(rotn); *(wcs.pc+2) = -sin(rotn); *(wcs.pc+3) = cos(rotn); /* Coordinate increments. */ wcs.cdelt[0] = -1.0/5.0; wcs.cdelt[1] = 1.0/5.0; /* Spherical coordinate references. */ wcs.crval[0] = 332.0; wcs.crval[1] = 40.0; wcs.lonpole = -30.0; /* Annotation. */ strcpy(idents[0], "Hour angle"); strcpy(idents[1], "Declination"); strcpy(idents[2], "WCS polyconic projection"); opt[0] = 'H'; opt[1] = 'B'; /* Reduced size lettering. */ cpgsch(0.9f*scl); /* Draw external (TIKLEN < 0) tick marks every 5 degrees. */ gcode[0] = 1; gcode[1] = 1; tiklen = -2.0; cpgsci(6); grid1[0] = 5.0; grid2[0] = 5.0; ic = -1; cpgsbox(blc, trc, idents, opt, -1, 0, c0, gcode, tiklen, 0, grid1, 0, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Resetting the table index to zero causes information about the */ /* tick marks to be discarded. */ ic = 0; /* Draw full grid lines in yellow rather than tick marks. */ cpgsci(2); gcode[0] = 2; gcode[1] = 2; /* Draw the primary meridian and equator. */ grid1[1] = 0.0; grid2[1] = 0.0; cpgsbox(blc, trc, idents, opt, -1, 0, c0, gcode, 0.0, 1, grid1, 1, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* At this point the axis-crossing table will have entries for the */ /* primary meridian and equator. Labelling was deferred in the */ /* previous call, and the table is passed intact on the second call */ /* to accumulate further axis-crossings. */ /* Draw 90 degree meridians and poles in white. */ cpgsci(3); grid1[1] = 90.0; grid1[2] = 180.0; grid1[3] = 270.0; grid2[1] = -90.0; grid2[2] = 90.0; cpgsbox(blc, trc, idents, opt, -1, 0, c0, gcode, 0.0, 3, grid1, 2, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Draw the first set of 15 degree meridians and parallels in blue. */ cpgsci(4); grid1[1] = 15.0; grid1[2] = 60.0; grid1[3] = 105.0; grid1[4] = 150.0; grid1[5] = 195.0; grid1[6] = 240.0; grid1[7] = 285.0; grid1[8] = 330.0; grid2[1] = -75.0; grid2[2] = -30.0; grid2[3] = 15.0; grid2[4] = 60.0; cpgsbox(blc, trc, idents, opt, -1, 0, c0, gcode, 0.0, 8, grid1, 4, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Draw the second set of 15 degree meridians and parallels in red. */ cpgsci(5); grid1[1] = 30.0; grid1[2] = 75.0; grid1[3] = 120.0; grid1[4] = 165.0; grid1[5] = 210.0; grid1[6] = 255.0; grid1[7] = 300.0; grid1[8] = 345.0; grid2[1] = -60.0; grid2[2] = -15.0; grid2[3] = 30.0; grid2[4] = 75.0; cpgsbox(blc, trc, idents, opt, -1, 0, c0, gcode, 0.0, 8, grid1, 4, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* The axis-crossing table has now accumulated information for all of */ /* the preceding meridians and parallels but no labels have been */ /* produced. It will acquire information for the the next set of */ /* meridians and parallels before being processed by this call to */ /* PGSBOX which finally produces the labels. */ /* Draw the 45 degree meridians and parallels in grey and use colour */ /* to differentiate grid labels. */ /* Meridians and parallels in grey. */ cpgscr(10, 0.7f, 0.7f, 0.7f); cpgscr(11, 0.7f, 0.7f, 0.7f); /* Longitudes tinged red. */ cpgscr(12, 1.0f, 0.9f, 0.6f); /* Latitudes tinged green. */ cpgscr(13, 0.8f, 1.0f, 0.9f); /* Longitude labels tinged red. */ cpgscr(14, 1.0f, 0.9f, 0.6f); /* Latitude labels tinged green. */ cpgscr(15, 0.8f, 1.0f, 0.9f); /* Title in white. */ cpgscr(16, 1.0f, 1.0f, 1.0f); ci[0] = 10; ci[1] = 11; ci[2] = 12; ci[3] = 13; ci[4] = 14; ci[5] = 15; ci[6] = 16; cpgsci(6); /* Tell PGSBOX what edges to label. */ grid1[1] = 45.0; grid1[2] = 135.0; grid1[3] = 225.0; grid1[4] = 315.0; grid2[1] = -45.0; grid2[2] = 45.0; cpgsbox(blc, trc, idents, opt, 2333, 0, ci, gcode, 0.0, 4, grid1, 2, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Native grid in green (delineates boundary). */ cpgsci(7); grid1[1] = -180.0; grid1[2] = 180.0; grid2[1] = -999.0; wcs.crval[0] = 0.0; wcs.crval[1] = 0.0; wcs.lonpole = 999.0; status = wcsset(&wcs); ic = -1; cpgsbox(blc, trc, idents, opt, -1, 0, c0, gcode, 0.0, 2, grid1, 1, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgsci(1); cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Plate Carree projection. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - Rectangular image. * - Dual coordinate grids. * - Non-separable (i.e. non-orthogonal) curvilinear coordinate system. * - Demonstrate parameter definition for PGWCSL. * - Discontinuous grid lines handled by PGWCSL. * - Colour coding of grid and labelling. * - Reduced size lettering. * - Manual labelling control. * - Manual and automatic choice of coordinate increments. * - Cyclic coordinates. PGWCSL returns the longitude in the range -180 * to +180 degrees, i.e. with a discontinuity at +/- 180 degrees. * - Suppression of labels that would overlap one another. *------------------------------------------------------------------------*/ printf("\nPlate Carree projection\n"); naxis[0] = 181; naxis[1] = 91; blc[0] = 0.5; blc[1] = 0.5; trc[0] = naxis[0] + 0.5; trc[1] = naxis[1] + 0.5; /* Reset viewport for rectangular image. */ if (large) { cpgvstd(); } else { cpgvsiz(1.0f, 3.0f, 1.0f, 3.0f); } cpgwnad(0.0f, 1.0f, 0.0f, ((float)naxis[1])/((float)naxis[0])); status = wcsini(1, 2, &wcs); /* Set projection type to plate carree. */ strcpy(wcs.ctype[0], "GLON-CAR"); strcpy(wcs.ctype[1], "GLAT-CAR"); /* Reference pixel coordinates. */ wcs.crpix[0] = 226.0; wcs.crpix[1] = 46.0; /* Linear transformation matrix. */ rotn = 15.0*d2r; *(wcs.pc) = cos(rotn); *(wcs.pc+1) = sin(rotn); *(wcs.pc+2) = -sin(rotn); *(wcs.pc+3) = cos(rotn); /* Coordinate increments. */ wcs.cdelt[0] = -1.0; wcs.cdelt[1] = 1.0; /* Set parameters to draw the native grid. */ wcs.crval[0] = 0.0; wcs.crval[1] = 0.0; /* The reference pixel was defined so that the native longitude runs */ /* from 225 deg to 45 deg and this will cause the grid to be truncated */ /* at the 180 deg boundary. However, being a cylindrical projection */ /* it is possible to recentre it in longitude. cylfix() will modify */ /* modify CRPIX, CRVAL, and LONPOLE to suit. */ status = cylfix(naxis, &wcs); /* Annotation. */ strcpy(idents[0], ""); strcpy(idents[1], ""); strcpy(idents[2], "WCS plate caree projection"); opt[0] = 'C'; opt[1] = 'C'; /* Reduced size lettering. */ cpgsch(0.8f*scl); /* Draw full grid lines. */ gcode[0] = 2; gcode[1] = 2; /* Draw native grid in green. */ cpgscr(16, 0.0f, 0.2f, 0.0f); /* Title in cyan. */ cpgscr(17, 0.3f, 1.0f, 1.0f); ci[0] = 16; ci[1] = 16; ci[2] = 7; ci[3] = 7; ci[4] = -1; ci[5] = -1; ci[6] = 17; grid1[0] = 15.0; grid2[0] = 15.0; ic = -1; cpgsbox(blc, trc, idents, opt, 2100, 0, ci, gcode, 0.0, 0, grid1, 0, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Reset CRPIX previously modified by cylfix(). */ wcs.crpix[0] = 226.0; wcs.crpix[1] = 46.0; /* Galactic reference coordinates. */ wcs.crval[0] = 30.0; wcs.crval[1] = 35.0; wcs.lonpole = 999.0; status = wcsset(&wcs); status = cylfix(naxis, &wcs); /* Annotation. */ strcpy(idents[0], "longitude"); strcpy(idents[1], "latitude"); strcpy(idents[2], ""); opt[0] = 'E'; opt[1] = 'E'; /* Use colour to associate grid lines and labels. */ /* Meridians in red. */ cpgscr(10, 0.5f, 0.0f, 0.0f); /* Parallels in blue. */ cpgscr(11, 0.0f, 0.2f, 0.5f); /* Longitudes in red. */ cpgscr(12, 0.8f, 0.3f, 0.0f); /* Latitudes in blue. */ cpgscr(13, 0.0f, 0.4f, 0.7f); /* Longitude labels in red. */ cpgscr(14, 0.8f, 0.3f, 0.0f); /* Latitude labels in blue. */ cpgscr(15, 0.0f, 0.4f, 0.7f); ci[0] = 10; ci[1] = 11; ci[2] = 12; ci[3] = 13; ci[4] = 14; ci[5] = 15; ci[6] = -1; grid1[0] = 0.0; grid2[0] = 0.0; /* Draw the celestial grid letting PGSBOX choose the increments. */ ic = -1; cpgsbox(blc, trc, idents, opt, 21, 0, ci, gcode, 0.0, 0, grid1, 0, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgsci(1); cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Plate Carree projection. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - BLC, TRC unrelated to pixel coordinates. * - Demonstrate parameter definition for PGWCSL. * - Poles and 180 meridian projected along edges of the frame. * - Reduced size lettering. * - Manual and automatic choice of coordinate increments. * - Suppression of common zero minute and second fields in sexagesimal * time format. *------------------------------------------------------------------------*/ printf("\nPlate Carree projection\n"); blc[0] = -180.0; blc[1] = -90.0; trc[0] = 180.0; trc[1] = +90.0; /* Reset viewport for rectangular image. */ if (large) { cpgvstd(); } else { cpgvsiz(1.0f, 3.0f, 1.0f, 3.0f); } cpgwnad (blc[0], trc[0], blc[1], trc[1]); status = wcsini(1, 2, &wcs); /* Set projection type to plate carree. */ strcpy(wcs.ctype[0], "RA---CAR"); strcpy(wcs.ctype[1], "DEC--CAR"); /* Reference pixel coordinates. */ wcs.crpix[0] = 0.0; wcs.crpix[1] = 0.0; /* Coordinate increments. */ wcs.cdelt[0] = -1.0; wcs.cdelt[1] = 1.0; /* Set parameters to draw the native grid. */ wcs.crval[0] = 0.0; wcs.crval[1] = 0.0; /* Annotation. */ strcpy(idents[0], "Right ascension"); strcpy(idents[1], "Declination"); strcpy(idents[2], "WCS plate caree projection"); opt[0] = 'G'; opt[1] = 'E'; /* Reduced size lettering. */ cpgsch(0.7f*scl); /* Draw full grid lines. */ gcode[0] = 2; gcode[1] = 2; cpgsci(1); grid1[0] = 0.0; grid2[0] = 0.0; ic = -1; cpgsbox(blc, trc, idents, opt, 2121, 1212, c0, gcode, 0.0, 0, grid1, 0, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Cylindrical perspective projection. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - BLC, TRC unrelated to pixel coordinates. * - Demonstrate parameter definition for PGWCSL. * - Reduced size lettering. * - Manual and automatic choice of coordinate increments. * - Suppression of common zero minute and second fields in sexagesimal * time format. *------------------------------------------------------------------------*/ printf("\nCylindrical perspective projection\n"); blc[0] = -180.0; blc[1] = -90.0; trc[0] = 180.0; trc[1] = +90.0; /* Reset viewport for rectangular image. */ if (large) { cpgvstd(); } else { cpgvsiz(1.0f, 3.0f, 1.0f, 3.0f); } cpgwnad (blc[0], trc[0], blc[1], trc[1]); status = wcsini(1, 2, &wcs); /* Set projection type to cylindrical perspective. */ strcpy(wcs.ctype[0], "RA---CYP"); strcpy(wcs.ctype[1], "DEC--CYP"); /* Reference pixel coordinates. */ wcs.crpix[0] = 0.0; wcs.crpix[1] = 0.0; /* Coordinate increments. */ wcs.cdelt[0] = -1.0; wcs.cdelt[1] = 1.0; /* Set parameters to draw the native grid. */ wcs.crval[0] = 45.0; wcs.crval[1] = -90.0; wcs.lonpole = 999.0; /* mu and lambda projection parameters. */ wcs.npv = 2; wcs.pv[0].i = 2; wcs.pv[0].m = 1; wcs.pv[0].value = 0.0; wcs.pv[1].i = 2; wcs.pv[1].m = 2; wcs.pv[1].value = 1.0; /* Annotation. */ strcpy(idents[0], "Right ascension"); strcpy(idents[1], "Declination"); strcpy(idents[2], "WCS cylindrical perspective projection"); opt[0] = 'G'; opt[1] = 'E'; /* Reduced size lettering. */ cpgsch(0.7f*scl); /* Draw full grid lines. */ gcode[0] = 2; gcode[1] = 2; cpgsci(1); grid1[0] = 0.0; grid2[0] = 0.0; ic = -1; cpgsbox(blc, trc, idents, opt, 2121, 1212, c0, gcode, 0.0, 0, grid1, 0, grid2, 1, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Gnomonic projection. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - Demonstrate parameter definition for PGWCSL. * - Reduced size lettering. * - Manual and automatic choice of coordinate increments. * - Suppression of common zero minute and second fields in sexagesimal * time format. *------------------------------------------------------------------------*/ printf("\nTAN projection\n"); naxis[0] = 100; naxis[1] = 100; blc[0] = 0.5; blc[1] = 0.5; trc[0] = naxis[0] + 0.5; trc[1] = naxis[1] + 0.5; /* Reset viewport for rectangular image. */ if (large) { cpgvstd(); } else { cpgvsiz(1.0f, 3.0f, 1.0f, 3.0f); } cpgwnad(0.0f, 1.0f, 0.0f, ((float)naxis[1])/((float)naxis[0])); status = wcsini(1, 2, &wcs); /* Set projection type to gnomonic. */ strcpy(wcs.ctype[0], "RA---TAN"); strcpy(wcs.ctype[1], "DEC--TAN"); /* Reference pixel coordinates. */ wcs.crpix[0] = 50.5; wcs.crpix[1] = 1.0; /* Coordinate increments. */ wcs.cdelt[0] = 1e-3; wcs.cdelt[1] = 1e-3; /* Set parameters to draw the native grid. */ wcs.crval[0] = 45.0; wcs.crval[1] = -89.7; wcs.lonpole = 999.0; /* Annotation. */ strcpy(idents[0], "Right ascension"); strcpy(idents[1], "Declination"); strcpy(idents[2], "WCS TAN projection"); opt[0] = 'E'; opt[1] = 'E'; /* Reduced size lettering. */ cpgsch(0.7f*scl); /* Draw full grid lines. */ gcode[0] = 2; gcode[1] = 2; cpgsci(1); grid1[0] = 0.0; grid2[0] = 0.0; ic = -1; cpgsbox(blc, trc, idents, opt, 0, 1212, c0, gcode, 0.0, 0, grid1, 0, grid2, 0, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Linear-linear plot with two types of alternative labelling. * - PGSBOX uses subroutine PGCRFN. * - Separable (i.e. orthogonal), linear coordinate system. * - Use of function PGCRFN for separable axis types. * - Alternative labelling and axis annotation. * - Direct manipulation of the axis-crossing table. * - Tick mark and grid line control. * - User selection of what edges to label. * - Automatic choice of coordinate increments. *------------------------------------------------------------------------*/ printf("\nLinear plot with alternative labelling\n"); if (large) { cpgvstd(); } else { cpgvsiz(1.0f, 3.0f, 1.0f, 3.0f); } cpgwnad(0.0f, 1.0f, 0.0f, 1.0f); naxis[0] = 512; naxis[1] = 512; blc[0] = 0.5; blc[1] = 0.5; trc[0] = naxis[0] + 0.5; trc[1] = naxis[1] + 0.5; /* Function types. */ strncpy(fcode[0], "Lin ", 4); strncpy(fcode[1], "Lin ", 4); /* Reference pixel coordinates. */ nldprm[0] = 0.5; nldprm[1] = 0.5; /* Coordinate increments. */ nldprm[2] = 0.03; nldprm[3] = 0.03; /* Reference pixel values. */ nldprm[4] = 20.0; nldprm[5] = 0.0; /* Annotation. */ strcpy(idents[0], "temperature of frog (\\uo\\dC)"); strcpy(idents[1], "distance hopped (m)"); strcpy(idents[2], ""); opt[0] = ' '; opt[1] = ' '; /* Reduced size lettering. */ cpgsch(0.8f*scl); /* Draw tick marks at the bottom for the first coordinate, grid lines */ /* for the second. Setting GCODE[0] = -1 inhibits information being */ /* stored for labels on the top edge while GCODE[1] = 2 causes */ /* information to be stored for labels on the right edge even if those */ /* labels are not actually produced. */ cpgsci(1); gcode[0] = -1; gcode[1] = 2; grid1[0] = 0.0; grid2[0] = 0.0; /* Set LABCTL = 21 to label the bottom and left edges only. */ ic = -1; cpgsbox(blc, trc, idents, opt, 21, 0, c0, gcode, 2.0, 0, grid1, 0, grid2, 0, pgcrfn_, 8, 2, 4, fcode[0], nliprm, nldprm, 256, &ic, cache, &ierr); /* Information for labels on the right edge was stored in the crossing */ /* table on the first call to PGSBOX. We now want to manipulate it to */ /* convert metres to feet. Note that while it's a simple matter to draw */ /* alternative sets of tick marks on opposite edges of the frame, as */ /* with the two temperature scales, we have the slightly more difficult */ /* requirement of labelling grid lines with different values at each */ /* end. */ for (j = 0; j <= ic; j++) { /* Look for entries associated with the right edge of the frame. */ if (cache[j][0] == 4.0) { /* Convert to feet, rounding to the nearest 0.1. */ cache[j][3] *= 1e3/(25.4*12.0); cache[j][3] = floor(cache[j][3]*10.0 + 0.5)/10.0; } } /* Annotation for the right edge. */ strcpy(idents[0], ""); strcpy(idents[1], "(feet)"); /* Set LABCTL = 12000 to label the right edge with the second coordinate */ /* without redrawing the grid lines. */ cpgsbox(blc, trc, idents, opt, 12000, 0, c0, gcode, 2.0, 0, grid1, 0, grid2, 0, pgcrfn_, 8, 2, 4, fcode[0], nliprm, nldprm, 256, &ic, cache, &ierr); /* The alternative temperature scale in Fahrenheit is to be constructed */ /* with a new set of tick marks. */ nldprm[2] = nldprm[2]*1.8; nldprm[4] = nldprm[4]*1.8 + 32.0; /* Draw tick marks at the top for the first coordinate, don't redo grid */ /* lines for the second. */ gcode[0] = -100; gcode[1] = 0; /* Annotation for the top edge. */ strcpy(idents[0], "(\\uo\\dF)"); strcpy(idents[1], ""); /* Set LABCTL = 100 to label the top edge; Set IC = -1 to redetermine */ /* the coordinate extrema. */ ic = -1; cpgsbox(blc, trc, idents, opt, 100, 0, c0, gcode, 2.0, 0, grid1, 0, grid2, 0, pgcrfn_, 8, 2, 4, fcode[0], nliprm, nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgbox("bc", 0.0f, 0, "bc", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Calendar axes using subroutine PGLBOX. * - Separable (i.e. orthogonal), linear coordinate system. * - Use of PGLBOX for simple linear axis types. * - Automatic choice of what edges to label; results in labelling the * bottom and left sides of the plot. * - Automatic choice of coordinate increments. * - Calendar date axis labelling. * - Single-character annotation on a vertical axis is upright. *------------------------------------------------------------------------*/ printf("\nCalendar axes using subroutine PGLBOX\n"); cpgswin(51900.0f, 52412.0f, 51900.0f, 57020.0f); /* Annotation. */ strcpy(idents[0], "Date started"); strcpy(idents[1], "Date finished"); strcpy(idents[2], "Calendar axes using subroutine PGLBOX"); opt[0] = 'Y'; opt[1] = 'Y'; /* Reduced size lettering. */ cpgsch(0.7f*scl); /* Draw tick marks on each axis. */ cpgsci(1); gcode[0] = 1; gcode[1] = 1; grid1[0] = 0.0; grid2[0] = 0.0; ic = -1; cpglbox(idents, opt, 0, 0, c0, gcode, 2.0, 0, grid1, 0, grid2, 0, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*-------------------------------------------------------------------------- * Simple linear axes handled by PGWCSL. * - Separable (i.e. orthogonal), linear coordinate system. * - Automatic choice of what edges to label; results in labelling the * bottom and left sides of the plot. * - Automatic choice of coordinate increments. * - Tick marks and labels at the edges of the frame. * - Single-character annotation on a vertical axis is upright. *------------------------------------------------------------------------*/ printf("\nSimple linear axes handled by pgwcsl()\n"); naxis[0] = 3; naxis[1] = 3; blc[0] = 0.5; blc[1] = 0.5; trc[0] = naxis[0] + 0.5; trc[1] = naxis[1] + 0.5; status = wcsini(1, 2, &wcs); strcpy(wcs.ctype[0], "x"); strcpy(wcs.ctype[1], "y"); /* Reference pixel coordinates. */ wcs.crpix[0] = 2.0; wcs.crpix[1] = 2.0; /* Coordinate increments. */ wcs.cdelt[0] = 1.0; wcs.cdelt[1] = 1.0; /* Spherical coordinate references. */ wcs.crval[0] = 2.0; wcs.crval[1] = 2.0; /* Annotation. */ strcpy(idents[0], "X"); strcpy(idents[1], "Y"); strcpy(idents[2], "Simple linear axes handled by pgwcsl()"); opt[0] = ' '; opt[1] = ' '; /* Reduced size lettering. */ cpgsch(0.8f*scl); /* Draw full grid lines. */ cpgsci(1); gcode[0] = 1; gcode[1] = 1; grid1[0] = 0.0; grid2[0] = 0.0; ic = -1; cpgsbox(blc, trc, idents, opt, 0, 0, c0, gcode, 2.0, 0, grid1, 0, grid2, 0, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(&wcs), nldprm, 256, &ic, cache, &ierr); /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); cpgpage(); /*------------------------------------------------------------------------*/ wcsfree(&wcs); cpgask(0); cpgend(); return 0; } pywcs-1.12/wcslib/pgsbox/fscan.f0000644001153600020070000001155312310355626020701 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * PGSBOX 4.10 - draw curvilinear coordinate axes for PGPLOT. * Copyright (C) 1997-2012, Mark Calabretta * * This file is part of PGSBOX. * * PGSBOX is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PGSBOX is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with PGSBOX. If not, see http://www.gnu.org/licenses. * * Correspondence concerning PGSBOX may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: fscan.f,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *======================================================================= * * FSCAN defines an azimuth/frequency coordinate system for PGSBOX. * * Given: * OPCODE I Transformation code: * +2: Compute a set of pixel coordinates that * describe a path between this and the * previous pair of world coordinates * remembered from the last call with * OPCODE = +1 or +2. * +1: Compute pixel coordinates from world * coordinates. * 0: Initialize. * -1: Compute world coordinates from pixel * coordinates. * * NLC I Number of elements in NLCPRM (=1). * * NLI I Number of elements in NLIPRM (=1). * * NLD I Number of elements in NLDPRM (=7). * * NLCPRM C(NLC)*1 Character array (ignored). * * NLIPRM I(NLI) Integer array (ignored). * * Given and/or returned: * NLDPRM D(NLD) Double precision coefficients (see below). * * WORLD D(2) World coordinates. WORLD(1) and WORLD(2) * are the longitude in degrees, and * log10(frequency/1Hz). * Given if OPCODE > 0, returned if OPCODE < 0. * * PIXEL D(2) Pixel coordinates. * Given if OPCODE < 0, returned if OPCODE > 0. * * CONTRL I Control flag for OPCODE = +2 (ignored, always * set to 0 on return). * * CONTXT D(20) Context elements (ignored). * * Returned: * IERR I Status return value: * 0: Success. * 1: Invalid coordinate transformation * parameters. * * Notes: * The NLDPRM array is constructed as follows: * - (1) Axis 1 reference pixel coordinate * - (2) Axis 2 reference pixel coordinate * - (3) Axis 1 reference pixel value (degree) * - (4) Axis 2 reference pixel value * - (5) Axis 1 coordinate increment (degree/pixel) * - (6) Axis 2 coordinate increment * - (7) Rate of change of NLDPRM(4) with x-pixel * *======================================================================= SUBROUTINE FSCAN (OPCODE, NLC, NLI, NLD, NLCPRM, NLIPRM, NLDPRM, : WORLD, PIXEL, CONTRL, CONTXT, IERR) *----------------------------------------------------------------------- INTEGER CONTRL, IERR, NLC, NLD, NLI, NLIPRM(NLI), OPCODE DOUBLE PRECISION CONTXT(20), NLDPRM(NLD), PIXEL(2), S, WORLD(2) CHARACTER NLCPRM(NLC)*1 *----------------------------------------------------------------------- IERR = 0 IF (OPCODE.GT.0) THEN * Compute pixel coordinates from world coordinates. PIXEL(1) = NLDPRM(1) + (WORLD(1) - NLDPRM(3))/NLDPRM(5) S = NLDPRM(4) + PIXEL(1)*NLDPRM(7) PIXEL(2) = NLDPRM(2) + (WORLD(2) - S)/NLDPRM(6) CONTRL = 0 ELSE IF (OPCODE.EQ.0) THEN * Initialize. IF (NLC.LT.1 .OR. NLI.LT.1 .OR. NLD.LT.7) IERR = 1 IF (NLDPRM(5).EQ.0D0) IERR = 1 IF (NLDPRM(6).EQ.0D0) IERR = 1 IF (NLDPRM(7).EQ.0D0) IERR = 1 CONTRL = 0 ELSE IF (OPCODE.EQ.-1) THEN * Compute world coordinates from pixel coordinates. WORLD(1) = NLDPRM(3) + NLDPRM(5)*(PIXEL(1) - NLDPRM(1)) WORLD(2) = NLDPRM(4) + NLDPRM(6)*(PIXEL(2) - NLDPRM(2)) + : PIXEL(1)*NLDPRM(7) ELSE IERR = 1 END IF RETURN END pywcs-1.12/wcslib/pgsbox/GNUmakefile0000644001153600020070000001343012310355626021506 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # GNU makefile for building PGSBOX 4.10 # # Summary of the main targets # --------------------------- # build: Build the library. # # clean: Delete intermediate object files. # # cleaner: clean, and also delete the test executables. # # cleanest (distclean, or realclean): cleaner, and also delete the pgsbox # and WCSLIB object libraries. # # check (or test): Compile and run the test programs. By default they are # executed in batch mode; use # # make MODE=interactive check # # to run them interactively. # # tests: Compile the test programs (but don't run them). # # Notes: # 1) If you need to make changes then preferably modify ../makedefs.in # instead and re-run configure. # # 2) In compiling the test programs, this makefile assumes that the # WCSLIB 4.10 sources reside in ../C and ../Fortran (as in the # distribution kit). # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: GNUmakefile,v 4.10 2012/02/05 23:41:45 cal103 Exp $ #----------------------------------------------------------------------------- # Get configure settings. include ../makedefs PGSBOXLIB := libpgsbox-$(LIBVER).a MODULES := pgsbox.o \ cpgsbox.o \ pgwcsl.o \ pgcrfn.o WCSLIB := ../C/$(WCSLIB) # For building the sharable library. PICLIB := libpgsbox-PIC.a WCSSHR := ../C/$(SHRLIB) SHRLIB := $(subst libwcs,libpgsbox,$(SHRLIB)) SONAME := $(subst libwcs,libpgsbox,$(SONAME)) SHRLD := $(subst libwcs,libpgsbox,$(SHRLD)) SHRLN := $(subst libwcs,libpgsbox,$(SHRLN)) CPPFLAGS += -I. -I.. -I../C vpath %.h ..:../C vpath %.in .. vpath %.inc ../Fortran # Pattern rules #-------------- $(PGSBOXLIB)(%.o) : %.f -@ echo '' $(FC) -I../Fortran $(FFLAGS) -c $< $(AR) r $(PGSBOXLIB) $% -@ $(RM) $% $(PGSBOXLIB)(%.o) : %.c -@ echo '' $(CC) $(CPPFLAGS) $(CFLAGS) -c $< $(AR) r $(PGSBOXLIB) $% -@ $(RM) $% $(PICLIB)(%.o) : %.f -@ echo '' $(FC) -I../Fortran $(FFLAGS) $(SHRFLAGS) -c $< $(AR) r $(PICLIB) $% -@ $(RM) $% $(PICLIB)(%.o) : %.c -@ echo '' $(CC) $(CPPFLAGS) $(CFLAGS) $(SHRFLAGS) -c $< $(AR) r $(PICLIB) $% -@ $(RM) $% %.i : %.c -@ echo '' -@ $(RM) $@ $(CPP) $(CPPFLAGS) $(CFLAGS) $< > $@ %.d : %.c -@ echo '' -@ $(CPP) $(CPPFLAGS) $(CFLAGS) $< | \ sed -n -e 's|^# 1 "\([^/].*\.h\)".*|\1|p' | \ sort -u # Static and static pattern rules #-------------------------------- .PHONY : build check clean cleaner cleanest distclean install realclean test \ tests wcslib build : lib lib : $(PGSBOXLIB) $(SHRLIB) $(PGSBOXLIB) : $(MODULES:%=$(PGSBOXLIB)(%)) -@ echo '' $(RANLIB) $@ $(SHRLIB) : $(PICLIB) -@ echo '' -@ $(RM) -r tmp - mkdir tmp && \ cd tmp && \ trap 'cd .. ; $(RM) -r tmp' 0 1 2 3 15 ; \ $(AR) x ../$(PICLIB) && \ $(SHRLD) -o $@ *.o ../$(WCSSHR) $(LDFLAGS) $(PGPLOTLIB) $(FLIBS) && \ mv $@ .. $(PICLIB) : $(MODULES:%.o=$(PICLIB)(%.o)) ; install : build $(MAKE) -C ../Fortran install $(INSTALL) -m 644 $(PGSBOXLIB) $(LIBDIR) $(RANLIB) $(LIBDIR)/$(PGSBOXLIB) $(RM) $(LIBDIR)/libpgsbox.a $(LN_S) $(PGSBOXLIB) $(LIBDIR)/libpgsbox.a - if [ "$(SHRLIB)" != "" ] ; then \ $(INSTALL) -m 644 $(SHRLIB) $(LIBDIR) ; \ if [ -h "$(LIBDIR)/$(SONAME)" ] ; then \ $(RM) $(LIBDIR)/$(SONAME) ; \ fi ; \ $(LN_S) $(SHRLIB) $(LIBDIR)/$(SONAME) ; \ if [ "$(SHRLN)" != "" ] ; then \ if [ -h "$(LIBDIR)/$(SHRLN)" ] ; then \ $(RM) $(LIBDIR)/$(SHRLN) ; \ fi ; \ $(LN_S) $(SONAME) $(LIBDIR)/$(SHRLN) ; \ fi ; \ fi $(INSTALL) -m 444 *.h $(INCDIR) clean : - $(RM) -r *.o *.i a.out core *.dSYM $(EXTRA_CLEAN) cleaner : clean - $(RM) pgtest cpgtest cleanest distclean realclean : cleaner - $(RM) $(PICLIB) libpgsbox-*.a libpgsbox.so.* libpgsbox.*.dylib check test : tests -@ echo '' -@ $(TIMER) -@ echo 'Running the PGSBOX test program, PGTEST:' -@ if [ '$(MODE)' = interactive ] ; then \ ./pgtest ; \ else \ ./pgtest < /dev/null ; \ fi -@ echo '' -@ echo '' -@ $(TIMER) -@ echo 'Running the cpgsbox() test program, cpgtest:' -@ if [ '$(MODE)' = interactive ] ; then \ ./cpgtest ; \ else \ ./cpgtest < /dev/null ; \ fi tests : wcslib pgtest cpgtest wcslib : $(WCSLIB) $(WCSLIB) : -@ echo '' $(MAKE) -C ../Fortran lib pgtest : pgtest.f fscan.f lngvel.f $(PGSBOXLIB) $(WCSLIB) -@ $(RM) $@ -@ echo '' $(FC) -I../Fortran $(FFLAGS) $(LDFLAGS) -o $@ $^ \ $(PGPLOTLIB) $(LIBS) cpgtest : cpgtest.c fscan.f lngvel.f $(PGSBOXLIB) $(WCSLIB) -@ $(RM) $@ -@ echo '' $(FC) -I../Fortran $(FFLAGS) -c fscan.f lngvel.f $(CC) $(CPPFLAGS) $(PGPLOTINC) $(CFLAGS) $(LDFLAGS) -o $@ \ $(^:.f=.o) $(PGPLOTLIB) $(FLIBS) $(LIBS) -@ $(RM) fscan.o lngvel.o GNUmakefile : ../makedefs ; ../makedefs ../wcsconfig_f77.h : makedefs.in wcsconfig_f77.h.in \ ../config.status -@ $(RM) ../wcsconfig_f77.h cd .. && ./config.status show :: -@ echo 'For building libpgsbox...' -@ echo ' PGSBOXLIB := $(PGSBOXLIB)' -@ echo ' PICLIB := $(PICLIB)' -@ echo ' WCSSHR := $(WCSSHR)' -@ echo ' SHRLIB := $(SHRLIB)' -@ echo ' SONAME := $(SONAME)' -@ echo ' SHRFLAGS := $(SHRFLAGS)' -@ echo ' SHRLD := $(SHRLD)' -@ echo ' SHRLN := $(SHRLN)' -@ echo '' -@ echo ' MODULES := $(MODULES)' # Dependencies #------------- $(PGSBOXLIB)(cpgsbox.o) : cpgsbox.h wcsconfig_f77.h $(PGSBOXLIB)(pgwcsl.o) : cel.h lin.h prj.h spc.h sph.h spx.h tab.h wcs.h \ wcsconfig_f77.h pgtest.o : wcs.inc cpgtest.o : cel.h cpgsbox.h lin.h prj.h spc.h spx.h tab.h wcs.h wcsfix.h \ wcsconfig_f77.h pywcs-1.12/wcslib/pgsbox/lngvel.f0000644001153600020070000001224512310355626021075 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * PGSBOX 4.10 - draw curvilinear coordinate axes for PGPLOT. * Copyright (C) 1997-2012, Mark Calabretta * * This file is part of PGSBOX. * * PGSBOX is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PGSBOX is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with PGSBOX. If not, see http://www.gnu.org/licenses. * * Correspondence concerning PGSBOX may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: lngvel.f,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *======================================================================= * * LNGVEL defines a longitude/velocity coordinate system for PGSBOX. * The second (Y) axis is assumed to be equispaced in frequency but * required to be labelled with the relativistic Doppler velocity. * * Given: * OPCODE I Transformation code: * +2: Compute a set of pixel coordinates that * describe a path between this and the * previous pair of world coordinates * remembered from the last call with * OPCODE = +1 or +2. * +1: Compute pixel coordinates from world * coordinates. * 0: Initialize. * -1: Compute world coordinates from pixel * coordinates. * * NLC I Number of elements in NLCPRM (=1). * * NLI I Number of elements in NLIPRM (=1). * * NLD I Number of elements in NLDPRM (=7). * * NLCPRM C(NLC)*1 Character array (ignored). * * NLIPRM I(NLI) Integer array (ignored). * * Given and/or returned: * NLDPRM D(NLD) Double precision coefficients (see below). * * WORLD D(2) World coordinates. WORLD(1) and WORLD(2) are * the longitude and velocity, in degrees and m/s. * Given if OPCODE > 0, returned if OPCODE < 0. * * PIXEL D(2) Pixel coordinates. * Given if OPCODE < 0, returned if OPCODE > 0. * * CONTRL I Control flag for OPCODE = +2 (ignored, always * set to 0 on return). * * CONTXT D(20) Context elements (ignored). * * Returned: * IERR I Status return value: * 0: Success. * 1: Invalid coordinate transformation * parameters. * * Notes: * The NLDPRM array is constructed as follows: * - (1) Axis 1 reference pixel coordinate * - (2) Axis 2 reference pixel coordinate * - (3) Axis 1 reference pixel value (degree) * - (4) Axis 2 reference pixel value (Hz) * - (5) Axis 1 coordinate increment (degree/pixel) * - (6) Axis 2 coordinate increment (Hz/pixel) * - (7) Rest frequency (Hz) * *======================================================================= SUBROUTINE LNGVEL (OPCODE, NLC, NLI, NLD, NLCPRM, NLIPRM, NLDPRM, : WORLD, PIXEL, CONTRL, CONTXT, IERR) *----------------------------------------------------------------------- INTEGER CONTRL, IERR, NLC, NLD, NLI, NLIPRM(NLI), OPCODE DOUBLE PRECISION CONTXT(20), CVEL, FREQ, NLDPRM(NLD), PIXEL(2), S, : WORLD(2) CHARACTER NLCPRM(NLC)*1 PARAMETER (CVEL = 2.9979D8) *----------------------------------------------------------------------- IERR = 0 IF (OPCODE.GT.0) THEN * Compute pixel coordinates from world coordinates. PIXEL(1) = NLDPRM(1) + (WORLD(1) - NLDPRM(3))/NLDPRM(5) S = (CVEL-WORLD(2))/(CVEL+WORLD(2)) IF (S.LT.0D0) THEN IERR = 2 RETURN END IF FREQ = NLDPRM(7)*SQRT(S) PIXEL(2) = NLDPRM(2) + (FREQ - NLDPRM(4))/NLDPRM(6) CONTRL = 0 ELSE IF (OPCODE.EQ.0) THEN * Initialize. IF (NLC.LT.1 .OR. NLI.LT.1 .OR. NLD.LT.7) IERR = 1 IF (NLDPRM(5).EQ.0D0) IERR = 1 IF (NLDPRM(6).EQ.0D0) IERR = 1 IF (NLDPRM(7).EQ.0D0) IERR = 1 CONTRL = 0 ELSE IF (OPCODE.EQ.-1) THEN * Compute world coordinates from pixel coordinates. WORLD(1) = NLDPRM(3) + NLDPRM(5)*(PIXEL(1) - NLDPRM(1)) FREQ = NLDPRM(4) + NLDPRM(6)*(PIXEL(2) - NLDPRM(2)) S = (FREQ/NLDPRM(7))**2 WORLD(2) = CVEL*(1D0 - S)/(1D0 + S) ELSE IERR = 1 END IF RETURN END pywcs-1.12/wcslib/pgsbox/pgcrfn.f0000644001153600020070000001402312310355626021061 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * PGSBOX 4.10 - draw curvilinear coordinate axes for PGPLOT. * Copyright (C) 1997-2012, Mark Calabretta * * This file is part of PGSBOX. * * PGSBOX is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PGSBOX is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with PGSBOX. If not, see http://www.gnu.org/licenses. * * Correspondence concerning PGSBOX may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: pgcrfn.f,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *======================================================================= * * PGCRFN defines separable pairs of non-linear coordinate systems for * PGSBOX. * * Given: * OPCODE I Transformation code: * +2: Compute a set of pixel coordinates that * describe a path between this and the * previous pair of world coordinates * remembered from the last call with * OPCODE = +1 or +2. * +1: Compute pixel coordinates from world * coordinates. * 0: Initialize. * -1: Compute world coordinates from pixel * coordinates. * * NLC I Number of elements in FCODE (=8). * * NLI I Number of elements in NLIPRM (=2). * * NLD I Number of elements in NLDPRM. * * FCODE C(NLC)*1 Character array (contains the CTYPE array, * see below). * * Given and/or returned: * NLIPRM I(NLI) Integer coefficients (see below). * * NLDPRM D(2,NLD) Double precision coefficients (see below). * * WORLD D(2) World coordinates. * Given if OPCODE > 0, returned if OPCODE < 0. * * PIXEL D(2) Pixel coordinates. * Given if OPCODE < 0, returned if OPCODE > 0. * * CONTRL I Control flag for OPCODE = +2 (ignored, always * set to 0 on return). * * CONTXT D(20) Context elements (ignored). * * Returned: * IERR I Status return value: * 0: Success. * 1: Invalid parameters. * 2: Invalid world coordinate. * 3: Invalid pixel coordinate. * * Notes: * PGCRFN assumes a simple 2-D image. The FCODE array contains * two four-character mnemonics that select function types: * * "Lin " Linear * "Log " Logarithmic * "Pow " Power law * * The first two elements of NLIPRM are set on initialization to * offsets used by computed GO TOs for each function type. * * Note that PGCRFN treats NLDPRM as an array of dimension two. * The NLDPRM are used as follows: * * Type WORLD(J) = * Lin NLDPRM(J,3) + S * Log NLDPRM(J,3) * LOG10(S) * Pow (NLDPRM(J,3) + S)**NLDPRM(J,4) * * Where in each case S = NLDPRM(J,2)*(PIXEL(J) - NLDPRM(J,1)) * *======================================================================= SUBROUTINE PGCRFN (OPCODE, NLC, NLI, NLD, FCODE, NLIPRM, NLDPRM, : WORLD, PIXEL, CONTRL, CONTXT, IERR) *----------------------------------------------------------------------- INTEGER CONTRL, IERR, J, NLC, NLD, NLI, OPCODE, NLIPRM(NLI) DOUBLE PRECISION CONTXT(20), NLDPRM(2,NLD), PIXEL(2), S, WORLD(2) CHARACTER FCODE(2)*4, FCODES*20 DATA FCODES(1:20) /'Lin Log Pow '/ *----------------------------------------------------------------------- IERR = 0 IF (OPCODE.GT.0) THEN * Compute pixel coordinates from world coordinates. DO 200 J = 1, 2 GO TO (110, 120, 130) NLIPRM(J) IERR = 1 RETURN * Linear. 110 S = WORLD(J) - NLDPRM(J,3) GO TO 190 * Logarithmic to base 10. 120 S = 10D0**(WORLD(J)/NLDPRM(J,3)) GO TO 190 * Power. 130 S = WORLD(J)**(1D0/NLDPRM(J,4)) - NLDPRM(J,3) 190 PIXEL(J) = NLDPRM(J,1) + S/NLDPRM(J,2) 200 CONTINUE CONTRL = 0 ELSE IF (OPCODE.EQ.0) THEN * Initialize. IF (NLC.LT.8 .OR. NLI.LT.2 .OR. NLD.LT.3) THEN IERR = 1 RETURN END IF * Compute pointers. NLIPRM(1) = (INDEX(FCODES,FCODE(1)) + 3)/4 NLIPRM(2) = (INDEX(FCODES,FCODE(2)) + 3)/4 IF (NLIPRM(1).EQ.0 .OR. NLIPRM(2).EQ.0) THEN IERR = 1 RETURN END IF CONTRL = 0 ELSE IF (OPCODE.EQ.-1) THEN * Compute world coordinates from pixel coordinates. DO 300 J = 1, 2 S = NLDPRM(J,2)*(PIXEL(J) - NLDPRM(J,1)) GO TO (210, 220, 230) NLIPRM(J) IERR = 1 RETURN * Linear. 210 WORLD(J) = NLDPRM(J,3) + S GO TO 300 * Logarithmic to base 10. 220 IF (S.LE.0D0) THEN IERR = 1 RETURN END IF WORLD(J) = NLDPRM(J,3)*LOG10(S) GO TO 300 * Power. 230 S = S + NLDPRM(J,3) IF (S.LE.0D0 .AND. MOD(NLDPRM(J,4),1D0).NE.0D0) THEN IERR = 1 RETURN END IF WORLD(J) = S**NLDPRM(J,4) 300 CONTINUE ELSE IERR = 1 END IF RETURN END pywcs-1.12/wcslib/pgsbox/pgcrvl.f0000644001153600020070000000360712310355626021105 0ustar cslocumSTSCI\science00000000000000*======================================================================= * PGSBOX 4.10 *----------------------------------------------------------------------- * * ATTENTION! * ---------- * * PGCRVL is defunct. * * Do not use this routine - use PGSBOX instead. * --------------------------------------------- * * What remains here is a driver for the more general PGSBOX routine * which is not based on pixel coordinates. * * This residue of PGCRVL exists mainly for backwards compatibility. * PGCRVL's old AXEN argument is here translated into the BLC and TRC * arguments required by PGSBOX. * * New applications should use PGSBOX directly. * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: pgcrvl.f,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *======================================================================= SUBROUTINE PGCRVL (AXEN, IDENTS, OPT, LABCTL, LABDEN, CI, GCODE, : TIKLEN, NG1, GRID1, NG2, GRID2, DOEQ, NLFUNC, NLC, NLI, NLD, : NLCPRM, NLIPRM, NLDPRM, NC, IC, CACHE, IERR) *----------------------------------------------------------------------- LOGICAL DOEQ INTEGER AXEN(2), CI(7), GCODE(2), IC, IERR, LABCTL, LABDEN, NC, : NG1, NG2, NLC, NLD, NLI, NLIPRM(NLI) REAL BLC(2), TRC(2) DOUBLE PRECISION CACHE(4,0:NC), GRID1(0:NG1), GRID2(0:NG2), : NLDPRM(NLD), TIKLEN CHARACTER IDENTS(3)*(*), NLCPRM(NLC)*1, OPT(2)*(*) EXTERNAL NLFUNC *----------------------------------------------------------------------- BLC(1) = 0.5 BLC(2) = 0.5 TRC(1) = AXEN(1) + 0.5 TRC(2) = AXEN(2) + 0.5 CALL PGSBOX (BLC, TRC, IDENTS, OPT, LABCTL, LABDEN, CI, GCODE, : TIKLEN, NG1, GRID1, NG2, GRID2, DOEQ, NLFUNC, NLC, NLI, NLD, : NLCPRM, NLIPRM, NLDPRM, NC, IC, CACHE, IERR) RETURN END pywcs-1.12/wcslib/pgsbox/pgsbox.f0000644001153600020070000025560212310355626021116 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * PGSBOX 4.10 - draw curvilinear coordinate axes for PGPLOT. * Copyright (C) 1997-2012, Mark Calabretta * * This file is part of PGSBOX. * * PGSBOX is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PGSBOX is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with PGSBOX. If not, see http://www.gnu.org/licenses. * * Correspondence concerning PGSBOX may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: pgsbox.f,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *======================================================================= * * PGSBOX draws and labels a curvilinear coordinate grid. The caller * must provide a separate external function, NLFUNC, to define the * non-linear coordinate transformation. * * PGLBOX, a simplified ENTRY point to PGSBOX, has been provided for * drawing simple linear axes without the need to specify NLFUNC. * PGLBOX allows simplified access to formatting control for labelling * world coordinate axes that is not provided by the standard PGPLOT * routines, PGBOX or PGTBOX. PGLBOX uses the world coordinate range * set by a prior call to PGSWIN and omits the following arguments: * * BLC, TRC, NLFUNC, NLC, NLI, NLD, NLCPRM, NLIPRM, NLDPRM * * The remaining arguments are specified in the same order as PGSBOX. * * Given: * BLC R(2) Cartesian coordinates of the bottom left-hand * TRC R(2) corner and top right-hand corner of the frame. * Any convenient Cartesian system may be used in * conjunction with the non-linear transformation * function, NLFUNC, described below. * * For example, FITS images have pixel coordinate * (1,1) at the centre of the pixel in the bottom * left-hand corner. Thus it would be * appropriate to set BLC to (0.5,0.5) and TRC to * (NAXIS1+0.5, NAXIS2+0.5). * * IDENTS C(3)*(*) Identification strings: * 1: Name of the first world coordinate * element used for axis labelling. * 2: Name of the second world coordinate. * 3: Title, written at top. * * OPT C(2)*(*) Formatting control for the world coordinates, * used for axis labelling (see notes 1 and 2): * ' ': plain numeric * 'A': angle in degrees expressed in decimal * notation normalized in the range [0,360). * 'B': as 'A' but normalized in the range * (-180,180]. * 'C': as 'A' but unnormalized. * 'D': angle in degrees expressed in sexagesimal * notation, DD^MM'SS".S, normalized in the * range [0,360). * 'E': as 'D' but normalized in the range * (-180,180]. * 'F': as 'D' but unnormalized. * 'G': angle in degrees expressed in hms * notation, HHhMMmSSs.S, normalized in the * range [0,24) hours. * 'H': as 'G' but normalized in the range * (-12,12] hours. * 'I': as 'G' but unnormalized. * 'L': logarithmic (see note 2) * 'T': time in hours expressed as HH:MM:SS.S * 'Y': Modified Julian Date to be expressed as * a Gregorian calendar date, YYYY/MM/DD. * (MJD = JD - 2400000.5.) * * For the angular types, NLFUNC is assumed to * return the angle in degrees whereupon it will * be formatted for display in the specified way. * For example, an angle of -417.2958 degrees * (returned by NLFUNC): * * 'A': 302^.7042 * 'B': -57^.2958 * 'C': -417^.2958 * 'D': 302^42'15" * 'E': -57^17'45" * 'F': -417^17'45" * 'H': 20h10m49s * 'I': -3h49m11s * 'J': -27h49m11s * * These are properly superscripted. * * LABCTL I Decimal encoded grid labelling control: * -1: Accumulate information on grid labels * (see note 3) but do not write them. * 0: Let PGSBOX decide what edges to label. * 1: Label bottom of frame with the first * world coordinate. * 2: Label bottom of frame with the second * world coordinate. * 10: ... left side of frame. * 20: ... left side of frame. * 100: ... top of frame. * 200: ... top of frame. * 1000: ... right side of frame. * 2000: ... right side of frame. * 10000: Write labels from information * accumulated in previous calls without * drawing grid lines or tick marks. * * LABCTL = 0 usually gets what you want. * LABCTL = 3333 labels all sides with both world * coordinates. * * LABDEN I Decimal encoded labelling density control for * use where PGSBOX is called upon to determine a * suitable grid spacing (e.g. via NG1 = 0, * GRID1(0) = 0). LABDEN = 100*D2 + D1 where * D1, and D2 are the approximate number of grid * lines for the first and second world * coordinate. LABDEN = 0 is effectively the same * as LABDEN = 808. * * CI I(7) Table of predefined colours established by * calls to PGSCR. This is used to control the * colour used for different parts of the plot. * CI table entries are used as follows: * * world * coordinate * Index usage element * ----- -------------- ---------- * 1 grid lines 1 * 2 grid lines 2 * 3 numeric labels 1 * 4 numeric labels 2 * 5 axis annotation 1 * 6 axis annotation 2 * 7 title - * * For example, CI(3) is used for numeric labels * for the first world coordinate. * * Colour selection is disabled for component J * if CI(J) < 0. * * GCODE(2) I Code for the type of grid to draw for each * world coordinate: * 0: No grid or tick marks. * 1: Tick marks (on all edges). * 2: Full coordinate grid. * * Tick marks can be restricted to particular * edges of the frame; a negative GCODE is * interpreted as a decimal encoded control * variable: * -1: bottom * -10: left * -100: top * -1000: right * * The digit scales the basic tick length. For * example, GCODE(1) = -102 restricts tick marks * for the first world coordinate to the bottom * and top edges of the frame. Those on the * bottom will be twice the length specified by * TIKLEN. * * TIKLEN D Tick length, in mm. Negative values produce * outside tick marks. * * NG1 I Upper array index for GRID1. * * GRID1 D(0:NG1) Grid values in WORLD(1) in the same units as * returned by NLFUNC. * * If NG1 is zero, then * a: if GRID1(0) is greater than zero it * defines a uniform grid spacing. * b: if GRID1(0) is zero a suitable spacing * will be determined (see LABDEN). * c: if GRID1(0) is less than zero then no * grid lines will be drawn. * * If NG1 is greater than zero, then GRID1(0) is * ignored. * * NG2 I Upper array index for GRID2. * * GRID2 D(0:NG2) Grid values in WORLD(2) in the same units as * returned by NLFUNC, interpreted the same way * as GRID1. * * DOEQ L If NG1 = NG2 = 0, and GRID1(0) = 0D0 and/or * GRID2(0) = 0D0, then choose the same grid * spacing for each world coordinate. * * NLFUNC Ext Non-linear coordinate function, see below. * * NLC I Number of elements in NLCPRM (must be >0). * * NLI I Number of elements in NLIPRM (must be >0). * * NLD I Number of elements in NLDPRM (must be >0). * * Given and/or returned: * NLCPRM C(NLC)*1 Character coefficients for NLFUNC. * * NLIPRM I(NLI) Integer coefficients for NLFUNC. * * NLDPRM D(NLD) Double precision coefficients for NLFUNC. * * NC I Upper array index for CACHE (see note 3). * * IC I Current number of entries in the CACHE table. * Should be set to -1 on the first call to * PGSBOX (see note 3). * * CACHE D(4,0:NC) Table of points where the tick marks or grid * lines cross the frame (see note 3). * 1: Frame segment * 1: bottom * 2: left * 3: top * 4: right * 2: X or Y-Cartesian coordinate. * 3: World coordinate element (1 or 2). * 4: Value. * * CACHE(,0) is used to cache the extrema of the * coordinate values between calls. CACHE(1,NC-1) * is also used to store related information. * * CACHE(,NC) will contain the margin widths in * Cartesian coordinates when the labels are * produced (i.e. the same Cartesian system used * for BLC and TRC). * * Returned: * IERR I Status return value: * 0: Success * 1: Initialization error * 2: Invalid coordinate system * 3: Cache overflow (see note 3). * * Notes: * 1: Where a logarithmic world coordinate type is indicated PGSBOX * chooses grid lines and labels on the basis that the value * returned by NLFUNC is a base 10 logarithm. PGSBOX does not * itself take logarithms or antilogarithms. For example, if the * range of values returned by NLFUNC were 0.9 - 2.5, then PGSBOX * would draw a subset of the following set of grid lines and * labels: * * value label * ------------------ ----- * 0.9031 = log10(8) 8 * 0.9542 = log10(9) 9 * 1.0000 = log10(10) 10**1 * 1.3010 = log10(20) 2 * 1.4771 = log10(30) 3 * 1.6021 = log10(40) 4 * 1.6990 = log10(50) 5 * 1.7782 = log10(60) 6 * 1.8451 = log10(70) 7 * 1.9031 = log10(80) 8 * 1.9542 = log10(90) 9 * 2.0000 = log10(100) 10**2 * 2.3010 = log10(200) 2 * 2.4771 = log10(300) 3 * * The subset chosen depends on the coordinate increment as * specified by the caller (e.g. via NG1 = 0, GRID1(0) > 0) or as * deduced by PGSBOX from the required density of grid lines * specified in the LABDEN argument. The selection is made * according to the following table: * * increment grid lines * (0.00,0.12] 1, 2, 3, 4, 5, 6, 7, 8, 9 * (0.12,0.18] 1, 2, 3, 4, 5, 7 * (0.18,0.23] 1, 2, 3, 5, 7 * (0.23,0.28] 1, 2, 3, 5 * (0.28,0.40] 1, 2, 5 * (0.40,0.70] 1, 3 * (0.70,1.00] 1 * * For increments greater than 1 the nearest integer is used. * * 2: PGSBOX will attempt to handle discontinuities in angle, such as * may occur when cycling through 360 degrees, wherever the * discontinuity may occur, for example * * 359 -> 0 -> 1 * * or * * 179 -> 180 -> -179 * * Only single cycles are detected, so the sequence * * -360 -> 0 -> ... -> 359 -> 0 -> ... -> 359 * * would not be handled properly. In such cases NLFUNC should be * changed to return a normalized angle, or else a continuous * sequence. * * 3: PGSBOX maintains a table of axis crossings, CACHE, in which it * stores information used for axis labelling. The caller need not * normally be concerned about the use of this table other than to * provide sufficient space. Typically, NC = 256 should be enough; * if not, IERR = 3 will be returned. * * However, a coordinate grid may be produced via multiple calls to * PGSBOX with deferment of axis labelling. This might be done to * change the pen colour and/or thickness for different sets of * grid lines. The table accumulates information from each * successive call until the labels are produced. The table index, * IC, may be reset to zero by the caller to discard the * information collected. * * The extrema of the world coordinate elements are stored in * CACHE(,0). When a coordinate grid is plotted with multiple * calls to PGSBOX the initial call should always have IC set to -1 * to signal that PGSBOX needs to determine the extrema. On * subsequent calls with IC non-negative PGSBOX uses the extrema * cached from the first call. This can speed up execution * considerably. * *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * The curvilinear coordinate grid is defined by external function * NLFUNC whose interface is defined as follows: * * Given: * OPCODE I Transformation code: * +2: Compute a set of Cartesian coordinates * that describe a path between this and * the previous pair of world coordinates * remembered from the last call with * OPCODE = +1 or +2. Usually only takes * a single step unless traversing a * discontinuity or some other * irregularity (see explanation below). * +1: Compute Cartesian coordinates from world * coordinates. * 0: Initialize. * -1: Compute world coordinates from Cartesian * coordinates. * * N.B. NLFUNC must not change the input * coordinates; that is the world coordinates for * OPCODEs = +2 and +1, or the Cartesian * coordinates for OPCODE = -1. * * NLC I Number of elements in NLCPRM (must be >0). * * NLI I Number of elements in NLIPRM (must be >0). * * NLD I Number of elements in NLDPRM (must be >0). * * Given and/or returned: * NLCPRM C(NLC)*1 Character array. * * NLIPRM I(NLI) Integer coefficients. * * NLDPRM D(NLD) Double precision coefficients. * * WORLD D(2) World coordinates. Given if OPCODE > 0, * returned if OPCODE < 0. * * XY D(2) Cartesian coordinates. Given if OPCODE < 0, * returned if OPCODE > 0. * * CONTRL I Control flag for OPCODE = +2: * 0: Normal state. * 1: Force PGSBOX to flush its plotting buffer * and call NLFUNC again with the same world * coordinates. * 2: Force PGSBOX to call NLFUNC again with * the same world coordinates (without * flushing its plotting buffer). * * CONTXT D(20) Context elements for OPCODE = +2. * * Returned: * IERR I Status return value: * 0: Success. * 1: Invalid parameters. * 2: Invalid world coordinate. * 3: Invalid Cartesian coordinate. * * The following status returns are recognized for * opcodes +2 and +1 * -1: Accept the returned (x,y) coordinates but * do not consider this as one end of a * crossing segment for labelling world * coordinate 1. * -2: Ditto for world coordinate 2. * -3: Ditto for world coordinates 1 and 2. * * PGSBOX passes its NLCPRM, NLIPRM, and NLDPRM adjustable size array * arguments of length NLC, NLI, and NLD to NLFUNC without * modification. Comments within NLFUNC should specify the parameters * it wants passed to it via these arrays. * * PGSBOX first calls NLFUNC with OPCODE = 0 to cause it to initialize * its work arrays (if necessary). It then uses OPCODE = -1 to * determine the range of world coordinate values. It anchors the * start of each coordinate grid line with a call with OPCODE = +1, and * then tracks it with OPCODE = +2. * * The CONTXT array is also passed to NLFUNC without modification to * allow it to preserve state information between calls for OPCODE = 2. * In particular, NLFUNC can use this to detect discontinuities in the * grid lines. * * The CONTRL argument is provided so that NLFUNC can force PGSBOX to * call it again with or without flushing its plotting buffer. This * may be needed when plotting a grid line through a discontinuity. * PGSBOX does not modify CONTRL. * * Notes: * 1: NLFUNC must not change the input coordinates; that is the world * coordinates for OPCODEs = +1 and +2, or the Cartesian coordinates * for OPCODE = -1. * * 2: NLFUNC must define a single-valued function, that is, each * Cartesian coordinate (x,y) must map to a unique world coordinate * pair (xi,eta). * * 3: Notwithstanding the fact that PGSBOX declares NLCPRM, NLIPRM, * and NLDPRM as single dimension arrays of length NLC, NLI, and * NLD, NLFUNC may treat these as higher-dimensional arrays, for * example, NLDPRM(2,NLD). (The FORTRAN standard requires that * only the last dimension is adjustable.) * *======================================================================= SUBROUTINE PGSBOX (BLC_, TRC_, IDENTS, OPT, LABCTL, LABDEN, CI, : GCODE, TIKLEN, NG1, GRID1, NG2, GRID2, DOEQ, NLFUNC, NLC, NLI, : NLD, NLCPRM, NLIPRM, NLDPRM, NC, IC, CACHE, IERR) *----------------------------------------------------------------------- INTEGER BUFSIZ PARAMETER (BUFSIZ = 2048) LOGICAL DOEDGE, DOEQ, DOLBOX, FULLSM, GETEND, INSIDE, ISANGL(2), : LABLOK, MAJOR, OVERFL, PREVIN INTEGER CI(7), CI0, CJ(7), CONTRL, DENS(2), FSEG, GCODE(2), IC, : ID, IERR, IM, ISTEP, IW0, IWJ, IWK, IX, IY, IYPREV, J, : K, KX, L, LABCTL, LABDEN, LDIV(2), LTABL(6,2:6), NC, : NG(2), NG1, NG2, NLC, NLD, NLI, NLIPRM(NLI), NP, : NSTEP(2), NWJ, NX, NY, TCODE(2,4) REAL BLC(2), BLC_(2), S, TRC(2), TRC_(2), WXY(4), X1, X2, : XPOINT, XR(BUFSIZ), XSCL, XSPAN, XTOL, XVP1, XVP2, : Y1, Y2, YR(BUFSIZ), YSCL, YSPAN, YTOL, YVP1, YVP2 DOUBLE PRECISION CONTXT(20), CACHE(4,0:NC), DW(2), DX, DY, FACT, : G0(2), GSTEP(2), GRID1(0:NG1), GRID2(0:NG2), : NLDPRM(NLD), STEP, SW(2), TIKLEN, TMP, VMAX(2,2), : VMIN(2,2), W1PREV, W1X0, W2PREV, W2X0, WJUMP, WMAX(2), : WMIN(2), WORLD(9), XY(9) CHARACTER FTYPE(2), IDENTS(3)*(*), NLCPRM(NLC)*1, OPT(2)*(*) EXTERNAL NLFUNC * Approximate number of grid lines for each coordinate. INTEGER DENS0 PARAMETER (DENS0 = 8) * Double precision round-off tolerance. DOUBLE PRECISION TOL PARAMETER (TOL = 1D-8) * Number of steps per grid line. DATA NSTEP /80, 80/ * Table of logarithmic grid values. DATA LTABL /3, 10, 0, 0, 0, 0, : 2, 5, 10, 0, 0, 0, : 2, 3, 5, 10, 0, 0, : 2, 3, 5, 7, 10, 0, : 2, 3, 4, 5, 7, 10/ * These are to stop compiler messages about uninitialized variables. DATA IW0 /0/ DATA LABLOK, PREVIN /2 * .FALSE./ DATA G0 /2 * 0D0/ DATA W1X0, W1PREV, W2X0, W2PREV /4 * 0D0/ DATA WORLD, XY /9 * 0D0, 9 * 0D0/ *----------------------------------------------------------------------- * Initialize. DOLBOX = .FALSE. CALL NLFUNC (0, NLC, NLI, NLD, NLCPRM, NLIPRM, NLDPRM, WORLD, : XY, CONTRL, CONTXT, IERR) * Quick return for now. IF (IERR.NE.0) THEN IERR = 1 RETURN END IF BLC(1) = BLC_(1) BLC(2) = BLC_(2) TRC(1) = TRC_(1) TRC(2) = TRC_(2) DOEDGE = GCODE(1).NE.2 .AND. GCODE(2).NE.2 *----------------------------------------------------------------------- GO TO 10 ENTRY PGLBOX (IDENTS, OPT, LABCTL, LABDEN, CI, GCODE, TIKLEN, NG1, : GRID1, NG2, GRID2, DOEQ, NC, IC, CACHE, IERR) DOLBOX = .TRUE. BLC(1) = 0.0 BLC(2) = 0.0 TRC(1) = 1.0 TRC(2) = 1.0 DOEDGE = .TRUE. CONTRL = 0 IERR = 0 10 CONTINUE *----------------------------------------------------------------------- IF (NC.LT.1) THEN IERR = 3 RETURN END IF NG(1) = NG1 NG(2) = NG2 FTYPE(1) = OPT(1)(1:1) FTYPE(2) = OPT(2)(1:1) * Extend the PGPLOT window and rescale it. CALL PGQVP (0, XVP1, XVP2, YVP1, YVP2) CALL PGQWIN (WXY(1), WXY(2), WXY(3), WXY(4)) CALL PGSVP (0.0, 1.0, 0.0, 1.0) XSCL = (TRC(1)-BLC(1))/(XVP2-XVP1) YSCL = (TRC(2)-BLC(2))/(YVP2-YVP1) CALL PGSWIN (BLC(1)-XSCL*XVP1, TRC(1)+XSCL*(1.0-XVP2), : BLC(2)-YSCL*YVP1, TRC(2)+YSCL*(1.0-YVP2)) * Determine initial colour and set colour indices. CALL PGQCI (CI0) DO 20 J = 1, 7 IF (CI(J).GE.0) THEN CJ(J) = CI(J) ELSE CJ(J) = CI0 END IF 20 CONTINUE * Labels only? IF (LABCTL.GE.10000) GO TO 130 XSPAN = WXY(2) - WXY(1) YSPAN = WXY(4) - WXY(3) XTOL = XSPAN*TOL YTOL = YSPAN*TOL * Find world coordinate ranges: * WMIN(1:2) ...lower limit of each world coordinate element. * WMAX(1:2) ...upper limit of each world coordinate element. * GSTEP(1:2) ...spacing between grid lines for each element. * DW(1:2) ...span from WMIN to WMAX. * SW(1:2) ...increment in world coordinate between plotting steps. * NSTEP(1:2) ...number of plotting steps between WMIN and WMAX. FULLSM = .FALSE. IF (IC.GE.0 .AND. IC.LT.NC-1) FULLSM = CACHE(1,NC-1).EQ.1D0 IF (IC.GE.0 .AND. (FULLSM .OR. DOEDGE)) THEN * Use extrema cached from a previous call. WMIN(1) = CACHE(1,0) WMAX(1) = CACHE(2,0) WMIN(2) = CACHE(3,0) WMAX(2) = CACHE(4,0) ELSE * Do a coarse search to find approximate ranges. WMIN(1) = 1D99 WMAX(1) = -1D99 WMIN(2) = 1D99 WMAX(2) = -1D99 * Need to consider cycles in angle through 360 degrees. ISANGL(1) = INDEX('ABCDEFGHI',FTYPE(1)).NE.0 ISANGL(2) = INDEX('ABCDEFGHI',FTYPE(2)).NE.0 VMIN(1,1) = 1D99 VMIN(1,2) = 1D99 VMAX(1,1) = -1D99 VMAX(1,2) = -1D99 VMIN(2,1) = 1D99 VMIN(2,2) = 1D99 VMAX(2,1) = -1D99 VMAX(2,2) = -1D99 * Sample coordinates on a 50 x 50 grid. NX = 50 NY = 50 DX = DBLE(TRC(1)-BLC(1))/NX DY = DBLE(TRC(2)-BLC(2))/NY K = 0 IYPREV = -1 DO 40 IY = 0, NY XY(2) = BLC(2) + IY*DY * Sample the edges only? KX = 1 IF (DOEDGE) THEN IF (IY.NE.0 .AND. IY.NE.NY) KX = NX END IF DO 30 IX = 0, NX, KX XY(1) = BLC(1) + IX*DX IF (DOLBOX) THEN WORLD(1) = WXY(1) + XY(1)*XSPAN WORLD(2) = WXY(3) + XY(2)*YSPAN ELSE CALL NLFUNC (-1, NLC, NLI, NLD, NLCPRM, NLIPRM, : NLDPRM, WORLD, XY, CONTRL, CONTXT, IERR) END IF IF (IERR.EQ.0) THEN K = K + 1 IF (ISANGL(1)) THEN IF (K.EQ.1) W1X0 = WORLD(1) IF (IY.NE.IYPREV) THEN W1PREV = W1X0 W1X0 = WORLD(1) END IF * Iron out jumps. WJUMP = WORLD(1) - W1PREV IF (ABS(WJUMP).GT.180D0) THEN WJUMP = WJUMP + SIGN(180D0,WJUMP) WJUMP = 360D0*INT(WJUMP/360D0) WORLD(1) = WORLD(1) - WJUMP END IF W1PREV = WORLD(1) IYPREV = IY END IF IF (ISANGL(2)) THEN IF (K.EQ.1) W2X0 = WORLD(2) IF (IY.NE.IYPREV) THEN W2PREV = W2X0 W2X0 = WORLD(2) END IF * Iron out jumps. WJUMP = WORLD(2) - W2PREV IF (ABS(WJUMP).GT.180D0) THEN WJUMP = WJUMP + SIGN(180D0,WJUMP) WJUMP = 360D0*INT(WJUMP/360D0) WORLD(2) = WORLD(2) - WJUMP END IF W2PREV = WORLD(2) IYPREV = IY END IF IF (WORLD(1).LT.WMIN(1)) WMIN(1) = WORLD(1) IF (WORLD(1).GT.WMAX(1)) WMAX(1) = WORLD(1) IF (WORLD(2).LT.WMIN(2)) WMIN(2) = WORLD(2) IF (WORLD(2).GT.WMAX(2)) WMAX(2) = WORLD(2) IF (ISANGL(1)) THEN * Normalize to the range [0,360). WORLD(1) = MOD(WORLD(1), 360D0) IF (WORLD(1).LT.0D0) WORLD(1) = WORLD(1) + 360D0 IF (WORLD(1).LT.VMIN(1,1)) VMIN(1,1) = WORLD(1) IF (WORLD(1).GT.VMAX(1,1)) VMAX(1,1) = WORLD(1) * Normalize to the range (-180,180]. IF (WORLD(1).GT.180D0) WORLD(1) = WORLD(1) - 360D0 IF (WORLD(1).LT.VMIN(1,2)) VMIN(1,2) = WORLD(1) IF (WORLD(1).GT.VMAX(1,2)) VMAX(1,2) = WORLD(1) END IF IF (ISANGL(2)) THEN * Normalize to the range [0,360). WORLD(2) = MOD(WORLD(2), 360D0) IF (WORLD(2).LT.0D0) WORLD(2) = WORLD(2) + 360D0 IF (WORLD(2).LT.VMIN(2,1)) VMIN(2,1) = WORLD(2) IF (WORLD(2).GT.VMAX(2,1)) VMAX(2,1) = WORLD(2) * Normalize to the range (-180,180]. IF (WORLD(2).GT.180D0) WORLD(2) = WORLD(2) - 360D0 IF (WORLD(2).LT.VMIN(2,2)) VMIN(2,2) = WORLD(2) IF (WORLD(2).GT.VMAX(2,2)) VMAX(2,2) = WORLD(2) END IF END IF 30 CONTINUE 40 CONTINUE IF (K.EQ.0) THEN * No valid coordinates found within the frame. IERR = 2 GO TO 999 END IF * Check for cycles in angle. DO 50 J = 1, 2 IF (ISANGL(J)) THEN IF (WMAX(J)-WMIN(J).LT.360D0 .AND. : WMAX(J)-WMIN(J).GT.VMAX(J,1)-VMIN(J,1)+TOL) THEN * Must have a cycle, preserve the sign. IF (WMAX(J).GE.0D0) THEN WMIN(J) = VMIN(J,1) WMAX(J) = VMAX(J,1) ELSE WMIN(J) = VMIN(J,1) - 360D0 WMAX(J) = VMAX(J,1) - 360D0 END IF END IF IF (WMAX(J)-WMIN(J).LT.360D0 .AND. : WMAX(J)-WMIN(J).GT.VMAX(J,2)-VMIN(J,2)+TOL) THEN * Must have a cycle, preserve the sign. IF (WMAX(J).GE.0D0) THEN IF (VMAX(J,2).GE.0D0) THEN WMIN(J) = VMIN(J,2) WMAX(J) = VMAX(J,2) ELSE WMIN(J) = VMIN(J,2) + 360D0 WMAX(J) = VMAX(J,2) + 360D0 END IF ELSE IF (VMAX(J,2).LT.0D0) THEN WMIN(J) = VMIN(J,2) WMAX(J) = VMAX(J,2) ELSE WMIN(J) = VMIN(J,2) - 360D0 WMAX(J) = VMAX(J,2) - 360D0 END IF END IF END IF END IF 50 CONTINUE * Cache extrema for subsequent calls. CACHE(1,0) = WMIN(1) CACHE(2,0) = WMAX(1) CACHE(3,0) = WMIN(2) CACHE(4,0) = WMAX(2) * Was full sampling done? IF (DOEDGE) THEN CACHE(1,NC-1) = 0D0 ELSE CACHE(1,NC-1) = 1D0 END IF IC = 0 END IF * Choose an appropriate grid spacing. IF (LABDEN.GT.0) THEN * User specified grid density. DENS(1) = MOD(LABDEN,100) DENS(2) = LABDEN/100 IF (DENS(1).EQ.0) DENS(1) = DENS0 IF (DENS(2).EQ.0) DENS(2) = DENS0 ELSE * Default grid density. DENS(1) = DENS0 DENS(2) = DENS0 END IF IF (NG(1).EQ.0) G0(1) = GRID1(0) IF (NG(2).EQ.0) G0(2) = GRID2(0) DO 60 J = 1, 2 IF (J.EQ.1) THEN K = 2 ELSE K = 1 END IF IF (NG(J).EQ.0 .AND. G0(J).LT.0D0) THEN * Defeat grid lines and tick marks. GCODE(J) = 0 END IF IF (NG(J).EQ.0 .AND. G0(J).GT.0D0) THEN * User-specified, directly. GSTEP(J) = G0(J) ELSE IF (DOEQ .AND. NG(K).EQ.0 .AND. G0(K).GT.0D0) THEN * User-specified, indirectly. GSTEP(J) = G0(K) ELSE * Left to us to choose. Even if grid lines are not drawn for * coordinate J, i.e. NG(J) = 0 and G0(J) < 0, GSTEP(J) is still * needed because it is used to deduce SW(J) which is used for * drawing grid lines for the other coordinate. DW(J) = WMAX(J) - WMIN(J) STEP = DW(J)/DENS(J) FACT = 1D0 IF (INDEX('GHI',FTYPE(J)).NE.0) THEN * Rescale degrees to hours. FACT = 1D0/15D0 STEP = STEP*FACT ELSE IF (FTYPE(J).EQ.'Y' .AND. STEP.LT.0.5D0) THEN * Calendar increment of less than 12h; use time format. FTYPE(J) = 'y' * Rescale days to hours. FACT = 24D0 STEP = STEP*FACT END IF IF (INDEX('ABCDEF',FTYPE(J)).NE.0 .AND. STEP.GE.1D0) THEN * Angle with multi-degree increment. IF (STEP.LT.1.5D0) THEN STEP = 1D0 ELSE IF (STEP.LT.3D0) THEN STEP = 2D0 ELSE IF (STEP.LT.7D0) THEN STEP = 5D0 ELSE IF (STEP.LT.12D0) THEN STEP = 10D0 ELSE IF (STEP.LT.20D0) THEN STEP = 15D0 ELSE IF (STEP.LT.40D0) THEN STEP = 30D0 ELSE IF (STEP.LT.70D0) THEN STEP = 45D0 ELSE IF (STEP.LT.120D0) THEN STEP = 90D0 ELSE IF (STEP.LT.270D0) THEN STEP = 180D0 ELSE IF (STEP.LT.520D0) THEN STEP = 360D0 ELSE STEP = 360D0*INT(STEP/360D0 + 0.5) END IF ELSE IF (INDEX('GHITy',FTYPE(J)).NE.0 .AND. : STEP.GE.1D0) THEN * Angle or time in hms format with multi-hour increment. IF (STEP.LT.1.5D0) THEN STEP = 1D0 ELSE IF (STEP.LT.2.5D0) THEN STEP = 2D0 ELSE IF (STEP.LT.3.5D0) THEN STEP = 3D0 ELSE IF (STEP.LT.5D0) THEN STEP = 4D0 ELSE IF (STEP.LT.7D0) THEN STEP = 6D0 ELSE IF (STEP.LT.10D0) THEN STEP = 8D0 ELSE IF (STEP.LT.15D0) THEN STEP = 12D0 ELSE IF (STEP.LT.21D0) THEN STEP = 18D0 ELSE IF (STEP.LT.36D0) THEN STEP = 24D0 ELSE STEP = 24D0*INT(STEP/24D0 + 0.5) END IF STEP = STEP/FACT ELSE IF (INDEX('DEFGHITy',FTYPE(J)).NE.0 .AND. : STEP.LT.1D0) THEN * Angle or time in sexagesimal format with sub-degree/hour * increment. FACT = FACT*60D0 STEP = STEP*60D0 IF (STEP.LT.1D0) THEN * Sub-minute increment. FACT = FACT*60D0 STEP = STEP*60D0 END IF IF (STEP.LT.1D0) THEN * Sub-second increment. TMP = 10D0**(INT(LOG10(STEP))-1) IF (1.5*TMP.GE.STEP) THEN STEP = TMP ELSE IF (3D0*TMP.GE.STEP) THEN STEP = 2D0*TMP ELSE IF (7D0*TMP.GE.STEP) THEN STEP = 5D0*TMP ELSE STEP = 10D0*TMP END IF END IF END IF ELSE IF (STEP.LT.1.5D0) THEN STEP = 1D0 ELSE IF (STEP.LT.2.5D0) THEN STEP = 2D0 ELSE IF (STEP.LT.3.5D0) THEN STEP = 3D0 ELSE IF (STEP.LT.4.5D0) THEN STEP = 4D0 ELSE IF (STEP.LT.5.5D0) THEN STEP = 5D0 ELSE IF (STEP.LT.8D0) THEN STEP = 6D0 ELSE IF (STEP.LT.11D0) THEN STEP = 10D0 ELSE IF (STEP.LT.14D0) THEN STEP = 12D0 ELSE IF (STEP.LT.18D0) THEN STEP = 15D0 ELSE IF (STEP.LT.25D0) THEN STEP = 20D0 ELSE IF (STEP.LT.45D0) THEN STEP = 30D0 ELSE STEP = 60D0 END IF END IF STEP = STEP/FACT ELSE IF (FTYPE(J).EQ.'Y') THEN * Calendar axis: use coded steps. IF (STEP.LT.15D0) THEN * Timespan of a few months; use multi-day increments. STEP = ANINT(STEP) IF (STEP.LT.1D0) THEN STEP = 1D0 ELSE IF (STEP.GT.9D0) THEN * Fortnightly. STEP = 14D0 ELSE IF (STEP.GT.4D0) THEN * Weekly. STEP = 7D0 END IF ELSE IF (STEP.LT.270D0) THEN * Timespan of a few years; use multi-month increments. STEP = ANINT(STEP/30.44D0) IF (STEP.LT.1.5D0) THEN STEP = 1D0 ELSE IF (STEP.LT.2.5D0) THEN STEP = 2D0 ELSE IF (STEP.LT.3.5D0) THEN STEP = 3D0 ELSE IF (STEP.LT.4.5D0) THEN STEP = 4D0 ELSE STEP = 6D0 END IF * Coding for multi-month increments. STEP = 100D0*STEP ELSE * Multi-year increments. STEP = ANINT(DW(J)/DENS(J)/365.25D0) IF (STEP.LT.1D0) THEN STEP = 1D0 ELSE TMP = 10D0**INT(LOG10(STEP)) IF (1.5D0*TMP.GE.STEP) THEN STEP = TMP ELSE IF (3D0*TMP.GE.STEP) THEN STEP = 2D0*TMP ELSE IF (7D0*TMP.GE.STEP) THEN STEP = 5D0*TMP ELSE STEP = 10D0*TMP END IF END IF END IF END IF * Coding for multi-year increments. STEP = 10000D0*STEP END IF ELSE * Just numbers. TMP = 10D0**INT(LOG10(STEP)) IF (STEP.LT.1D0) TMP = TMP/10D0 IF (1.5D0*TMP.GE.STEP) THEN STEP = TMP ELSE IF (3D0*TMP.GE.STEP) THEN STEP = 2D0*TMP ELSE IF (7D0*TMP.GE.STEP) THEN STEP = 5D0*TMP ELSE STEP = 10D0*TMP END IF END IF END IF * Adjust the step size for logarithmic values. IF (FTYPE(J).EQ.'L') THEN IF (STEP.GT.0.7D0) THEN LDIV(J) = 1 STEP = NINT(STEP) ELSE IF (STEP.GT.0.4D0) THEN LDIV(J) = 2 ELSE IF (STEP.GT.0.28D0) THEN LDIV(J) = 3 ELSE IF (STEP.GT.0.23D0) THEN LDIV(J) = 4 ELSE IF (STEP.GT.0.18D0) THEN LDIV(J) = 5 ELSE IF (STEP.GT.0.12D0) THEN LDIV(J) = 6 ELSE LDIV(J) = 9 END IF STEP = 1D0/LDIV(J) END IF END IF END IF GSTEP(J) = STEP END IF 60 CONTINUE * Equal grid spacing? IF (DOEQ .AND. NG(1).EQ.0 .AND. NG(2).EQ.0) THEN IF (GRID1(0).EQ.0D0 .AND. GRID2(0).EQ.0D0) THEN GSTEP(1) = MIN(GSTEP(1), GSTEP(2)) GSTEP(2) = GSTEP(1) ELSE IF (GRID1(0).EQ.0D0) THEN GSTEP(1) = GSTEP(2) ELSE IF (GRID2(0).EQ.0D0) THEN GSTEP(2) = GSTEP(1) END IF END IF * Fine tune the end points. DO 70 J = 1, 2 IF (FTYPE(J).EQ.'L') THEN WMIN(J) = AINT(WMIN(J)-1D0) WMAX(J) = AINT(WMAX(J)+1D0) ELSE IF (FTYPE(J).EQ.'Y') THEN * Calendar axis. IF (GSTEP(J).LT.100D0) THEN * Daily increments. WMIN(J) = AINT(WMIN(J)) WMAX(J) = AINT(WMAX(J)+1D0) ELSE * Start on Jan/01. CALL PGMJD (0, WMIN(J), IY, IM, ID) CALL PGMJD (1, WMIN(J), IY, 1, 1) CALL PGMJD (0, WMAX(J), IY, IM, ID) IF (GSTEP(J).LT.10000D0) THEN * Monthly increments. CALL PGMJD (1, WMAX(J), IY, 12, 1) ELSE * Yearly increments. CALL PGMJD (1, WMAX(J), IY+1, 1, 1) END IF END IF ELSE TMP = AINT(WMIN(J)/GSTEP(J))*GSTEP(J) IF (TMP.GE.WMIN(J)) TMP = TMP - GSTEP(J) WMIN(J) = TMP TMP = AINT(WMAX(J)/GSTEP(J))*GSTEP(J) IF (TMP.LE.WMAX(J)) TMP = TMP + GSTEP(J) WMAX(J) = TMP END IF DW(J) = WMAX(J) - WMIN(J) SW(J) = DW(J)/NSTEP(J) * Adjust NSTEP so that SW divides GSTEP. IF (SW(J).LT.GSTEP(J)) THEN SW(J) = GSTEP(J)/ANINT(GSTEP(J)/SW(J)) ELSE SW(J) = GSTEP(J) END IF NSTEP(J) = ANINT(DW(J)/SW(J)) 70 CONTINUE * Draw the grid. * Get absolute scale for tick marks. CALL PGQVP (2, X1, X2, Y1, Y2) XSCL = (X2-X1)/(TRC(1)-BLC(1)) YSCL = (Y2-Y1)/(TRC(2)-BLC(2)) * Decode tick mark control. DO 80 J = 1, 2 IF (GCODE(J).EQ.2) THEN TCODE(J,1) = -1 TCODE(J,2) = -1 TCODE(J,3) = -1 TCODE(J,4) = -1 ELSE IF (GCODE(J).EQ.1) THEN TCODE(J,1) = 1 TCODE(J,2) = 1 TCODE(J,3) = 1 TCODE(J,4) = 1 ELSE IF (GCODE(J).LT.0) THEN K = ABS(GCODE(J)) TCODE(J,1) = MOD(K,10) TCODE(J,2) = MOD(K/10,10) TCODE(J,3) = MOD(K/100,10) TCODE(J,4) = MOD(K/1000,10) ELSE TCODE(J,1) = 0 TCODE(J,2) = 0 TCODE(J,3) = 0 TCODE(J,4) = 0 END IF 80 CONTINUE * Draw each set of grid lines. OVERFL = .FALSE. DO 120 J = 1, 2 IF (GCODE(J).EQ.0) GO TO 120 IF (J.EQ.1) THEN CALL PGSCI (CJ(1)) K = 2 ELSE CALL PGSCI (CJ(2)) K = 1 END IF IF (NG(J).GT.0) THEN NWJ = NG(J) ELSE IF (FTYPE(J).EQ.'Y' .AND. GSTEP(J).GE.100D0) THEN * Calendar axis. CALL PGMJD (0, WMAX(J), IY, IM, ID) IF (GSTEP(J).LT.10000D0) THEN NWJ = 12*IY + IM CALL PGMJD (0, WMIN(J), IY, IM, ID) NWJ = (NWJ - (12*IY + IM))/INT(GSTEP(J)/100D0) ELSE NWJ = IY CALL PGMJD (0, WMIN(J), IY, IM, ID) NWJ = (NWJ - IY)/INT(GSTEP(J)/10000D0) END IF ELSE NWJ = NINT(DW(J)/GSTEP(J)) IW0 = NINT(WMIN(J)/GSTEP(J)) END IF DO 110 IWJ = 0, NWJ MAJOR = .FALSE. * Determine the world coordinate of the grid line. IF (NG(J).GT.0) THEN * User-specified. IF (IWJ.EQ.0) GO TO 110 IF (J.EQ.1) THEN WORLD(1) = GRID1(IWJ) ELSE WORLD(2) = GRID2(IWJ) END IF ELSE * Internally computed. IF (FTYPE(J).EQ.'Y' .AND. GSTEP(J).GE.100D0) THEN * Calendar axis. CALL PGMJD (0, WMIN(J), IY, IM, ID) IF (GSTEP(J).LT.10000D0) THEN IM = IM + IWJ*INT(GSTEP(J)/100D0) CALL PGMJD (1, WORLD(J), IY, IM, ID) ELSE IY = IY + IWJ*INT(GSTEP(J)/10000D0) CALL PGMJD (1, WORLD(J), IY, IM, ID) END IF ELSE WORLD(J) = (IW0 + IWJ)*GSTEP(J) * Logarithmic? IF (FTYPE(J).EQ.'L') THEN TMP = MOD(WORLD(J),1D0) IF (TMP.LT.0D0) TMP = TMP + 1D0 L = NINT(TMP*LDIV(J)) IF (L.EQ.0) THEN * Major tick mark. MAJOR = .TRUE. ELSE * Adjust logarithmic scales. IF (LDIV(J).LE.6) THEN L = LTABL(L,LDIV(J)) ELSE L = L + 1 END IF WORLD(J) = WORLD(J) - TMP + LOG10(DBLE(L)) END IF END IF END IF END IF NP = 0 GETEND = .TRUE. DO 100 IWK = 0, NSTEP(K) WORLD(K) = WMIN(K) + IWK*SW(K) IF (GETEND) THEN * Get end-point context. IF (DOLBOX) THEN XY(1) = (WORLD(1) - WXY(1))/XSPAN XY(2) = (WORLD(2) - WXY(3))/YSPAN ELSE CALL NLFUNC (1, NLC, NLI, NLD, NLCPRM, NLIPRM, : NLDPRM, WORLD, XY, CONTRL, CONTXT, IERR) END IF IF (IERR.LE.0) THEN X1 = REAL(XY(1)) Y1 = REAL(XY(2)) INSIDE = X1.GT.BLC(1) .AND. X1.LT.TRC(1) .AND. : Y1.GT.BLC(2) .AND. Y1.LT.TRC(2) NP = 1 XR(1) = X1 YR(1) = Y1 PREVIN = INSIDE GETEND = .FALSE. LABLOK = IERR.NE.-J .AND. IERR.NE.-3 END IF GO TO 100 END IF DO 90 ISTEP = 1, 1000 IF (DOLBOX) THEN XY(1) = (WORLD(1) - WXY(1))/XSPAN XY(2) = (WORLD(2) - WXY(3))/YSPAN ELSE CALL NLFUNC (2, NLC, NLI, NLD, NLCPRM, NLIPRM, : NLDPRM, WORLD, XY, CONTRL, CONTXT, IERR) END IF IF (IERR.GT.0) THEN * Flush buffer. IF (NP.GT.1) CALL PGLINE(NP, XR, YR) NP = 0 GETEND = .TRUE. GO TO 100 END IF IF (NP.EQ.BUFSIZ) THEN * Recycle buffer. CALL PGLINE(NP, XR, YR) XR(1) = XR(NP) YR(1) = YR(NP) NP = 1 END IF X2 = REAL(XY(1)) Y2 = REAL(XY(2)) INSIDE = X2.GT.BLC(1) .AND. X2.LT.TRC(1) .AND. : Y2.GT.BLC(2) .AND. Y2.LT.TRC(2) IF (.NOT.INSIDE) THEN * For tick marks at the left or right edge. IF ((X2.EQ.BLC(1) .OR. X2.EQ.TRC(1)) .AND. : Y2.GT.BLC(2) .AND. Y2.LT.TRC(2)) THEN INSIDE = X2.EQ.XR(NP) END IF END IF IF (.NOT.INSIDE) THEN * For tick marks at the bottom or top edge. IF ((Y2.EQ.BLC(2) .OR. Y2.EQ.TRC(2)) .AND. : X2.GT.BLC(1) .AND. X2.LT.TRC(1)) THEN INSIDE = Y2.EQ.YR(NP) END IF END IF IF (NP.EQ.0) THEN NP = 1 XR(1) = X2 YR(1) = Y2 ELSE IF (INSIDE) THEN * This point is inside the frame... IF (.NOT.PREVIN) THEN * ...but the previous one was outside. X1 = XR(NP) Y1 = YR(NP) FSEG = 0 XPOINT = 0.0 IF (ABS(X2-X1).GT.XTOL) THEN S = (Y2-Y1)/(X2-X1) IF (XR(NP).LE.BLC(1)) THEN FSEG = 2 XR(NP) = BLC(1) XPOINT = Y1 + (XR(NP) - X1)*S YR(NP) = XPOINT ELSE IF (XR(NP).GE.TRC(1)) THEN FSEG = 4 XR(NP) = TRC(1) XPOINT = Y1 + (XR(NP) - X1)*S YR(NP) = XPOINT END IF END IF IF (ABS(Y2-Y1).GT.YTOL) THEN S = (X2-X1)/(Y2-Y1) IF (YR(NP).LE.BLC(2)) THEN FSEG = 1 YR(NP) = BLC(2) XPOINT = X1 + (YR(NP) - Y1)*S XR(NP) = XPOINT ELSE IF (YR(NP).GE.TRC(2)) THEN FSEG = 3 YR(NP) = TRC(2) XPOINT = X1 + (YR(NP) - Y1)*S XR(NP) = XPOINT END IF END IF IF (FSEG.EQ.0) THEN * The crossing is too oblique. INSIDE = .FALSE. ELSE * Record this crossing point. IF (TCODE(J,FSEG).NE.0 .AND. LABLOK) THEN IF (IC.LT.NC-1) THEN IC = IC + 1 CACHE(1,IC) = FSEG CACHE(2,IC) = XPOINT CACHE(3,IC) = J CACHE(4,IC) = WORLD(J) ELSE * Cache overflow. OVERFL = .TRUE. END IF END IF IF (TCODE(J,FSEG).GT.0) THEN * Just want tick marks. S = (XSCL*(X2-X1))**2 + (YSCL*(Y2-Y1))**2 S = SQRT(S)/TCODE(J,FSEG) IF (MAJOR) S = S/1.5 NP = NP + 1 XR(NP) = XR(NP-1) + (X2-X1)*TIKLEN/S YR(NP) = YR(NP-1) + (Y2-Y1)*TIKLEN/S CALL PGLINE(NP, XR, YR) NP = 1 END IF END IF END IF IF (INSIDE .AND. GCODE(J).EQ.2) THEN * Full grid. NP = NP + 1 END IF XR(NP) = X2 YR(NP) = Y2 ELSE * This point is outside the frame... IF (PREVIN) THEN * ...but the previous one was inside. X1 = XR(NP) Y1 = YR(NP) NP = NP + 1 XR(NP) = X2 YR(NP) = Y2 FSEG = 0 XPOINT = 0.0 IF (ABS(X2-X1).GT.XTOL) THEN S = (Y2-Y1)/(X2-X1) IF (XR(NP).LE.BLC(1)) THEN FSEG = 2 XR(NP) = BLC(1) XPOINT = Y1 + (XR(NP) - X1)*S YR(NP) = XPOINT ELSE IF (XR(NP).GE.TRC(1)) THEN FSEG = 4 XR(NP) = TRC(1) XPOINT = Y1 + (XR(NP) - X1)*S YR(NP) = XPOINT END IF END IF IF (ABS(Y2-Y1).GT.YTOL) THEN S = (X2-X1)/(Y2-Y1) IF (YR(NP).LE.BLC(2)) THEN FSEG = 1 YR(NP) = BLC(2) XPOINT = X1 + (YR(NP) - Y1)*S XR(NP) = XPOINT ELSE IF (YR(NP).GE.TRC(2)) THEN FSEG = 3 YR(NP) = TRC(2) XPOINT = X1 + (YR(NP) - Y1)*S XR(NP) = XPOINT END IF END IF IF (FSEG.EQ.0) THEN * The crossing is too oblique. INSIDE = .TRUE. IF (GCODE(J).EQ.2) THEN * Full grid. NP = NP + 1 END IF XR(NP) = X2 YR(NP) = Y2 ELSE * Record this crossing point. IF (TCODE(J,FSEG).NE.0 .AND. LABLOK) THEN IF (IC.LT.NC-1) THEN IC = IC + 1 CACHE(1,IC) = FSEG CACHE(2,IC) = XPOINT CACHE(3,IC) = J CACHE(4,IC) = WORLD(J) ELSE * Cache overflow. OVERFL = .TRUE. END IF END IF IF (TCODE(J,FSEG).GT.0) THEN * Just want tick marks. X1 = XR(NP) Y1 = YR(NP) X2 = XR(NP-1) Y2 = YR(NP-1) S = (XSCL*(X2-X1))**2 + (YSCL*(Y2-Y1))**2 S = SQRT(S)/TCODE(J,FSEG) IF (MAJOR) S = S/1.5 XR(NP-1) = X1 + (X2-X1)*TIKLEN/S YR(NP-1) = Y1 + (Y2-Y1)*TIKLEN/S END IF * Flush buffer. IF (TCODE(J,FSEG).NE.0) THEN CALL PGLINE(NP, XR, YR) END IF NP = 0 END IF ELSE * The previous point was also outside. XR(NP) = X2 YR(NP) = Y2 END IF END IF END IF PREVIN = INSIDE LABLOK = IERR.NE.-J .AND. IERR.NE.-3 IF (CONTRL.EQ.0) THEN GO TO 100 ELSE IF (CONTRL.EQ.1) THEN * Flush buffer. IF (NP.GT.1) CALL PGLINE(NP, XR, YR) NP = 0 END IF 90 CONTINUE 100 CONTINUE IF (NP.GT.1) CALL PGLINE(NP, XR, YR) 110 CONTINUE 120 CONTINUE IERR = 0 IF (OVERFL) IERR = 3 * Produce axis labels. 130 IF (LABCTL.NE.-1) CALL PGCRLB (BLC, TRC, IDENTS, FTYPE, LABCTL, : CJ, NC, IC, CACHE) * Restore the original viewport, window and pen colour. 999 CALL PGSVP (XVP1, XVP2, YVP1, YVP2) CALL PGSWIN (WXY(1), WXY(2), WXY(3), WXY(4)) CALL PGSCI (CI0) RETURN END *======================================================================= * * PGCRLB is a helper routine for PGSBOX, not meant to be called directly * since it expects the viewport and window to be scaled to the full * extent; it labels a curvilinear coordinate grid. * * Given: * BLC R(2) Cartesian coordinates of the bottom left-hand * corner. * TRC R(2) Cartesian coordinates of the top right-hand * corner. * * IDENTS C(3)*(*) Identification strings (see PGSBOX). * * FTYPE C(2)*1 Axis types, used for axis labelling (see * PGSBOX). * * LABCTL I Decimal encoded grid labelling control (see * PGSBOX). * * CI I(7) Colour table (see PGSBOX). * * Given and/or returned: * NC I Upper array index for CACHE. * * IC I Current number of entries in the CACHE table. * * CACHE D(4,0:NC) Table of points where the tick marks or grid * lines cross the frame (see PGSBOX). * * Author: Mark Calabretta, Australia Telescope National Facility *======================================================================= SUBROUTINE PGCRLB (BLC, TRC, IDENTS, FTYPE, LABCTL, CI, NC, IC, : CACHE) *----------------------------------------------------------------------- LOGICAL ANGLE, DODEG, DOMIN, DOYEAR, LFORCE, SEXA(2), TICKIT INTEGER CI(7), DOLAB(4), EDGE, EDJE, IC, ID, ID2, IM, IM2, : IMAG(2), ITER, IWRLD, IY, IY2, J, JC, K, K1, K2, KWRLD, : L, LABCTL, LD, LM, LMAG(2), LS, LV, M, M1, M2, MM, NC, : NCH, NI(2,0:4), NLAB, NLABS(2,-2:6), NSWAP, PP, : PRVDEG(2), PRVMIN(2), PRVEDG, PRVYR(2), SEXSUP(2), : SKOP(4) REAL ANGL, BLC(2), FJUST, BNDRY(4), OMAG(2), SI(2), TRC(2), : X, XBOX(4), XCH, XL, XW1, XW2, Y, YCH, YBOX(4), YL, YW1, : YW2, Z DOUBLE PRECISION CACHE(4,0:NC), MJD1(2), MJD2(2), TMP, VS CHARACTER ESCAPE*1, EXPONT*20, FMT*8, IDENTS(3)*(*), TEXT*80, : FTYPE(2)*1, TXT(2)*80 DATA ESCAPE /'\\'/ * These are to stop compiler messages about uninitialized variables. DATA DODEG, DOMIN, DOYEAR /3 * .FALSE./ DATA XL, YL /2 * -999.0/ *----------------------------------------------------------------------- * Normalize angular table entries. IF (INDEX('ABDEGH',FTYPE(1)).NE.0 .OR. : INDEX('ABDEGH',FTYPE(2)).NE.0) THEN DO 10 J = 1, IC IWRLD = NINT(CACHE(3,J)) IF (INDEX('ADG', FTYPE(IWRLD)).NE.0) THEN CACHE(4,J) = MOD(CACHE(4,J), 360D0) IF (CACHE(4,J).LT.0D0) CACHE(4,J) = CACHE(4,J) + 360D0 ELSE IF (INDEX('BEH', FTYPE(IWRLD)).NE.0) THEN CACHE(4,J) = MOD(CACHE(4,J), 360D0) IF (CACHE(4,J).LE.-180D0) THEN CACHE(4,J) = CACHE(4,J) + 360D0 ELSE IF (CACHE(4,J).GT.180D0) THEN CACHE(4,J) = CACHE(4,J) - 360D0 END IF END IF IF (INDEX('GHI', FTYPE(IWRLD)).NE.0) THEN * Angle expressed as time. CACHE(4,J) = CACHE(4,J)/15D0 END IF 10 CONTINUE END IF * Reorganize the table entries. * Sort crossings for each of the four frame segments. DO 40 ITER = 1, IC NSWAP = 0 DO 30 J = 1, IC-1 IF (CACHE(1,J).LT.CACHE(1,J+1)) GO TO 30 IF (CACHE(1,J).EQ.CACHE(1,J+1) .AND. : CACHE(2,J).LE.CACHE(2,J+1)) GO TO 30 NSWAP = NSWAP + 1 DO 20 M = 1, 4 TMP = CACHE(M,J) CACHE(M,J) = CACHE(M,J+1) CACHE(M,J+1) = TMP 20 CONTINUE 30 CONTINUE IF (NSWAP.EQ.0) GO TO 50 40 CONTINUE * Squeeze out duplicates. 50 JC = IC DO 90 J = 2, IC IF (J.GT.JC) GO TO 100 DO 60 M = 1, 4 IF (CACHE(M,J).NE.CACHE(M,J-1)) GO TO 90 60 CONTINUE * This entry is the same as the previous one. JC = JC - 1 DO 80 K = J, JC DO 70 M = 1, 4 CACHE(M,K) = CACHE(M,K+1) 70 CONTINUE 80 CONTINUE 90 CONTINUE 100 IC = JC * How do we label the edges of the frame? * Determine separability indices. NI(1,0) = 0 NI(1,1) = 0 NI(1,2) = 0 NI(1,3) = 0 NI(1,4) = 0 NI(2,0) = 0 NI(2,1) = 0 NI(2,2) = 0 NI(2,3) = 0 NI(2,4) = 0 DO 110 J = 1, IC IWRLD = NINT(CACHE(3,J)) EDGE = NINT(CACHE(1,J)) NI(IWRLD,0) = NI(IWRLD,0) + 1 NI(IWRLD,EDGE) = NI(IWRLD,EDGE) + 1 110 CONTINUE SI(1) = 0.0 SI(2) = 0.0 IF (NI(1,0).GT.0) SI(1) = 2.0*REAL(NI(1,1)+NI(1,3))/NI(1,0) - 1.0 IF (NI(2,0).GT.0) SI(2) = 2.0*REAL(NI(2,1)+NI(2,3))/NI(2,0) - 1.0 * Which coordinates go on which edges? IF (LABCTL.GT.0) THEN * User-defined. L = LABCTL ELSE * Work it out ourselves. L = 0 IF (ABS(SI(1)-SI(2)).GT.1.0) THEN * Approximately horizontal/vertical grid lines. IF (SI(1).GT.SI(2)) THEN * First world coordinate with vertical grid lines. IF (NI(1,1).GT.3 .OR. NI(1,1).GE.NI(1,3)) THEN * Label bottom of frame. L = L + 1 ELSE * Label top of frame. L = L + 100 END IF * Second world coordinate with horizontal grid lines. IF (NI(2,2).GT.3 .OR. NI(2,2).GE.NI(2,4)) THEN * Label left side of frame. L = L + 20 ELSE * Label right side of frame. L = L + 2000 END IF ELSE * First world coordinate with horizontal grid lines. IF (NI(1,2).GT.3 .OR. NI(1,2).GE.NI(1,4)) THEN * Label left side of frame. L = L + 10 ELSE * Label right side of frame. L = L + 1000 END IF * Second world coordinate with vertical grid lines. IF (NI(2,1).GT.3 .OR. NI(2,1).GE.NI(2,3)) THEN * Label bottom of frame. L = L + 2 ELSE * Label top of frame. L = L + 200 END IF END IF ELSE * Skew grid lines or worse. IF (SI(1).GT.0.5D0) THEN * First world coordinate with vertical grid lines. IF (NI(1,1).GT.3 .OR. NI(1,1).GT.NI(1,3)) THEN L = 1 ELSE L = 100 END IF IF (SI(2).GT.0.5D0) THEN * Second world coordinate also with vertical grid lines. IF (L.EQ.1) THEN L = 201 ELSE IF (NI(2,1).GT.1 .OR. NI(2,1).GT.NI(2,3)) THEN L = 102 ELSE L = 300 END IF END IF ELSE * Second world coordinate with diagonal grid lines. L = L + 2020 END IF ELSE IF (SI(1).LT.-0.5D0) THEN * First world coordinate with horizontal grid lines. IF (NI(1,2).GT.3 .OR. NI(1,2).GT.NI(1,4)) THEN L = 10 ELSE L = 1000 END IF IF (SI(2).LT.-0.5D0) THEN * Second world coordinate also with horizontal grid. IF (L.EQ.10) THEN L = 2010 ELSE IF (NI(2,2).GT.1 .OR. NI(2,2).GT.NI(2,4)) THEN L = 1020 ELSE L = 3000 END IF END IF ELSE * Second world coordinate with diagonal grid lines. L = L + 202 END IF ELSE IF (SI(2).GT.0.5D0) THEN * Second world coordinate with vertical grid lines. IF (NI(2,1).GT.3 .OR. NI(2,1).GT.NI(2,3)) THEN L = 1012 ELSE L = 1210 END IF ELSE IF (SI(2).LT.-0.5D0) THEN * Second world coordinate with horizontal grid lines. IF (NI(2,2).GT.3 .OR. NI(2,2).GT.NI(2,4)) THEN L = 121 ELSE L = 2101 END IF ELSE * Desperation stakes! Label all four axes. K1 = NI(1,3) + NI(1,1) K2 = NI(2,4) + NI(2,2) L = 2121 M1 = NI(1,4) + NI(1,1) M2 = NI(2,3) + NI(2,2) IF (M1.GE.K1 .AND. M2.GE.K2) THEN L = 1221 K1 = M1 K2 = M2 END IF M1 = NI(1,2) + NI(1,1) M2 = NI(2,4) + NI(2,3) IF (M1.GE.K1 .AND. M2.GE.K2) THEN L = 2211 K1 = M1 K2 = M2 END IF M1 = NI(1,4) + NI(1,2) M2 = NI(2,3) + NI(2,1) IF (M1.GE.K1 .AND. M2.GE.K2) THEN L = 1212 K1 = M1 K2 = M2 END IF M1 = NI(1,3) + NI(1,2) M2 = NI(2,4) + NI(2,1) IF (M1.GE.K1 .AND. M2.GE.K2) THEN L = 2112 K1 = M1 K2 = M2 END IF M1 = NI(1,4) + NI(1,3) M2 = NI(2,2) + NI(2,1) IF (M1.GE.K1 .AND. M2.GE.K2) THEN L = 1122 K1 = M1 K2 = M2 END IF END IF END IF END IF * Mark labels as unwanted by setting their edges negative. DOLAB(1) = MOD(L,10) DOLAB(2) = MOD(L/10,10) DOLAB(3) = MOD(L/100,10) DOLAB(4) = MOD(L/1000,10) DO 120 J = 1, IC EDGE = NINT(CACHE(1,J)) IWRLD = NINT(CACHE(3,J)) IF (IWRLD.EQ.1) THEN IF (MOD(DOLAB(EDGE),2).NE.1) CACHE(1,J) = -EDGE ELSE IF (MOD(DOLAB(EDGE)/2,2).NE.1) CACHE(1,J) = -EDGE END IF 120 CONTINUE * Determine labelling precision. * Order of magnitude for plain numeric world coordinates. IMAG(1) = 0 IMAG(2) = 0 IF (FTYPE(1).EQ.' ' .OR. FTYPE(2).EQ.' ') THEN OMAG(1) = 0.0 OMAG(2) = 0.0 DO 130 J = 1, IC IWRLD = NINT(CACHE(3,J)) IF (FTYPE(IWRLD).EQ.' ') THEN * Plain numeric. IF (CACHE(4,J).EQ.0D0) GO TO 130 OMAG(IWRLD) = OMAG(IWRLD) + LOG10(ABS(CACHE(4,J))) IMAG(IWRLD) = IMAG(IWRLD) + 1 END IF 130 CONTINUE IF (IMAG(1).GT.0) IMAG(1) = INT(OMAG(1)/IMAG(1)) IF (IMAG(1).GE.-2 .AND. IMAG(1).LE.4) IMAG(1) = 0 IF (IMAG(2).GT.0) IMAG(2) = INT(OMAG(2)/IMAG(2)) IF (IMAG(2).GE.-2 .AND. IMAG(2).LE.4) IMAG(2) = 0 * Renormalize grid values. IF (IMAG(1).NE.0 .OR. IMAG(2).NE.0) THEN DO 140 J = 1, IC IWRLD = NINT(CACHE(3,J)) CACHE(4,J) = CACHE(4,J)/10D0**IMAG(IWRLD) 140 CONTINUE END IF END IF * Sexagesimal labelling. SEXA(1) = INDEX('DEFGHITy', FTYPE(1)).NE.0 SEXA(2) = INDEX('DEFGHITy', FTYPE(2)).NE.0 IF (SEXA(1) .OR. SEXA(2)) THEN DO 150 K = -2, 6 NLABS(1,K) = 0 NLABS(2,K) = 0 150 CONTINUE DO 180 J = 1, IC * Use this label? EDGE = NINT(CACHE(1,J)) IF (EDGE.LT.0) GO TO 180 * Skip non-sexagesimal coordinates. IWRLD = NINT(CACHE(3,J)) IF (.NOT.SEXA(IWRLD)) GO TO 180 * Defeat rounding errors. IF (FTYPE(IWRLD).EQ.'y') THEN TMP = ABS(MOD(CACHE(4,J),1D0)*86400D0) + 5D-7 ELSE TMP = ABS(CACHE(4,J)*3600D0) + 5D-7 END IF LV = INT(MOD(TMP, 1D0)*1D6) IF (LV.NE.0) THEN * Sub-arcsec/second resolution. M = 1 DO 160 K = 1, 6 M = M*10 IF (MOD(LV,M).NE.0) THEN L = 7 - K GO TO 170 END IF 160 CONTINUE ELSE LS = INT(TMP) IF (MOD(LS,60).NE.0) THEN L = 0 ELSE IF (MOD(LS,3600).NE.0) THEN L = -1 ELSE L = -2 END IF END IF * Use CACHE(1,J) temporarily to hold L. 170 NLABS(IWRLD,L) = NLABS(IWRLD,L) + 1 CACHE(1,J) = CACHE(1,J) + 0.1 + L/100.0 180 CONTINUE * How many fields are needed to get enough labels? DO 200 IWRLD = 1, 2 NLAB = 0 DO 190 K = -2, 6 NLAB = NLAB + NLABS(IWRLD,K) IF (NLAB.GT.3 .OR. K.EQ.6) THEN LMAG(IWRLD) = K GO TO 200 END IF NLABS(IWRLD,K+1) = NLABS(IWRLD,K) + NLABS(IWRLD,K+1) 190 CONTINUE 200 CONTINUE * Disable unwanted labels. DO 210 J = 1, IC * Use this label? EDGE = NINT(CACHE(1,J)) IF (EDGE.LT.0) GO TO 210 * Skip non-sexagesimal coordinates. IWRLD = NINT(CACHE(3,J)) IF (.NOT.SEXA(IWRLD)) GO TO 210 L = NINT(100*MOD(CACHE(1,J),1.0)) - 10 IF (L.LE.LMAG(IWRLD)) THEN * Wanted. CACHE(1,J) = EDGE ELSE * Not wanted. CACHE(1,J) = -EDGE END IF 210 CONTINUE END IF * Produce labels. XW1 = BLC(1) XW2 = TRC(1) YW1 = BLC(2) YW2 = TRC(2) * These will define a box that just contains the labels. BNDRY(1) = YW1 BNDRY(2) = XW1 BNDRY(3) = YW2 BNDRY(4) = XW2 * These will record the edges on which labels were actually written. SKOP(1) = 0 SKOP(2) = 0 SKOP(3) = 0 SKOP(4) = 0 * Calendar date range. MJD1(1) = 1D99 MJD1(2) = 1D99 MJD2(1) = -1D99 MJD2(2) = -1D99 * Character height. CALL PGQCS (4, XCH, YCH) PRVEDG = 0 * Loop through the axis crossing table. DO 340 J = 1, IC * Determine the position. IWRLD = NINT(CACHE(3,J)) CALL PGSCI (CI(IWRLD+2)) EDGE = ABS(NINT(CACHE(1,J))) IF (EDGE.NE.PRVEDG) THEN * Start of new edge. IF (SEXA(1) .OR. SEXA(2)) THEN * Sexagesimal field suppression policy. PRVDEG(1) = -1 PRVMIN(1) = -1 PRVDEG(2) = -1 PRVMIN(2) = -1 SEXSUP(1) = 0 SEXSUP(2) = 0 * Vertical sides. IF (MOD(EDGE,2).EQ.0) THEN DO 220 K = J, IC EDJE = ABS(NINT(CACHE(1,K))) IF (EDJE.NE.EDGE) GO TO 230 KWRLD = NINT(CACHE(3,K)) IF (SEXSUP(KWRLD).EQ.1) GO TO 220 IF (FTYPE(KWRLD).EQ.'y') THEN TMP = ABS(MOD(CACHE(4,K),1D0)*24D0) ELSE TMP = ABS(CACHE(4,K)) END IF LV = INT(TMP*3600D0 + 5D-7) LD = LV/3600 LM = (LV - LD*3600)/60 LS = LV - LD*3600 - LM*60 TMP = TMP - LD IF (TMP.LT.5D-7) THEN * Write deg/hr field only when min/sec are zero. SEXSUP(KWRLD) = 1 ELSE IF (TMP*60-LM.LT.3D-5) THEN * Write min field only when sec is zero; only * write the deg/hr field when min is written. SEXSUP(KWRLD) = 2 END IF 220 CONTINUE END IF END IF 230 CONTINUE PRVYR(1) = -1 PRVYR(2) = -1 XL = -999.0 YL = -999.0 END IF PRVEDG = EDGE LFORCE = .FALSE. * Fix up edge encoding. EDGE = NINT(CACHE(1,J)) CACHE(1,J) = ABS(EDGE) * Use this label? IF (EDGE.LT.0) GO TO 340 IF (EDGE.EQ.1) THEN * Bottom. FJUST = 0.5 X = CACHE(2,J) Y = YW1 - 1.5*YCH ELSE IF (EDGE.EQ.2) THEN * Left. FJUST = 1.0 X = XW1 - 0.5*XCH Y = CACHE(2,J) - YCH/2.0 ELSE IF (EDGE.EQ.3) THEN * Top. FJUST = 0.5 X = CACHE(2,J) Y = YW2 + 0.5*YCH ELSE IF (EDGE.EQ.4) THEN * Right. FJUST = 0.0 X = XW2 + 0.5*XCH Y = CACHE(2,J) - YCH/2.0 END IF * Format the numeric label. IF (INDEX('ABC', FTYPE(IWRLD)).NE.0) THEN * Decimal angle; allow up to 6 decimal digits. TMP = ABS(CACHE(4,J)) + 5D-7 LD = INT(TMP) K = 1 IF (CACHE(4,J).LT.0D0) THEN * Insert a minus sign. TEXT(1:1) = '-' K = 2 END IF CALL PGNUMB (LD, 0, 1, TEXT(K:), NCH) K = K + NCH TEXT(K:) = ESCAPE // 'uo' // ESCAPE // 'd' K = K + 4 LV = INT(MOD(TMP,1D0)*1D6) IF (LV.NE.0) CALL PGNUMB (LV, -6, 1, TEXT(K:), NCH) TEXT(K:K) = 'd' ELSE IF (SEXA(IWRLD)) THEN * Sexagesimal format; angle or time? ANGLE = INDEX('DEF', FTYPE(IWRLD)).NE.0 L = LMAG(IWRLD) * Use integer arithmetic to avoid rounding problems. IF (FTYPE(IWRLD).EQ.'y') THEN TMP = ABS(MOD(CACHE(4,J),1D0)*24D0) * Determine date range. IF (CACHE(4,J).LT.MJD1(IWRLD)) MJD1(IWRLD) = CACHE(4,J) IF (CACHE(4,J).GT.MJD2(IWRLD)) MJD2(IWRLD) = CACHE(4,J) ELSE TMP = ABS(CACHE(4,J)) END IF VS = TMP*3600D0 + 5D-7 LV = INT(VS) * Sexagesimal fields. LD = LV/3600 LM = (LV - LD*3600)/60 LS = LV - LD*3600 - LM*60 * Field suppression policy. IF (SEXSUP(IWRLD).GT.0) THEN TMP = TMP - LD IF (TMP.LT.5D-7) THEN DODEG = .TRUE. DOMIN = .TRUE. ELSE IF (SEXSUP(IWRLD).EQ.2) THEN DOMIN = TMP*60-LM.LT.3D-5 DODEG = DOMIN .AND. LD.NE.PRVDEG(IWRLD) ELSE DODEG = .FALSE. DOMIN = .FALSE. END IF ELSE DODEG = LD.NE.PRVDEG(IWRLD) DOMIN = LM.NE.PRVMIN(IWRLD) END IF K = 1 IF (L.EQ.-2 .OR. DODEG) THEN * Write the degree/hour field. DODEG = .TRUE. IF (CACHE(4,J).LT.0D0) THEN * Insert a minus sign. TEXT(1:1) = '-' K = 2 END IF IF (ANGLE) THEN * Angle. CALL PGNUMB (LD, 0, 1, TEXT(K:), NCH) K = K + NCH TEXT(K:) = ESCAPE // 'uo' // ESCAPE // 'd' K = K + 5 ELSE * Time. IF (LD.LE.9 .AND. INDEX('Ty',FTYPE(IWRLD)).EQ.0) THEN * Write leading zeroes in the hour field. WRITE (TEXT(K:), '(I2.2)') LD K = K + 2 ELSE CALL PGNUMB (LD, 0, 1, TEXT(K:), NCH) K = K + NCH END IF TEXT(K:) = ESCAPE // 'uh' // ESCAPE // 'd' K = K + 5 END IF END IF IF (L.GE.-1 .AND. : .NOT.(L.LE.0 .AND. K.GT.1 .AND. LM.EQ.0 .AND. LS.EQ.0)) THEN * Write arcminute/minute field. IF (L.EQ.-1 .OR. K.GT.1 .OR. DOMIN) THEN DOMIN = .TRUE. IF (ANGLE) THEN WRITE (TEXT(K:), '(I2.2,A)') LM, '''' K = K + 3 ELSE WRITE (TEXT(K:), '(I2.2,A)') LM, : ESCAPE // 'um' // ESCAPE // 'd' K = K + 7 END IF END IF IF (L.GE.0) THEN * Arcsec/second field. IF (ANGLE) THEN WRITE (TEXT(K:), '(I2.2,A)') LS, '"' K = K + 3 ELSE WRITE (TEXT(K:), '(I2.2,A)') LS, : ESCAPE // 'us' // ESCAPE // 'd' K = K + 7 END IF IF (L.GT.0) THEN * Sub-arcsec/second field. WRITE (FMT, '(A,I1,A,I1,A)') '(A,I', L, '.', L, ')' LV = INT(MOD(VS,1D0)*10**L) WRITE (TEXT(K:), FMT) '.', LV END IF END IF END IF ELSE IF (FTYPE(IWRLD).EQ.'L') THEN * Logarithmic. TMP = MOD(CACHE(4,J),1D0) IF (TMP.LT.0D0) TMP = TMP + 1D0 MM = NINT(10D0**TMP) IF (MM.EQ.10) THEN TMP = TMP - 1D0 MM = 1 END IF PP = NINT(CACHE(4,J) - TMP) IF (MM.NE.1) THEN WRITE (TEXT, '(I1)') MM ELSE * FORTRAN is really abysmal sometimes. WRITE (TEXT, '(I8)') PP DO 240 K = 1, 8 IF (TEXT(K:K).NE.' ') GO TO 250 240 CONTINUE 250 TEXT = '10' // ESCAPE // 'u' // TEXT(K:8) LFORCE = .TRUE. END IF ELSE IF (FTYPE(IWRLD).EQ.'Y') THEN * Convert MJD to Gregorian calendar date, YYYY/MM/DD. CALL PGMJD(0, CACHE(4,J), IY, IM, ID) DOYEAR = IY.NE.PRVYR(IWRLD) IF (DOYEAR) THEN WRITE (TEXT, 260) IY, IM, ID 260 FORMAT (I12,'/',I2.2,'/',I2.2) DO 270 K = 1, 12 IF (TEXT(K:K).NE.' ') GO TO 280 270 CONTINUE 280 TEXT = TEXT(K:18) ELSE WRITE (TEXT, 290) IM, ID 290 FORMAT (I2.2,'/',I2.2) END IF ELSE * Plain number; allow up to six significant digits. IF (CACHE(4,J).NE.0D0) THEN PP = INT(LOG10(ABS(CACHE(4,J)))) - 6 MM = NINT(CACHE(4,J)/10D0**PP) ELSE PP = 0 MM = 0 END IF CALL PGNUMB (MM, PP, 0, TEXT, NCH) END IF * Write the label if it doesn't overlap the previous one. CALL PGQTXT (X, Y, 0.0, FJUST, TEXT, XBOX, YBOX) IF (LFORCE .OR. XBOX(1).GT.XL .OR. YBOX(1).GT.YL) THEN IF (IWRLD.EQ.1) THEN CALL PGSCI (CI(3)) ELSE CALL PGSCI (CI(4)) END IF CALL PGPTXT (X, Y, 0.0, FJUST, TEXT) XL = XBOX(4) + 0.5*XCH YL = YBOX(2) + 0.5*YCH * Sexagesimal formatting. IF (SEXA(IWRLD)) THEN IF (DODEG) PRVDEG(IWRLD) = LD IF (DOMIN) PRVMIN(IWRLD) = LM END IF * Calendar formatting. IF (FTYPE(IWRLD).EQ.'Y') THEN IF (DOYEAR) PRVYR(IWRLD) = IY END IF * Record the fact. IF (IWRLD.EQ.1) THEN SKOP(EDGE) = 2*(SKOP(EDGE)/2) + 1 ELSE SKOP(EDGE) = 2 + MOD(SKOP(EDGE),2) END IF * Boundary within which the numeric labels lie. IF (YBOX(1).LT.BNDRY(1)) BNDRY(1) = YBOX(1) IF (XBOX(1).LT.BNDRY(2)) BNDRY(2) = XBOX(1) IF (YBOX(3).GT.BNDRY(3)) BNDRY(3) = YBOX(3) IF (XBOX(3).GT.BNDRY(4)) BNDRY(4) = XBOX(3) * Check the distance to the previous grid line. TICKIT = .FALSE. K = J - 1 IF (DOLAB(EDGE).NE.3) THEN * Only one coordinate element labelled on this edge, no need * to worry about grid lines belonging to the other. DO 300 K = J-1, 1, -1 IF (IWRLD.EQ.NINT(CACHE(3,K))) GO TO 310 300 CONTINUE END IF 310 IF (K.GE.1) THEN EDJE = ABS(NINT(CACHE(1,K))) IF (EDJE.EQ.EDGE) THEN IF (EDGE.EQ.1 .OR. EDGE.EQ.3) THEN IF (XBOX(1).LT.CACHE(2,K)) TICKIT = .TRUE. ELSE IF (YBOX(1).LT.CACHE(2,K)) TICKIT = .TRUE. END IF END IF END IF * Check the distance to the next grid line. K = J + 1 IF (DOLAB(EDGE).NE.3) THEN * Only one coordinate element labelled on this edge, no need * to worry about grid lines belonging to the other. DO 320 K = J+1, IC IF (IWRLD.EQ.NINT(CACHE(3,K))) GO TO 330 320 CONTINUE END IF 330 IF (K.LE.IC) THEN EDJE = ABS(NINT(CACHE(1,K))) IF (EDJE.EQ.EDGE) THEN IF (EDGE.EQ.1 .OR. EDGE.EQ.3) THEN IF (XBOX(3).GT.CACHE(2,K)) TICKIT = .TRUE. ELSE IF (YBOX(3).GT.CACHE(2,K)) TICKIT = .TRUE. END IF END IF END IF * Density of grid lines is high. IF (TICKIT) THEN * Draw outside pip mark to disambiguate grid lines. Z = REAL(CACHE(2,J)) IF (EDGE.EQ.1) THEN CALL PGMOVE (Z, YW1-0.3*YCH) CALL PGDRAW (Z, YW1) ELSE IF (EDGE.EQ.2) THEN CALL PGMOVE (XW1-0.3*XCH, Z) CALL PGDRAW (XW1, Z) ELSE IF (EDGE.EQ.3) THEN CALL PGMOVE (Z, YW2+0.3*YCH) CALL PGDRAW (Z, YW2) ELSE IF (EDGE.EQ.4) THEN CALL PGMOVE (XW2+0.3*XCH, Z) CALL PGDRAW (XW2, Z) END IF END IF END IF 340 CONTINUE * Write the identification strings. * World coordinates. DO 470 EDGE = 1, 4 TEXT = ' ' DO 440 IWRLD = 1, 2 TXT(IWRLD) = ' ' IF (MOD(SKOP(EDGE)/IWRLD,2).EQ.0) GO TO 440 * Strip off leading blanks. L = LEN(IDENTS(IWRLD)) DO 350 K = 1, L IF (IDENTS(IWRLD)(K:K).NE.' ') THEN TXT(IWRLD) = IDENTS(IWRLD)(K:L) GO TO 360 END IF 350 CONTINUE 360 IF (IMAG(IWRLD).NE.0 .OR. FTYPE(IWRLD).EQ.'y') THEN * Find the last non-blank. DO 370 K = 40, 1, -1 IF (TXT(IWRLD)(K:K).NE.' ') GO TO 380 370 CONTINUE 380 K = K + 1 IF (IMAG(IWRLD).NE.0) THEN * Add scaling information. CALL PGNUMB (IMAG(IWRLD), 0, 1, EXPONT, NCH) TXT(IWRLD)(K:) = ' x10' // ESCAPE // 'u' // EXPONT ELSE * Add calendar date range. CALL PGMJD(0, MJD1(IWRLD), IY, IM, ID) WRITE (TEXT, 390) IY, IM, ID 390 FORMAT (I12,'/',I2.2,'/',I2.2) DO 400 L = 1, 12 IF (TEXT(L:L).NE.' ') GO TO 410 400 CONTINUE 410 TXT(IWRLD)(K:) = ' (' // TEXT(L:18) K = K + 21 - L CALL PGMJD(0, MJD2(IWRLD), IY2, IM2, ID2) WRITE (TEXT, 390) IY2, IM2, ID2 IF (IY2.EQ.IY) THEN IF (IM2.EQ.IM) THEN IF (ID2.EQ.ID) THEN TXT(IWRLD)(K:) = ')' ELSE TXT(IWRLD)(K:) = ' - ' // TEXT(17:18) // ')' END IF ELSE TXT(IWRLD)(K:) = ' - ' // TEXT(14:18) // ')' END IF ELSE DO 420 L = 1, 12 IF (TEXT(L:L).NE.' ') GO TO 430 420 CONTINUE 430 TXT(IWRLD)(K:) = ' - ' // TEXT(L:18) // ')' END IF END IF END IF 440 CONTINUE K = 0 IF (TXT(1).NE.' ') THEN * Identify first world coordinate... TEXT = TXT(1) CALL PGSCI (CI(5)) IF (TXT(2).NE.' ') THEN * ...and also second world coordinate. DO 450 K = 40, 1, -1 IF (TEXT(K:K).NE.' ') GO TO 460 450 CONTINUE 460 K = K + 1 TEXT(K:) = ', ' // TXT(2) END IF ELSE IF (TXT(2).NE.' ') THEN * Identify second world coordinate only. TEXT = TXT(2) CALL PGSCI (CI(6)) ELSE * No text to write. GO TO 470 END IF IF (EDGE.EQ.1) THEN X = (XW1 + XW2)/2.0 Y = BNDRY(1) - 1.5*YCH ANGL = 0.0 ELSE IF (EDGE.EQ.2) THEN IF (TEXT(2:).EQ.' ') THEN * One character, write upright. X = BNDRY(2) - 1.0*XCH Y = (YW1 + YW2)/2.0 ANGL = 0.0 ELSE X = BNDRY(2) - 0.5*XCH Y = (YW1 + YW2)/2.0 ANGL = 90.0 END IF ELSE IF (EDGE.EQ.3) THEN X = (XW1 + XW2)/2.0 Y = BNDRY(3) + 0.5*YCH ANGL = 0.0 ELSE IF (EDGE.EQ.4) THEN IF (TEXT(2:).EQ.' ') THEN * One character, write upright. X = BNDRY(4) + 1.0*XCH Y = (YW1 + YW2)/2.0 ANGL = 0.0 ELSE X = BNDRY(4) + 0.5*XCH Y = (YW1 + YW2)/2.0 ANGL = -90.0 END IF END IF CALL PGQTXT (X, Y, ANGL, 0.5, TEXT, XBOX, YBOX) IF (K.EQ.0) THEN CALL PGPTXT (X, Y, ANGL, 0.5, TEXT) ELSE * Two-colour annotation. CALL PGPTXT (XBOX(1), YBOX(1), ANGL, 0.0, TEXT(:K)) CALL PGSCI (CI(6)) CALL PGPTXT (XBOX(4), YBOX(4), ANGL, 1.0, TEXT(K+1:)) END IF * Update the boundary. IF (YBOX(1).LT.BNDRY(1)) BNDRY(1) = YBOX(1) IF (YBOX(3).LT.BNDRY(1)) BNDRY(1) = YBOX(3) IF (XBOX(1).LT.BNDRY(2)) BNDRY(2) = XBOX(1) IF (XBOX(3).LT.BNDRY(2)) BNDRY(2) = XBOX(3) IF (YBOX(1).GT.BNDRY(3)) BNDRY(3) = YBOX(1) IF (YBOX(3).GT.BNDRY(3)) BNDRY(3) = YBOX(3) IF (XBOX(1).GT.BNDRY(4)) BNDRY(4) = XBOX(1) IF (XBOX(3).GT.BNDRY(4)) BNDRY(4) = XBOX(3) 470 CONTINUE * Title. IF (IDENTS(3).NE.' ') THEN CALL PGSCI (CI(7)) X = (XW1 + XW2)/2.0 Y = BNDRY(3) + 0.5*YCH CALL PGQTXT (X, Y, 0.0, 0.5, IDENTS(3), XBOX, YBOX) CALL PGPTXT (X, Y, 0.0, 0.5, IDENTS(3)) * Update the boundary. IF (XBOX(1).LT.BNDRY(2)) BNDRY(2) = XBOX(1) IF (YBOX(3).GT.BNDRY(3)) BNDRY(3) = YBOX(3) IF (XBOX(3).GT.BNDRY(4)) BNDRY(4) = XBOX(3) END IF * Return margin widths in Cartesian coordinates. CACHE(1,NC) = YW1 - BNDRY(1) CACHE(2,NC) = XW1 - BNDRY(2) CACHE(3,NC) = BNDRY(3) - YW2 CACHE(4,NC) = BNDRY(4) - XW2 RETURN END *======================================================================= * MJD to/from Gregorian calendar date. * * Given: * CODE I If 1, compute MJD from IY,IM,ID, else vice * versa. * * Given and/or returned: * MJD D Modified Julian date, (MJD = JD - 2400000.5). * IY I Year. * IM I Month (for CODE.EQ.1 may exceed 12, or be zero, * or negative). * ID I Day of month (for CODE.EQ.1, may exceed the * legitimate number of days in the month, or be * zero, or negative). * * Notes: * These algorithms are from D.A. Hatcher, QJRAS 25, 53-55, as modified * by P.T. Wallace for use in SLALIB (subroutines CLDJ and DJCL). * * Author: Mark Calabretta, Australia Telescope National Facility *----------------------------------------------------------------------- SUBROUTINE PGMJD (CODE, MJD, IY, IM, ID) *----------------------------------------------------------------------- INTEGER CODE, DD, ID, IM, IY, JD, JM, JY, N4 DOUBLE PRECISION MJD *----------------------------------------------------------------------- IF (CODE.EQ.1) THEN * Calendar date to MJD. IF (IM.LT.1) THEN JY = IY - 1 + IM/12 JM = 12 + MOD(IM,12) ELSE JY = IY + (IM-1)/12 JM = MOD(IM-1,12) + 1 END IF MJD =DBLE((1461*(JY - (12-JM)/10 + 4712))/4 : +(306*MOD(JM+9, 12) + 5)/10 : -(3*((JY - (12-JM)/10 + 4900)/100))/4 : + ID - 2399904) ELSE * MJD to calendar date. JD = 2400001 + INT(MJD) N4 = 4*(JD + ((2*((4*JD - 17918)/146097)*3)/4 + 1)/2 - 37) DD = 10*(MOD(N4-237, 1461)/4) + 5 IY = N4/1461 - 4712 IM = MOD(2 + DD/306, 12) + 1 ID = MOD(DD, 306)/10 + 1 END IF RETURN END *======================================================================= * This FORTRAN wrapper on PGSBOX exists solely to define fixed-length * CHARACTER arguments for cpgsbox(). * * Author: Mark Calabretta, Australia Telescope National Facility *----------------------------------------------------------------------- SUBROUTINE PGSBOK (BLC, TRC, IDENTS, OPT, LABCTL, LABDEN, CI, : GCODE, TIKLEN, NG1, GRID1, NG2, GRID2, DOEQ, NLFUNC, NLC, NLI, : NLD, NLCPRM, NLIPRM, NLDPRM, NC, IC, CACHE, IERR) *----------------------------------------------------------------------- LOGICAL DOEQ INTEGER CI(7), GCODE(2), IC, IERR, LABCTL, LABDEN, NC, NG1, NG2, : NLC, NLD, NLI, NLIPRM(NLI) REAL BLC(2), TRC(2) DOUBLE PRECISION CACHE(4,0:NC), GRID1(0:NG1), GRID2(0:NG2), : NLDPRM(NLD), TIKLEN CHARACTER IDENTS(3)*80, NLCPRM(NLC)*1, OPT(2)*1 EXTERNAL NLFUNC *----------------------------------------------------------------------- CALL PGSBOX (BLC, TRC, IDENTS, OPT, LABCTL, LABDEN, CI, GCODE, : TIKLEN, NG1, GRID1, NG2, GRID2, DOEQ, NLFUNC, NLC, NLI, NLD, : NLCPRM, NLIPRM, NLDPRM, NC, IC, CACHE, IERR) RETURN END *======================================================================= * This FORTRAN wrapper on PGLBOX exists solely to define fixed-length * CHARACTER arguments for cpglbox(). * * Author: Mark Calabretta, Australia Telescope National Facility *----------------------------------------------------------------------- SUBROUTINE PGLBOK (IDENTS, OPT, LABCTL, LABDEN, CI, GCODE, TIKLEN, : NG1, GRID1, NG2, GRID2, DOEQ, NC, IC, CACHE, IERR) *----------------------------------------------------------------------- LOGICAL DOEQ INTEGER CI(7), GCODE(2), IC, IERR, LABCTL, LABDEN, NC, NG1, NG2 DOUBLE PRECISION CACHE(4,0:NC), GRID1(0:NG1), GRID2(0:NG2), TIKLEN CHARACTER IDENTS(3)*80, OPT(2)*1 *----------------------------------------------------------------------- CALL PGLBOX (IDENTS, OPT, LABCTL, LABDEN, CI, GCODE, TIKLEN, NG1, : GRID1, NG2, GRID2, DOEQ, NC, IC, CACHE, IERR) RETURN END pywcs-1.12/wcslib/pgsbox/pgtest.f0000644001153600020070000012115612310355626021116 0ustar cslocumSTSCI\science00000000000000*======================================================================= * * PGSBOX 4.10 - draw curvilinear coordinate axes for PGPLOT. * Copyright (C) 1997-2012, Mark Calabretta * * This file is part of PGSBOX. * * PGSBOX is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PGSBOX is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with PGSBOX. If not, see http://www.gnu.org/licenses. * * Correspondence concerning PGSBOX may be directed to: * Internet email: mcalabre@atnf.csiro.au * Postal address: Dr. Mark Calabretta * Australia Telescope National Facility, CSIRO * PO Box 76 * Epping NSW 1710 * AUSTRALIA * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: pgtest.f,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *======================================================================= PROGRAM PGTEST *======================================================================= LOGICAL LARGE INTEGER C0(7), CI(7), GCODE(2), IC, IERR, J, NAXIS(2), : NLIPRM(2), STATUS REAL BLC(2), SCL, TRC(2) DOUBLE PRECISION CACHE(4,0:256), DEC0, GRID1(0:8), GRID2(0:8), : NLDPRM(8), ROTN, TIKLEN CHARACTER CTYPE(2)*72, DEVTYP*16, ESCAPE*1, FCODE(2)*4, : IDENTS(3)*80, NLCPRM(1)*1, OPT(2)*1 DOUBLE PRECISION D2R, PI PARAMETER (PI = 3.141592653589793238462643D0) PARAMETER (D2R = PI/180D0) INCLUDE 'wcs.inc' INTEGER WCS(WCSLEN) EXTERNAL LNGVEL EXTERNAL FSCAN EXTERNAL PGCRFN EXTERNAL PGWCSL * A portability fix - does '\' itself need to be escaped? DATA ESCAPE /'\\'/ *----------------------------------------------------------------------- * Setup. NAXIS(1) = 512 NAXIS(2) = 512 BLC(1) = 0.5 BLC(2) = 0.5 TRC(1) = NAXIS(1) + 0.5 TRC(2) = NAXIS(2) + 0.5 * CALL PGBEG (0, '?', 1, 1) call pgbeg (0, '/xw', 1, 1) CALL PGQINF ('TYPE', DEVTYP, J) IF (DEVTYP.EQ.'PS' .OR. : DEVTYP.EQ.'VPS' .OR. : DEVTYP.EQ.'CPS' .OR. : DEVTYP.EQ.'VCPS') THEN * Switch black and white. CALL PGSCR (0, 1.0, 1.0, 1.0) CALL PGSCR (1, 0.0, 0.0, 0.0) END IF LARGE = DEVTYP.EQ.'XWINDOW' IF (LARGE) THEN SCL = 1.0 CALL PGVSTD () ELSE SCL = 0.7 CALL PGVSIZ (1.0, 3.0, 1.0, 3.0) END IF * Yellow. CALL PGSCR (2, 1.0, 1.0, 0.0) * White. CALL PGSCR (3, 1.0, 1.0, 1.0) * Pale blue. CALL PGSCR (4, 0.5, 0.5, 0.8) * Pale red. CALL PGSCR (5, 0.8, 0.5, 0.5) * Grey. CALL PGSCR (6, 0.7, 0.7, 0.7) * Dark green. CALL PGSCR (7, 0.3, 0.5, 0.3) C0(1) = -1 C0(2) = -1 C0(3) = -1 C0(4) = -1 C0(5) = -1 C0(6) = -1 C0(7) = -1 CALL PGWNAD (0.0, 1.0, 0.0, 1.0) CALL PGASK (.TRUE.) CALL PGPAGE () STATUS = WCSPUT (WCS, WCS_FLAG, -1, 0, 0) *----------------------------------------------------------------------- * Longitude-velocity map; the y-axis is regularly spaced in * frequency but is to be labelled as a true relativistic velocity. * - PGSBOX uses subroutine LNGVEL. * - Separable (i.e. orthogonal), non-linear coordinate system. * - Automatic choice of coordinate increments. * - Extraction of a common scaling factor. * - Automatic choice of what edges to label. * - Request for tickmarks (internal) for one coordinate and grid * lines for the other. * - Simple two-colour grid using two calls with deferred * labelling on the first call. * - Degree labelling. * - Suppression of zero arcmin and arcsec fields in sexagesimal * degree format. WRITE (*, '(/,A)') 'Longitude-velocity map' * Reference pixel coordinates. NLDPRM(1) = 1D0 NLDPRM(2) = 256D0 * Reference pixel values. NLDPRM(3) = 0D0 NLDPRM(4) = 1.420D9 * Coordinate increments. NLDPRM(5) = 360D0/(NAXIS(1)-1) NLDPRM(6) = 4D6 * Rest frequency. NLDPRM(7) = 1.420D9 * Annotation. IDENTS(1) = 'galactic longitude' IDENTS(2) = 'velocity (m/s)' IDENTS(3) = 'HI line' OPT(1) = 'F' OPT(2) = ' ' * Normal size lettering. CALL PGSCH (1.0*SCL) * Yellow tick marks for longitude and grid lines for velocity. CALL PGSCI (2) GCODE(1) = 1 GCODE(2) = 2 * Defer labelling. IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, -1, 0, C0, GCODE, 2D0, 0, 0D0, : 0, 0D0, .FALSE., LNGVEL, 1, 1, 7, ' ', 0, NLDPRM, 256, IC, : CACHE, IERR) * Draw fiducial grid lines in white and do labelling. CALL PGSCI (1) GCODE(1) = 2 GCODE(2) = 2 GRID1(1) = 180D0 GRID2(1) = 0D0 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 0, 0, C0, GCODE, 0D0, 1, : GRID1, 1, GRID2, .FALSE., LNGVEL, 1, 1, 7, ' ', 0, NLDPRM, 256, : IC, CACHE, IERR) * Draw the frame. CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Azimuth-frequency scan; this sort of output might be obtained from * an antenna that scans in azimuth with a receiver that scans * simultaneously in frequency. * - PGSBOX uses subroutine FSCAN. * - Non-separable (i.e. non-orthogonal) non-linear coordinate * system. * - Automatic choice of what edges to label; results in labelling * the bottom, left and right sides of the plot. * - Cyclic labelling. FSCAN returns the azimuth in the range * 0 - 720 degrees but PGSBOX is set to normalize this to two * cycles of 0 - 360 degrees. * - Logarithmic labelling. * - Automatic choice of coordinate increments but with request * for all grid lines for the logarithmic coordinate. * - Degree labelling. * - Suppression of common zero arcmin and arcsec fields in * sexagesimal degree format. WRITE (*, '(/,A)') 'Azimuth-frequency scan' * Reference pixel coordinates. NLDPRM(1) = 0.5D0 NLDPRM(2) = 0.5D0 * Reference pixel values. NLDPRM(3) = 0D0 NLDPRM(4) = 8.5D0 * Coordinate increments. NLDPRM(5) = 720D0/(NAXIS(1)+1) NLDPRM(6) = 0.002D0 * Rate of change of NLDPRM(4) with x-pixel. NLDPRM(7) = -0.002D0 * Annotation. IDENTS(1) = 'azimuth' IDENTS(2) = ESCAPE // 'gn/Hz' IDENTS(3) = 'Frequency/azimuth scan' OPT(1) = 'D' OPT(2) = 'L' * Normal size lettering. CALL PGSCH (1.0*SCL) * Draw full grid lines. CALL PGSCI (1) GCODE(1) = 2 GCODE(2) = 2 * Setting LABDEN = 9900 forces all logarithmic grid lines to be * drawn. IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 0, 9900, C0, GCODE, 2D0, 0, : 0D0, 0, 0D0, .FALSE., FSCAN, 1, 1, 7, ' ', 0, NLDPRM, 256, IC, : CACHE, IERR) * Draw the frame. CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Z versus time plot. * - PGSBOX uses subroutine PGCRFN. * - Separable (i.e. orthogonal), non-linear coordinate system. * - Use of function PGCRFN for separable axis types. * - Automatic choice of what edges to label; results in labelling * the bottom and left sides of the plot. * - Automatic choice of coordinate increments. * - Logarithmic labelling over many orders of magnitude. * - Single-character annotation on a vertical axis is upright. WRITE (*, '(/,A)') 'Z versus time plot' * Function types. FCODE(1) = 'Lin ' FCODE(2) = 'Log ' * Reference pixel coordinates. NLDPRM(1) = 0.5D0 NLDPRM(2) = -50D0 * Coordinate increments. NLDPRM(3) = 0.04D0 NLDPRM(4) = 0.02D0 * Reference pixel values. NLDPRM(5) = -3.0D0 NLDPRM(6) = 1.0D0 * Annotation. IDENTS(1) = 'Age of universe (sec)' IDENTS(2) = 'Y' IDENTS(3) = ' ' OPT(1) = 'L' OPT(2) = ' ' * Normal size lettering. CALL PGSCH (1.0*SCL) * Draw ticks for the first coordinate, grid lines for the second. CALL PGSCI (1) GCODE(1) = 1 GCODE(2) = 2 IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 0, 0, C0, GCODE, 2D0, 0, 0D0, : 0, 0D0, .FALSE., PGCRFN, 8, 2, 4, FCODE, NLIPRM, NLDPRM, 256, : IC, CACHE, IERR) * Draw the frame. CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Simple SIN projection near the south celestial pole. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - Non-separable (i.e. non-orthogonal) curvilinear coordinate * system. * - Demonstrate parameter definition for PGWCSL. * - Discovery of grid lines that do not cross any axis. * - Automatic choice of what edges to label; results in labelling * all sides of the plot. * - Automatic choice of coordinate increments but with request * for increased grid density for each coordinate. * - Double precision accuracy. * - Cyclic coordinates. PGWCSL returns the right ascension in * the range -180 to +180 degrees, i.e. with a discontinuity * at +/- 180 degrees. * - Labelling of degrees as time in the range 0 - 24h. * - Suppression of labels that would overlap one another. * - Sexagesimal degree labelling with automatically determined * precision. * - Suppression of common zero minute and second fields in * sexagesimal time format. WRITE (*, '(/,A)') 'Simple SIN projection' STATUS = WCSINI (2, WCS) * Set projection type to SIN. CTYPE(1) = 'RA---SIN' CTYPE(2) = 'DEC--SIN' STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(1), 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(2), 2, 0) * Reference pixel coordinates. STATUS = WCSPUT (WCS, WCS_CRPIX, 384D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRPIX, 256D0, 2, 0) * Coordinate increments. STATUS = WCSPUT (WCS, WCS_CDELT, -1D0/3600000D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CDELT, 1D0/3600000D0, 2, 0) * Spherical coordinate references. DEC0 = -89.99995D0 STATUS = WCSPUT (WCS, WCS_CRVAL, 25D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, DEC0, 2, 0) * Set parameters for an NCP projection. DEC0 = DEC0*D2R STATUS = WCSPUT (WCS, WCS_PV, 0D0, 2, 1) STATUS = WCSPUT (WCS, WCS_PV, COS(DEC0)/SIN(DEC0), 2, 2) * Annotation. IDENTS(1) = 'Right ascension' IDENTS(2) = 'Declination' IDENTS(3) = 'WCS SIN projection' OPT(1) = 'G' OPT(2) = 'E' * Reduced size lettering. CALL PGSCH (0.8*SCL) * Draw full grid lines. CALL PGSCI (1) GCODE(1) = 2 GCODE(2) = 2 * Draw the celestial grid. The grid density is set for each world * coordinate by specifying LABDEN = 1224. IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 0, 1224, C0, GCODE, 0D0, 0, : 0D0, 0, 0D0, .FALSE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * Draw the frame. CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Conic equal area projection. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - Non-separable (i.e. non-orthogonal) curvilinear coordinate * system. * - Coordinate system undefined in areas of the plot. * - Demonstrate parameter definition for PGWCSL. * - Discontinuous grid lines handled by PGWCSL. * - Discovery of grid lines that do not cross any axis. * - Colour control for grid and labelling. * - Reduced size lettering. * - Automatic choice of what edges to label; results in labelling * all sides of the plot. * - Automatic choice of coordinate increments. * - Cyclic coordinates. PGWCSL returns the longitude in the * range -180 to +180 degrees, i.e. with a discontinuity at * +/- 180 degrees. * - Suppression of labels that would overlap one another. * - Suppression of common zero arcmin and arcsec fields in * sexagesimal degree format. WRITE (*, '(/,A)') 'Conic equal area projection' STATUS = WCSINI (2, WCS) * Set projection type to conic equal-area. CTYPE(1) = 'RA---COE' CTYPE(2) = 'DEC--COE' STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(1), 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(2), 2, 0) * Reference pixel coordinates. STATUS = WCSPUT (WCS, WCS_CRPIX, 256D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRPIX, 256D0, 2, 0) * Coordinate increments. STATUS = WCSPUT (WCS, WCS_CDELT, -1D0/3D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CDELT, 1D0/3D0, 2, 0) * Spherical coordinate references. STATUS = WCSPUT (WCS, WCS_CRVAL, 90D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, 30D0, 2, 0) STATUS = WCSPUT (WCS, WCS_LONPOLE, 150D0, 0, 0) * Middle latitude and offset from standard parallels. STATUS = WCSPUT (WCS, WCS_PV, 60D0, 2, 1) STATUS = WCSPUT (WCS, WCS_PV, 15D0, 2, 2) * Annotation. IDENTS(1) = 'longitude' IDENTS(2) = 'latitude' IDENTS(3) = 'WCS conic equal area projection' OPT(1) = 'E' OPT(2) = 'E' * Reduced size lettering. CALL PGSCH (0.8*SCL) * Draw full grid lines. GCODE(1) = 2 GCODE(2) = 2 * Use colour to associate grid lines and labels. * Meridians in red. CALL PGSCR (10, 0.5, 0.0, 0.0) * Parallels in blue. CALL PGSCR (11, 0.0, 0.2, 0.5) * Longitudes in red. CALL PGSCR (12, 0.8, 0.3, 0.0) * Latitudes in blue. CALL PGSCR (13, 0.0, 0.4, 0.7) * Longitude labels in red. CALL PGSCR (14, 0.8, 0.3, 0.0) * Latitude labels in blue. CALL PGSCR (15, 0.0, 0.4, 0.7) * Title in cyan. CALL PGSCR (16, 0.3, 1.0, 1.0) CI(1) = 10 CI(2) = 11 CI(3) = 12 CI(4) = 13 CI(5) = 14 CI(6) = 15 CI(7) = 16 * Draw the celestial grid letting PGSBOX choose the increments. IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 0, 0, CI, GCODE, 0D0, 0, 0D0, : 0, 0D0, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, NLDPRM, 256, : IC, CACHE, IERR) * Set parameters to draw the native grid. STATUS = WCSPUT (WCS, WCS_CRVAL, 0D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, 60D0, 2, 0) STATUS = WCSPUT (WCS, WCS_LONPOLE, 999D0, 0, 0) STATUS = WCSPUT (WCS, WCS_LATPOLE, 999D0, 0, 0) * We just want to delineate the boundary, in green. CALL PGSCI (7) GRID1(1) = -180D0 GRID1(2) = 180D0 GRID2(1) = -90D0 GRID2(2) = 90D0 IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, -1, 0, C0, GCODE, 0D0, 2, : GRID1, 2, GRID2, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * Draw the frame. CALL PGSCI (1) CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Polyconic projection with colour-coded grid. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - Non-separable (i.e. non-orthogonal) curvilinear coordinate * system. * - Coordinate system undefined in areas of the plot. * - Demonstrate parameter definition for PGWCSL. * - Discontinuous grid lines handled by PGWCSL. * - Colour coded labelling. * - Colour coded grid implemented by the caller. * - Basic management of the axis-crossing table (see code). * - Reduced size lettering. * - Tick marks external to the frame. * - User selection of what edges to label with request for both * coordinates to be labelled on bottom, left and top edges. * - User selection of grid lines to plot. * - Concatenation of annotation at bottom and left; automatically * suppressed at the top since only one coordinate is labelled * there. * - Suppression of labels that would overlap one another. * - Degree labelling. * - Labelling of degrees as time in the range -12 - +12h. * - Suppression of common zero minute and second fields in * sexagesimal time format. WRITE (*, '(/,A)') 'Polyconic projection with colour-coded grid' STATUS = WCSINI (2, WCS) * Set projection type to polyconic. CTYPE(1) = 'RA---PCO' CTYPE(2) = 'DEC--PCO' STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(1), 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(2), 2, 0) * Reference pixel coordinates. STATUS = WCSPUT (WCS, WCS_CRPIX, 192D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRPIX, 640D0, 2, 0) * Rotate 30 degrees. ROTN = 30D0*D2R STATUS = WCSPUT (WCS, WCS_PC, COS(ROTN), 1, 1) STATUS = WCSPUT (WCS, WCS_PC, SIN(ROTN), 1, 2) STATUS = WCSPUT (WCS, WCS_PC, -SIN(ROTN), 2, 1) STATUS = WCSPUT (WCS, WCS_PC, COS(ROTN), 2, 2) * Coordinate increments. STATUS = WCSPUT (WCS, WCS_CDELT, -1D0/5D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CDELT, 1D0/5D0, 2, 0) * Spherical coordinate references. STATUS = WCSPUT (WCS, WCS_CRVAL, 332D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, 40D0, 2, 0) STATUS = WCSPUT (WCS, WCS_LONPOLE, -30D0, 0, 0) * Annotation. IDENTS(1) = 'Hour angle' IDENTS(2) = 'Declination' IDENTS(3) = 'WCS polyconic projection' OPT(1) = 'H' OPT(2) = 'B' * Reduced size lettering. CALL PGSCH (0.9*SCL) * Draw external (TIKLEN < 0) tick marks every 5 degrees. CALL PGSCI (6) GCODE(1) = 1 GCODE(2) = 1 TIKLEN = -2D0 IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, -1, 0, C0, GCODE, TIKLEN, 0, : 5D0, 0, 5D0, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, NLDPRM, : 256, IC, CACHE, IERR) * Resetting the table index to zero causes information about the * tick marks to be discarded. IC = 0 * Draw full grid lines in yellow rather than tick marks. CALL PGSCI (2) GCODE(1) = 2 GCODE(2) = 2 * Draw the primary meridian and equator. GRID1(1) = 0D0 GRID2(1) = 0D0 CALL PGSBOX (BLC, TRC, IDENTS, OPT, -1, 0, C0, GCODE, 0D0, 1, : GRID1, 1, GRID2, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * At this point the axis-crossing table will have entries for the * primary meridian and equator. Labelling was deferred in the * previous call, and the table is passed intact on the second call * to accumulate further axis-crossings. * Draw 90 degree meridians and poles in white. CALL PGSCI (3) GRID1(1) = 90D0 GRID1(2) = 180D0 GRID1(3) = 270D0 GRID2(1) = -90D0 GRID2(2) = 90D0 CALL PGSBOX (BLC, TRC, IDENTS, OPT, -1, 0, C0, GCODE, 0D0, 3, : GRID1, 2, GRID2, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * Draw the first set of 15 degree meridians and parallels in blue. CALL PGSCI (4) GRID1(1) = 15D0 GRID1(2) = 60D0 GRID1(3) = 105D0 GRID1(4) = 150D0 GRID1(5) = 195D0 GRID1(6) = 240D0 GRID1(7) = 285D0 GRID1(8) = 330D0 GRID2(1) = -75D0 GRID2(2) = -30D0 GRID2(3) = 15D0 GRID2(4) = 60D0 CALL PGSBOX (BLC, TRC, IDENTS, OPT, -1, 0, C0, GCODE, 0D0, 8, : GRID1, 4, GRID2, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * Draw the second set of 15 degree meridians and parallels in red. CALL PGSCI (5) GRID1(1) = 30D0 GRID1(2) = 75D0 GRID1(3) = 120D0 GRID1(4) = 165D0 GRID1(5) = 210D0 GRID1(6) = 255D0 GRID1(7) = 300D0 GRID1(8) = 345D0 GRID2(1) = -60D0 GRID2(2) = -15D0 GRID2(3) = 30D0 GRID2(4) = 75D0 CALL PGSBOX (BLC, TRC, IDENTS, OPT, -1, 0, C0, GCODE, 0D0, 8, : GRID1, 4, GRID2, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * The axis-crossing table has now accumulated information for all of * the preceding meridians and parallels but no labels have been * produced. It will acquire information for the the next set of * meridians and parallels before being processed by this call to * PGSBOX which finally produces the labels. * Draw the 45 degree meridians and parallels in grey and use colour * to differentiate grid labels. * Meridians and parallels in grey. CALL PGSCR (10, 0.7, 0.7, 0.7) CALL PGSCR (11, 0.7, 0.7, 0.7) * Longitudes tinged red. CALL PGSCR (12, 1.0, 0.9, 0.6) * Latitudes tinged green. CALL PGSCR (13, 0.8, 1.0, 0.9) * Longitude labels tinged red. CALL PGSCR (14, 1.0, 0.9, 0.6) * Latitude labels tinged green. CALL PGSCR (15, 0.8, 1.0, 0.9) * Title in white. CALL PGSCR (16, 1.0, 1.0, 1.0) CI(1) = 10 CI(2) = 11 CI(3) = 12 CI(4) = 13 CI(5) = 14 CI(6) = 15 CI(7) = 16 CALL PGSCI (6) * Tell PGSBOX what edges to label. GRID1(1) = 45D0 GRID1(2) = 135D0 GRID1(3) = 225D0 GRID1(4) = 315D0 GRID2(1) = -45D0 GRID2(2) = 45D0 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 2333, 0, CI, GCODE, 0D0, 4, : GRID1, 2, GRID2, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * Native grid in green (delineates boundary). CALL PGSCI (7) GRID1(1) = -180D0 GRID1(2) = 180D0 GRID2(1) = -999D0 STATUS = WCSPUT (WCS, WCS_CRVAL, 0D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, 0D0, 2, 0) STATUS = WCSPUT (WCS, WCS_LONPOLE, 999D0, 0, 0) IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, -1, 0, C0, GCODE, 0D0, 2, : GRID1, 1, GRID2, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * Draw the frame. CALL PGSCI (1) CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Plate Carree projection. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - Rectangular image. * - Dual coordinate grids. * - Non-separable (i.e. non-orthogonal) curvilinear coordinate * system. * - Demonstrate parameter definition for PGWCSL. * - Discontinuous grid lines handled by PGWCSL. * - Colour coding of grid and labelling. * - Reduced size lettering. * - Manual labelling control. * - Manual and automatic choice of coordinate increments. * - Cyclic coordinates. PGWCSL returns the longitude in the * range -180 to +180 degrees, i.e. with a discontinuity at * +/- 180 degrees. * - Suppression of labels that would overlap one another. WRITE (*, '(/,A)') 'Plate Carree projection' NAXIS(1) = 181 NAXIS(2) = 91 BLC(1) = 0.5 BLC(2) = 0.5 TRC(1) = NAXIS(1) + 0.5 TRC(2) = NAXIS(2) + 0.5 * Reset viewport for rectangular image. IF (LARGE) THEN CALL PGVSTD () ELSE CALL PGVSIZ (1.0, 3.0, 1.0, 3.0) END IF CALL PGWNAD (0.0, 1.0, 0.0, REAL(NAXIS(2))/REAL(NAXIS(1))) STATUS = WCSINI (2, WCS) * Set projection type to plate carree. CTYPE(1) = 'GLON-CAR' CTYPE(2) = 'GLAT-CAR' STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(1), 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(2), 2, 0) * Reference pixel coordinates. STATUS = WCSPUT (WCS, WCS_CRPIX, 226D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRPIX, 46D0, 2, 0) * Linear transformation matrix. ROTN = 15D0*D2R STATUS = WCSPUT (WCS, WCS_PC, COS(ROTN), 1, 1) STATUS = WCSPUT (WCS, WCS_PC, SIN(ROTN), 1, 2) STATUS = WCSPUT (WCS, WCS_PC, -SIN(ROTN), 2, 1) STATUS = WCSPUT (WCS, WCS_PC, COS(ROTN), 2, 2) * Coordinate increments. STATUS = WCSPUT (WCS, WCS_CDELT, -1D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CDELT, 1D0, 2, 0) * Set parameters to draw the native grid. STATUS = WCSPUT (WCS, WCS_CRVAL, 0D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, 0D0, 2, 0) * The reference pixel was defined so that the native longitude runs * from 225 deg to 45 deg and this will cause the grid to be * truncated at the 180 deg boundary. However, being a cylindrical * projection it is possible to recentre it in longitude. CYLFIX * will modify CRPIX, CRVAL, and LONPOLE to suit. CALL CYLFIX (NAXIS, WCS) * Annotation. IDENTS(1) = ' ' IDENTS(2) = ' ' IDENTS(3) = 'WCS plate caree projection' OPT(1) = 'C' OPT(2) = 'C' * Reduced size lettering. CALL PGSCH (0.8*SCL) * Draw full grid lines. GCODE(1) = 2 GCODE(2) = 2 * Draw native grid in green. CALL PGSCR (16, 0.0, 0.2, 0.0) * Title in cyan. CALL PGSCR (17, 0.3, 1.0, 1.0) CI(1) = 16 CI(2) = 16 CI(3) = 7 CI(4) = 7 CI(5) = -1 CI(6) = -1 CI(7) = 17 IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 2100, 0, CI, GCODE, 0D0, 0, : 15D0, 0, 15D0, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * Reset CRPIX previously modified by CYLFIX. STATUS = WCSPUT (WCS, WCS_CRPIX, 226D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRPIX, 46D0, 2, 0) * Galactic reference coordinates. STATUS = WCSPUT (WCS, WCS_CRVAL, 30D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, 35D0, 2, 0) STATUS = WCSPUT (WCS, WCS_LONPOLE, 999D0, 0, 0) CALL CYLFIX (NAXIS, WCS) * Annotation. IDENTS(1) = 'longitude' IDENTS(2) = 'latitude' IDENTS(3) = ' ' OPT(1) = 'E' OPT(2) = 'E' * Use colour to associate grid lines and labels. * Meridians in red. CALL PGSCR (10, 0.5, 0.0, 0.0) * Parallels in blue. CALL PGSCR (11, 0.0, 0.2, 0.5) * Longitudes in red. CALL PGSCR (12, 0.8, 0.3, 0.0) * Latitudes in blue. CALL PGSCR (13, 0.0, 0.4, 0.7) * Longitude labels in red. CALL PGSCR (14, 0.8, 0.3, 0.0) * Latitude labels in blue. CALL PGSCR (15, 0.0, 0.4, 0.7) CI(1) = 10 CI(2) = 11 CI(3) = 12 CI(4) = 13 CI(5) = 14 CI(6) = 15 CI(7) = -1 * Draw the celestial grid letting PGSBOX choose the increments. IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 21, 0, CI, GCODE, 0D0, 0, 0D0, : 0, 0D0, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, NLDPRM, 256, : IC, CACHE, IERR) * Draw the frame. CALL PGSCI (1) CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Plate Carree projection. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - BLC, TRC unrelated to pixel coordinates. * - Demonstrate parameter definition for PGWCSL. * - Poles and 180 meridian projected along edges of the frame. * - Reduced size lettering. * - Manual and automatic choice of coordinate increments. * - Suppression of common zero minute and second fields in * sexagesimal time format. WRITE (*, '(/,A)') 'Plate Carree projection' BLC(1) = -180.0 BLC(2) = -90.0 TRC(1) = 180.0 TRC(2) = +90.0 * Reset viewport for rectangular image. IF (LARGE) THEN CALL PGVSTD () ELSE CALL PGVSIZ (1.0, 3.0, 1.0, 3.0) END IF CALL PGWNAD (BLC(1), TRC(1), BLC(2), TRC(2)) STATUS = WCSINI (2, WCS) * Set projection type to plate carree. CTYPE(1) = 'RA---CAR' CTYPE(2) = 'DEC--CAR' STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(1), 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(2), 2, 0) * Reference pixel coordinates. STATUS = WCSPUT (WCS, WCS_CRPIX, 0D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRPIX, 0D0, 2, 0) * Coordinate increments. STATUS = WCSPUT (WCS, WCS_CDELT, -1D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CDELT, 1D0, 2, 0) * Set parameters to draw the native grid. STATUS = WCSPUT (WCS, WCS_CRVAL, 0D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, 0D0, 2, 0) * Annotation. IDENTS(1) = 'Right ascension' IDENTS(2) = 'Declination' IDENTS(3) = 'WCS plate caree projection' OPT(1) = 'G' OPT(2) = 'E' * Reduced size lettering. CALL PGSCH (0.7*SCL) * Draw full grid lines. GCODE(1) = 2 GCODE(2) = 2 CALL PGSCI (1) IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 2121, 1212, C0, GCODE, 0D0, 0, : 0D0, 0, 0D0, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, NLDPRM, : 256, IC, CACHE, IERR) * Draw the frame. CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Cylindrical perspective projection. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - BLC, TRC unrelated to pixel coordinates. * - Demonstrate parameter definition for PGWCSL. * - Reduced size lettering. * - Manual and automatic choice of coordinate increments. * - Suppression of common zero minute and second fields in * sexagesimal time format. WRITE (*, '(/,A)') 'Cylindrical perspective projection' BLC(1) = -180.0 BLC(2) = -90.0 TRC(1) = 180.0 TRC(2) = +90.0 * Reset viewport for rectangular image. IF (LARGE) THEN CALL PGVSTD () ELSE CALL PGVSIZ (1.0, 3.0, 1.0, 3.0) END IF CALL PGWNAD (BLC(1), TRC(1), BLC(2), TRC(2)) STATUS = WCSINI (2, WCS) * Set projection type to cylindrical perspective. CTYPE(1) = 'RA---CYP' CTYPE(2) = 'DEC--CYP' STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(1), 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(2), 2, 0) * Reference pixel coordinates. STATUS = WCSPUT (WCS, WCS_CRPIX, 0D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRPIX, 0D0, 2, 0) * Coordinate increments. STATUS = WCSPUT (WCS, WCS_CDELT, -1D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CDELT, 1D0, 2, 0) * Set parameters to draw the native grid. STATUS = WCSPUT (WCS, WCS_CRVAL, 45D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, -90D0, 2, 0) STATUS = WCSPUT (WCS, WCS_LONPOLE, 999D0, 0, 0) * mu and lambda projection parameters. STATUS = WCSPUT (WCS, WCS_PV, 0D0, 2, 1) STATUS = WCSPUT (WCS, WCS_PV, 1D0, 2, 2) * Annotation. IDENTS(1) = 'Right ascension' IDENTS(2) = 'Declination' IDENTS(3) = 'WCS cylindrical perspective projection' OPT(1) = 'G' OPT(2) = 'E' * Reduced size lettering. CALL PGSCH (0.7*SCL) * Draw full grid lines. GCODE(1) = 2 GCODE(2) = 2 CALL PGSCI (1) IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 2121, 1212, C0, GCODE, 0D0, 0, : 0D0, 0, 0D0, .TRUE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, NLDPRM, : 256, IC, CACHE, IERR) * Draw the frame. CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Gnomonic projection. * - PGSBOX uses subroutine PGWCSL to interface to WCSLIB. * - Demonstrate parameter definition for PGWCSL. * - Reduced size lettering. * - Manual and automatic choice of coordinate increments. * - Suppression of common zero minute and second fields in * sexagesimal time format. WRITE (*, '(/,A)') 'TAN projection' NAXIS(1) = 100 NAXIS(2) = 100 BLC(1) = 0.5 BLC(2) = 0.5 TRC(1) = NAXIS(1) + 0.5 TRC(2) = NAXIS(2) + 0.5 * Reset viewport for rectangular image. IF (LARGE) THEN CALL PGVSTD () ELSE CALL PGVSIZ (1.0, 3.0, 1.0, 3.0) END IF CALL PGWNAD (0.0, 1.0, 0.0, REAL(NAXIS(2))/REAL(NAXIS(1))) STATUS = WCSINI (2, WCS) * Set projection type to gnomonic. CTYPE(1) = 'RA---TAN' CTYPE(2) = 'DEC--TAN' STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(1), 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(2), 2, 0) * Reference pixel coordinates. STATUS = WCSPUT (WCS, WCS_CRPIX, 50.5D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRPIX, 1.0D0, 2, 0) * Coordinate increments. STATUS = WCSPUT (WCS, WCS_CDELT, 1D-3, 1, 0) STATUS = WCSPUT (WCS, WCS_CDELT, 1D-3, 2, 0) * Set parameters to draw the native grid. STATUS = WCSPUT (WCS, WCS_CRVAL, -45.0D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, -89.7D0, 2, 0) STATUS = WCSPUT (WCS, WCS_LONPOLE, 999D0, 0, 0) * Annotation. IDENTS(1) = 'Right ascension' IDENTS(2) = 'Declination' IDENTS(3) = 'WCS TAN projection' OPT(1) = 'E' OPT(2) = 'E' * Reduced size lettering. CALL PGSCH (0.7*SCL) * Draw full grid lines. GCODE(1) = 2 GCODE(2) = 2 CALL PGSCI (1) IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 0, 1212, C0, GCODE, 0D0, 0, : 0D0, 0, 0D0, .FALSE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * Draw the frame. CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Linear-linear plot with two types of alternative labelling. * - PGSBOX uses subroutine PGCRFN. * - Separable (i.e. orthogonal), linear coordinate system. * - Use of function PGCRFN for separable axis types. * - Alternative labelling and axis annotation. * - Direct manipulation of the axis-crossing table. * - Tick mark and grid line control. * - User selection of what edges to label. * - Automatic choice of coordinate increments. WRITE (*, '(/,A)') 'Linear plot with alternative labelling' IF (LARGE) THEN CALL PGVSTD () ELSE CALL PGVSIZ (1.0, 3.0, 1.0, 3.0) END IF CALL PGWNAD (0.0, 1.0, 0.0, 1.0) NAXIS(1) = 512 NAXIS(2) = 512 BLC(1) = 0.5 BLC(2) = 0.5 TRC(1) = NAXIS(1) + 0.5 TRC(2) = NAXIS(2) + 0.5 * Function types. FCODE(1) = 'Lin ' FCODE(2) = 'Lin ' * Reference pixel coordinates. NLDPRM(1) = 0.5D0 NLDPRM(2) = 0.5D0 * Coordinate increments. NLDPRM(3) = 0.03D0 NLDPRM(4) = 0.03D0 * Reference pixel values. NLDPRM(5) = 20D0 NLDPRM(6) = 0D0 * Annotation. IDENTS(1) = 'temperature of frog (' // ESCAPE // 'uo' // : ESCAPE // 'dC)' IDENTS(2) = 'distance hopped (m)' IDENTS(3) = ' ' OPT(1) = ' ' OPT(2) = ' ' * Reduced size lettering. CALL PGSCH (0.8*SCL) * Draw tick marks at the bottom for the first coordinate, grid lines * for the second. Setting GCODE(1) = -1 inhibits information being * stored for labels on the top edge while GCODE(2) = 2 causes * information to be stored for labels on the right edge even if * those labels are not actually produced. CALL PGSCI (1) GCODE(1) = -1 GCODE(2) = 2 * Set LABCTL = 21 to label the bottom and left edges only. IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 21, 0, C0, GCODE, 2D0, 0, 0D0, : 0, 0D0, .FALSE., PGCRFN, 8, 2, 4, FCODE, NLIPRM, NLDPRM, 256, : IC, CACHE, IERR) * Information for labels on the right edge was stored in the * crossing table on the first call to PGSBOX. We now want to * manipulate it to convert metres to feet. Note that while it's * a simple matter to draw alternative sets of tick marks on opposite * edges of the frame, as with the two temperature scales, we have * the slightly more difficult requirement of labelling grid lines * with different values at each end. DO 10 J = 1, IC * Look for entries associated with the right edge of the frame. IF (CACHE(1,J).EQ.4D0) THEN * Convert to feet, rounding to the nearest 0.1. CACHE(4,J) = CACHE(4,J) * 1D3/(25.4*12D0) CACHE(4,J) = AINT(CACHE(4,J)*10D0 + 0.5D0)/10D0 END IF 10 CONTINUE * Annotation for the right edge. IDENTS(1) = ' ' IDENTS(2) = '(feet)' * Set LABCTL = 12000 to label the right edge with the second * coordinate without redrawing the grid lines. CALL PGSBOX (BLC, TRC, IDENTS, OPT, 12000, 0, C0, GCODE, 2D0, 0, : 0D0, 0, 0D0, .FALSE., PGCRFN, 8, 2, 4, FCODE, NLIPRM, NLDPRM, : 256, IC, CACHE, IERR) * The alternative temperature scale in Fahrenheit is to be * constructed with a new set of tick marks. NLDPRM(3) = NLDPRM(3)*1.8D0 NLDPRM(5) = NLDPRM(5)*1.8D0 + 32D0 * Draw tick marks at the top for the first coordinate, don't redo * grid lines for the second. GCODE(1) = -100 GCODE(2) = 0 * Annotation for the top edge. IDENTS(1) = '(' // ESCAPE // 'uo' // ESCAPE // 'dF)' IDENTS(2) = ' ' * Set LABCTL = 100 to label the top edge; Set IC = -1 to redetermine * the coordinate extrema. IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 100, 0, C0, GCODE, 2D0, 0, : 0D0, 0, 0D0, .FALSE., PGCRFN, 8, 2, 4, FCODE, NLIPRM, NLDPRM, : 256, IC, CACHE, IERR) * Draw the frame. CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Calendar axes using subroutine PGLBOX. * - Separable (i.e. orthogonal), linear coordinate system. * - Use of PGLBOX for simple linear axis types. * - Automatic choice of what edges to label; results in labelling * the bottom and left sides of the plot. * - Automatic choice of coordinate increments. * - Calendar date axis labelling. * - Single-character annotation on a vertical axis is upright. WRITE (*, '(/,A)') 'Calendar axes using subroutine PGLBOX' CALL PGSWIN (51900.0, 52412.0, 51900.0, 57020.0) * Annotation. IDENTS(1) = 'Date started' IDENTS(2) = 'Date finished' IDENTS(3) = 'Calendar axes using subroutine PGLBOX' OPT(1) = 'Y' OPT(2) = 'Y' * Reduced size lettering. CALL PGSCH (0.7*SCL) * Draw tick marks on each axis. CALL PGSCI (1) GCODE(1) = 1 GCODE(2) = 1 IC = -1 CALL PGLBOX (IDENTS, OPT, 0, 0, C0, GCODE, 2D0, 0, 0D0, 0, 0D0, : .FALSE., 256, IC, CACHE, IERR) * Draw the frame. CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- * Simple linear axes handled by PGWCSL. * - Separable (i.e. orthogonal), linear coordinate system. * - Automatic choice of what edges to label; results in labelling * the bottom and left sides of the plot. * - Automatic choice of coordinate increments. * - Tick marks and labels at the edges of the frame. * - Single-character annotation on a vertical axis is upright. WRITE (*, '(/,A)') 'Simple linear axes handled by pgwcsl()' NAXIS(1) = 3 NAXIS(2) = 3 BLC(1) = 0.5 BLC(2) = 0.5 TRC(1) = NAXIS(1) + 0.5 TRC(2) = NAXIS(2) + 0.5 STATUS = WCSINI (2, WCS) CTYPE(1) = 'X' CTYPE(2) = 'Y' STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(1), 1, 0) STATUS = WCSPUT (WCS, WCS_CTYPE, CTYPE(2), 2, 0) * Reference pixel coordinates. STATUS = WCSPUT (WCS, WCS_CRPIX, 2D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRPIX, 2D0, 2, 0) * Coordinate increments. STATUS = WCSPUT (WCS, WCS_CDELT, 1D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CDELT, 1D0, 2, 0) * Spherical coordinate references. STATUS = WCSPUT (WCS, WCS_CRVAL, 2D0, 1, 0) STATUS = WCSPUT (WCS, WCS_CRVAL, 2D0, 2, 0) * Annotation. IDENTS(1) = 'X' IDENTS(2) = 'Y' IDENTS(3) = 'Simple linear axes handled by pgwcsl()' OPT(1) = ' ' OPT(2) = ' ' * Reduced size lettering. CALL PGSCH (0.8*SCL) * Draw tick marks only. CALL PGSCI (1) GCODE(1) = 1 GCODE(2) = 1 IC = -1 CALL PGSBOX (BLC, TRC, IDENTS, OPT, 0, 0, C0, GCODE, 2D0, 0, : 0D0, 0, 0D0, .FALSE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, : NLDPRM, 256, IC, CACHE, IERR) * Draw the frame. CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) CALL PGPAGE () *----------------------------------------------------------------------- STATUS = WCSFREE (WCS) CALL PGASK (0) CALL PGEND () END pywcs-1.12/wcslib/pgsbox/pgwcsl.c0000644001153600020070000001543312310355626021104 0ustar cslocumSTSCI\science00000000000000/*============================================================================ PGSBOX 4.10 - draw curvilinear coordinate axes for PGPLOT. Copyright (C) 1997-2012, Mark Calabretta This file is part of PGSBOX. PGSBOX is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PGSBOX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with PGSBOX. If not, see . Correspondence concerning PGSBOX may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: pgwcsl.c,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *===========================================================================*/ #include #include #include /* Fortran name mangling. */ #include #define pgwcsl_ F77_FUNC(pgwcsl, PGWCSL) void pgwcsl_(opcode, nlc, nli, nld, nlcprm, wcs, nldprm, world, pixel, contrl, contxt, ierr) const int *opcode, *nlc, *nli, *nld; const char *nlcprm; int *wcs; double *nldprm; double *world; double *pixel; int *contrl; double contxt[20]; int *ierr; { int i, outside, stat; double dp, imgcrd[9], lat, lng, ph, phi, sdummy, th, theta; static double wrld[9]; struct wcsprm *wcsp; struct celprm *wcscel; *ierr = 0; wcsp = (struct wcsprm *)wcs; wcscel = &(wcsp->cel); if (*opcode == 2) { /* Compute pixel coordinates from world coordinates. */ if (wcsp->lng < 0) { /* Simple linear coordinates. */ if (wcss2p(wcsp, 1, 0, world, &phi, &theta, imgcrd, pixel, &stat)) { *ierr = 1; } return; } wrld[wcsp->lng] = world[0]; if (world[1] > 90.0) { wrld[wcsp->lat] = 90.0; outside = -2; } else if (world[1] < -90.0) { wrld[wcsp->lat] = -90.0; outside = -2; } else { wrld[wcsp->lat] = world[1]; outside = 0; } if (*contrl == 0) { if (wcss2p(wcsp, 1, 0, wrld, &phi, &theta, imgcrd, pixel, &stat)) { /* Translate status return values. */ *ierr = stat ? 2 : 1; return; } if (fabs(phi-contxt[2]) > 180.0) { /* Hit a discontinuity at phi = +/- 180. */ contxt[4] = pixel[0]; contxt[5] = pixel[1]; if (contxt[2] > phi) { ph = 179.9999; dp = (phi - contxt[2]) + 360.0; } else { ph = -179.9999; dp = (phi - contxt[2]) - 360.0; } /* First approximation for theta. */ if (dp == 0.0) { th = contxt[3]; } else { th = contxt[3] + (ph-contxt[2])*(theta-contxt[3])/dp; } /* Iterate once to refine the value of theta. */ sphx2s(wcscel->euler, 1, 1, 1, 1, &ph, &th, &lng, &lat); if (wrld[wcsp->lng] == contxt[0]) { /* We are following a meridian of longitude. */ lng = wrld[wcsp->lng]; } else { /* We are following a parallel of latitude. */ lat = wrld[wcsp->lat]; } sphs2x(wcscel->euler, 1, 1, 1, 1, &lng, &lat, &sdummy, &th); contxt[0] = wrld[wcsp->lng]; contxt[1] = wrld[wcsp->lat]; contxt[2] = phi; contxt[3] = theta; /* Pixel coordinates crossing into the discontinuity. */ sphx2s(wcscel->euler, 1, 1, 1, 1, &ph, &th, wrld+wcsp->lng, wrld+wcsp->lat); if (wcss2p(wcsp, 1, 0, wrld, &phi, &theta, imgcrd, pixel, &stat)) { /* Translate status return values. */ *ierr = stat ? 2 : 1; return; } /* Pixel coordinates crossing out of the discontinuity. */ ph *= -1.0; sphx2s(wcscel->euler, 1, 1, 1, 1, &ph, &th, wrld+wcsp->lng, wrld+wcsp->lat); if (wcss2p(wcsp, 1, 0, wrld, &phi, &theta, imgcrd, contxt+6, &stat)) { /* Translate status return values. */ *ierr = stat ? 2 : 1; return; } *contrl = 1; } else { /* Normal mode, no discontinuity. */ contxt[0] = wrld[wcsp->lng]; contxt[1] = wrld[wcsp->lat]; contxt[2] = phi; contxt[3] = theta; } } else { if (*contrl == 1) { /* Move to the other side of the discontinuity. */ pixel[0] = contxt[6]; pixel[1] = contxt[7]; *contrl = 2; } else { /* Complete the traversal. */ pixel[0] = contxt[4]; pixel[1] = contxt[5]; *contrl = 0; } } *ierr = outside; } else if (*opcode == 1) { /* Compute pixel coordinates from world coordinates. */ if (wcsp->lng < 0) { /* Simple linear coordinates. */ if (wcss2p(wcsp, 1, 0, world, &phi, &theta, imgcrd, pixel, &stat)) { *ierr = 1; } return; } wrld[wcsp->lng] = world[0]; if (world[1] > 90.0) { wrld[wcsp->lat] = 90.0; outside = -2; } else if (world[1] < -90.0) { wrld[wcsp->lat] = -90.0; outside = -2; } else { wrld[wcsp->lat] = world[1]; outside = 0; } if (wcss2p(wcsp, 1, 0, wrld, &phi, &theta, imgcrd, pixel, &stat)) { /* Translate status return values. */ *ierr = stat ? 2 : 1; return; } contxt[0] = wrld[wcsp->lng]; contxt[1] = wrld[wcsp->lat]; contxt[2] = phi; contxt[3] = theta; *ierr = outside; } else if (*opcode == 0) { /* Initialize. */ if (*nli < WCSLEN) { *ierr = 1; return; } if ((*ierr = wcsset(wcsp))) { *ierr = *ierr <= 2 ? 1 : 2; } for (i = 2; i < 9; i++) { wrld[i] = 0.0; } *contrl = 0; } else if (*opcode == -1) { /* Compute world coordinates from pixel coordinates. */ if (wcsp2s(wcsp, 1, 0, pixel, imgcrd, &phi, &theta, wrld, &stat)) { /* Translate status return values. */ *ierr = stat ? 3 : 1; return; } if (wcsp->lng < 0) { /* Simple linear coordinates. */ world[0] = wrld[0]; world[1] = wrld[1]; } else { world[0] = wrld[wcsp->lng]; world[1] = wrld[wcsp->lat]; if (phi < -180.0 || phi > 180.0) { /* Pixel is outside the principle range of native longitude. */ *ierr = 3; return; } } } else { *ierr = 1; } return; } pywcs-1.12/wcslib/pgsbox/pgwcsl.h0000644001153600020070000001244412310355626021110 0ustar cslocumSTSCI\science00000000000000/*============================================================================ PGSBOX 4.10 - draw curvilinear coordinate axes for PGPLOT. Copyright (C) 1997-2012, Mark Calabretta This file is part of PGSBOX. PGSBOX is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PGSBOX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with PGSBOX. If not, see . Correspondence concerning PGSBOX may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: pgwcsl.h,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *============================================================================= * * pgwcsl_() is an NLFUNC for PGSBOX that defines curvilinear celestial * coordinate systems by interfacing to WCSLIB 4.x. * * Since WCSLIB 4.x is a C library, pgwcsl_() is written in C. However, as * PGSBOX expects NLFUNC to be a FORTRAN subroutine, its interfaces * necessarily emulate those of a FORTRAN subroutine. Hence the trailing * underscore in the name of the function and the pointer (reference) * argument list. * * The wcsprm struct on which WCSLIB 4.x is based is passed as an integer * array of size WCSLEN at least (WCSLEN is defined in wcs.h). While the * contents of this array are not interpretable in FORTRAN, it may be * constructed and interrogated by service routines (WCSPUT and WCSGET) * provided with the FORTRAN wrappers for WCSLIB 4.x. The array is cast to * (struct wcsprm *) for use here and in WCSLIB. * * Given: * opcode int* Transformation code: * 2: Compute a set of pixel coordinates that * describe a path between this and the previous * pair of world coordinates remembered from the * last call with opcode == 1 || 2. * 1: Compute pixel coordinates from world * coordinates. * 0: Initialize. * -1: Compute world coordinates from pixel * coordinates. * * nlc int* Number of elements in nlcprm[] (not used). * * nli int* Number of elements in wcs (at least WCSLEN). * * nld int* Number of elements in nldprm (not used). * * nlcprm char[nlc] * Character array (not used). * * Given and/or returned: * wcs int[nli] Integer array that contains the wcsprm struct (see * below). * * nldprm double[nld] * Double precision array (not used). * * world double[2] * World coordinates. world[0] and world[1] are the * longitude and latitude, in degrees. Given if * opcode > 0, returned if opcode < 0. * * pixel double[2] * Pixel coordinates. Given if opcode < 0, returned if * opcode > 0. * * contrl int* Control flag for opcode == 2: * 0: Normal state * 1: A discontinuity has been encountered; force * PGSBOX to flush its plotting buffer and call * pgwcsl_() again with the same world * coordinates. * 2: Call pgwcsl_() again with the same world * coordinates. * * contxt double[20] * Context elements for opcode == 2. * * Returned: * ierr int* Status return value: * 0: Success. * 1: Invalid parameters. * 2: Invalid world coordinate. * 3: Invalid pixel coordinate. * * Notes * ----- * 1) pgwcsl_() assumes a simple 2-D image. * * 2) The wcsprm struct (contained in the wcs[] array) is maintained by * pgwcsl_() and WCSLIB and must not be disturbed by the caller after * initialization with opcode == 0. * * 3) pgwcsl_() doesn't properly handle discontinuities between the faces * of the quadcube projections nor in the polar region of the HPX * projection. * * *===========================================================================*/ #ifndef PGSBOX_PGWCSL #define PGSBOX_PGWCSL #include "cpgsbox.h" /* Fortran name mangling. */ #include #define pgwcsl_ F77_FUNC(pgwcsl, PGWCSL) #ifdef __cplusplus extern "C" { #endif nlfunc_t pgwcsl_; #ifdef __cplusplus } #endif #endif /* PGSBOX_PGWCSL */ pywcs-1.12/wcslib/README0000644001153600020070000000407712310355626017021 0ustar cslocumSTSCI\science00000000000000------------------------------------------------------------------------------ WCSLIB 4.10 and PGSBOX 4.10 ------------------------------------------------------------------------------ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA ------------------------------------------------------------------------------ Please refer to ./INSTALL ...Installation instructions. ./html/index.html ...The WCSLIB programmer's manual in HTML format. ./wcslib.pdf ...The WCSLIB programmer's manual in PDF format. ./CHANGES ...Log of changes made to WCSLIB. ./THANKS ...List of contributors to WCSLIB. ./VALIDATION ...List of platforms on which the installation procedures and test suite were exercised. ./COPYING ...A copy of the GNU General Public License, v3.0. ./COPYING.LESSER ...A copy of the Lesser GNU General Public License. Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: README,v 4.10 2012/02/05 23:41:45 cal103 Exp $ pywcs-1.12/wcslib/THANKS0000644001153600020070000000414312310355626017046 0ustar cslocumSTSCI\science00000000000000I would like to acknowledge the following people who have contributed to WCSLIB and/or PGSBOX in some way since 1995 - via bug reports, patches, suggestions for improvements, positive feedback, etc. James M. Anderson (MPIfR) Robbie Auld (Cardiff U.) Klaus Banse (ESO) David Barnes (ATNF/CSIRO) David Berry (STARLINK & JAC) Emmanuel Bertin (IAP) Jeremy Brewer (U. Pittsburgh) Wim Brouw (ATNF/CSIRO) Peter Bunclark (IoA, U. Cambridge) Pan Chai (GSFC/NASA) Charles Copley Neil Crighton Cesar Enrique Garcia Dabo (ESO) Lindsey Davis (NOAO) Ger van Diepen (ASTRON) Patrick Dowler (CADC/NRC) Michael Droettboom (STScI) Rick Ebert (IPAC/NASA) Ken Ebisawa (GSFC/NASA) Sébastien Fabbro (Gentoo linux maintainer) Bob Garwood (NRAO) Brian Glendenning (NRAO) Eric Greisen (NRAO) Michael Halle (AM/Harvard) Booth Hartley (IPAC/NASA) Phil Hodge (STScI) Bryan Irby (GSFC/NASA) Justin Jonas (Rhodes U.) Yves Jung (ESO) David Kaplan (KITP/UCSB) Daniel S. Katz (JPL/NASA) Neil Killeen (ATNF/CSIRO) David King (NRAO) Paul F. Kunz (SLAC/Stanford U.) Jonas Møller Larsen (ESO) Jim Lewis (IoA, U. Cambridge) Marco Lombardi (ESO) Lars Kristian Lundin (ESO) Robert Lupton (Princeton U.) Craig Markwardt (GSFC/NASA) Malte Marquarding (ATNF/CSIRO) Tom Marsh (U. Warwick) Sean Mattingly (IPAC/NASA) Dave McConnell (ATNF/CSIRO) Thomas A. McGlynn (GSFC/NASA) Michelle Miller (NOAO) Doug Mink (CfA) August Muench (CfA) Fergal Mullally (Princeton U.) Clive Page (U. Leicester) Sergio Pascual (U. Complutense de Madrid) Bill Pence (NASA/GSFC) Olivier Perdereau (LAL/IN2P3) Dirk Petry (ESO) Ray Plante (NCSA/UIUC) Niruj Mohan Ramanujam (Leiden Obs) Harold Ravlin (U. Illinois) Boud Roukema (TCfA) Keith A. Scollick (GSFC/NASA) Arno Schoenmakers (ASTRON) Hanno Spreeuw (ASTRON) Ole Streicher (Debian maintainer) Hans Terlouw (Kapteyn, Groningen) Peter Teuben (U. Maryland) Harro Verkouter (JIVE) John C. Vernaleo (GSFC/NASA) Martin Vogelaar (Kapteyn, Groningen) Stephen Walton (CSUN) Boyd Waters NRAO) Randall Wayth (Curtin U.) Matthew Whiting (ATNF/CSIRO) Peter Williams (UCB) Daren Scot Wilson (NRAO) Tony Wong (ATNF/CSIRO) $Id: THANKS,v 4.10 2012/02/05 23:41:45 cal103 Exp $ pywcs-1.12/wcslib/utils/0000755001153600020070000000000012310355732017267 5ustar cslocumSTSCI\science00000000000000pywcs-1.12/wcslib/utils/fitshdr.c0000644001153600020070000002213312310355626021101 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: fitshdr.c,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *============================================================================= * Usage: fitshdr [infile] *----------------------------------------------------------------------------- * List headers from a FITS file specified on the command line, or else on * stdin, printing them as 80-character keyrecords without trailing blanks. * * If invoked as 'rpfhdr' rather than 'fitshdr' it also handles RPFITS format * which has a block size of 2560 (rather than 2880) but otherwise looks like * FITS. * * Handles large files (>2GiB) via macros in wcsconfig_utils.h. *---------------------------------------------------------------------------*/ char usage[] = "List headers from a FITS file specified on the command line, or else on\n" "stdin, printing them as 80-character keyrecords without trailing blanks.\n" "\n" "Options:\n" " -q N Quit after reading the Nth header, where N is an integer\n" " (optional space between -q and N).\n"; /* Get LFS definitions for stdio.h. */ #include #include #include #include #include #include #include #include int main(int argc, char **argv) { char cbuff[2880], *cptr; char dashes[84] = "----------------------------------------" "----------------------------------------"; char equals[84] = "========================================" "========================================"; char spaces[84] = " " " "; char *format, rpfits[8] = "RPFITS"; int i, len; unsigned int blksiz = 2880, ihdr = 0, inhdr = 0, nhdr = 0, seekable = 1; unsigned long long int iblock = 0, nblock = 0, nbyte; struct stat instat; /* Parse options. */ for (i = 1; i < argc && argv[i][0] == '-'; i++) { switch (argv[i][1]) { case 'q': if (strlen(argv[i]) == 2) { nhdr = atoi(&argv[++i][0]); } else { nhdr = atoi(&argv[i][2]); } break; default: fprintf(stderr, "\nUsage: fitshdr [-q N] []\n\n%s\n", usage); return 1; } } /* If an input file name was specified then reopen it as stdin */ /* (doesn't affect seekability). */ if (i < argc) { if (access(argv[i], R_OK) == -1) { perror(argv[i]); return 2; } if (freopen(argv[i], "r", stdin) == NULL) { perror(argv[i]); return 2; } } /* Check for standard FITS or RPFITS. */ if (!fread(cbuff, (size_t)80, (size_t)1, stdin)) { perror(argv[i]); return 2; } if (strncmp(cbuff, "SIMPLE = ", 10) == 0) { if (!fread(cbuff+80, (size_t)80, (size_t)1, stdin)) { perror(argv[i]); return 2; } /* Assume FITS by default. */ format = rpfits + 2; blksiz = 2880; /* Check for RPFITS. */ if (strncmp(cbuff+80, "FORMAT = RPFITS", 30) == 0 || strncmp(cbuff+80, "FORMAT = 'RPFITS'", 30) == 0) { if (strcmp(*argv, "rpfhdr") == 0) { /* If invoked as 'rpfhdr' then allow RPFITS. */ format = rpfits; blksiz = 2560; } else { /* Otherwise disallow RPFITS but issue a warning. */ printf("WARNING: Input appears to be RPFITS, continuing anyway using " "2880-byte blocks.\n" ); } } /* Read the rest of the first block. */ if (!fread(cbuff+160, (size_t)(blksiz-160), (size_t)1, stdin)) { perror(argv[i]); return 2; } inhdr = 1; } else { /* If we have not been invoked as 'rpfhdr' then bail out now. */ if (strcmp(*argv, "rpfhdr") != 0) { fprintf(stderr, "Input file does not appear to be standard FITS.\n" ); return 1; } /* RPFITS may have a block or two of rubbish before the first header. */ format = rpfits; blksiz = 2560; if (!fread(cbuff+80, (size_t)(blksiz-80), (size_t)1, stdin)) { perror(argv[i]); return 2; } while (iblock < 4) { if (!fread(cbuff, (size_t)blksiz, (size_t)1, stdin)) { perror(argv[i]); return 2; } iblock++; if (strncmp(cbuff, "SIMPLE = ", 10) == 0) { inhdr = 1; break; } } if (!inhdr) { fprintf(stderr, "Input does not appear to be FITS or RPFITS.\n" ); return 1; } if (iblock) { nbyte = blksiz * iblock; printf("Skipped %lld block%s of rubbish of size %d bytes (%lld " "bytes).\n", iblock, (iblock > 1)?"s":"", blksiz, nbyte); } } printf("%s\n%s header number %d at block number %lld.\n%s\n", equals, format, ++ihdr, ++iblock, dashes); /* Scan through the file. */ while (1) { if (!inhdr) { /* Searching for a header. */ if (!fread(cbuff, (size_t)10, (size_t)1, stdin)) break; if (strncmp(cbuff, "SIMPLE = ", 10) == 0 || strncmp(cbuff, "XTENSION= ", 10) == 0) { /* Found a header. */ if (iblock) { nbyte = blksiz * nblock; printf("Skipped %lld block%s of data of size %d bytes (%lld " "bytes).\n", nblock, (nblock == 1)?"":"s", blksiz, nbyte); } if (!fread(cbuff+10, (size_t)(blksiz-10), (size_t)1, stdin)) break; printf("%s\n%s header number %d at block number %lld.\n%s\n", equals, format, ++ihdr, ++iblock, dashes); inhdr = 1; nblock = 0; } else { /* Seek past it if possible. */ if (seekable) { #ifdef HAVE_FSEEKO if (fseeko(stdin, (off_t)(blksiz-10), SEEK_CUR)) { #else if (fseek(stdin, (long)(blksiz-10), SEEK_CUR)) { #endif if (errno == ESPIPE || errno == EBADF) { seekable = 0; } else { break; } } } if (!seekable) { if (!fread(cbuff+10, (size_t)(blksiz-10), (size_t)1, stdin)) break; } iblock++; } } if (inhdr) { for (cptr = cbuff; cptr < cbuff + blksiz; cptr += 80) { /* Write out a keyrecord without trailing blanks. */ for (len = 80; len > 0; len--) { if (cptr[len-1] != ' ') break; } printf("%.*s\n", len, cptr); /* Check for end-of-header. */ if (strncmp(cptr, "END ", 8) == 0) { inhdr = 0; printf("%s\n", dashes); fflush(stdout); break; } } /* Get the next header block. */ if (inhdr) { if (!fread(cbuff, (size_t)blksiz, (size_t)1, stdin)) break; iblock++; } } else { if (!nblock) { if (nhdr && ihdr == nhdr) { printf("Stopping at data section number %d which begins at block " "number %lld.\n", ihdr, iblock); return 0; } printf("Data section number %d beginning at block number %lld.\n", ihdr, iblock); } nblock++; if (nblock%1000 == 0) { /* Report progress on stderr in case it's saved to file. */ nbyte = blksiz * nblock; fprintf(stderr, "Skipping %lld blocks of data of size %d bytes " "(%lld bytes). \r", nblock, blksiz, nbyte); fflush(stderr); } } } if (feof(stdin)) { nbyte = blksiz * nblock; printf("Skipped %lld block%s of data of size %d bytes (%lld bytes). \n", nblock, (nblock == 1)?"":"s", blksiz, nbyte); nbyte = blksiz * iblock; printf("%s\nEnd-of-file after %d HDU%s in %lld x %d-byte blocks (%lld " "bytes).\n", equals, ihdr, (ihdr == 1)?"":"s", iblock, blksiz, nbyte); if (argc > 1 && !stat(argv[i], &instat)) { if (nbyte != instat.st_size) { printf("WARNING: File is too short by %lld bytes.\n", nbyte - instat.st_size); } } printf("%s\n", dashes); fprintf(stderr, "%s\r", spaces); } else { perror(argv[i]); return 2; } return 0; } pywcs-1.12/wcslib/utils/GNUmakefile0000644001153600020070000000767212310355626021357 0ustar cslocumSTSCI\science00000000000000#----------------------------------------------------------------------------- # GNU makefile for WCSLIB 4.10 utilities: fitshdr, HPXcvt, wcsgrid and wcsware. # # Summary of the main targets # --------------------------- # build: Build all utilities. # clean (or cleaner): Delete intermediate object files. # distclean (or realclean): cleaner, and also delete the executables. # cleanest: distclean, and also delete the man pages. # # Notes: # 1: If you need to make changes then preferably modify ../makedefs.in # instead and re-run configure. # # 2: In compiling these utilities, this makefile assumes that the WCSLIB 4.10 # sources reside in ../{pgsbox,C} (as in the distribution kit). # # Author: Mark Calabretta, Australia Telescope National Facility # http://www.atnf.csiro.au/~mcalabre/index.html # $Id: GNUmakefile,v 4.10 2012/02/05 23:41:45 cal103 Exp $ #----------------------------------------------------------------------------- # Get configure settings. include ../makedefs UTILS := fitshdr ifneq "$(CFITSIOINC)" "" ifneq "$(CFITSIOLIB)" "" UTILS += HPXcvt wcsware ifneq "$(PGPLOTINC)" "" ifneq "$(PGPLOTLIB)" "" UTILS += wcsgrid endif endif endif endif MAN := $(addsuffix .1,$(UTILS)) WCSLIB := ../C/$(WCSLIB) PGSBOXLIB := ../pgsbox/libpgsbox-$(LIBVER).a ifneq "$(GETWCSTAB)" "" GETWCSTAB := ../C/$(GETWCSTAB) endif CPPFLAGS += -I.. -I../C vpath %.h ..:../C:../pgsbox vpath %.in .. # Static and static pattern rules #-------------------------------- .PHONY : build clean cleaner cleanest distclean install man realclean build : $(UTILS) fitshdr : fitshdr.c -@ echo '' $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@.o $< $(LD) -o $@ $@.o $(LDFLAGS) $(LIBS) -@ $(RM) $@.o HPXcvt : HPXcvt.c -@ echo '' $(CC) $(CPPFLAGS) $(CFITSIOINC) $(CFLAGS) -c -o $@.o $< $(LD) -o $@ $@.o $(LDFLAGS) $(CFITSIOLIB) $(LIBS) -@ $(RM) $@.o wcsware : wcsware.c $(GETWCSTAB) $(WCSLIB) -@ echo '' $(CC) -DDO_CFITSIO $(CPPFLAGS) -I../pgsbox -I../C $(CFITSIOINC) \ $(CFLAGS) -c -o $@.o $< $(LD) $(LDFLAGS) -o $@ $@.o $(GETWCSTAB) $(CFITSIOLIB) $(WCSLIB) \ $(FLIBS) $(LIBS) -@ $(RM) $@.o wcsgrid : wcsgrid.c $(PGSBOXLIB) $(GETWCSTAB) $(WCSLIB) -@ echo '' $(CC) -DDO_CFITSIO $(CPPFLAGS) -I../pgsbox -I../C $(PGPLOTINC) \ $(CFITSIOINC) $(CFLAGS) -c -o $@.o $< $(LD) $(LDFLAGS) -o $@ $@.o $(PGSBOXLIB) $(PGPLOTLIB) \ $(GETWCSTAB) $(CFITSIOLIB) $(WCSLIB) $(FLIBS) $(LIBS) -@ $(RM) $@.o ../C/getwcstab.o : $(MAKE) -C ../C $(@F) clean cleaner : - $(RM) -r *.o *.i a.out core *.dSYM $(EXTRA_CLEAN) distclean realclean : cleaner - $(RM) $(UTILS) cleanest : distclean - $(RM) $(MAN) $(PGSBOXLIB) : -@ echo '' $(MAKE) -C ../pgsbox lib $(WCSLIB) : -@ echo '' $(MAKE) -C ../C lib install : build - if [ ! -d "$(BINDIR)" ] ; then \ $(INSTALL) -d -m 2775 $(BINDIR) ; \ fi $(INSTALL) -m 755 $(UTILS) $(BINDIR) - if [ ! -d "$(MANDIR)" ] ; then \ $(INSTALL) -d -m 2775 $(MANDIR)/man1 ; \ fi $(INSTALL) -m 755 $(MAN) $(MANDIR)/man1 GNUmakefile : ../makedefs ; ../makedefs ../wcsconfig.h ../wcsconfig_utils.h : makedefs.in wcsconfig.h.in \ wcsconfig_utils.h.in ../config.status -@ $(RM) ../wcsconfig.h ../wcsconfig_utils.h cd .. && ./config.status man : $(MAN) fitshdr.1 : fitshdr help2man --no-discard-stderr --version-string=$(LIBVER) \ -n "List headers from a FITS file" -N ./$< > $@ wcsware.1 : wcsware help2man --no-discard-stderr --version-string=$(LIBVER) \ -n "Extract WCS keywords for an image" -N ./$< > $@ wcsgrid.1 : wcsgrid help2man --no-discard-stderr --version-string=$(LIBVER) \ -n "Extract WCS keywords for an image" -N ./$< > $@ HPXcvt.1 : HPXcvt help2man --no-discard-stderr --version-string=$(LIBVER) \ -n "Reorganise HEALPix data into a 2-D FITS image" -N ./$< > $@ # Dependency lists. fitshdr : wcsconfig.h wcsconfig_utils.h wcsware : getwcstab.h wcs.h wcsfix.h wcshdr.h wcsgrid : cpgsbox.h getwcstab.h wcs.h wcsfix.h wcshdr.h pywcs-1.12/wcslib/utils/HPXcvt.c0000644001153600020070000006621712310355626020625 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: HPXcvt.c,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *============================================================================= * * HPXcvt reorganises HEALPix data into a 2-D FITS image. Refer to the usage * notes below. * *---------------------------------------------------------------------------*/ char usage[] = "Usage: HPXcvt [-C] [-c] [-n|-r] [-q] [-x]\n" " [ []]\n" "\n" "HPXcvt reorganises HEALPix data into a 2-D FITS image with HPX coordinate\n" "system. The input data may be stored in a FITS file as a primary image\n" "or image extension, or as a binary table extension. Both NESTED and RING\n" "pixel indices are supported. The input and output files may be omitted or\n" "specified as \"-\" to indicate stdin and stdout respectively.\n" "\n" "Options:\n" " -C Binary table column number from which to read data,\n" " default 1 (n.b. WMAP exclusion masks are in column 2).\n" "\n" " -c Specify the coordinate system to be used to label the\n" " output map if the COORDSYS keyword is absent from the input\n" " FITS header. Recognised values are g (galactic),\n" " e (ecliptic) or q (equatorial).\n" "\n" " -n|-r Assume n(ested) or r(ing) organization if the ORDERING\n" " keyword is absent from the input FITS header.\n" "\n" " -q Recentre longitude at quad(mod 4) x 90 degrees, where\n" " quad(rant) is an integer.\n" "\n" " -x Use a north-polar or south-polar layout.\n"; #include #include #include #include #include #include #include #include #define HEALPIX_NULLVAL (-1.6375e30) struct healpix { char *infile; /* Input file. */ char *outfile; /* Output file. */ int col; /* Input binary table column number. */ char crdsys; /* G(alactic), E(cliptic), or (e)Q(uatorial). */ char ordering; /* R(ing) or N(ested). */ char layout; /* Required output layout, */ /* 0: equatorial (default), */ /* 1: north, or */ /* 2: south. */ char quad; /* Recentre longitude on quadrant (modulo 4). */ int nside; /* Dimension of a base-resolution pixel. */ long npix; /* Total number of pixels in the data array. */ float *data; /* Pointer to memory allocated to hold data. */ }; int HEALPixIn(struct healpix *hpxdat); int HPXout(struct healpix *hpxdat); int NESTidx(int nside, int facet, int rotn, int row, long *healidx); int RINGidx(int nside, int facet, int rotn, int row, long *healidx); int HPXhdr(fitsfile *fptr, struct healpix *hpxdat); int main(int argc, char **argv) { int crdsys, i, layout, quad, status; struct healpix hpxdat; hpxdat.col = 1; hpxdat.crdsys = '?'; hpxdat.ordering = '?'; hpxdat.layout = 0; hpxdat.quad = 0; /* Parse options. */ for (i = 1; i < argc && argv[i][0] == '-'; i++) { if (!argv[i][1]) break; switch (argv[i][1]) { case 'C': hpxdat.col = atoi(argv[i]+2); if (hpxdat.col < 1) hpxdat.col = 1; break; case 'c': crdsys = toupper(argv[i][2]); switch (crdsys) { case 'G': case 'E': case 'Q': hpxdat.crdsys = (char)crdsys; }; break; case 'n': hpxdat.ordering = 'N'; break; case 'q': quad = atoi(argv[i]+2)%4; if (quad < 0) quad += 4; hpxdat.quad = (char)quad; break; case 'r': hpxdat.ordering = 'R'; break; case 'x': layout = toupper(argv[i][2]); switch (layout) { case 'N': hpxdat.layout = 1; break; case 'S': hpxdat.layout = 2; break; }; break; default: fprintf(stderr, "%s", usage); return 1; } } if (i < argc) { hpxdat.infile = argv[i++]; if (i < argc) { hpxdat.outfile = argv[i++]; if (i < argc) { fprintf(stderr, "%s", usage); return 1; } } else { hpxdat.outfile = "-"; } } else { hpxdat.infile = "-"; } /* Check accessibility of the input file. */ if (strcmp(hpxdat.infile, "-") && access(hpxdat.infile, R_OK) == -1) { printf("HPXcvt: Cannot access %s.\n", hpxdat.infile); return 1; } /* Get the HEALPix data as a vector. */ if ((status = HEALPixIn(&hpxdat))) { return 2; } if (hpxdat.ordering == '?') { fprintf(stderr, "WARNING: ORDERING keyword absent, assuming RING.\n"); hpxdat.ordering = 'r'; } printf("HPXcvt: Read 12 * %d^2 = %ld pixels with %s indexing.\n", hpxdat.nside, hpxdat.npix, (hpxdat.ordering == 'N') ? "nested" : "ring"); /* Map and write it out as a FITS image. */ if ((status = HPXout(&hpxdat))) return 3; if (hpxdat.data) free(hpxdat.data); return 0; } /*--------------------------------------------------------------------------*/ int HEALPixIn(struct healpix *hpxdat) { char crdsys[32], ordering[32]; int anynul, hdutype, iaxis, nfound, status; long firstpix, ipix, lastpix, naxis, *naxes = 0x0, nside = 0, repeat; float *datap, nulval; LONGLONG firstelem, irow, nelem, npix = 0, nrow = 0; fitsfile *fptr; status = 0; hpxdat->data = 0x0; /* Open the FITS file and move to the first HDU with NAXIS != 0. */ if (fits_open_data(&fptr, hpxdat->infile, READONLY, &status)) goto fitserr; /* Is this the primary HDU or an extension? */ if (fits_get_hdu_type(fptr, &hdutype, &status)) goto fitserr; if (!(hdutype == IMAGE_HDU || hdutype == BINARY_TBL)) { fprintf(stderr, "ERROR: %s does not contain HEALPix data.\n", hpxdat->infile); return 1; } /* Get the image size. */ if (fits_read_key_lng(fptr, "NAXIS", &naxis, 0x0, &status)) goto fitserr; naxes = malloc(naxis*sizeof(long)); if (fits_read_keys_lng(fptr, "NAXIS", 1, (int)naxis, naxes, &nfound, &status)) goto fitserr; if (hdutype == IMAGE_HDU) { /* Look for the first non-degenerate image axis. */ for (iaxis = 0; iaxis < nfound; iaxis++) { if (naxes[iaxis] > 1) { /* Assume for now that it is the total number of pixels. */ npix = naxes[iaxis]; break; } } } else if (hdutype == BINARY_TBL) { /* Binary tables are simpler. */ if (nfound > 1) nrow = naxes[1]; /* (Note that fits_get_coltypell() is not available in cfitsio 2.x.) */ if (fits_get_coltype(fptr, hpxdat->col, 0x0, &repeat, 0x0, &status)) { goto fitserr; } nelem = (LONGLONG)repeat; } if (!npix && !nrow) { fprintf(stderr, "ERROR: Could not determine image size.\n"); goto cleanup; } /* Number of pixels per side of each base-resolution pixel. */ if (fits_read_key_lng(fptr, "NSIDE", &nside, 0x0, &status)) { /* Some HEALPix files, e.g. SFD dust maps, don't record NSIDE. */ if (status != KEY_NO_EXIST) goto fitserr; status = 0; } /* FIRSTPIX and LASTPIX, if present, record the 0-relative pixel numbers of * the first and last pixels stored in the data. */ firstpix = -1; if (fits_read_key_lng(fptr, "FIRSTPIX", &firstpix, 0x0, &status)) { if (status != KEY_NO_EXIST) goto fitserr; status = 0; } lastpix = -1; if (fits_read_key_lng(fptr, "LASTPIX", &lastpix, 0x0, &status)) { if (status != KEY_NO_EXIST) goto fitserr; status = 0; } if (!nside) { /* Deduce NSIDE. */ if (lastpix >= 0) { /* If LASTPIX is present without NSIDE we can only assume it's npix. */ nside = (int)(sqrt((double)((lastpix+1) / 12)) + 0.5); } else if (npix) { nside = (int)(sqrt((double)(npix / 12)) + 0.5); } else if (nrow) { nside = (int)(sqrt((double)((nrow * nelem) / 12)) + 0.5); } } hpxdat->nside = (int)nside; hpxdat->npix = 12*nside*nside; /* Ensure that FIRSTPIX and LASTPIX are set. */ if (firstpix < 0) firstpix = 0; if (lastpix < 0) lastpix = hpxdat->npix - 1; /* Any sign of a coordinate system identifier? */ if (fits_read_key_str(fptr, "COORDSYS", crdsys, 0x0, &status)) { if (status != KEY_NO_EXIST) goto fitserr; status = 0; } else if (crdsys[0] == 'G') { hpxdat->crdsys = 'G'; } else if (crdsys[0] == 'E') { hpxdat->crdsys = 'E'; } else if (crdsys[0] == 'C') { /* ("celestial") */ hpxdat->crdsys = 'Q'; } /* Nested or ring ordering? */ if (fits_read_key_str(fptr, "ORDERING", ordering, 0x0, &status)) { /* Some HEALPix files, e.g. SFD dust maps, don't record ORDERING. */ if (status != KEY_NO_EXIST) goto fitserr; status = 0; } else if (strcmp(ordering, "NESTED") == 0) { hpxdat->ordering = 'N'; } else if (strcmp(ordering, "RING") == 0) { hpxdat->ordering = 'R'; } else { fprintf(stderr, "WARNING: Invalid ORDERING keyword: %s.\n", ordering); } /* Allocate memory and read the data. */ if ((hpxdat->data = malloc((hpxdat->npix)*sizeof(float))) == NULL) { perror("HPXcvt"); goto cleanup; } nulval = HEALPIX_NULLVAL; datap = hpxdat->data; for (ipix = 0; ipix < firstpix; ipix++) { *(datap++) = nulval; } firstelem = (LONGLONG)1; if (hdutype == IMAGE_HDU) { if (fits_read_img_flt(fptr, 0l, firstelem, npix, nulval, datap, &anynul, &status)) goto fitserr; } else if (hdutype == BINARY_TBL) { for (irow = 0; irow < nrow; irow++) { if (fits_read_col_flt(fptr, hpxdat->col, irow+1, firstelem, nelem, nulval, datap, &anynul, &status)) goto fitserr; datap += nelem; } } datap = hpxdat->data + (lastpix + 1); for (ipix = (lastpix+1); ipix < hpxdat->npix; ipix++) { *(datap++) = nulval; } /* Clean up. */ fits_close_file(fptr, &status); status = 0; return 0; fitserr: fits_report_error(stderr, status); cleanup: if (naxes) free(naxes); if (hpxdat->data) free(hpxdat->data); hpxdat->data = 0x0; return 1; } /*--------------------------------------------------------------------------*/ int HPXout(struct healpix *hpxdat) { /* Number of facets on a side of each layout. */ const int NFACET[] = {5, 4, 4}; /* Arrays that define the facet location and rotation for each recognised * layout. Bear in mind that these appear to be upside-down, i.e. the top * line contains facet numbers for the bottom row of the output image. * Facets numbered -1 are blank. */ /* Equatorial (diagonal) facet layout. */ const int FACETS[][5][5] = {{{ 6, 9, -1, -1, -1}, { 1, 5, 8, -1, -1}, {-1, 0, 4, 11, -1}, {-1, -1, 3, 7, 10}, {-1, -1, -1, 2, 6}}, /* North polar (X) facet layout. */ {{ 8, 4, 4, 11, -1}, { 5, 0, 3, 7, -1}, { 5, 1, 2, 7, -1}, { 9, 6, 6, 10, -1}, {-1, -1, -1, -1, -1}}, /* South polar (X) facet layout. */ {{ 1, 6, 6, 2, -1}, { 5, 9, 10, 7, -1}, { 5, 8, 11, 7, -1}, { 0, 4, 4, 3, -1}, {-1, -1, -1, -1, -1}}}; /* All facets of the equatorial layout are rotated by +45 degrees with * respect to the normal orientation, i.e. that with the equator running * horizontally. The rotation recorded for the polar facets is the number * of additional positive (anti-clockwise) 90 degree turns with respect to * the equatorial layout. */ /* Equatorial (diagonal), no facet rotation. */ const int FROTAT[][5][5] = {{{ 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}}, /* North polar (X) facet rotation. */ {{ 3, 3, 0, 0, 0}, { 3, 3, 0, 0, 0}, { 2, 2, 1, 1, 0}, { 2, 2, 1, 1, 0}, { 0, 0, 0, 0, 0}}, /* South polar (X) facet rotation. */ {{ 1, 1, 2, 2, 0}, { 1, 1, 2, 2, 0}, { 0, 0, 3, 3, 0}, { 0, 0, 3, 3, 0}, { 0, 0, 0, 0, 0}}}; /* Facet halving codes. 0: the facet is whole (or wholly blank), * 1: blanked bottom-right, 2: top-right, 3: top-left, 4: bottom-left. * Positive values mean that the diagonal is included, otherwise not. */ /* Equatorial (diagonal), no facet halving. */ const int FHALVE[][5][5] = {{{ 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}}, /* North polar (X) facet halving. */ {{ 0, 1, -4, 0, 0}, {-3, 0, 0, 2, 0}, { 4, 0, 0, -1, 0}, { 0, -2, 3, 0, 0}, { 0, 0, 0, 0, 0}}, /* South polar (X) facet halving. */ {{ 0, 1, -4, 0, 0}, {-3, 0, 0, 2, 0}, { 4, 0, 0, -1, 0}, { 0, -2, 3, 0, 0}, { 0, 0, 0, 0, 0}}}; char history[72]; int facet, halve, i1, i2, ifacet, j, jfacet, layout, nfacet, nside, rotn, status; long *healidx = 0x0, *healp, naxes[2]; float nulval = HEALPIX_NULLVAL, *row = 0x0, *rowp; LONGLONG fpixel, group, nelem; fitsfile *fptr; nside = hpxdat->nside; layout = hpxdat->layout; nfacet = NFACET[layout]; /* Create the output FITS file. */ status = 0; naxes[0] = nfacet * nside; naxes[1] = naxes[0]; if (fits_create_file(&fptr, hpxdat->outfile, &status)) goto fitserr; if (fits_create_img(fptr, FLOAT_IMG, 2, naxes, &status)) goto fitserr; /* Write WCS keyrecords. */ if ((status = HPXhdr(fptr, hpxdat))) goto fitserr; /* Allocate arrays. */ if ((healidx = malloc(nside * sizeof(long))) == NULL || (row = malloc(nside * sizeof(float))) == NULL) { perror("HPXcvt"); goto cleanup; } /* Loop vertically facet-by-facet. */ fpixel = 1; group = 0; nelem = nside; for (jfacet = 0; jfacet < nfacet; jfacet++) { /* Loop row-by-row. */ for (j = 0; j < nside; j++) { /* Loop horizontally facet-by-facet. */ for (ifacet = 0; ifacet < nfacet; ifacet++) { facet = FACETS[layout][jfacet][ifacet]; rotn = FROTAT[layout][jfacet][ifacet]; halve = FHALVE[layout][jfacet][ifacet]; /* Recentre longitude? */ if (hpxdat->quad && facet >= 0) { if (facet <= 3) { facet += hpxdat->quad; if (facet > 3) facet -= 4; } else if (facet <= 7) { facet += hpxdat->quad; if (facet > 7) facet -= 4; } else { facet += hpxdat->quad; if (facet > 11) facet -= 4; } } /* Write out the data. */ if (facet < 0) { /* A blank facet. */ if (fits_write_img_null(fptr, group, fpixel, nelem, &status)) { goto fitserr; } } else { if (hpxdat->ordering == 'N') { /* Get nested indices. */ status = NESTidx(nside, facet, rotn, j, healidx); } else { /* Get ring indices. */ status = RINGidx(nside, facet, rotn, j, healidx); } /* Gather data into the output vector. */ healp = healidx; for (rowp = row; rowp < row + nside; rowp++) { *rowp = hpxdat->data[*(healp++)]; } /* Apply blanking to halved facets. */ if (halve) { if (abs(halve) == 1) { /* Blank bottom-right. */ i1 = j; i2 = nside; if (halve > 0) i1++; } else if (abs(halve) == 2) { /* Blank top-right. */ i1 = nside - j; i2 = nside; if (halve < 0) i1--; } else if (abs(halve) == 3) { /* Blank top-left. */ i1 = 0; i2 = j; if (halve < 0) i2++; } else { /* Blank bottom-left. */ i1 = 0; i2 = nside - j; if (halve > 0) i2--; } for (rowp = row + i1; rowp < row + i2; rowp++) { *rowp = nulval; } } /* Write out this facet's contribution to this row of the map. */ if (fits_write_imgnull_flt(fptr, group, fpixel, nelem, row, nulval, &status)) { goto fitserr; } } fpixel += nelem; } } } /* Write history. */ sprintf(history, "Original input file: %s", hpxdat->infile); fits_write_history(fptr, history, &status); sprintf(history, " Original NSIDE: %d", hpxdat->nside); fits_write_history(fptr, history, &status); sprintf(history, " Original ordering: %s", (hpxdat->ordering == 'N') ? "NESTED" : "RING"); if (hpxdat->ordering == 'r') strcat(history, " (assumed)"); fits_write_history(fptr, history, &status); /* Clean up. */ fits_close_file(fptr, &status); status = 0; return 0; fitserr: fits_report_error(stderr, status); cleanup: if (healidx) free(healidx); if (row) free(row); return 1; } /*--------------------------------------------------------------------------*/ /* (imap,jmap) are 0-relative pixel coordinates in the output map with origin * at the bottom-left corner of the specified facet which is rotated by * (45 + rotn * 90) degrees from its natural orientation; imap increases to * the right and jmap upwards. */ int NESTidx(int nside, int facet, int rotn, int jmap, long *healidx) { int h, i, imap, j, nside1, bit; long *hp; /* Nested index (0-relative) of the first pixel in this facet. */ h = facet * nside * nside; nside1 = nside - 1; hp = healidx; for (imap = 0; imap < nside; imap++, hp++) { /* (i,j) are 0-relative pixel coordinates with origin in the southern * corner of the facet; i increases to the north-east and j to the * north-west. */ if (rotn == 0) { i = nside1 - imap; j = jmap; } else if (rotn == 1) { i = nside1 - jmap; j = nside1 - imap; } else if (rotn == 2) { i = imap; j = nside1 - jmap; } else if (rotn == 3) { i = jmap; j = imap; } *hp = 0; bit = 1; while (i || j) { if (i & 1) *hp |= bit; bit <<= 1; if (j & 1) *hp |= bit; bit <<= 1; i >>= 1; j >>= 1; } *hp += h; } return 0; } /*--------------------------------------------------------------------------*/ /* (imap,jmap) pixel coordinates are as described above for NESTidx(). This * function computes the double-pixelisation index then converts it to the * regular ring index. */ int RINGidx(int nside, int facet, int rotn, int jmap, long *healidx) { const int I0[] = { 1, 3, -3, -1, 0, 2, 4, -2, 1, 3, -3, -1}; const int J0[] = { 1, 1, 1, 1, 0, 0, 0, 0, -1, -1, -1, -1}; int i, i0, imap, j, j0, n2side, n8side, npj, npole, nside1; long *hp; n2side = 2 * nside; n8side = 8 * nside; /* Double-pixelisation index of the last pixel in the north polar cap. */ npole = (n2side - 1) * (n2side - 1) - 1; /* Double-pixelisation pixel coordinates of the centre of the facet. */ i0 = nside * I0[facet]; j0 = nside * J0[facet]; nside1 = nside - 1; hp = healidx; for (imap = 0; imap < nside; imap++, hp++) { /* (i,j) are 0-relative, double-pixelisation pixel coordinates. The * origin is at the intersection of the equator and prime meridian, * i increases to the east (N.B.) and j to the north. */ if (rotn == 0) { i = i0 + nside1 - (jmap + imap); j = j0 + jmap - imap; } else if (rotn == 1) { i = i0 + imap - jmap; j = j0 + nside1 - (imap + jmap); } else if (rotn == 2) { i = i0 + (imap + jmap) - nside1; j = j0 + imap - jmap; } else if (rotn == 3) { i = i0 + jmap - imap; j = j0 + jmap + imap - nside1; } /* Convert i for counting pixels. */ if (i < 0) i += n8side; i++; if (j > nside) { /* North polar regime. */ if (j == n2side) { *hp = 0; } else { /* Number of pixels in a polar facet with this value of j. */ npj = 2 * (n2side - j); /* Index of the last pixel in the row above this. */ *hp = (npj - 1) * (npj - 1) - 1; /* Number of pixels in this row in the polar facets before this. */ *hp += npj * (i/n2side); /* Pixel number in this polar facet. */ *hp += i%n2side - (j - nside) - 1; } } else if (j >= -nside) { /* Equatorial regime. */ *hp = npole + n8side * (nside - j) + i; } else { /* South polar regime. */ *hp = 24 * nside * nside + 1; if (j > -n2side) { /* Number of pixels in a polar facet with this value of j. */ npj = 2 * (j + n2side); /* Total number of pixels in this row or below it. */ *hp -= (npj + 1) * (npj + 1); /* Number of pixels in this row in the polar facets before this. */ *hp += npj * (i/n2side); /* Pixel number in this polar facet. */ *hp += i%n2side + (nside + j) - 1; } } /* Convert double-pixelisation index to regular. */ *hp -= 1; *hp /= 2; } return 0; } /*--------------------------------------------------------------------------*/ int HPXhdr(fitsfile *fptr, struct healpix *hpxdat) { char comment[64], cval[16], *ctype1, *ctype2, *descr1, *descr2, *pcode; int status; float crpix1, crpix2, crval1, crval2; double cdelt1, cdelt2; status = 0; fits_update_key_log(fptr, "EXTEND", 0, "No FITS extensions are present", &status); fits_write_date(fptr, &status); /* Set pixel transformation parameters. */ if (hpxdat->layout == 0) { crpix1 = (5 * hpxdat->nside + 1) / 2.0f; } else { crpix1 = (4 * hpxdat->nside + 1) / 2.0f; } crpix2 = crpix1; fits_write_key(fptr, TFLOAT, "CRPIX1", &crpix1, "Coordinate reference pixel", &status); fits_write_key(fptr, TFLOAT, "CRPIX2", &crpix2, "Coordinate reference pixel", &status); if (hpxdat->layout == 0) { fits_write_key_flt(fptr, "PC1_1", 0.5f, -1, "Transformation matrix element", &status); fits_write_key_flt(fptr, "PC1_2", 0.5f, -1, "Transformation matrix element", &status); fits_write_key_flt(fptr, "PC2_1", -0.5f, -1, "Transformation matrix element", &status); fits_write_key_flt(fptr, "PC2_2", 0.5f, -1, "Transformation matrix element", &status); } cdelt1 = -90.0 / hpxdat->nside; cdelt2 = -cdelt1; fits_write_key_dbl(fptr, "CDELT1", cdelt1, -8, "[deg] Coordinate increment", &status); fits_write_key_dbl(fptr, "CDELT2", cdelt2, -8, "[deg] Coordinate increment", &status); /* Celestial transformation parameters. */ if (hpxdat->layout == 0) { pcode = "HPX"; } else { pcode = "XPH"; } if (hpxdat->crdsys == 'G') { /* Galactic. */ ctype1 = "GLON"; ctype2 = "GLAT"; descr1 = "Galactic longitude"; descr2 = "Galactic latitude"; } else if (hpxdat->crdsys == 'E') { /* Ecliptic, who-knows-what. */ ctype1 = "ELON"; ctype2 = "ELAT"; descr1 = "Ecliptic longitude"; descr2 = "Ecliptic latitude"; } else if (hpxdat->crdsys == 'Q') { /* Equatorial, who-knows-what. */ ctype1 = "RA--"; ctype2 = "DEC-"; descr1 = "Right ascension"; descr2 = "Declination"; } else { /* Unknown. */ ctype1 = "XLON"; ctype2 = "XLAT"; descr1 = "Longitude"; descr2 = " Latitude"; } sprintf(cval, "%s-%s", ctype1, pcode); sprintf(comment, "%s in an %s projection", descr1, pcode); fits_write_key_str(fptr, "CTYPE1", cval, comment, &status); sprintf(cval, "%s-%s", ctype2, pcode); sprintf(comment, "%s in an %s projection", descr2, pcode); fits_write_key_str(fptr, "CTYPE2", cval, comment, &status); crval1 = 0.0f + 90.0f * hpxdat->quad; if (hpxdat->layout == 0) { crval2 = 0.0f; } else if (hpxdat->layout == 1) { crval2 = 90.0f; } else { crval2 = -90.0f; } sprintf(comment, "[deg] %s at the reference point", descr1); fits_write_key(fptr, TFLOAT, "CRVAL1", &crval1, comment, &status); sprintf(comment, "[deg] %s at the reference point", descr2); fits_write_key(fptr, TFLOAT, "CRVAL2", &crval2, comment, &status); if (hpxdat->layout == 0) { fits_write_key_lng(fptr, "PV2_1", (LONGLONG)4, "HPX H parameter (longitude)", &status); fits_write_key_lng(fptr, "PV2_2", (LONGLONG)3, "HPX K parameter (latitude)", &status); } /* Commentary. */ fits_write_record(fptr, " ", &status); if (hpxdat->layout == 0) { fits_write_comment(fptr, "Celestial map with FITS-standard HPX coordinate system generated by", &status); } else { fits_write_comment(fptr, "Celestial map with experimental XPH coordinate system generated by", &status); } fits_write_comment(fptr, "'HPXcvt' which reorganises HEALPix data without interpolation as", &status); fits_write_comment(fptr, "described in \"Mapping on the HEALPix grid\" by Mark Calabretta and", &status); fits_write_comment(fptr, "Boud Roukema. See http://www.atnf.csiro.au/people/mcalabre", &status); return status; } pywcs-1.12/wcslib/utils/wcsgrid.c0000644001153600020070000002311612310355626021102 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsgrid.c,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *============================================================================= * * wcsgrid extracts the WCS keywords for an image from the specified FITS file * and uses pgsbox() to plot a 2-D coordinate graticule for each representation * found. Refer to the usage notes below. * * TODO * Subimaging option. *---------------------------------------------------------------------------*/ char usage[] = "Usage: wcsgrid [-a] [-d] [-h] []\n" "\n" "wcsgrid extracts the WCS keywords for an image from the specified FITS\n" "file and uses pgsbox() to plot a 2-D coordinate graticule for each\n" "alternate representation found.\n\n" "The FITS file may be specified according to the syntax understood by\n" "cfitsio, for example \"file.fits.gz+1\" refers to the first extension of\n" "a gzip'd FITS file. Use \"-\" or omit the file name for input from stdin.\n" "\n" "Options:\n" " -a Plot a graticule only for the alternate representation\n" " specified (ignored if there is only one).\n" " -d PGPLOT device type (default XWINDOW, use \"?\" for list).\n" " -h Move to HDU number (1-relative) which is expected to\n" " contain an image array. (Useful for input from stdin.)\n"; #include #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char **argv) { char alt = '\0', *header, idents[3][80], *infile, keyword[16], nlcprm[1], opt[2], pgdev[16]; int c0[] = {-1, -1, -1, -1, -1, -1, -1}; int alts[27], gcode[2], hdunum = 1, hdutype, i, ic, naxes, naxis[2], nkeyrec, nreject, nwcs, stat[NWCSFIX], status; float blc[2], trc[2]; double cache[257][4], grid1[3], grid2[3], nldprm[1]; struct wcsprm *wcs; nlfunc_t pgwcsl_; fitsfile *fptr; /* Parse options. */ strcpy(pgdev, "/XWINDOW"); for (i = 1; i < argc && argv[i][0] == '-'; i++) { if (!argv[i][1]) break; switch (argv[i][1]) { case 'a': alt = toupper(argv[i][2]); break; case 'd': if (argv[i][2] == '?') { cpgldev(); return 0; } if (argv[i][2] == '/') { strncpy(pgdev+1, argv[i]+3, 15); } else { strncpy(pgdev+1, argv[i]+2, 15); } break; case 'h': hdunum = atoi(argv[i]+2); break; default: fprintf(stderr, "%s", usage); return 1; } } if (i < argc) { infile = argv[i++]; if (i < argc) { fprintf(stderr, "%s", usage); return 1; } } else { infile = "-"; } /* Check accessibility of the input file. */ if (strcmp(infile, "-") && access(infile, R_OK) == -1) { printf("wcsgrid: Cannot access %s.\n", infile); return 1; } /* Open the FITS file and move to the required HDU. */ status = 0; if (fits_open_file(&fptr, infile, READONLY, &status)) goto fitserr; if (fits_movabs_hdu(fptr, hdunum, &hdutype, &status)) goto fitserr; if (hdutype != IMAGE_HDU) { fprintf(stderr, "ERROR, HDU number %d does not contain an image array.\n", hdunum); return 1; } /* Check that we have at least two image axes. */ if (fits_read_key(fptr, TINT, "NAXIS", &naxes, NULL, &status)) { goto fitserr; } if (naxes < 2) { fprintf(stderr, "ERROR, HDU number %d does not contain a 2-D image.\n", hdunum); return 1; } else if (naxes > 2) { printf("HDU number %d contains a %d-D image array.\n", hdunum, naxes); } /* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. */ if (fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status)) { goto fitserr; } /* Interpret the WCS keywords. */ if ((status = wcspih(header, nkeyrec, WCSHDR_all, -3, &nreject, &nwcs, &wcs))) { fprintf(stderr, "wcspih ERROR %d: %s.\n", status, wcshdr_errmsg[status]); return 1; } free(header); /* Read -TAB arrays from the binary table extension (if necessary). */ if (fits_read_wcstab(fptr, wcs->nwtb, (wtbarr *)wcs->wtb, &status)) { goto fitserr; } /* Translate non-standard WCS keyvalues. */ if ((status = wcsfix(7, 0, wcs, stat))) { status = 0; for (i = 0; i < NWCSFIX; i++) { if (stat[i] > 0) { fprintf(stderr, "wcsfix ERROR %d: %s.\n", stat[i], wcsfix_errmsg[stat[i]]); /* Ignore problems with CDi_ja and DATE-OBS. */ if (!(i == CDFIX || i == DATFIX)) status = 1; } } if (status) return 1; } /* Sort out alternates. */ if (alt) { wcsidx(nwcs, &wcs, alts); if (alt == ' ') { if (alts[0] == -1) { fprintf(stderr, "WARNING, no primary coordinate representation, " "doing all.\n"); alt = '\0'; } } else if (alt < 'A' || alt > 'Z') { fprintf(stderr, "WARNING, alternate specifier \"%c\" is invalid, " "doing all.\n", alt); alt = '\0'; } else { if (alts[alt - 'A' + 1] == -1) { fprintf(stderr, "WARNING, no alternate coordinate representation " "\"%c\", doing all.\n", alt); alt = '\0'; } } } /* Get image dimensions from the header. */ sprintf(keyword, "NAXIS%d", wcs->lng + 1); fits_read_key(fptr, TINT, "NAXIS1", naxis, NULL, &status); sprintf(keyword, "NAXIS%d", wcs->lat + 1); fits_read_key(fptr, TINT, "NAXIS2", naxis+1, NULL, &status); if ((naxis[0] < 2) || (naxis[1] < 2)) { fprintf(stderr, "ERROR, HDU number %d contains degenerate image axes.\n", hdunum); return 1; } fits_close_file(fptr, &status); /* Plot setup. */ blc[0] = 0.5f; blc[1] = 0.5f; trc[0] = naxis[0] + 0.5f; trc[1] = naxis[1] + 0.5f; if (cpgbeg(0, pgdev, 1, 1) != 1) { fprintf(stderr, "ERROR, failed to open PGPLOT device %s.\n", pgdev); return 1; } cpgvstd(); cpgwnad(blc[0], trc[0], blc[0], trc[1]); cpgask(1); cpgpage(); /* Compact lettering. */ cpgsch(0.8f); /* Draw full grid lines. */ gcode[0] = 2; gcode[1] = 2; grid1[0] = 0.0; grid2[0] = 0.0; /* These are for the projection boundary. */ grid1[1] = -180.0; grid1[2] = 180.0; grid2[1] = -90.0; grid2[2] = 90.0; cpgsci(1); for (i = 0; i < nwcs; i++) { if (alt && (wcs+i)->alt[0] != alt) { continue; } if ((status = wcsset(wcs+i))) { fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); continue; } /* Draw the frame. */ cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); /* Axis labels; use CNAMEia in preference to CTYPEia. */ if ((wcs+i)->cname[0][0]) { strcpy(idents[0], (wcs+i)->cname[0]); } else { strcpy(idents[0], (wcs+i)->ctype[0]); } if ((wcs+i)->cname[1][0]) { strcpy(idents[1], (wcs+i)->cname[1]); } else { strcpy(idents[1], (wcs+i)->ctype[1]); } /* Title; use WCSNAME. */ strcpy(idents[2], (wcs+i)->wcsname); if (strlen(idents[2])) { printf("\n%s\n", idents[2]); } /* Formatting control for celestial coordinates. */ if (strncmp((wcs+i)->ctype[0], "RA", 2) == 0) { /* Right ascension in HMS, declination in DMS. */ opt[0] = 'G'; opt[1] = 'E'; } else { /* Other angles in decimal degrees. */ opt[0] = 'A'; opt[1] = 'B'; } /* Draw the celestial grid. The grid density is set for each world */ /* coordinate by specifying LABDEN = 1224. */ ic = -1; cpgsbox(blc, trc, idents, opt, 0, 1224, c0, gcode, 0.0, 0, grid1, 0, grid2, 0, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(wcs+i), nldprm, 256, &ic, cache, &status); /* Delimit the projection boundary. */ if ((wcs+i)->cel.prj.category != ZENITHAL) { /* Reset to the native coordinate graticule. */ (wcs+i)->crval[0] = (wcs+i)->cel.prj.phi0; (wcs+i)->crval[1] = (wcs+i)->cel.prj.theta0; (wcs+i)->lonpole = 999.0; (wcs+i)->latpole = 999.0; status = wcsset(wcs+i); ic = -1; cpgsbox(blc, trc, idents, opt, -1, 0, c0, gcode, 0.0, 2, grid1, 2, grid2, 0, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(wcs+i), nldprm, 256, &ic, cache, &status); } cpgpage(); } status = wcsvfree(&nwcs, &wcs); return 0; fitserr: fits_report_error(stderr, status); fits_close_file(fptr, &status); return 1; } pywcs-1.12/wcslib/utils/wcsware.c0000644001153600020070000002471512310355626021121 0ustar cslocumSTSCI\science00000000000000/*============================================================================ WCSLIB 4.10 - an implementation of the FITS WCS standard. Copyright (C) 1995-2012, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: wcsware.c,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *============================================================================= * wcsware extracts the WCS keywords for an image from the specified FITS file, * constructs wcsprm structs for each coordinate representation found and * performs a variety of operations using them. *---------------------------------------------------------------------------*/ char usage[] = "Usage: wcsware [-a] [-f] [-h] [-p] [-x] []\n" "\n" "wcsware extracts the WCS keywords for an image from the specified FITS\n" "file, constructs wcsprm structs for each coordinate representation found\n" "and performs a variety of operations using them.\n\n" "The FITS file may be specified according to the syntax understood by\n" "cfitsio, for example \"file.fits.gz+1\" refers to the first extension of\n" "a gzip'd FITS file. Use \"-\" or omit the file name for input from stdin.\n" "\n" "Options:\n" " -a Specify an alternate coordinate representation to be used\n" " (ignored if there is only one).\n" " -f Apply wcsfix() to the header.\n" " -h Move to HDU number (1-relative) which is expected to\n" " contain an image array. (Useful for input from stdin.)\n" " -p Print the struct(s) using wcsprt() (default operation).\n" " -x Convert pixel coordinates, obtained from stdin, to world\n" " coordinates using wcsp2s().\n" " -w Convert world coordinates, obtained from stdin, to pixel\n" " coordinates using wcss2p().\n"; #include #include #include #include #include #include #include #include #include #include int main(int argc, char **argv) { char alt = ' ', *header, idents[3][80], *infile; int alts[27], c, dofix = 0, doprt = 0, dopix = 0, doworld = 0, hdunum = 1, hdutype, i, j, nelem, nkeyrec, nreject, nwcs, *stat = 0x0, status; double *imgcrd = 0x0, phi, *pixcrd = 0x0, theta, *world = 0x0; struct wcsprm *wcs; fitsfile *fptr; /* Parse options. */ for (i = 1; i < argc && argv[i][0] == '-'; i++) { if (!argv[i][1]) break; switch (argv[i][1]) { case 'a': alt = toupper(argv[i][2]); break; case 'f': dofix = 1; break; case 'h': hdunum = atoi(argv[i]+2); break; case 'p': doprt = 1; break; case 'x': dopix = 1; break; case 'w': doworld = 1; break; default: fprintf(stderr, "%s", usage); return 1; } } if (i < argc) { infile = argv[i++]; if (i < argc) { fprintf(stderr, "%s", usage); return 1; } } else { infile = "-"; } /* Check accessibility of the input file. */ if (strcmp(infile, "-") && access(infile, R_OK) == -1) { printf("wcsware: Cannot access %s.\n", infile); return 1; } if (!dopix && !doworld) doprt = 1; /* Open the FITS file and move to the required HDU. */ status = 0; if (fits_open_file(&fptr, infile, READONLY, &status)) goto fitserr; if (fits_movabs_hdu(fptr, hdunum, &hdutype, &status)) goto fitserr; if (hdutype != IMAGE_HDU) { fprintf(stderr, "ERROR, HDU number %d does not contain an image array.\n", hdunum); return 1; } /* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. */ if (fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status)) { goto fitserr; } /* Interpret the WCS keywords. */ if ((status = wcspih(header, nkeyrec, WCSHDR_all, -3, &nreject, &nwcs, &wcs))) { fprintf(stderr, "wcspih ERROR %d: %s.\n", status, wcshdr_errmsg[status]); return 1; } free(header); if (wcs == 0x0) { fprintf(stderr, "No world coordinate systems found.\n"); return 1; } /* Read -TAB arrays from the binary table extension (if necessary). */ if (fits_read_wcstab(fptr, wcs->nwtb, (wtbarr *)wcs->wtb, &status)) { goto fitserr; } fits_close_file(fptr, &status); /* Translate non-standard WCS keyvalues? */ if (dofix) { stat = malloc(NWCSFIX * sizeof(int)); if ((status = wcsfix(7, 0, wcs, stat))) { for (i = 0; i < NWCSFIX; i++) { if (stat[i] > 0) { fprintf(stderr, "wcsfix ERROR %d: %s.\n", status, wcsfix_errmsg[stat[i]]); } } return 1; } } /* Sort out alternates. */ if (alt) { wcsidx(nwcs, &wcs, alts); if (alt == ' ') { if (alts[0] == -1) { fprintf(stderr, "WARNING, no primary coordinate representation.\n"); alt = '\0'; } } else if (alt < 'A' || alt > 'Z') { fprintf(stderr, "WARNING, alternate specifier \"%c\" is invalid.\n", alt); alt = '\0'; } else { if (alts[alt - 'A' + 1] == -1) { fprintf(stderr, "WARNING, no alternate coordinate representation " "\"%c\".\n", alt); alt = '\0'; } } } /* Initialize and possibly print the structs. */ for (i = 0; i < nwcs; i++) { if (alt && (wcs+i)->alt[0] != alt) { continue; } else if (i) { printf("\nType for next: "); fgetc(stdin); } if ((status = wcsset(wcs+i))) { fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); continue; } /* Get WCSNAME out of the wcsprm struct. */ strcpy(idents[2], (wcs+i)->wcsname); if (strlen(idents[2])) { printf("\n%s\n", idents[2]); } /* Print the struct. */ if (doprt) { wcsprt(wcs+i); } /* Transform coordinates? */ if (dopix || doworld) { nelem = (wcs+i)->naxis; world = realloc(world, nelem * sizeof(double)); imgcrd = realloc(imgcrd, nelem * sizeof(double)); pixcrd = realloc(pixcrd, nelem * sizeof(double)); stat = realloc(stat, nelem * sizeof(int)); if (dopix) { /* Transform pixel coordinates. */ while (1) { printf("\nEnter %d pixel coordinate element%s: ", nelem, (nelem==1)?"":"s"); c = fgetc(stdin); if (c == EOF || c == '\n') { if (c == EOF) printf("\n"); break; } ungetc(c, stdin); scanf("%lf", pixcrd); for (j = 1; j < nelem; j++) { scanf("%*[ ,]%lf", pixcrd+j); } while (fgetc(stdin) != '\n'); printf("Pixel: "); for (j = 0; j < nelem; j++) { printf("%s%14.9g", j?", ":"", pixcrd[j]); } if ((status = wcsp2s(wcs+i, 1, nelem, pixcrd, imgcrd, &phi, &theta, world, stat))) { fprintf(stderr, "wcsp2s ERROR %d: %s.\n", status, wcs_errmsg[status]); } else { printf("\nImage: "); for (j = 0; j < nelem; j++) { if (j == (wcs+i)->lng || j == (wcs+i)->lat) { /* Print angles in fixed format. */ printf("%s%14.6f", j?", ":"", imgcrd[j]); } else { printf("%s%14.9g", j?", ":"", imgcrd[j]); } } printf("\nWorld: "); for (j = 0; j < nelem; j++) { if (j == (wcs+i)->lng || j == (wcs+i)->lat) { /* Print angles in fixed format. */ printf("%s%14.6f", j?", ":"", world[j]); } else { printf("%s%14.9g", j?", ":"", world[j]); } } printf("\n"); } } } if (doworld) { /* Transform world coordinates. */ while (1) { printf("\nEnter %d world coordinate element%s: ", nelem, (nelem==1)?"":"s"); c = fgetc(stdin); if (c == EOF || c == '\n') { if (c == EOF) printf("\n"); break; } ungetc(c, stdin); scanf("%lf", world); for (j = 1; j < nelem; j++) { scanf("%*[ ,]%lf", world+j); } while (fgetc(stdin) != '\n'); printf("World: "); for (j = 0; j < nelem; j++) { if (j == (wcs+i)->lng || j == (wcs+i)->lat) { /* Print angles in fixed format. */ printf("%s%14.6f", j?", ":"", world[j]); } else { printf("%s%14.9g", j?", ":"", world[j]); } } if ((status = wcss2p(wcs+i, 1, nelem, world, &phi, &theta, imgcrd, pixcrd, stat))) { fprintf(stderr, "wcss2p ERROR %d: %s.\n", status, wcs_errmsg[status]); } else { printf("\nImage: "); for (j = 0; j < nelem; j++) { if (j == (wcs+i)->lng || j == (wcs+i)->lat) { /* Print angles in fixed format. */ printf("%s%14.6f", j?", ":"", imgcrd[j]); } else { printf("%s%14.9g", j?", ":"", imgcrd[j]); } } printf("\nPixel: "); for (j = 0; j < nelem; j++) { printf("%s%14.9g", j?", ":"", pixcrd[j]); } printf("\n"); } } } } } status = wcsvfree(&nwcs, &wcs); return 0; fitserr: fits_report_error(stderr, status); fits_close_file(fptr, &status); return 1; } pywcs-1.12/wcslib/VALIDATION0000644001153600020070000001521612310355626017513 0ustar cslocumSTSCI\science00000000000000Platforms on which the installation procedures and test suite were exercised WCSLIB version 4.10 (2012/02/06) -------------------------------- * Dell Latitude D630 (Intel Centrino, i686) running Debian linux 5.0.9 (lenny) uname -r (kernel version): 2.6.32-bpo.5-686 gcc --version: gcc --version: g gfortran --version: GNU Fortran (Debian 4.3.2-1.1) 4.3.2 WCSLIB version 4.8 (2011/08/15) ------------------------------- * Dell Latitude D620 (Intel Centrino Duo, i686), Debian linux 4.0 (etch) uname -r (kernel version): 2.6.24-1-686 (32-bit) gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) * Dell PowerEdge 2950 (Intel Xeon, 8 x X5460), Debian linux 5.0.8 (lenny) uname -r (kernel version): 2.6.26-2-amd64 (64-bit) gcc --version: gcc (Debian 4.3.2-1.1) 4.3.2 gfortran --version: GNU Fortran (Debian 4.3.2-1.1) 4.3.2 * Marvell SheevaPlug (Feroceon 88FR131 rev 1 ARM v5L), Debian linux 6.0 (squeeze) uname -r (kernel version): 2.6.32-5-kirkwood gcc --version: gcc (Debian 4.4.5-8) 4.4.5 gfortran --version: GNU Fortran (Debian 4.4.5-8) 4.4.5 * Mac mini (Intel Core 2 Duo) running Mac OS X 10.6.2 (10C540) uname -r (Darwin kernel version): 10.2.0 gcc --version: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646) gfortran --version: GNU Fortran (GCC) 4.5.0 20100107 (experimental) * Enterprise 450 Model 2250 (Sparc, sun4u 64-bit), SunOS 5.9 (Solaris 9) uname -r (SunOS version): 5.9 gcc --version: gcc (GCC) 4.5.1 gfortran --version: GNU Fortran (GCC) 4.5.1 WCSLIB version 4.7 (2011/02/07) ------------------------------- * Dell Latitude D630 (Intel Centrino, i686) running Debian linux 4.0 (etch) uname -r (kernel version): 2.6.24-1-686 gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) * Sun SunFire V20z (AMD Opteron, x86_64) running Debian linux 4.0 (etch) uname -r (kernel version): 2.6.18-6-amd64 gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) * Enterprise 450 Model 2250 (Sparc, sun4u 64-bit), SunOS 5.9 (Solaris 9) uname -r (SunOS version): 5.9 gcc --version: gcc (GCC) 4.5.1 gfortran --version: GNU Fortran (GCC) 4.5.1 and cc -V: cc: Sun WorkShop 6 update 2 C 5.3 Patch 111679-14 2004/02/20 f77 -V: f77: Sun WorkShop 6 update 2 FORTRAN 77 5.3 Patch 111691-07 2004/04/23 * Mac Xserve (Quad-Core Intel Xeon) running Mac OS X 10.6.5 (10H575) uname -r (Darwin kernel version): 10.5.0 gcc --version: 4.2.1 (Apple Inc. build 5664) gfortran --version: GNU Fortran (GCC) 4.5.0 20100107 (experimental) * Mac mini (Intel Core 2 Duo) running Mac OS X 10.6.2 (10C540) uname -r (Darwin kernel version): 10.2.0 gcc --version: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646) gfortran --version: GNU Fortran (GCC) 4.5.0 20100107 (experimental) * Mac mini (Intel Core Duo) running Mac OS X 10.4.9 (8P2137) uname -r (Darwin kernel version): 8.9.1 gcc --version: gcc (GCC) 4.3.0 20070316 (experimental) g77 --version: GNU Fortran (GCC) 3.4.0 WCSLIB version 4.5 (2010/07/16) ------------------------------- * Dell Latitude D630 (Intel Centrino, i686) running Debian linux 4.0 (etch) uname -r (kernel version): 2.6.24-1-686 gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) and gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) ifort -V: Intel(R) Fortran Compiler for 32-bit applications, Version 8.1 Build 20041118Z Package ID: l_fc_pc_8.1.023 * Mac mini (Intel Core 2 Duo, i386) running Mac OS X 10.6.2 (10C540) uname -r (Darwin kernel version): 10.2.0 gcc --version: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646) gfortran --version: GNU Fortran (GCC) 4.5.0 20100107 (experimental) * Mac mini (Intel Core Duo, i386) running Mac OS X 10.4.9 (8P2137) uname -r (Darwin kernel version): 8.9.1 gcc --version: gcc (GCC) 4.3.0 20070316 (experimental) g77 --version: GNU Fortran (GCC) 3.4.0 and gcc --version: gcc (GCC) 4.3.0 20070316 (experimental) gfortran --version: GNU Fortran (GCC) 4.3.0 20070316 (experimental) * Sun SunFire V20z (AMD Opteron, x86_64) running Debian linux 4.0 (etch) uname -r (kernel version): 2.6.18-6-amd64 gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) and gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) gfortran --version: GNU Fortran 95 (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) * Sun Ultra-60 (Sparc, sun4u) running SunOS 5.6 (Solaris 2.6) uname -r (SunOS version): 5.6 gcc --version: 2.95.3 g77 --version: GNU Fortran 0.5.25 20010315 (release) and cc -V: cc: Sun WorkShop 6 update 2 C 5.3 Patch 111679-14 2004/02/20 f77 -V: f77: Sun WorkShop 6 update 2 FORTRAN 77 5.3 Patch 111691-07 2004/04/23 WCSLIB version 4.4 (2009/08/06) ------------------------------- * Dell Latitude D630 (Intel Centrino, i686) running Debian linux 4.0 (etch) uname -r (kernel version): 2.6.24-1-686 gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) * Mac mini (Intel Core Duo, i386) running Mac OS X 10.4.9 (8P2137) uname -r (Darwin kernel version): 8.9.1 gcc --version: gcc (GCC) 4.3.0 20070316 (experimental) g77 --version: GNU Fortran (GCC) 3.4.0 and gcc --version: gcc (GCC) 4.3.0 20070316 (experimental) gfortran --version: GNU Fortran (GCC) 4.3.0 20070316 (experimental) * Sun SunFire V20z (AMD Opteron, x86_64) running Debian linux 4.0 (etch) uname -r (kernel version): 2.6.18-6-amd64 gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) and gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) gfortran --version: GNU Fortran 95 (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) * Sun SunBlade 1000 (Sparc, sun4u) running SunOS 5.8 (Solaris 2.8) uname -r (SunOS version): 5.8 gcc --version: 2.95.3 g77 --version: GNU Fortran 0.5.25 20010315 (release) and cc -V: cc: Sun WorkShop 6 update 2 C 5.3 Patch 111679-14 2004/02/20 f77 -V: f77: Sun WorkShop 6 update 2 FORTRAN 77 5.3 Patch 111691-07 2004/04/23 ------------------------------------------------------------------------------ $Id: VALIDATION,v 4.10 2012/02/05 23:41:45 cal103 Exp $ pywcs-1.12/wcslib/wcsconfig.h.in0000644001153600020070000000122512310355626020671 0ustar cslocumSTSCI\science00000000000000/*============================================================================ * * wcsconfig.h is generated from wcsconfig.h.in by 'configure'. It contains * C preprocessor macro definitions for compiling WCSLIB 4.10 * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcsconfig.h.in,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *===========================================================================*/ /* WCSLIB library version number. */ #undef WCSLIB_VERSION /* Define to 1 if sincos() is available. */ #undef HAVE_SINCOS /* 64-bit integer data type. */ #undef WCSLIB_INT64 pywcs-1.12/wcslib/wcsconfig_f77.h.in0000644001153600020070000000207412310355626021357 0ustar cslocumSTSCI\science00000000000000/*============================================================================ * * wcsconfig_f77.h is generated from wcsconfig_f77.h.in by 'configure'. It * contains C preprocessor definitions for building the WCSLIB 4.10 Fortran * wrappers. * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcsconfig_f77.h.in,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *===========================================================================*/ /* Integer array type large enough to hold an address. Set here to int[2] for * 64-bit addresses, but could be defined as int* on 32-bit machines. */ typedef int iptr[2]; /* Macro for mangling Fortran subroutine names that do not contain * underscores. Typically a name like "WCSINI" (case-insensitive) will become * something like "wcsini_" (case-sensitive). The Fortran wrappers, which are * written in C, are preprocessed into names that match the latter. The macro * takes two arguments which specify the name in lower and upper case. */ #undef F77_FUNC pywcs-1.12/wcslib/wcsconfig_tests.h.in0000644001153600020070000000126712310355626022121 0ustar cslocumSTSCI\science00000000000000/*============================================================================ * * wcsconfig_test.h is generated from wcsconfig_test.h.in by 'configure'. It * contains C preprocessor definitions for compiling the WCSLIB 4.10 test/demo * programs. * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcsconfig_tests.h.in,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *===========================================================================*/ #include /* Define to 1 if the CFITSIO library is available. */ #undef HAVE_CFITSIO /* Define to the printf format modifier for size_t type. */ #undef MODZ pywcs-1.12/wcslib/wcsconfig_utils.h.in0000644001153600020070000000250012310355626022106 0ustar cslocumSTSCI\science00000000000000/*============================================================================ * * wcsconfig_utils.h is generated from wcsconfig_utils.h.in by 'configure'. * It contains C preprocessor macro definitions for compiling the WCSLIB 4.10 * utilities. * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcsconfig_utils.h.in,v 4.10 2012/02/05 23:41:45 cal103 Exp $ *===========================================================================*/ #include /* Definitions for Large File Support (LFS), i.e. files larger than 2GiB, for * the fitshdr utility. */ /* Define to 1 if fseeko() is available (for small or large files). */ #undef HAVE_FSEEKO /* Define _LARGEFILE_SOURCE to get prototypes from stdio.h for the LFS * functions fseeko() and ftello() which use an off_t argument in place of a * long. */ #undef _LARGEFILE_SOURCE /* There seems to be a bug in autoconf that causes _LARGEFILE_SOURCE not to be * set in Linux. This dreadful kludge gets around it for now. */ #if (defined HAVE_FSEEKO && !defined _LARGEFILE_SOURCE) #define _LARGEFILE_SOURCE #endif /* Number of bits in a file offset (off_t) on systems where it can be set. */ #undef _FILE_OFFSET_BITS /* Define for large files needed on AIX-type systems. */ #undef _LARGE_FILES pywcs-1.12/wcslib/wcslib.pc.in0000644001153600020070000000041412310355626020344 0ustar cslocumSTSCI\science00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/wcslib Name: WCSLIB Description: An implementation of the FITS World Coordinate System standard Version: @PACKAGE_VERSION@ Requires: Libs: -L${libdir} -lwcs -lm Cflags: -I${includedir} pywcs-1.12/wcslib/wcslib.pdf0000644001153600020070000645654512310355626020140 0ustar cslocumSTSCI\science00000000000000%PDF-1.4 %ÐÔÅØ 5 0 obj << /S /GoTo /D (section.1) >> endobj 8 0 obj (\376\377\000W\000C\000S\000L\000I\000B\000\040\0004\000.\0001\0000\000\040\000a\000n\000d\000\040\000P\000G\000S\000B\000O\000X\000\040\0004\000.\0001\0000) endobj 9 0 obj << /S /GoTo /D (subsection.1.1) >> endobj 12 0 obj (\376\377\000C\000o\000n\000t\000e\000n\000t\000s) endobj 13 0 obj << /S /GoTo /D (subsection.1.2) >> endobj 16 0 obj (\376\377\000C\000o\000p\000y\000r\000i\000g\000h\000t) endobj 17 0 obj << /S /GoTo /D (section.2) >> endobj 20 0 obj (\376\377\000D\000e\000p\000r\000e\000c\000a\000t\000e\000d\000\040\000L\000i\000s\000t) endobj 21 0 obj << /S /GoTo /D (section.3) >> endobj 24 0 obj (\376\377\000D\000a\000t\000a\000\040\000S\000t\000r\000u\000c\000t\000u\000r\000e\000\040\000I\000n\000d\000e\000x) endobj 25 0 obj << /S /GoTo /D (subsection.3.1) >> endobj 28 0 obj (\376\377\000D\000a\000t\000a\000\040\000S\000t\000r\000u\000c\000t\000u\000r\000e\000s) endobj 29 0 obj << /S /GoTo /D (section.4) >> endobj 32 0 obj (\376\377\000F\000i\000l\000e\000\040\000I\000n\000d\000e\000x) endobj 33 0 obj << /S /GoTo /D (subsection.4.1) >> endobj 36 0 obj (\376\377\000F\000i\000l\000e\000\040\000L\000i\000s\000t) endobj 37 0 obj << /S /GoTo /D (section.5) >> endobj 40 0 obj (\376\377\000D\000a\000t\000a\000\040\000S\000t\000r\000u\000c\000t\000u\000r\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 41 0 obj << /S /GoTo /D (subsection.5.1) >> endobj 44 0 obj (\376\377\000c\000e\000l\000p\000r\000m\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 45 0 obj << /S /GoTo /D (subsubsection.5.1.1) >> endobj 48 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 49 0 obj << /S /GoTo /D (subsubsection.5.1.2) >> endobj 52 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 53 0 obj << /S /GoTo /D (subsection.5.2) >> endobj 56 0 obj (\376\377\000f\000i\000t\000s\000k\000e\000y\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 57 0 obj << /S /GoTo /D (subsubsection.5.2.1) >> endobj 60 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 61 0 obj << /S /GoTo /D (subsubsection.5.2.2) >> endobj 64 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 65 0 obj << /S /GoTo /D (subsection.5.3) >> endobj 68 0 obj (\376\377\000f\000i\000t\000s\000k\000e\000y\000i\000d\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 69 0 obj << /S /GoTo /D (subsubsection.5.3.1) >> endobj 72 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 73 0 obj << /S /GoTo /D (subsubsection.5.3.2) >> endobj 76 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 77 0 obj << /S /GoTo /D (subsection.5.4) >> endobj 80 0 obj (\376\377\000l\000i\000n\000p\000r\000m\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 81 0 obj << /S /GoTo /D (subsubsection.5.4.1) >> endobj 84 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 85 0 obj << /S /GoTo /D (subsubsection.5.4.2) >> endobj 88 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 89 0 obj << /S /GoTo /D (subsection.5.5) >> endobj 92 0 obj (\376\377\000p\000r\000j\000p\000r\000m\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 93 0 obj << /S /GoTo /D (subsubsection.5.5.1) >> endobj 96 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 97 0 obj << /S /GoTo /D (subsubsection.5.5.2) >> endobj 100 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 101 0 obj << /S /GoTo /D (subsection.5.6) >> endobj 104 0 obj (\376\377\000p\000s\000c\000a\000r\000d\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 105 0 obj << /S /GoTo /D (subsubsection.5.6.1) >> endobj 108 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 109 0 obj << /S /GoTo /D (subsubsection.5.6.2) >> endobj 112 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 113 0 obj << /S /GoTo /D (subsection.5.7) >> endobj 116 0 obj (\376\377\000p\000v\000c\000a\000r\000d\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 117 0 obj << /S /GoTo /D (subsubsection.5.7.1) >> endobj 120 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 121 0 obj << /S /GoTo /D (subsubsection.5.7.2) >> endobj 124 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 125 0 obj << /S /GoTo /D (subsection.5.8) >> endobj 128 0 obj (\376\377\000s\000p\000c\000p\000r\000m\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 129 0 obj << /S /GoTo /D (subsubsection.5.8.1) >> endobj 132 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 133 0 obj << /S /GoTo /D (subsubsection.5.8.2) >> endobj 136 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 137 0 obj << /S /GoTo /D (subsection.5.9) >> endobj 140 0 obj (\376\377\000s\000p\000x\000p\000r\000m\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 141 0 obj << /S /GoTo /D (subsubsection.5.9.1) >> endobj 144 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 145 0 obj << /S /GoTo /D (subsubsection.5.9.2) >> endobj 148 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 149 0 obj << /S /GoTo /D (subsection.5.10) >> endobj 152 0 obj (\376\377\000t\000a\000b\000p\000r\000m\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 153 0 obj << /S /GoTo /D (subsubsection.5.10.1) >> endobj 156 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 157 0 obj << /S /GoTo /D (subsubsection.5.10.2) >> endobj 160 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 161 0 obj << /S /GoTo /D (subsection.5.11) >> endobj 164 0 obj (\376\377\000w\000c\000s\000e\000r\000r\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 165 0 obj << /S /GoTo /D (subsubsection.5.11.1) >> endobj 168 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 169 0 obj << /S /GoTo /D (subsubsection.5.11.2) >> endobj 172 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 173 0 obj << /S /GoTo /D (subsection.5.12) >> endobj 176 0 obj (\376\377\000w\000c\000s\000p\000r\000m\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 177 0 obj << /S /GoTo /D (subsubsection.5.12.1) >> endobj 180 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 181 0 obj << /S /GoTo /D (subsubsection.5.12.2) >> endobj 184 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 185 0 obj << /S /GoTo /D (subsection.5.13) >> endobj 188 0 obj (\376\377\000w\000t\000b\000a\000r\000r\000\040\000S\000t\000r\000u\000c\000t\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 189 0 obj << /S /GoTo /D (subsubsection.5.13.1) >> endobj 192 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 193 0 obj << /S /GoTo /D (subsubsection.5.13.2) >> endobj 196 0 obj (\376\377\000F\000i\000e\000l\000d\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 197 0 obj << /S /GoTo /D (section.6) >> endobj 200 0 obj (\376\377\000F\000i\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 201 0 obj << /S /GoTo /D (subsection.6.1) >> endobj 204 0 obj (\376\377\000c\000e\000l\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 205 0 obj << /S /GoTo /D (subsubsection.6.1.1) >> endobj 208 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 209 0 obj << /S /GoTo /D (subsubsection.6.1.2) >> endobj 212 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 213 0 obj << /S /GoTo /D (subsubsection.6.1.3) >> endobj 216 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 217 0 obj << /S /GoTo /D (subsubsection.6.1.4) >> endobj 220 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 221 0 obj << /S /GoTo /D (subsubsection.6.1.5) >> endobj 224 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 225 0 obj << /S /GoTo /D (subsection.6.2) >> endobj 228 0 obj (\376\377\000f\000i\000t\000s\000h\000d\000r\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 229 0 obj << /S /GoTo /D (subsubsection.6.2.1) >> endobj 232 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 233 0 obj << /S /GoTo /D (subsubsection.6.2.2) >> endobj 236 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 237 0 obj << /S /GoTo /D (subsubsection.6.2.3) >> endobj 240 0 obj (\376\377\000T\000y\000p\000e\000d\000e\000f\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 241 0 obj << /S /GoTo /D (subsubsection.6.2.4) >> endobj 244 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 245 0 obj << /S /GoTo /D (subsubsection.6.2.5) >> endobj 248 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 249 0 obj << /S /GoTo /D (subsection.6.3) >> endobj 252 0 obj (\376\377\000g\000e\000t\000w\000c\000s\000t\000a\000b\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 253 0 obj << /S /GoTo /D (subsubsection.6.3.1) >> endobj 256 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 257 0 obj << /S /GoTo /D (subsubsection.6.3.2) >> endobj 260 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 261 0 obj << /S /GoTo /D (subsection.6.4) >> endobj 264 0 obj (\376\377\000l\000i\000n\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 265 0 obj << /S /GoTo /D (subsubsection.6.4.1) >> endobj 268 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 269 0 obj << /S /GoTo /D (subsubsection.6.4.2) >> endobj 272 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 273 0 obj << /S /GoTo /D (subsubsection.6.4.3) >> endobj 276 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 277 0 obj << /S /GoTo /D (subsubsection.6.4.4) >> endobj 280 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 281 0 obj << /S /GoTo /D (subsubsection.6.4.5) >> endobj 284 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 285 0 obj << /S /GoTo /D (subsection.6.5) >> endobj 288 0 obj (\376\377\000l\000o\000g\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 289 0 obj << /S /GoTo /D (subsubsection.6.5.1) >> endobj 292 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 293 0 obj << /S /GoTo /D (subsubsection.6.5.2) >> endobj 296 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 297 0 obj << /S /GoTo /D (subsubsection.6.5.3) >> endobj 300 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 301 0 obj << /S /GoTo /D (subsubsection.6.5.4) >> endobj 304 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 305 0 obj << /S /GoTo /D (subsection.6.6) >> endobj 308 0 obj (\376\377\000p\000r\000j\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 309 0 obj << /S /GoTo /D (subsubsection.6.6.1) >> endobj 312 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 313 0 obj << /S /GoTo /D (subsubsection.6.6.2) >> endobj 316 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 317 0 obj << /S /GoTo /D (subsubsection.6.6.3) >> endobj 320 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 321 0 obj << /S /GoTo /D (subsubsection.6.6.4) >> endobj 324 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 325 0 obj << /S /GoTo /D (subsubsection.6.6.5) >> endobj 328 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 329 0 obj << /S /GoTo /D (subsection.6.7) >> endobj 332 0 obj (\376\377\000s\000p\000c\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 333 0 obj << /S /GoTo /D (subsubsection.6.7.1) >> endobj 336 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 337 0 obj << /S /GoTo /D (subsubsection.6.7.2) >> endobj 340 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 341 0 obj << /S /GoTo /D (subsubsection.6.7.3) >> endobj 344 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 345 0 obj << /S /GoTo /D (subsubsection.6.7.4) >> endobj 348 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 349 0 obj << /S /GoTo /D (subsubsection.6.7.5) >> endobj 352 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 353 0 obj << /S /GoTo /D (subsection.6.8) >> endobj 356 0 obj (\376\377\000s\000p\000h\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 357 0 obj << /S /GoTo /D (subsubsection.6.8.1) >> endobj 360 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 361 0 obj << /S /GoTo /D (subsubsection.6.8.2) >> endobj 364 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 365 0 obj << /S /GoTo /D (subsection.6.9) >> endobj 368 0 obj (\376\377\000s\000p\000x\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 369 0 obj << /S /GoTo /D (subsubsection.6.9.1) >> endobj 372 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 373 0 obj << /S /GoTo /D (subsubsection.6.9.2) >> endobj 376 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 377 0 obj << /S /GoTo /D (subsubsection.6.9.3) >> endobj 380 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 381 0 obj << /S /GoTo /D (subsubsection.6.9.4) >> endobj 384 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 385 0 obj << /S /GoTo /D (subsubsection.6.9.5) >> endobj 388 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 389 0 obj << /S /GoTo /D (subsection.6.10) >> endobj 392 0 obj (\376\377\000t\000a\000b\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 393 0 obj << /S /GoTo /D (subsubsection.6.10.1) >> endobj 396 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 397 0 obj << /S /GoTo /D (subsubsection.6.10.2) >> endobj 400 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 401 0 obj << /S /GoTo /D (subsubsection.6.10.3) >> endobj 404 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 405 0 obj << /S /GoTo /D (subsubsection.6.10.4) >> endobj 408 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 409 0 obj << /S /GoTo /D (subsubsection.6.10.5) >> endobj 412 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 413 0 obj << /S /GoTo /D (subsection.6.11) >> endobj 416 0 obj (\376\377\000w\000c\000s\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 417 0 obj << /S /GoTo /D (subsubsection.6.11.1) >> endobj 420 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 421 0 obj << /S /GoTo /D (subsubsection.6.11.2) >> endobj 424 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 425 0 obj << /S /GoTo /D (subsubsection.6.11.3) >> endobj 428 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 429 0 obj << /S /GoTo /D (subsubsection.6.11.4) >> endobj 432 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 433 0 obj << /S /GoTo /D (subsubsection.6.11.5) >> endobj 436 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 437 0 obj << /S /GoTo /D (subsection.6.12) >> endobj 440 0 obj (\376\377\000w\000c\000s\000e\000r\000r\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 441 0 obj << /S /GoTo /D (subsubsection.6.12.1) >> endobj 444 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 445 0 obj << /S /GoTo /D (subsubsection.6.12.2) >> endobj 448 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 449 0 obj << /S /GoTo /D (subsubsection.6.12.3) >> endobj 452 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 453 0 obj << /S /GoTo /D (subsection.6.13) >> endobj 456 0 obj (\376\377\000w\000c\000s\000f\000i\000x\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 457 0 obj << /S /GoTo /D (subsubsection.6.13.1) >> endobj 460 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 461 0 obj << /S /GoTo /D (subsubsection.6.13.2) >> endobj 464 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 465 0 obj << /S /GoTo /D (subsubsection.6.13.3) >> endobj 468 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 469 0 obj << /S /GoTo /D (subsubsection.6.13.4) >> endobj 472 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 473 0 obj << /S /GoTo /D (subsubsection.6.13.5) >> endobj 476 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 477 0 obj << /S /GoTo /D (subsection.6.14) >> endobj 480 0 obj (\376\377\000w\000c\000s\000h\000d\000r\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 481 0 obj << /S /GoTo /D (subsubsection.6.14.1) >> endobj 484 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 485 0 obj << /S /GoTo /D (subsubsection.6.14.2) >> endobj 488 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 489 0 obj << /S /GoTo /D (subsubsection.6.14.3) >> endobj 492 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 493 0 obj << /S /GoTo /D (subsubsection.6.14.4) >> endobj 496 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 497 0 obj << /S /GoTo /D (subsubsection.6.14.5) >> endobj 500 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 501 0 obj << /S /GoTo /D (subsection.6.15) >> endobj 504 0 obj (\376\377\000w\000c\000s\000l\000i\000b\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 505 0 obj << /S /GoTo /D (subsubsection.6.15.1) >> endobj 508 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 509 0 obj << /S /GoTo /D (subsection.6.16) >> endobj 512 0 obj (\376\377\000w\000c\000s\000m\000a\000t\000h\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 513 0 obj << /S /GoTo /D (subsubsection.6.16.1) >> endobj 516 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 517 0 obj << /S /GoTo /D (subsubsection.6.16.2) >> endobj 520 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 521 0 obj << /S /GoTo /D (subsection.6.17) >> endobj 524 0 obj (\376\377\000w\000c\000s\000p\000r\000i\000n\000t\000f\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 525 0 obj << /S /GoTo /D (subsubsection.6.17.1) >> endobj 528 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 529 0 obj << /S /GoTo /D (subsubsection.6.17.2) >> endobj 532 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 533 0 obj << /S /GoTo /D (subsubsection.6.17.3) >> endobj 536 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 537 0 obj << /S /GoTo /D (subsection.6.18) >> endobj 540 0 obj (\376\377\000w\000c\000s\000t\000r\000i\000g\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 541 0 obj << /S /GoTo /D (subsubsection.6.18.1) >> endobj 544 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 545 0 obj << /S /GoTo /D (subsubsection.6.18.2) >> endobj 548 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 549 0 obj << /S /GoTo /D (subsubsection.6.18.3) >> endobj 552 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 553 0 obj << /S /GoTo /D (subsection.6.19) >> endobj 556 0 obj (\376\377\000w\000c\000s\000u\000n\000i\000t\000s\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 557 0 obj << /S /GoTo /D (subsubsection.6.19.1) >> endobj 560 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 561 0 obj << /S /GoTo /D (subsubsection.6.19.2) >> endobj 564 0 obj (\376\377\000D\000e\000f\000i\000n\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 565 0 obj << /S /GoTo /D (subsubsection.6.19.3) >> endobj 568 0 obj (\376\377\000E\000n\000u\000m\000e\000r\000a\000t\000i\000o\000n\000\040\000T\000y\000p\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 569 0 obj << /S /GoTo /D (subsubsection.6.19.4) >> endobj 572 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 573 0 obj << /S /GoTo /D (subsubsection.6.19.5) >> endobj 576 0 obj (\376\377\000V\000a\000r\000i\000a\000b\000l\000e\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 577 0 obj << /S /GoTo /D (subsection.6.20) >> endobj 580 0 obj (\376\377\000w\000c\000s\000u\000t\000i\000l\000.\000h\000\040\000F\000i\000l\000e\000\040\000R\000e\000f\000e\000r\000e\000n\000c\000e) endobj 581 0 obj << /S /GoTo /D (subsubsection.6.20.1) >> endobj 584 0 obj (\376\377\000D\000e\000t\000a\000i\000l\000e\000d\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) endobj 585 0 obj << /S /GoTo /D (subsubsection.6.20.2) >> endobj 588 0 obj (\376\377\000F\000u\000n\000c\000t\000i\000o\000n\000\040\000D\000o\000c\000u\000m\000e\000n\000t\000a\000t\000i\000o\000n) endobj 589 0 obj << /S /GoTo /D [590 0 R /Fit ] >> endobj 592 0 obj << /Length 173 /Filter /FlateDecode >> stream xÚu±‚@D{¾bK)X÷–½Ã£D…h´ò c!ᤃÄXÈß‹±1V3S¼—]‚ªˆþdá¢eÉJ0ÃàîÀ†´€ØlÌ\—Åy}:ìŠ8aM AEñÕí¨Ðj= g(¢!”T+ßùÇíé›ÀÖCÈMÿZß…¡P£ùWh‘éF[ÂÛà;ö3Tú:3K(•ë,,&ÅãÏÃ[½|&<ƒ endstream endobj 590 0 obj << /Type /Page /Contents 592 0 R /Resources 591 0 R /MediaBox [0 0 595.276 841.89] /Parent 596 0 R >> endobj 593 0 obj << /D [590 0 R /XYZ 90 757.935 null] >> endobj 594 0 obj << /D [590 0 R /XYZ 90 733.028 null] >> endobj 591 0 obj << /Font << /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 633 0 obj << /Length 901 /Filter /FlateDecode >> stream xÚíšËRÛ0†÷y -í…]Ý/,¹„¡Ð’Ì´3”EpDê6„Ô1-yû*–‚ ¶1«håKlù?ÿù$eÁ@pÚ;ö>õ±*Ts0¼ ÁQÈ0Ã1¸ñŽ®.‡'—Ã;<ÃóföS¼º×;öþô¹ÊÞf"„è¡ws ÁØÜ?0$J‚ÙS¦™US0è}íÁRO å¸è &!ä,ïÊã,Õ³t‘…µñ’Iøú´ü!X„Šä/#?@BïÛÑàâìÐ0ƒ ´g£ÙØž|9^ùzß7±ñl?ÁM€9Ô4¸³p£æ{¥ @"ä¸èK˜õÆ4_ú¤u¢¨ú3Þ×UªÑ %‘@p#{·š«•I²ÄÐ"1x˜¹oX&ñägZn›3êÒòi)UrPÔ©g&…MÎëùXÏIOG£TçE|/J9£H†©‚\xGí‚ xðU,RÄ¥#a&OQúd#Û[g³±~®Ô1"\x´*rG’5*ªÁu†½ÎŠõ> endobj 597 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 694.014 247.259 702.99] /Subtype /Link /A << /S /GoTo /D (section.1) >> >> endobj 598 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 676.41 164.281 685.256] /Subtype /Link /A << /S /GoTo /D (subsection.1.1) >> >> endobj 599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 656.728 169.163 667.632] /Subtype /Link /A << /S /GoTo /D (subsection.1.2) >> >> endobj 600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 629.275 173.546 640.154] /Subtype /Link /A << /S /GoTo /D (section.2) >> >> endobj 601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 603.591 196.52 612.567] /Subtype /Link /A << /S /GoTo /D (section.3) >> >> endobj 602 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 585.987 190.552 594.833] /Subtype /Link /A << /S /GoTo /D (subsection.3.1) >> >> endobj 603 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 558.38 148.839 567.356] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 604 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 540.775 162.348 549.622] /Subtype /Link /A << /S /GoTo /D (subsection.4.1) >> >> endobj 605 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 513.168 237.466 522.145] /Subtype /Link /A << /S /GoTo /D (section.5) >> >> endobj 606 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 493.507 225.68 504.411] /Subtype /Link /A << /S /GoTo /D (subsection.5.1) >> >> endobj 607 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 475.882 243.463 486.786] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.1.1) >> >> endobj 608 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 460.315 245.137 469.162] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.1.2) >> >> endobj 609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 440.634 224.335 451.538] /Subtype /Link /A << /S /GoTo /D (subsection.5.2) >> >> endobj 610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 423.009 243.463 433.913] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.2.1) >> >> endobj 611 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 407.442 245.137 416.289] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.2.2) >> >> endobj 612 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 387.76 232.086 398.664] /Subtype /Link /A << /S /GoTo /D (subsection.5.3) >> >> endobj 613 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 370.136 243.463 381.04] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.3.1) >> >> endobj 614 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 354.569 245.137 363.416] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.3.2) >> >> endobj 615 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 334.887 224.584 345.791] /Subtype /Link /A << /S /GoTo /D (subsection.5.4) >> >> endobj 616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 317.263 243.463 328.167] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.4.1) >> >> endobj 617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 301.696 245.137 310.543] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.4.2) >> >> endobj 618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 282.014 225.132 292.918] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 264.39 243.463 275.294] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.5.1) >> >> endobj 620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 248.823 245.137 257.669] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.5.2) >> >> endobj 621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 229.141 224.016 240.045] /Subtype /Link /A << /S /GoTo /D (subsection.5.6) >> >> endobj 622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 211.517 243.463 222.421] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.6.1) >> >> endobj 623 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 195.83 245.137 204.796] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.6.2) >> >> endobj 624 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 176.268 225.122 187.172] /Subtype /Link /A << /S /GoTo /D (subsection.5.7) >> >> endobj 625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 158.644 243.463 169.548] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.7.1) >> >> endobj 626 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 143.077 245.137 151.923] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.7.2) >> >> endobj 627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 123.395 227.344 134.299] /Subtype /Link /A << /S /GoTo /D (subsection.5.8) >> >> endobj 628 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 105.771 243.463 116.675] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.8.1) >> >> endobj 629 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 90.204 245.137 99.05] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.8.2) >> >> endobj 634 0 obj << /D [632 0 R /XYZ 90 757.935 null] >> endobj 636 0 obj << /D [632 0 R /XYZ 90 712.582 null] >> endobj 631 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 675 0 obj << /Length 894 /Filter /FlateDecode >> stream xÚí›Ër›0@÷|…–fª7(Ë<§™6ÆL»H³°±ì0c““Iò÷•x8¶7ˆÐ™Ž£²ˆ]®®@àÌ;Œ½O§D ¥ ÄS †œ`OÀÕàèÛE|rýëø0B&°>´ü[šš^ï$ö~{¦\ÏCR’…wuÀD÷Ÿ©ŒÀC¹×0Bõv†ÞwÕ×RŸÏê]6W‡Ö®#%c $"Á«ËàPúF –wwùˆn‹ü>)ªö¥šª\e‰*¯·\!Ð8Bû²aR¾±ËL0ºÑýr*!Pb‚°xˆ5z¢Ï{¬ŠQ:W“ ø±Z&yzW¤·ÙöxBŠ}¦û7Èì-Èè%_Ró=MÕ¼{›Ü/TVŒ^ÃËIäðîÀlñÊéÓj®ÅhlgI¸³‡!v³FF¡³G+È‘µ=4_Rñuöx?Þ]öÀ•=’¥Ês {PF÷Ìï’Å%‚DÚC&m%²ßN"ýá v1YIÄ.á’8{´"¿ ¼³G{ÈÌÞÄÙ£?¼»ìAk{ã‘] "#—‚CAX錯¦Âu- Û–e _²âû !’µùŽ 9´-ÐÒíI¦YæÊ’nìGhðt׆5ûÿ*3iy¯5Yó‹Ã}–<ãÛ§Ûíû¢RvˆJ^3ýácŒ£<[ÝYCN>LöÍq§å(mjRãÒby3É}®³‚öI—.mXŸÒ-m .m°€L­-B\ÚÐ3ÚµÐmÒ†&K˜¨i º%+ë±.—蟩Ë%Z€~Í¥L.1SÅC²,FcŸ!›\BPò±k¨\t©¡jð.{è2zÉ—8ÿe°Zó4³YtPW¹Ü=a7‰0' ÈöÅ!æ– =£] ]W¹\#(P‚nµaÇ´Ún¿¾!"­Ö¨íÛÍ$ÊFõ$\BÎë‰9S™‰æFÅͬ|m§>á5®>ˆjƒÑÃú.P~"È<eZS³ïmý„ÃÏ£á—χU›•q›Öø©™õǧ™ÚœoýŸþø…%¸ endstream endobj 674 0 obj << /Type /Page /Contents 675 0 R /Resources 673 0 R /MediaBox [0 0 595.276 841.89] /Parent 596 0 R /Annots [ 630 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R ] >> endobj 630 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 719.912 227.902 730.816] /Subtype /Link /A << /S /GoTo /D (subsection.5.9) >> >> endobj 637 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 702.288 243.463 713.192] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.9.1) >> >> endobj 638 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 686.601 245.137 695.567] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.9.2) >> >> endobj 639 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 667.039 226.238 677.943] /Subtype /Link /A << /S /GoTo /D (subsection.5.10) >> >> endobj 640 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 649.415 243.463 660.319] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.10.1) >> >> endobj 641 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 633.848 245.137 642.694] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.10.2) >> >> endobj 642 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 616.223 224.564 625.07] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 643 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 596.542 243.463 607.446] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.11.1) >> >> endobj 644 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 580.975 245.137 589.821] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.11.2) >> >> endobj 645 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 561.293 229.555 572.197] /Subtype /Link /A << /S /GoTo /D (subsection.5.12) >> >> endobj 646 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 543.669 243.463 554.573] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.12.1) >> >> endobj 647 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 528.101 245.137 536.948] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.12.2) >> >> endobj 648 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 510.477 224.016 519.324] /Subtype /Link /A << /S /GoTo /D (subsection.5.13) >> >> endobj 649 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 490.795 243.463 501.699] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.13.1) >> >> endobj 650 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 475.228 245.137 484.075] /Subtype /Link /A << /S /GoTo /D (subsubsection.5.13.2) >> >> endobj 651 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 447.621 189.785 456.598] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj 652 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 430.017 208.803 438.864] /Subtype /Link /A << /S /GoTo /D (subsection.6.1) >> >> endobj 653 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 410.335 243.463 421.239] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.1.1) >> >> endobj 654 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 394.768 251.215 403.615] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.1.2) >> >> endobj 655 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 375.087 298.288 385.991] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.1.3) >> >> endobj 656 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 359.4 260.081 368.366] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.1.4) >> >> endobj 657 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 341.895 257.849 350.742] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.1.5) >> >> endobj 658 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 324.271 222.104 333.117] /Subtype /Link /A << /S /GoTo /D (subsection.6.2) >> >> endobj 659 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 304.589 243.463 315.493] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.1) >> >> endobj 660 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 289.022 251.215 297.869] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.2) >> >> endobj 661 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 269.34 257.053 280.244] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.3) >> >> endobj 662 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 253.773 260.081 262.62] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.4) >> >> endobj 663 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 236.149 257.849 244.996] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.2.5) >> >> endobj 664 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 216.467 236.629 227.371] /Subtype /Link /A << /S /GoTo /D (subsection.6.3) >> >> endobj 665 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 198.843 243.463 209.747] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.3.1) >> >> endobj 666 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 183.276 260.081 192.122] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.3.2) >> >> endobj 667 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 165.651 207.708 174.498] /Subtype /Link /A << /S /GoTo /D (subsection.6.4) >> >> endobj 668 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 145.97 243.463 156.874] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.4.1) >> >> endobj 669 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 130.283 251.215 139.249] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.4.2) >> >> endobj 670 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 110.721 298.288 121.625] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.4.3) >> >> endobj 671 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 95.154 260.081 104.001] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.4.4) >> >> endobj 676 0 obj << /D [674 0 R /XYZ 90 757.935 null] >> endobj 673 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 715 0 obj << /Length 824 /Filter /FlateDecode >> stream xÚí›KSÛ0Çïþ:Ú‡¸’¬'GaÊ´t žö@9$ÆwÀIMÊ·¯ü &ÍÃé²'ÉŽ-Ë¿]ïþWŽ1š ŒŽ½ýØû0¤éP *P|4FRS‚â+tá|9Nãóà2>AŒ°PhbN­~˲¬ÜíÅÞ/¯Ü‹©à2”GÉwq‰Ñ•Ù‚pi…«£î£‘ioѹ÷ÕÃÍdêó‹I3ÐY;=Ü™¡2T\!I£ ^ÏC„,äÁ€PŒýo!ÄÙh|›ʱ8MîÒ|>šgÓ¼šp{Et1œúa0àæÔ7Ô0­·²t›„ì‹èÅî¿y£¥¡& ˆ e-Þ.6$o§“ð¦†:ÌZ¼géuZ¤y’._3"ÑD»K#l²Ûf‹5¦Iãé‡é|dŒpÕ8yzŸÙl•‹ -òȸáËŸùÒ†ïQn¢FQ q(ì?ÍúDÆ¢ÿ$dô&ØñШ!8|È“g|qªÞWr¦ òÛv°Â.¿-zÑä·YñÓ"¿1…!¿¹Ûbu~ßúC–‘u~‹üv˜þÀ˜æ}‚ˆêÝ¡µÒb‘ø@:”…AÒa7L;<”ÆÛÁ*åXËF:ÜÏ é@¹é°ÖÚM:Hý!kbI$H‡~h©uâ“ ^Œœ¤ÃŽ˜v¼¤ÃF°Òp%;Jµ7ÒA¿I´ÿл{aõÊÍ`™X‡µÐ –™®‰z=~Côx­"·è¡!zX@¶_ÒPqôC+­õ²†ŠÃ`Ç9¡âØ=S¨8¶ƒ%Ôñ='ÁfXCr>ÌŒnñ®kX°t·Çj Gp©$ȇ^íÿ‰bøÒ–/ȇ] íD’R?H Aî✬&òá•L»^Ék¦ 6€ÕŽK„Ôòá1¹·R Ð FXgÐ ½!SjBh†^h——ÌêvùS¡Œ«¾_‚´Ÿ£˜BPFªù…›¢7þœæ¥Öh¾Í™ŸÛÎ0 ÜOÇõ†¨‚÷Ùã²Þ¢Ø¨õªw];-êïçŸ>î×}VÕIeoüÔÿ÷Ó$}ivs§Ü:7) endstream endobj 714 0 obj << /Type /Page /Contents 715 0 R /Resources 713 0 R /MediaBox [0 0 595.276 841.89] /Parent 596 0 R /Annots [ 672 0 R 677 0 R 678 0 R 679 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R ] >> endobj 672 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 721.97 257.849 730.816] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.4.5) >> >> endobj 677 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 702.288 209.919 713.192] /Subtype /Link /A << /S /GoTo /D (subsection.6.5) >> >> endobj 678 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 684.664 243.463 695.567] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.5.1) >> >> endobj 679 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 667.039 298.288 677.943] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.5.2) >> >> endobj 680 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 651.472 260.081 660.319] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.5.3) >> >> endobj 681 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 633.848 257.849 642.694] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.5.4) >> >> endobj 682 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 614.166 208.256 625.07] /Subtype /Link /A << /S /GoTo /D (subsection.6.6) >> >> endobj 683 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 596.542 243.463 607.446] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.6.1) >> >> endobj 684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 580.975 251.215 589.821] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.6.2) >> >> endobj 685 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 561.293 298.288 572.197] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.6.3) >> >> endobj 686 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 545.726 260.081 554.573] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.6.4) >> >> endobj 687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 528.101 257.849 536.948] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.6.5) >> >> endobj 688 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 508.42 210.467 519.324] /Subtype /Link /A << /S /GoTo /D (subsection.6.7) >> >> endobj 689 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 490.795 243.463 501.699] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.7.1) >> >> endobj 690 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 475.109 251.215 484.075] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.7.2) >> >> endobj 691 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 455.547 298.288 466.451] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.7.3) >> >> endobj 692 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 439.86 260.081 448.826] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.7.4) >> >> endobj 693 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 422.355 257.849 431.202] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.7.5) >> >> endobj 694 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 402.674 211.025 413.578] /Subtype /Link /A << /S /GoTo /D (subsection.6.8) >> >> endobj 695 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 385.049 243.463 395.953] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.8.1) >> >> endobj 696 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 369.482 260.081 378.329] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.8.2) >> >> endobj 697 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 349.801 211.025 360.704] /Subtype /Link /A << /S /GoTo /D (subsection.6.9) >> >> endobj 698 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 332.176 243.463 343.08] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.9.1) >> >> endobj 699 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 316.489 251.215 325.456] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.9.2) >> >> endobj 700 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 296.927 298.288 307.831] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.9.3) >> >> endobj 701 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 281.241 260.081 290.207] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.9.4) >> >> endobj 702 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 263.616 257.849 272.583] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.9.5) >> >> endobj 703 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 246.112 208.963 254.958] /Subtype /Link /A << /S /GoTo /D (subsection.6.10) >> >> endobj 704 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 226.43 243.463 237.334] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.10.1) >> >> endobj 705 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 210.863 251.215 219.71] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.10.2) >> >> endobj 706 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 191.181 298.288 202.085] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.10.3) >> >> endobj 707 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 175.614 260.081 184.461] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.10.4) >> >> endobj 708 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 157.87 257.849 166.836] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.10.5) >> >> endobj 709 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 140.246 212.679 149.212] /Subtype /Link /A << /S /GoTo /D (subsection.6.11) >> >> endobj 710 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 120.684 243.463 131.588] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.11.1) >> >> endobj 711 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 105.117 251.215 113.963] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.11.2) >> >> endobj 716 0 obj << /D [714 0 R /XYZ 90 757.935 null] >> endobj 713 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 755 0 obj << /Length 822 /Filter /FlateDecode >> stream xÚí›[S›@†ïù{ Ùîùे8uZ;UÆ^X/r ‘ƒcÕ_pÁH:Õú]íÂnÈò|/ïKдïm‡Þ§>³Èb«˜BáY‚´¢X2ŠÂ1:õw¾†{‡áqp A%æÂf?}h‹Jüßy‹·z¿<š5DŽ!5Ö\¢ÑÌ;=#hœí?@skÐíC¯Œgå:ö¾{d1÷ûtº8ÐQ1BR!eif%ÝP¦ó § ñ÷’›Y”æñeô˜$~âß_Enk÷r”µ's×!|ñïè´'÷qГÙaÞJ!¬]ÑåÉ9è,*”ÉG»ŸƒÍÊÕX1Q!(ÁþM2Zâ{˜dæ­[æÆ™JÇô$ ”úƒ4 /šd¢–ì=]+Y9_¶Ç¶T,ð./z–6#y;ºŽÒ4ÒÇçŽm?.(E“(’QôìZ7ôþ‡AxƒeŠ3L]ŠïFóA†}¼Èîèz”ÆW/å¶²ê¦ûdÑ^Bfߟ„°¤‰z(emÚŠ|žîx™öjD—œçì]+Y& Ë•¨V²¼Ìm²Ü²i/Ëd¹ZÛ-L庬^ü0•{© ]²¦r«Áò®ŽA”Žá|Üv*Ǥùpfa­ Ôxž¡9dÕ^Bx†Fhuû;žÏP!(I—äϰy¦àV‚U¢ëã_Yz†‹xÒÆ3HÏZ¡Æ·Ið Í!Ë®îX•™>ÌÏÛXc£ ¿¡¯Ñù½AÈÏo‘ <ñߎeëR:®Ò8™OZˆ‡¡âƒ«†êxWÔ „L^à ªÑm‡™´†—¢k2­3q¦TâyOÛè°Õ`ârô¦£ãæ;¼o2 Ç›E[M]ãõ˜Öc[ÊñMϯ[è1ô8c¯iG=¶ ÇÍ!óö¢aA¡íðÍ …MU‚OK¸òéze20M—ƒËR¶š›Å²i±”‹ ß’œ|!E¾•~À¤ ݆r%[‚nIí¶É¿Ïk“¼ïeê6~ìù¼íêSâjÃû"¤w÷Óèq0³3ýÌÙ> endobj 712 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 719.912 298.288 730.816] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.11.3) >> >> endobj 717 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 704.345 260.081 713.192] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.11.4) >> >> endobj 718 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 686.721 257.849 695.567] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.11.5) >> >> endobj 719 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 669.096 223.189 677.943] /Subtype /Link /A << /S /GoTo /D (subsection.6.12) >> >> endobj 720 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 649.415 243.463 660.319] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.12.1) >> >> endobj 721 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 633.848 251.215 642.694] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.12.2) >> >> endobj 722 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 616.223 260.081 625.07] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.12.3) >> >> endobj 723 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 598.599 223.199 607.446] /Subtype /Link /A << /S /GoTo /D (subsection.6.13) >> >> endobj 724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 578.917 243.463 589.821] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.13.1) >> >> endobj 725 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 563.231 251.215 572.197] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.13.2) >> >> endobj 726 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 543.669 298.288 554.573] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.13.3) >> >> endobj 727 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 528.101 260.081 536.948] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.13.4) >> >> endobj 728 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 510.477 257.849 519.324] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.13.5) >> >> endobj 729 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 492.853 225.411 501.699] /Subtype /Link /A << /S /GoTo /D (subsection.6.14) >> >> endobj 730 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 473.171 243.463 484.075] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.14.1) >> >> endobj 731 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 457.604 251.215 466.451] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.14.2) >> >> endobj 732 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 437.922 298.288 448.826] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.14.3) >> >> endobj 733 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 422.355 260.081 431.202] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.14.4) >> >> endobj 734 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 404.731 257.849 413.578] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.14.5) >> >> endobj 735 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 387.107 222.801 395.953] /Subtype /Link /A << /S /GoTo /D (subsection.6.15) >> >> endobj 736 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 367.425 243.463 378.329] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.15.1) >> >> endobj 737 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 351.858 232.604 360.704] /Subtype /Link /A << /S /GoTo /D (subsection.6.16) >> >> endobj 738 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 332.176 243.463 343.08] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.16.1) >> >> endobj 739 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 316.609 251.215 325.456] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.16.2) >> >> endobj 740 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 296.927 234.816 307.831] /Subtype /Link /A << /S /GoTo /D (subsection.6.17) >> >> endobj 741 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 279.303 243.463 290.207] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.17.1) >> >> endobj 742 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 263.736 251.215 272.583] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.17.2) >> >> endobj 743 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 246.112 260.081 254.958] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.17.3) >> >> endobj 744 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 226.43 226.517 237.334] /Subtype /Link /A << /S /GoTo /D (subsection.6.18) >> >> endobj 745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 208.806 243.463 219.71] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.18.1) >> >> endobj 746 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 193.119 251.215 202.085] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.18.2) >> >> endobj 747 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 175.495 260.081 184.461] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.18.3) >> >> endobj 748 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 157.87 232.056 166.836] /Subtype /Link /A << /S /GoTo /D (subsection.6.19) >> >> endobj 749 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 138.308 243.463 149.212] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.19.1) >> >> endobj 750 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 122.621 251.215 131.588] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.19.2) >> >> endobj 751 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 103.059 298.288 113.963] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.19.3) >> >> endobj 756 0 obj << /D [754 0 R /XYZ 90 757.935 null] >> endobj 753 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 776 0 obj << /Length 1421 /Filter /FlateDecode >> stream xÚíX[sâ6~çWøfa lã´Ó)!!ËNRpºÍd÷AØ456•å°üûY —m²]^¶Ót$¤sùÎM²ëÌ×¹ªGµÖ€„NˆBŸøN4sB× |Œ<‚(që¸Ñ$ž[ÿØŸ\Ï5ÝAØÕÍMÜ]MÎGŽ[ÿcgKà’pø}¨]Fµ¿j„º®„x Úž/kŸ]'õŽ‹Úa×YW»–N‡´aLIí·škÖçÅÜ0[Ü&` ®×uÒF®ïi;|„CÔi4×­Ê,–<Ï´®y\.Y&iµ¤tµÂœÇ¦GºuÔhzpêG:aø¶{fØ­ãÀßY>„Æ&O:/0õ4¦¿70Æu*8¦ì Àù‘€}3¾G _¶I qg^Iä’ë¸(%OÑB;àâ1›1Á²˜íË HxO}¿ýòÞ3òëÀ¾`’Þ¦Ð]°"|u,¢ýÐÿ/£û] »‡‘ÈÿÅøí˜V]wP»ãÕãšmÝãší‘°½íÕØuÿ]³aZF¡çU2Àiº*éîÈòïç™ûî4auÚ Q:‡šÃ'B¼×"å±Âd˜I‘'e|[˜TD)åüoe=F“& ´Š`)•6Ë‹|&× pìŸÅ{ß*~ôÔÀ^‰'ÎÄ«¯µÀ|¶sÍ:­È—áPIR¾¥`ʼn¾aË\l´%Í蜩„>±MœÎ³¼<6–rUžZˆ¾Ó°XæBKéÝ O,"ZF“fAgLnNìˆË/t¹²7…8OØ;MJ¸eó½0qÉ?¹.‰éë‰÷]a8PÂr!5u-èjÅDqb™/JÝa5}®tM[­ÚP »­wd[ïVÁç‹ãñÕÀÉ…‹«ò|¸N õÙÔ=k¹ïÚz¬¨¦jäÊWÏ­¯ZSeArÁ4¡Š—¦ª ¦ˆB‚ ©Hª6¢‚gŽoúì³âÕÖO®çöáë)C¯I\LÞéù jªOS:LB­0Lqà?b/ô8̨XÕN¨›gzºÉKMÄÖPÁŇOKiŽpi¡HZ*Õ½Ì>Ûìþ_f ψ¼°×†dbY|º«Û{M\³¢°l®XÆMõ䮜¦ªžT›x̲Â¥†çJm(ªK¨ét³ï¡&³)3*ØFŸ'H­÷Û_±ÄèfŽ[À”s©Ü‚nVóêªZùü.š TëÛÕ½ÕñϾ4¨ðlOÝE¾bvÉ*h=ºæ©jö”›•©± ØšhFïG÷‘žônŽó±7÷n£‡Ÿ,g¹ÈíqöÄöµR鯭Îà¨Dr³ øÍå¸ÿXö·×ÃèanÈÄÛËÉ䈻£±ÑÓ„Uo û÷×=³|w?¾M.áö‡ L'Œ.Rg Þ!4ÐÍÿIõ˜)Žz÷ÁfjÀ¥™}b6mcÆŸ,bÔ$5˜“æÛ!œ4ÍU¯²>ÝV?ˆD áÐÈÎri§° þ¼ruÖj­×k4ÏJ”‹y+Õ²ŠÖ/Gqèç.E«ŠzX;·š¼Ì„%Ýì†p«m>Èü¬’bú ·À%x2£KðŒ)šËXà_©Ìf(.¸È-€sW 'Mл0,.z¥ª>òp{G£^ ÉLSn¼±ž»Ûô½­ª–7 1O¹ÜÄû“áxtLÑþÿ<ÿ¢ ý•i/B/W«-¶·“¦?ú]²Ç±w?‰Æ½ëao§ï_ôÁ£¸ûÖÏ‹ö;¨mº¹þêË<#Tîö`Ÿ«7–¨Ë<›ê‰¯ìžuð™è™j´šš©½öJyü­6ÝØçð—Íœeû–þ ÉO w endstream endobj 775 0 obj << /Type /Page /Contents 776 0 R /Resources 774 0 R /MediaBox [0 0 595.276 841.89] /Parent 596 0 R /Annots [ 752 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R ] >> endobj 752 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 721.85 260.081 730.816] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.19.4) >> >> endobj 757 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 704.226 257.849 713.192] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.19.5) >> >> endobj 758 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 686.721 225.969 695.567] /Subtype /Link /A << /S /GoTo /D (subsection.6.20) >> >> endobj 759 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 667.039 243.463 677.943] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.20.1) >> >> endobj 760 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 651.472 260.081 660.319] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.20.2) >> >> endobj 761 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 557.902 165.158 566.748] /Subtype /Link /A << /S /GoTo /D (intro) >> >> endobj 762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 537.976 244.459 546.823] /Subtype /Link /A << /S /GoTo /D (software) >> >> endobj 763 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 518.051 205.706 526.898] /Subtype /Link /A << /S /GoTo /D (overview) >> >> endobj 764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 498.126 213.854 506.973] /Subtype /Link /A << /S /GoTo /D (structs) >> >> endobj 765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 476.143 203.613 486.778] /Subtype /Link /A << /S /GoTo /D (memory) >> >> endobj 766 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 456.218 187.025 467.122] /Subtype /Link /A << /S /GoTo /D (diagnostics) >> >> endobj 767 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 438.35 160.445 447.197] /Subtype /Link /A << /S /GoTo /D (vector) >> >> endobj 768 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 416.367 171.225 427.271] /Subtype /Link /A << /S /GoTo /D (threads) >> >> endobj 769 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 396.442 268.768 407.346] /Subtype /Link /A << /S /GoTo /D (testing) >> >> endobj 770 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 376.517 224.216 387.421] /Subtype /Link /A << /S /GoTo /D (fortran) >> >> endobj 771 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 358.649 154.807 367.496] /Subtype /Link /A << /S /GoTo /D (pgsbox) >> >> endobj 6 0 obj << /D [775 0 R /XYZ 90 636.777 null] >> endobj 777 0 obj << /D [775 0 R /XYZ 90 602.791 null] >> endobj 778 0 obj << /D [775 0 R /XYZ 90 602.791 null] >> endobj 10 0 obj << /D [775 0 R /XYZ 90 602.791 null] >> endobj 779 0 obj << /D [775 0 R /XYZ 90 349.683 null] >> endobj 14 0 obj << /D [775 0 R /XYZ 90 345.075 null] >> endobj 774 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 837 0 obj << /Length 680 /Filter /FlateDecode >> stream xÚí˜ßoÚ0ÇßóWø¤áúìØ‰ûÖ–ÒµëHÓ„ª*$eãG–d*ü÷spR š: ´F}JbÌå{ŸœÏç#hŠºq.‡ÎYJ$±T áI‚<˜S@ÃZ´Ý¡œ´º*IÛà·Tä*2c÷q–·†wÈÚbù=è\Ÿè1‚`c•{Øc…sgô@P¤ÇïÁLúèi3kŽ\Êôu†Î‡ì)3WÐJ"e˜þ,y]ã³½=w êPKVšº™-ÇÁ¬üC!<–ôo4Ú˜ Õ,^Ä*MçÙtÇö‹w—Hö¹¨è\DQ%n²LÍÍ8<µ´‚4ÊÌP¸œ'AãYœ¯Û‚·>˜ñ_™ú«¼?i+âT…ùlmŒ-–mÊ[Oæ!^d¹ "ü®NéK‡y€ZAKÒܚĄ{ f|©-SVÐ<½žÜ†@3¾Ô¶¢™]¤ à‰´Â ì"®Þ¡YEZïv8øØí?^]ô»‡0Ø“ðo¡õÜwè½›IV½£’øéú[ÿúÊÌßÑäs ~5û ZL0ÌD…Yìš¶û&ÛŠ;vŒiyÇÝ7 _¬¦V&k hºÒ_”5ƒZåLX›˜ZPY±,\¿)ìŒ3uØY–j>æÛêÿ¯SãKh–¥ÚIGOnÛC]rK¬ªŽ"x.4'¹ÎÔ‰µMÞ±YbKÒï–õÇIóš–÷æ5­Ên3Ø| Í V9cÙ´,Ëíà¤íŽ#ÇZÍv‡Vewr/Jê½Ñºß>–ú„p`{´j‹ ,=æ—]Q.1çn \-Tºíƒ.æú¹ºéúÔØ<srîÂ9÷Ì%P6'ÅÜŠè׫Áýí¥¹w1’séww¹ZOÕbßÓß<ħ endstream endobj 836 0 obj << /Type /Page /Contents 837 0 R /Resources 835 0 R /MediaBox [0 0 595.276 841.89] /Parent 859 0 R /Annots [ 772 0 R 773 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R ] >> endobj 772 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 692.111 180.38 702.99] /Subtype /Link /A << /S /GoTo /D (cel_8h_0474e3e2d6c39249acbe58cedd573e84) >> >> endobj 773 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.253 691.977 393.509 702.99] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 654.999 182.582 665.878] /Subtype /Link /A << /S /GoTo /D (cel_8h_9e188b582ee4eb815466e86bb684fc82) >> >> endobj 793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.454 654.865 395.71 665.878] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 617.888 180.918 628.767] /Subtype /Link /A << /S /GoTo /D (cel_8h_2fe5a30084717036a54e7f0a920da105) >> >> endobj 795 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.791 617.753 394.047 628.767] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 796 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 580.776 183.14 591.655] /Subtype /Link /A << /S /GoTo /D (cel_8h_f72e24d2f169c3c343c55c880a74050f) >> >> endobj 797 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.012 580.641 396.268 591.655] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 798 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 543.664 183.14 554.543] /Subtype /Link /A << /S /GoTo /D (cel_8h_c398f2bea2deac6d86c10a7b3efca966) >> >> endobj 799 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.012 543.53 396.268 554.543] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 800 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 507.295 200.315 517.432] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_705c7c2c9700367e0e8b82d5033e6fa3) >> >> endobj 801 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 469.441 179.842 480.32] /Subtype /Link /A << /S /GoTo /D (lin_8h_ffec8a2c0650ebd2168d7772b2ecec19) >> >> endobj 802 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.715 469.306 391.875 480.32] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 803 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 432.329 183.707 443.208] /Subtype /Link /A << /S /GoTo /D (lin_8h_58c2822debf5b36daa18fe8711d724f2) >> >> endobj 804 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.58 432.194 395.74 443.208] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 805 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 395.217 185.172 406.096] /Subtype /Link /A << /S /GoTo /D (lin_8h_a6d3f59059c532b0217f570f2b4f50df) >> >> endobj 806 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.045 395.083 397.205 406.096] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 807 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 358.105 182.044 368.985] /Subtype /Link /A << /S /GoTo /D (lin_8h_8970e09d61fde987211f8e64061e1fa1) >> >> endobj 808 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.916 357.971 394.076 368.985] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 809 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 320.994 180.38 331.873] /Subtype /Link /A << /S /GoTo /D (lin_8h_a78f202b20674909aab523018106546e) >> >> endobj 810 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.253 320.859 392.413 331.873] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 811 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 283.882 184.265 294.761] /Subtype /Link /A << /S /GoTo /D (lin_8h_cb8c02645d7cc3d42e3db6ebf74de192) >> >> endobj 812 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.138 283.748 396.298 294.761] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 246.77 184.265 257.649] /Subtype /Link /A << /S /GoTo /D (lin_8h_7232df93295216e063c438671652c2b4) >> >> endobj 814 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.138 246.636 396.298 257.649] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 815 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 209.659 182.044 220.538] /Subtype /Link /A << /S /GoTo /D (prj_8h_7f080405538ea2ddd2882c991e25bd2f) >> >> endobj 816 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.916 209.524 394.624 220.538] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 817 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 172.547 184.246 183.426] /Subtype /Link /A << /S /GoTo /D (prj_8h_f862254dceec64a987fdaabc40e4963d) >> >> endobj 818 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.118 172.412 396.826 183.426] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 819 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 135.435 182.582 146.314] /Subtype /Link /A << /S /GoTo /D (prj_8h_94f59295c312536ce66482b3d9bebec4) >> >> endobj 820 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.454 135.301 395.163 146.314] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 98.323 184.803 109.202] /Subtype /Link /A << /S /GoTo /D (prj_8h_3672afec3db0f850d67404814ebdbc64) >> >> endobj 822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.676 98.189 397.384 109.202] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 838 0 obj << /D [836 0 R /XYZ 90 757.935 null] >> endobj 18 0 obj << /D [836 0 R /XYZ 90 733.028 null] >> endobj 839 0 obj << /D [836 0 R /XYZ 90 709.842 null] >> endobj 840 0 obj << /D [836 0 R /XYZ 90 709.842 null] >> endobj 841 0 obj << /D [836 0 R /XYZ 90 683.229 null] >> endobj 842 0 obj << /D [836 0 R /XYZ 90 646.117 null] >> endobj 843 0 obj << /D [836 0 R /XYZ 90 609.006 null] >> endobj 844 0 obj << /D [836 0 R /XYZ 90 571.894 null] >> endobj 845 0 obj << /D [836 0 R /XYZ 90 534.782 null] >> endobj 847 0 obj << /D [836 0 R /XYZ 90 497.671 null] >> endobj 848 0 obj << /D [836 0 R /XYZ 90 460.559 null] >> endobj 849 0 obj << /D [836 0 R /XYZ 90 423.447 null] >> endobj 850 0 obj << /D [836 0 R /XYZ 90 386.335 null] >> endobj 851 0 obj << /D [836 0 R /XYZ 90 349.224 null] >> endobj 852 0 obj << /D [836 0 R /XYZ 90 312.112 null] >> endobj 853 0 obj << /D [836 0 R /XYZ 90 275 null] >> endobj 854 0 obj << /D [836 0 R /XYZ 90 237.888 null] >> endobj 855 0 obj << /D [836 0 R /XYZ 90 200.777 null] >> endobj 856 0 obj << /D [836 0 R /XYZ 90 163.665 null] >> endobj 857 0 obj << /D [836 0 R /XYZ 90 126.553 null] >> endobj 858 0 obj << /D [836 0 R /XYZ 90 89.441 null] >> endobj 835 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 916 0 obj << /Length 679 /Filter /FlateDecode >> stream xÚí™_o›0Åßù~L¤Å»6ØÆ}[×5ZÕ=l´‡¬š8[P%ùö31lk´?µ'"„ú8À=ç§›ÜÐ šz—3ïå5•HbÉ)G³%’€'˜Q‚f šèxBŒ®T^ŒI8RqT©Ä¬Ý¦e5¾ŸÝ €„ˆÔo<>â׋ޛ™÷Í#z 9¾• ,|†â7¿”èõØ—!ÚïÚ €úú¸FwÞ{…ðW¥ÔÇÀ™);]g‹h}¬mŠ«¦ú‡©‡æGÉyñ¥¤ûϪ(6媹õq]~)B€`*~X{•$­ûeV˜“EÝ Œ¢")ÍRœmò¨Jé:­cÎF/ÌúC©þ©ïwâšO“´Pqµ>˜—m³1e£¹H·e¥¢?zìؤ53¡!à?[™Çé6µÀ&%!ÎEMËëZãÅZ^Týíµn©ýO¯•ª²ë5NØ`z­öâmOKË^ }1œ^«Í8õšõ8xÆVE‹>-¯‡ã@«ŠóƒU¯Q,ÔZ3.Ø–&y*+v@ …1ãÂ®× ¤klŽ DËêséüçÍ)hU½N Ý÷šë(íué)¶]\Ú%€…OÎ…Mëë›1ã‚­|XXÎQ~¾9Ú56cÆ[œYf7‰™‡Â͘qáæ”Ý8>˜¯ª1cØVìl³›Nؾ?lÆŒÓ/œ²Ž¼\›1ã‚-·Lo†@g0ÔfœºæÏØì±mR»ÐËŽ‚͘±ÆÖŸ¬þ-HŽCÆÏÈíáî"òK>u±Ý4äX ?l6 ™N3¬Äj«ŠŸ;šÙÖßµ'×µ>µ0Ü\ä‚ sE4[¤ËúÞëÇ×w·o/Íy€ 4°ßWÙþ°RÛS§ß¿h|O endstream endobj 915 0 obj << /Type /Page /Contents 916 0 R /Resources 914 0 R /MediaBox [0 0 595.276 841.89] /Parent 859 0 R /Annots [ 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R ] >> endobj 823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 720.047 184.803 730.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_df9cca0265038851129d1966017cd525) >> >> endobj 824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.676 719.912 397.384 730.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 691.344 182.601 702.223] /Subtype /Link /A << /S /GoTo /D (spc_8h_4d66edc63bfc8a39adc6bac9e88c8e81) >> >> endobj 826 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.474 691.209 397.394 702.223] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 662.641 184.803 673.52] /Subtype /Link /A << /S /GoTo /D (spc_8h_c39694faccdd56850677999d714cd14a) >> >> endobj 828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.676 662.506 399.596 673.52] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 633.938 183.14 644.817] /Subtype /Link /A << /S /GoTo /D (spc_8h_49807752ce4e223d4095cf6ad13bac0a) >> >> endobj 830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.012 633.803 397.932 644.817] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 605.235 185.361 616.114] /Subtype /Link /A << /S /GoTo /D (spc_8h_ab517aed3ee9f8d5a5ca1f990d310b61) >> >> endobj 832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.234 605.1 400.154 616.114] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 576.531 185.361 587.411] /Subtype /Link /A << /S /GoTo /D (spc_8h_f0e4274b242fd41625b6ad4f4376b8da) >> >> endobj 834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.234 576.397 400.154 587.411] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 547.828 182.602 558.708] /Subtype /Link /A << /S /GoTo /D (tab_8h_8b57d9bacbabd2b516d77220cdb6167d) >> >> endobj 881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.474 547.694 396.288 558.708] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 519.125 186.467 530.004] /Subtype /Link /A << /S /GoTo /D (tab_8h_27460f165fb03a075a1c6c6a48f33c62) >> >> endobj 883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.34 518.991 400.154 530.004] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 490.422 187.932 501.301] /Subtype /Link /A << /S /GoTo /D (tab_8h_bf96fe5488df6796ec2606b974f330fe) >> >> endobj 885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.805 490.288 401.618 501.301] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 461.719 184.803 472.598] /Subtype /Link /A << /S /GoTo /D (tab_8h_e2ee098afabb7a7d225f930276ffb441) >> >> endobj 887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.676 461.585 398.49 472.598] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 888 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 433.016 183.14 443.895] /Subtype /Link /A << /S /GoTo /D (tab_8h_4abf39ca4cfc2ea073bffdbb98caa46d) >> >> endobj 889 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.012 432.882 396.826 443.895] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 404.313 185.361 415.192] /Subtype /Link /A << /S /GoTo /D (tab_8h_141c3365f0364c01237aeeb93ddb717e) >> >> endobj 891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.234 404.179 399.048 415.192] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 892 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 375.61 185.361 386.489] /Subtype /Link /A << /S /GoTo /D (tab_8h_49872082d67e357c5c68a633824133ae) >> >> endobj 893 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.234 375.476 399.048 386.489] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 894 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 346.907 184.255 357.786] /Subtype /Link /A << /S /GoTo /D (wcs_8h_1bcf49cfe1ed1bb2bc4c930f98d808fa) >> >> endobj 895 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.128 346.773 401.26 357.786] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 896 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 318.204 188.131 329.083] /Subtype /Link /A << /S /GoTo /D (wcs_8h_465ef3c77aaf546324dae0692e6de7fe) >> >> endobj 897 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.004 318.07 405.135 329.083] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 898 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 289.501 193.102 300.38] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e1738854472218541bda531653ef2709) >> >> endobj 899 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.975 289.367 410.107 300.38] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 900 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 260.798 189.585 271.677] /Subtype /Link /A << /S /GoTo /D (wcs_8h_3d64b57cec404114c75bd25a562e8053) >> >> endobj 901 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.458 260.663 406.59 271.677] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 902 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 232.095 186.457 242.974] /Subtype /Link /A << /S /GoTo /D (wcs_8h_8f5c31a6983b17abbe2fead61550d55c) >> >> endobj 903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.33 231.96 403.461 242.974] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 904 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 203.392 184.793 214.271] /Subtype /Link /A << /S /GoTo /D (wcs_8h_84a67c964e212bbf004c264b3ca70fee) >> >> endobj 905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.666 203.257 401.798 214.271] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 174.689 187.573 185.568] /Subtype /Link /A << /S /GoTo /D (wcs_8h_de3959355dc9d0987e7ccc4070795c38) >> >> endobj 907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.446 174.554 404.577 185.568] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 908 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 145.986 187.573 156.865] /Subtype /Link /A << /S /GoTo /D (wcs_8h_37c4884cf58baf25b2984ec3bccb80a5) >> >> endobj 909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.446 145.851 404.577 156.865] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 910 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 117.283 189.227 128.162] /Subtype /Link /A << /S /GoTo /D (wcs_8h_cfbadc770489b6b5186b95eaa35467f1) >> >> endobj 911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.1 117.148 406.231 128.162] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.286 88.58 180.38 99.459] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_3229b126ed844da0a2d4f7abff1de7d0) >> >> endobj 913 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.253 88.445 407.905 99.459] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_256ce6281894f65dd15396cc0994e875) >> >> endobj 917 0 obj << /D [915 0 R /XYZ 90 757.935 null] >> endobj 918 0 obj << /D [915 0 R /XYZ 90 715.369 null] >> endobj 919 0 obj << /D [915 0 R /XYZ 90 686.666 null] >> endobj 920 0 obj << /D [915 0 R /XYZ 90 657.963 null] >> endobj 921 0 obj << /D [915 0 R /XYZ 90 629.26 null] >> endobj 922 0 obj << /D [915 0 R /XYZ 90 600.557 null] >> endobj 923 0 obj << /D [915 0 R /XYZ 90 571.854 null] >> endobj 924 0 obj << /D [915 0 R /XYZ 90 543.151 null] >> endobj 925 0 obj << /D [915 0 R /XYZ 90 514.448 null] >> endobj 926 0 obj << /D [915 0 R /XYZ 90 485.745 null] >> endobj 927 0 obj << /D [915 0 R /XYZ 90 457.042 null] >> endobj 928 0 obj << /D [915 0 R /XYZ 90 428.339 null] >> endobj 929 0 obj << /D [915 0 R /XYZ 90 399.636 null] >> endobj 930 0 obj << /D [915 0 R /XYZ 90 370.933 null] >> endobj 931 0 obj << /D [915 0 R /XYZ 90 342.23 null] >> endobj 932 0 obj << /D [915 0 R /XYZ 90 313.527 null] >> endobj 933 0 obj << /D [915 0 R /XYZ 90 284.823 null] >> endobj 934 0 obj << /D [915 0 R /XYZ 90 256.12 null] >> endobj 935 0 obj << /D [915 0 R /XYZ 90 227.417 null] >> endobj 936 0 obj << /D [915 0 R /XYZ 90 198.714 null] >> endobj 937 0 obj << /D [915 0 R /XYZ 90 170.011 null] >> endobj 938 0 obj << /D [915 0 R /XYZ 90 141.308 null] >> endobj 939 0 obj << /D [915 0 R /XYZ 90 112.605 null] >> endobj 914 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1015 0 obj << /Length 999 /Filter /FlateDecode >> stream xÚÕXËr£FÝë+X6 1ý„Æ»xb;ž8©I¤Jž©T µ%fì¿Ï…ndI#+èQ•ÊŠ†jÎ=÷p_4öföî×ãÁ»[{q‡4ôÆO^Œ½($ ÄO½GÄü!ý¨jeW£Ú,“zi|"‘¶îó©~ö‡Œ!îÜŒØÀi1EDLxÉbðø{SxþÁË¥·jw-3‰ªò¹7qÛLª&Y×rU>]·çÔtפÍN»½~]ë^Ž)C(;Ó±ZM86öcŠÔħ-³ a ¢Ñ™üWI¥y‹ÿ±UØ1_èªR3—¤sø(YßF'`DŒœOöÐ4T@R¦¹ªõ%u&2’±s›Ýªž¨:?ÙFW¸©2Ùq)+НËÒ¹·‘Oö3-ìÝõý¯xýpýpÓËE" Eœo±Ûæ‡ÝxÊâ€ÆÌzÅÝ~›fGŽï|=¾¿¾ûVõ1C{ÚU'Nóú–|*Ë:ÿ1Íþ£ù=˜ïÀ}÷ ‘ò®ÑððèfÑ!ìÁçSˆ ùh‚žIÃõ¬™®!o!Z}~ ‹ ‰•êxÛÑ…l3Ÿˆã}ùeìà}¼í éËѶe|™È«ÊyÛ,’u¶!UN0n!v'žŒïGvhBÙÚéyBÓÌ„0ÃlfDÁ­Ù;k=ÆÍX]ú¥[ܶÿ¹{Ú ÁWœ\A†´wÃßà÷£ûŸïG÷×v Å»ªû⪊痙η<OÿxÅZá endstream endobj 1014 0 obj << /Type /Page /Contents 1015 0 R /Resources 1013 0 R /MediaBox [0 0 595.276 841.89] /Parent 859 0 R /Annots [ 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R ] >> endobj 967 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 643.852 135.047 654.731] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 968 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [507.022 645.754 513.996 654.731] /Subtype /Link /A << /S /GoTo /D (subsection.5.1) >> >> endobj 969 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 621.934 132.746 632.813] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [507.022 623.956 513.996 632.813] /Subtype /Link /A << /S /GoTo /D (subsection.5.2) >> >> endobj 971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 600.016 141.054 610.895] /Subtype /Link /A << /S /GoTo /D (structfitskeyid) >> >> endobj 972 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 602.038 513.996 610.895] /Subtype /Link /A << /S /GoTo /D (subsection.5.3) >> >> endobj 973 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 578.098 134.509 588.977] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 974 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 580.121 513.996 588.977] /Subtype /Link /A << /S /GoTo /D (subsection.5.4) >> >> endobj 975 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 556.18 136.711 567.059] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 976 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 558.083 513.996 567.059] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 534.263 133.951 545.142] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 536.165 513.996 545.142] /Subtype /Link /A << /S /GoTo /D (subsection.5.6) >> >> endobj 979 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 512.345 135.057 523.224] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 514.248 513.996 523.224] /Subtype /Link /A << /S /GoTo /D (subsection.5.7) >> >> endobj 981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 490.427 137.269 501.306] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 982 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 492.33 513.996 501.306] /Subtype /Link /A << /S /GoTo /D (subsection.5.8) >> >> endobj 983 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 468.509 137.827 479.388] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 984 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 470.412 513.996 479.388] /Subtype /Link /A << /S /GoTo /D (subsection.5.9) >> >> endobj 985 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 446.591 137.269 457.47] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 986 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 448.614 513.996 457.47] /Subtype /Link /A << /S /GoTo /D (subsection.5.10) >> >> endobj 987 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 424.673 133.931 435.553] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 988 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 426.576 513.996 435.553] /Subtype /Link /A << /S /GoTo /D (subsection.5.11) >> >> endobj 989 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 402.756 138.923 413.635] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 990 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 404.659 513.996 413.635] /Subtype /Link /A << /S /GoTo /D (subsection.5.12) >> >> endobj 991 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 380.838 135.047 391.717] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 992 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 382.86 513.996 391.717] /Subtype /Link /A << /S /GoTo /D (subsection.5.13) >> >> endobj 993 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 267.253 124.815 276.229] /Subtype /Link /A << /S /GoTo /D (cel_8h) >> >> endobj 994 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 267.253 513.996 276.229] /Subtype /Link /A << /S /GoTo /D (subsection.6.1) >> >> endobj 995 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 245.335 140.437 254.311] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h) >> >> endobj 996 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 245.335 513.996 254.311] /Subtype /Link /A << /S /GoTo /D (subsection.6.2) >> >> endobj 997 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 221.514 154.853 232.393] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h) >> >> endobj 998 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 223.417 513.996 232.393] /Subtype /Link /A << /S /GoTo /D (subsection.6.3) >> >> endobj 999 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 201.499 124.277 210.475] /Subtype /Link /A << /S /GoTo /D (lin_8h) >> >> endobj 1000 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 201.499 513.996 210.475] /Subtype /Link /A << /S /GoTo /D (subsection.6.4) >> >> endobj 1001 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 177.678 125.782 188.558] /Subtype /Link /A << /S /GoTo /D (log_8h) >> >> endobj 1002 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 179.581 513.996 188.558] /Subtype /Link /A << /S /GoTo /D (subsection.6.5) >> >> endobj 1003 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 155.761 126.479 166.64] /Subtype /Link /A << /S /GoTo /D (prj_8h) >> >> endobj 1004 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 157.664 513.996 166.64] /Subtype /Link /A << /S /GoTo /D (subsection.6.6) >> >> endobj 1005 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 133.843 127.037 144.722] /Subtype /Link /A << /S /GoTo /D (spc_8h) >> >> endobj 1006 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.041 135.746 513.996 144.722] /Subtype /Link /A << /S /GoTo /D (subsection.6.7) >> >> endobj 1007 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 111.925 128.153 122.804] /Subtype /Link /A << /S /GoTo /D (sph_8h) >> >> endobj 1008 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 113.828 513.996 122.804] /Subtype /Link /A << /S /GoTo /D (subsection.6.8) >> >> endobj 1009 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 90.007 127.595 100.886] /Subtype /Link /A << /S /GoTo /D (spx_8h) >> >> endobj 1010 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 91.91 513.996 100.886] /Subtype /Link /A << /S /GoTo /D (subsection.6.9) >> >> endobj 1016 0 obj << /D [1014 0 R /XYZ 90 757.935 null] >> endobj 22 0 obj << /D [1014 0 R /XYZ 90 733.028 null] >> endobj 26 0 obj << /D [1014 0 R /XYZ 90 712.582 null] >> endobj 30 0 obj << /D [1014 0 R /XYZ 90 366.143 null] >> endobj 34 0 obj << /D [1014 0 R /XYZ 90 334.08 null] >> endobj 1013 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1074 0 obj << /Length 1185 /Filter /FlateDecode >> stream xÚµXKsÛ6¾ëWp¦é O’ÈtzH\g’iµ5Óƒí%B;|óø÷Y Eɲ­ÈòI ì~øv±ßŠ8Ø8ø8y¿˜ü~Me ‘ i,ÖÄA$( ip7³9xz•˜ÄnnW¦Õ3O•Y­ÚB•&1YUÂTŒqŸ'-&_&|á€t¶E„"&‚U1¹{ÀA 󟌘Œƒoݪ"à”ÁoÜNþ`óñ¯µ§7Þðͱ“̉XQ†p(ÜqL²œqOŸþß^Û аöÍ)Pmåâ â<^ÌÕ<1µV_ÞöBdM~^•§§DÓ7œû¥„ðQ) ¡±¨¯V¶&³ËJáO0•Ã.aÜõø'~s鿤„HFÐä¹oBB"!<3U©4\ΞzßÿÓ®m¯¥–î!t?¿ãäˆÜÅ„úÙµ}˜† †1GïúªúþcãîÔø¤?Ðn_÷ endstream endobj 1073 0 obj << /Type /Page /Contents 1074 0 R /Resources 1072 0 R /MediaBox [0 0 595.276 841.89] /Parent 859 0 R /Annots [ 1011 0 R 1012 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R ] >> endobj 1011 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 721.95 126.639 730.926] /Subtype /Link /A << /S /GoTo /D (tab_8h) >> >> endobj 1012 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 722.069 513.996 730.926] /Subtype /Link /A << /S /GoTo /D (subsection.6.10) >> >> endobj 1039 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 700.032 128.691 709.008] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 1040 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 700.032 513.996 709.008] /Subtype /Link /A << /S /GoTo /D (subsection.6.11) >> >> endobj 1041 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 678.114 140.965 687.09] /Subtype /Link /A << /S /GoTo /D (wcserr_8h) >> >> endobj 1042 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 678.114 513.996 687.09] /Subtype /Link /A << /S /GoTo /D (subsection.6.12) >> >> endobj 1043 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 656.196 139.211 665.172] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h) >> >> endobj 1044 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 656.196 513.996 665.172] /Subtype /Link /A << /S /GoTo /D (subsection.6.13) >> >> endobj 1045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 634.278 143.196 643.255] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h) >> >> endobj 1046 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 634.278 513.996 643.255] /Subtype /Link /A << /S /GoTo /D (subsection.6.14) >> >> endobj 1047 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 612.361 139.371 621.337] /Subtype /Link /A << /S /GoTo /D (wcslib_8h) >> >> endobj 1048 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 612.361 513.996 621.337] /Subtype /Link /A << /S /GoTo /D (subsection.6.15) >> >> endobj 1049 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 590.443 150.828 599.419] /Subtype /Link /A << /S /GoTo /D (wcsmath_8h) >> >> endobj 1050 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 590.443 513.996 599.419] /Subtype /Link /A << /S /GoTo /D (subsection.6.16) >> >> endobj 1051 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 566.622 153.448 577.501] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h) >> >> endobj 1052 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 568.525 513.996 577.501] /Subtype /Link /A << /S /GoTo /D (subsection.6.17) >> >> endobj 1053 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 544.704 144.033 555.583] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h) >> >> endobj 1054 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 546.607 513.996 555.583] /Subtype /Link /A << /S /GoTo /D (subsection.6.18) >> >> endobj 1055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 524.689 149.732 533.666] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h) >> >> endobj 1056 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 524.809 513.996 533.666] /Subtype /Link /A << /S /GoTo /D (subsection.6.19) >> >> endobj 1057 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.177 502.772 143.087 511.748] /Subtype /Link /A << /S /GoTo /D (wcsutil_8h) >> >> endobj 1058 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 502.772 513.996 511.748] /Subtype /Link /A << /S /GoTo /D (subsection.6.20) >> >> endobj 1059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 334.68 143.858 345.584] /Subtype /Link /A << /S /GoTo /D (structcelprm_408a39c1d060d5b32f884f8a8c60aaa2) >> >> endobj 1060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 323.786 151.349 332.632] /Subtype /Link /A << /S /GoTo /D (structcelprm_74585275b64c292b394b74f2f19a8048) >> >> endobj 1061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 308.777 163.225 319.681] /Subtype /Link /A << /S /GoTo /D (structcelprm_b034f85dc785113c396c9864cdddfe52) >> >> endobj 1062 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 297.883 169.86 306.729] /Subtype /Link /A << /S /GoTo /D (structcelprm_011e38b3a5505fdc13855348571bfad1) >> >> endobj 1063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 283.432 156.57 293.778] /Subtype /Link /A << /S /GoTo /D (structcelprm_3f9ae993e97f0e73e3f59117929eeda6) >> >> endobj 1064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 269.923 167.648 280.827] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 1065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.146 269.923 181.207 280.827] /Subtype /Link /A << /S /GoTo /D (structcelprm_be1991f17c0ecb857d5bd30a6a689b84) >> >> endobj 1066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 257.529 165.427 267.875] /Subtype /Link /A << /S /GoTo /D (structcelprm_80ea2023638ededd2760cc9a260c456b) >> >> endobj 1067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 244.02 156.58 254.924] /Subtype /Link /A << /S /GoTo /D (structcelprm_756c8f0991a748ab47361b0215c4577b) >> >> endobj 1068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 233.126 150.502 241.972] /Subtype /Link /A << /S /GoTo /D (structcelprm_7bb5e1ff4d73c884d73eeb0f8f2677d7) >> >> endobj 1069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 220.174 167.08 227.895] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 220.174 188.101 227.895] /Subtype /Link /A << /S /GoTo /D (structcelprm_1b9cbfd7cfa2306464d57dc4acd03b06) >> >> endobj 1071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 205.165 175.479 216.069] /Subtype /Link /A << /S /GoTo /D (structcelprm_07d1785f7d7a8793555147140757956d) >> >> endobj 1075 0 obj << /D [1073 0 R /XYZ 90 757.935 null] >> endobj 38 0 obj << /D [1073 0 R /XYZ 90 488.077 null] >> endobj 1017 0 obj << /D [1073 0 R /XYZ 90 454.111 null] >> endobj 42 0 obj << /D [1073 0 R /XYZ 90 454.111 null] >> endobj 1077 0 obj << /D [1073 0 R /XYZ 90 353.654 null] >> endobj 46 0 obj << /D [1073 0 R /XYZ 90 191.591 null] >> endobj 1072 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F11 1076 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1119 0 obj << /Length 2309 /Filter /FlateDecode >> stream xÚÍYY“Û6~Ÿ_¡GM­…à @r¶ö!‰rjâdíIöa<•¢(HbV"’òxòë·x‰:âd÷‰8šè}|MÒÉjB'o®¾¹»úê5'1‰W“»å$¦“P1"9›Ü-&÷SIØõŒQJ§©ÞìÊíõŒK:ýP—û´Æñ{½Ôå5‹¦:O5,Å< §êúáWwW¿]1àD'Ìž,C 9I·W÷t²€õï&”ˆ8šmÔ,3ðð¿åld…=«,ãH0戴‹vSf|ÁÕ´ÊVy²q›šÍ ˳:K6ÙïX¬ìZYìë,×^Ç‘@2iÍÔ [_ DÒÖ{¤N‹ín_ë{_¢p泸˜*"xhiGJ†’„ê|É„ñ°_2È1Åf ˆE¿rœTÔVÇl³ÁZRꦼ4Vº2*M©_diR»JT¯“Úl]†Ñ:qƒ¹¶õF‹"×dÄ¡ RÙ# 9ÅÒW¡ó ©‚ž‰`‘7ã›ì“ÎGŽlÆžQ‡àtúv‰O0¾¹v[&y‘Ï ¬0tÆ[DdP„%ìTMKŽö5;sÏd·Ûdè6ÖºV–¨# ‹%‰ÖÆiÅXO«(lðÄ翃íT(æð4ID <¼ ´6 Ññ ô)S}x ˆŒÔÒÉK¥Dº p†/}AÛ›JœÁ]|Z'æ‹} ç»ë…ƒYŒ&|°¨3ªtÜç# i‰"q0 H$‰…‚ÃH;W¤#j$Pñ¤Côb„‡íÎÕs~È- * ÿ87c*bl(` <’ýÆEšaêã_R¤€ôïÆ0P£õa È‹b?ßè~,ûŠô—F²àní$É¡\´M®mŠ|•Õû…»’˜“H²‹=@¿ W“Í=€'bðÀŠí µ8F9fóà„ÍÛÊ{Äêòϱ:ôQF(MÒ5T°r`~XÛÀÚQëƒ#Óè9""„ª+»Ñ3¤\óµ²vSˆ™»ÄršmUS-¹ÝÆ#×EåVátU»3¢iZå"+è ÷Mwg“$$ìÛº|5h’Ãêãqtc9œhFØ °b3[Ú ù>_h£¨…2æ|ã`bË?P%8Ý&«,Åá'#X²Ùk$˜?’*40Û1Ìå=&ôÖ àarÞñ(8 ïÜg®™[Ô€ Øx”àcW¿êÔ5«v:ÍŒñR‡wÚÄz1ì‘'"¿-ÿòÐBaÂ4£_i>³!§»$+qÙ‚\x6~Pá¼Z{ó9ÉPÏ݇``±…ð(ZX(~ͦ>@ÌJ“‹qjs¢]wI¢Ë]¶õÊ=Ì1m`ñ0:ˆ«&öÑà3wÓO;¹›Í“ƒÄÙjí¼!©RWèˆÝL½ÐéÆD3ì¸â v«Ü56n†Ql@ò“w³±G¡aþ¿}-åôçk}‹ô"ê÷ ’7(/KF®™A"m»Ž?µ&xz4CHJ•úø|ýöîƒëÎÀž„áùOx"p–Áà¬` Ü!-<:”Ùô Ï®CÙ­aPû÷jlž,áÝIØöR—ÖðÝxáñÑ".ÂÖ§ªZ.yyQ;#NtJœbéî<*¶v¢-ÊU¯Hq<·an¹¡jûÙÔtß>›Í*ÙºQâ· ²0hƒ™»~¹wÖÁ;™ÆL ØßNCÂÔ˜15f@¢¸gLç»Ü¥!'cåõ,Ý`Þ°„åÐäû˜„”÷; çÈ¡13ŠÆãñ0/„ô-M²¾ýáÝ?ܾÉADBÖøûX:ˆˆšÆËhwÈŒAдÀ÷öëkÀqwÇ*¢”¼˜¡q+ûŒ0K€ŠÚ(úãÏ#,™ ½ Ø qÆ)ã8²®½Ùþõí‡Û·ßà8€î©ß³¼,>?­t>Ôô?²U endstream endobj 1118 0 obj << /Type /Page /Contents 1119 0 R /Resources 1117 0 R /MediaBox [0 0 595.276 841.89] /Parent 859 0 R /Annots [ 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R ] >> endobj 1101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 639.172 171.543 650.076] /Subtype /Link /A << /S /GoTo /D (structcelprm_74585275b64c292b394b74f2f19a8048) >> >> endobj 1102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 619.556 166.821 630.46] /Subtype /Link /A << /S /GoTo /D (structcelprm_b034f85dc785113c396c9864cdddfe52) >> >> endobj 1103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 599.941 173.456 610.845] /Subtype /Link /A << /S /GoTo /D (structcelprm_011e38b3a5505fdc13855348571bfad1) >> >> endobj 1104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 580.326 160.166 591.23] /Subtype /Link /A << /S /GoTo /D (structcelprm_3f9ae993e97f0e73e3f59117929eeda6) >> >> endobj 1105 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 560.71 160.176 571.614] /Subtype /Link /A << /S /GoTo /D (structcelprm_be1991f17c0ecb857d5bd30a6a689b84) >> >> endobj 1106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 541.095 189.287 551.999] /Subtype /Link /A << /S /GoTo /D (structprjprm_4f3c364f16d0b6498d7e11e6bb67239c) >> >> endobj 1107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 525.465 178.777 536.369] /Subtype /Link /A << /S /GoTo /D (structprjprm_3894c2e551929b29adce50cd637fa351) >> >> endobj 1108 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 509.835 180.44 520.739] /Subtype /Link /A << /S /GoTo /D (structprjprm_46d6928a9026e7b3376dcf0d3f91db64) >> >> endobj 1109 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 494.204 188.191 505.108] /Subtype /Link /A << /S /GoTo /D (structprjprm_699ad609ff7c1935d8fb6a457a5b8164) >> >> endobj 1110 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 478.574 194.826 489.478] /Subtype /Link /A << /S /GoTo /D (structprjprm_e91fa3ff034b1c6de3ec98d8fb9e0ab1) >> >> endobj 1111 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.088 451.762 275.4 462.776] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 1112 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 439.807 120.316 450.711] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 1113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.018 266.858 170.274 277.762] /Subtype /Link /A << /S /GoTo /D (structcelprm_3f9ae993e97f0e73e3f59117929eeda6) >> >> endobj 1114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.275 266.858 374.491 277.762] /Subtype /Link /A << /S /GoTo /D (prj_8h_d994cb23871c51b20754973bef180f8a) >> >> endobj 1115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.194 266.858 511.506 277.762] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 1116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.468 86.662 215.349 97.192] /Subtype /Link /A << /S /GoTo /D (wcsmath_8h) >> >> endobj 1120 0 obj << /D [1118 0 R /XYZ 90 757.935 null] >> endobj 50 0 obj << /D [1118 0 R /XYZ 90 733.028 null] >> endobj 1090 0 obj << /D [1118 0 R /XYZ 90 716.221 null] >> endobj 1121 0 obj << /D [1118 0 R /XYZ 90 716.221 null] >> endobj 1091 0 obj << /D [1118 0 R /XYZ 319.148 442.96 null] >> endobj 1122 0 obj << /D [1118 0 R /XYZ 90 426.372 null] >> endobj 1092 0 obj << /D [1118 0 R /XYZ 204.056 381.325 null] >> endobj 1125 0 obj << /D [1118 0 R /XYZ 90 364.957 null] >> endobj 1093 0 obj << /D [1118 0 R /XYZ 276.145 331.646 null] >> endobj 1126 0 obj << /D [1118 0 R /XYZ 90 315.058 null] >> endobj 1094 0 obj << /D [1118 0 R /XYZ 265.38 258.056 null] >> endobj 1127 0 obj << /D [1118 0 R /XYZ 90 241.468 null] >> endobj 1117 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F8 1123 0 R /F11 1076 0 R /F7 1124 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1141 0 obj << /Length 2660 /Filter /FlateDecode >> stream xÚÅZësܶÿ®¿âfú…7µ`<ÔÔqRÛqê&©­i;•5ŠÄ˜Þ‘'>,+}X€¯£e¹VÚO€K`w±ß.®¶+ºzuòÍùÉÓ—!ãÇJá§!‹ä¹Yê5^`ضépyáðyV™`Õh¥Œ'•›Å]¢;·pRñÚ®FH&GÒY4y‚0¾Þ:<ÿöÕÉêOлC½?;ƒ;:ÔúÆ#vG½L‡Íaå§Qø²œ¦uº7®àô‘ë&«‹+ÿ…#k½y@øÛUÛÎÍ ‘Ýk 3¹žYNGÇšœfóª»Úé©6u·Óõ‚žè±‚*S "Xoo½Åï&L¹Á†0‡Ž ^ØÓí0-·;kÎvœ»AÓTblŽ3sH1lt^¤uá‰!¯nÎb24#Wß)p^ÈŸD77Å3âdÈòý¹©!%Œ&Ó<ß5®˜j\M£˜y„è\±=L‹ïeŸhþ½ˆ¤%ëÝ÷t©Ÿ=Å¿–s£-€ŸQâ›–’„CBsüÀùþG~QÌi‚.œh²§K¨NýMø›}]ä/-[äz}YŠZïÓ¢,Ê­[﫜¹v-uV5Šü9n/»d¯’IÈ·æ'áÞvœo.«dHáŸÒoxzAmøAà¡4r®Ž]5v®j±ÔQB°­¡›{¼Uþ~Þ*G˜#y€õmƒÅD©®>˜ä‰×gáóg™8Þ,[Mµ>K[à*þ]òÖ"¬6¬Lš-Œ&÷”Ûæ €Îì/ª‡s9‹Ì§nžaç” ´C¾éŠZçK>……HülÉàÅå#µ¶â‰ÁO¢Æ€ÌMjŠ—;±!‘CãôkizS\L=Ìt³âl [ÌÇÉ'ùTò)@ ¨ËÿyG$Qp¾O¯mç*qýìÌBs¸˜Ùò¦uÕ¦®­TÓΪ6Hп¸O·¥¯„aZÍ7ö…2ä³P„¾¿lHª,ëê¦ç|g3ì} zÒž …;"×Î3ƒ£‘ÇC0Ë0Ó̺Ý EžeVäºlM:æ¶og(šb ™Ú“—Ž‰Ã¡ª[Æíã¦r¤™çkÝ­îKÞq{!ÝeÝ.Å ¨“÷¾0òqŠC€ {à®™F©CFö¬õ(ÃTÜÞçƒËF*ÉÛ Ì ^hÀ%øÃÈê¨X8("aÔ' ¾vòNœ &…¢ Ì]$ÿƒ:K¯íÇ® Û*ÀÜ~–3msAâÌè@"ü¤&@yiÛ5ø?D‰qO#ñ½e¤uŠNŒý•-v÷&¤ý´ØábŒq!½ªºÖïvç _îˉMjúþ‚¯ûg”×(Õêb©€žÇ0È„ðŠ|ÁT8%”ÊK™&³‘5Ò<ÇÒER{·Ï¹w¥û2ÑçÞºHûâÔ§ëÖ?ßxg€ü¼-ïLá¶ËÑ¥ëJyI!m^fŽW»êÊFÊO âíá'd×颿0 õ{€Æþò3ÜÆ¾Ù^\âÞ¶é΂wÎÆÌÚŽ÷ºiÒ­×3ªéìÿÃjÚÚÈ C×ÇgÞ~±ì37Çf_pFDŽûu®`ÂUj?*šµ®Ì¾,1ˆ>X¤µhSŠŽ ü/‰>Þ¶<9ÊÆmlQP=øHXˆÿš!,&}°,¬Ý÷¯FS<ût¦Û‘ß“…ˆ9óÀ?@Û™¬| 㤀øÖÂ?-ì@qh¨lж¹Îklݻ՟'±aþg “âïÿkáÿ2 KØB&DJÔuÚû·Ï”óƒ—V£W8QøÃèYÈÎd„3NwFih}€øç·ïÞ¼þǡ̓vÚß¿Tï¶øG‚±¤¿Ë¥Á½ endstream endobj 1140 0 obj << /Type /Page /Contents 1141 0 R /Resources 1139 0 R /MediaBox [0 0 595.276 841.89] /Parent 859 0 R /Annots [ 1135 0 R 1136 0 R 1137 0 R ] >> endobj 1135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.983 606.647 231.846 617.66] /Subtype /Link /A << /S /GoTo /D (structcelprm_756c8f0991a748ab47361b0215c4577b) >> >> endobj 1136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.007 557.688 398.54 568.591] /Subtype /Link /A << /S /GoTo /D (prj_8h) >> >> endobj 1137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.157 240.501 194.318 251.032] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 1142 0 obj << /D [1140 0 R /XYZ 90 757.935 null] >> endobj 1095 0 obj << /D [1140 0 R /XYZ 422.918 609.8 null] >> endobj 1143 0 obj << /D [1140 0 R /XYZ 90 593.933 null] >> endobj 1096 0 obj << /D [1140 0 R /XYZ 403.123 560.841 null] >> endobj 1144 0 obj << /D [1140 0 R /XYZ 90 544.974 null] >> endobj 1097 0 obj << /D [1140 0 R /XYZ 179.035 487.971 null] >> endobj 1146 0 obj << /D [1140 0 R /XYZ 90 472.104 null] >> endobj 1098 0 obj << /D [1140 0 R /XYZ 90 374.214 null] >> endobj 1147 0 obj << /D [1140 0 R /XYZ 90 360.504 null] >> endobj 1099 0 obj << /D [1140 0 R /XYZ 337.828 304.195 null] >> endobj 1148 0 obj << /D [1140 0 R /XYZ 90 288.328 null] >> endobj 1100 0 obj << /D [1140 0 R /XYZ 230.89 196.077 null] >> endobj 1149 0 obj << /D [1140 0 R /XYZ 90 182.267 null] >> endobj 1018 0 obj << /D [1140 0 R /XYZ 90 162.72 null] >> endobj 54 0 obj << /D [1140 0 R /XYZ 90 149.009 null] >> endobj 1139 0 obj << /Font << /F29 635 0 R /F11 1076 0 R /F7 1124 0 R /F20 595 0 R /F38 780 0 R /F14 1078 0 R /F40 846 0 R /F13 1145 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1171 0 obj << /Length 1411 /Filter /FlateDecode >> stream xÚÅX[“›6~÷¯àfbU̾%±7Ý4—©×m¦³Ùé° ÛL0¸gãéô¿÷èÆ–µ&m<òѹ|úÎÅ`gå`çÕèÅbôÃ%Å! ÅÒ‰±…1JœEæÜ¸ QoL0ÆîGŒi#>y»|ï)ÃîuSïÒF¯ç|ÉkL\^¦¶bë‰w»x=š-FŒÄQX„"Ÿ9éfts‹ ö_;ùñĹWR' >|Îõèç>ê,õ™vvš4‰öæ2çE&”u{Î⃳$D?qÆ”¢ÐžÿH)ëœqnÆ BÏËÆlËê• e®¤9ŠG˜»/«Ž†VvÆ„"@åû™Ê³×”h’f'ŽÛ Çm¤ë¤>;ž{¹¬ê¬¯HŠÝzÛÝÿ^Q6û-ÿ¦OZØ&Y–—«vYh£»2¯JÍõ?¥¼C&ÀgÊ(3|>éYÞ3õH …a«0 N±÷ú趾Ƴbž²¬ÚÝü¸¾åQwÎÑzD=:M{1¨-2êÆªNuuþuv}ö(s“b÷­ÇÀ”0†Ê GßÈí]ÁËoªB§¡J«Í†·~ô(Àz}al‹»O‰YÛÉ1½lÊ›$/x¦hÊEZçÛFfÔ°'½Þx~›ÐTg\gõGÌ0|HßUûnÍ›]] 7)=µ™Ôu²×[Õr B »Ðs`ȶ`-~è—‹c+-TwÏ@?‰\ž¤km,)‹÷ëÜn¥U €Xïš5÷ŒÏbW4ÝSÛ¤²˜éÍ’ëÝ˫ŵÞZó$ãµf1 |Q—ÇD­y åI±û¼(ôuløæŽ×B?H³ªJ¯ù>p F¾F]|´ú¤æz¡¯É2ãnœš§nÞ}¦õ” ¨Ž¡U.³ô³Ä—­µ6V\dÌEƒg¿d€äv`S3ax•îd%–ã} «smzȬ?ˆÏzqazÄyœ$B!µ£¢¥‚Î Ÿ´tž[¬n*DQ|p¯€ì˜F÷' Ú!yävì–;I-"-“qÍ öây©¿5ÊpØ$¡ÜÛ&B¨»‡u"¬üv×hɦ:Beú$Õcæ.Ö¹Q~Ÿ+ÖÃêÎxSªèVTðÆº’/u>wÓ©%ËÐ ¥ó)iÒµe4T)¡Ä–§¹tÚþš—=v¦MqskÅ2µ÷eˆ˜Ø028d=Yyöÿ0 º²1Ùá²»XH—kaü‡dª÷]І±ºÏ›µYézû¾-ŸÛ+¦zðBñ1,–q÷Oàþ0âÿç û4„?Ê<¬#陟¬ôþ]ÞŒuÞ¦MUë½¥^D¦=ÁŽi5j=¤”å›mQÉŸöºgd{|YðTˆ{ó[$íêß6‰ø$ô2ã3Õ¤H"žÎÅmÍ·u•r!¤¯ú"ÓºÝ:ÐþõŒ›œÀdcýq:ÿý§ÙodïçÓ CØ¢x(ʼn öPüuºv'4¸#ÊÎváWøÌ}þæ—ÙyN~Oæ³—ç×\´yŒVfÖIÊ4¦˜ ˆù6Kf蓮D}õn?1KõkNSܫ譞t…kzñ!`D£àë`XÌŸ_½™Í CYþíêæ˜ê@úËP£­ø$d†L¢3 O"tšRªäz˜l [~m9RŠsqÀœ´ÉÓ¤(Lá!4ÌÊ—vÔ3Ã\ÞˆÞÈ'xùþ‹±p¢&º3ß‹Ù÷a!Š#('ú}‹c¦¼â%¯Í!GiÓ§ÞÚÅ¥º³;ýê/‚/rÁ"ý”¤æ"¥¬­j^^¿¹z¡×”Áîø:­¾ìW½…éßÙít endstream endobj 1170 0 obj << /Type /Page /Contents 1171 0 R /Resources 1169 0 R /MediaBox [0 0 595.276 841.89] /Parent 1181 0 R /Annots [ 1138 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R ] >> endobj 1138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 697.247 153.014 708.151] /Subtype /Link /A << /S /GoTo /D (structfitskey_43de42050c7e0232c9f7c5a28bfede4b) >> >> endobj 1151 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 684.296 150.802 695.2] /Subtype /Link /A << /S /GoTo /D (structfitskey_f5bd77eb6d318c562bfe650f6784eb5f) >> >> endobj 1152 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 673.402 151.608 682.248] /Subtype /Link /A << /S /GoTo /D (structfitskey_935a63ff3aa2c0403ed8eee1a94662e7) >> >> endobj 1153 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 658.393 170.05 669.297] /Subtype /Link /A << /S /GoTo /D (structfitskey_48b4ff24100b6ada4fd184d5c3d55eec) >> >> endobj 1154 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 645.442 146.069 656.345] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 1155 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 632.49 161.013 643.394] /Subtype /Link /A << /S /GoTo /D (structfitskey_42413fd1f1f3117a4bc4c0599c2c3889) >> >> endobj 1156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.884 606.154 141.646 620.101] /Subtype /Link /A << /S /GoTo /D (structfitskey_88e62afbb23808ae484b8734bb1685b9) >> >> endobj 1157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 594.199 146.348 608.146] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_88ab82d73e5c2607f0a40af8917fffe1) >> >> endobj 1158 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.847 594.199 153.82 608.146] /Subtype /Link /A << /S /GoTo /D (structfitskey_f1a8fb88bc5d4ba60f9f12d0885c360e) >> >> endobj 1159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.884 582.243 141.646 596.191] /Subtype /Link /A << /S /GoTo /D (structfitskey_68ab074cc13a9e0be1583ee93aa0db6b) >> >> endobj 1160 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.482 570.288 158.792 584.236] /Subtype /Link /A << /S /GoTo /D (structfitskey_e6f81da89b09d92db5258191a1a9354b) >> >> endobj 1161 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.482 558.333 159.898 572.281] /Subtype /Link /A << /S /GoTo /D (structfitskey_413484cd565be07b4adc75ed53c4ace7) >> >> endobj 1162 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.509 546.378 149.377 560.326] /Subtype /Link /A << /S /GoTo /D (structfitskey_aa0b63820fb73086d2f55ea9687d8126) >> >> endobj 1163 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.183 534.423 158.642 548.37] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1164 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 513.003 146.069 521.85] /Subtype /Link /A << /S /GoTo /D (structfitskey_d50ff3c9166c43e1fe0542b18a216ee1) >> >> endobj 1165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 498.552 172.62 508.898] /Subtype /Link /A << /S /GoTo /D (structfitskey_4fe936ed7df47a073c049f4fe1528ba2) >> >> endobj 1166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 441.451 123.095 452.464] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 1167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [331.343 429.496 365.434 440.509] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 1168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.9 355.327 416.991 366.231] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 1172 0 obj << /D [1170 0 R /XYZ 90 757.935 null] >> endobj 1173 0 obj << /D [1170 0 R /XYZ 90 716.221 null] >> endobj 58 0 obj << /D [1170 0 R /XYZ 90 484.978 null] >> endobj 62 0 obj << /D [1170 0 R /XYZ 90 415.921 null] >> endobj 1174 0 obj << /D [1170 0 R /XYZ 90 393.61 null] >> endobj 1175 0 obj << /D [1170 0 R /XYZ 90 393.61 null] >> endobj 1176 0 obj << /D [1170 0 R /XYZ 319.906 346.525 null] >> endobj 1177 0 obj << /D [1170 0 R /XYZ 90 329.798 null] >> endobj 1178 0 obj << /D [1170 0 R /XYZ 452.955 296.706 null] >> endobj 1179 0 obj << /D [1170 0 R /XYZ 90 279.979 null] >> endobj 1180 0 obj << /D [1170 0 R /XYZ 340.448 100.057 null] >> endobj 1169 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1199 0 obj << /Length 1525 /Filter /FlateDecode >> stream xÚÅXmoÛ6þî_!*¯ËQ/Ùöaí–"]W`m¶}HƒA–i[ˆ,z’œ4@üŽäI–7qƒkP"wϽòhê-=꽞¼<Ÿ¼8å©—’4â‘w¾ðRêÅ#’3ï|î]ø’ðiÀ(¥þGJyÛ\MõÕí4à’úÚz›·nþ^-T=e‰¯ª\ÁR*ažN/ÏßL~=Ÿü;a zÌ 1‰…ôòõäâ’zsXãQ"ÒÄ»±Tk/äÆÒû0ùcBïË¡‘ìÁÂ_ˆ€óUV;l#è''8¹1ƒ®ç#0¦ÆÔ XL":¾©¤Ž*R "X´–æ½j·u¥q‰SÖ3°’ÈÿmÊ¥¯¦Lú;,°!ý*[«çÖ†~µ-ËÀà/K…» ]»óNÑùƑ腣(Uƒ+í*«Üš*–«Ö- ey«êÆm=Û:+Ê¢Z:ŠY™UW¸[«M™åNC/)a4;1’J´ÿ ã€nŒžÄÒvÖDª?eâók7¾8‰“4¦ÌZ-!\Æ^ÀC–Èm6uQµ ƒsÞ´`¢üüä;’4Oðã ü v°F¾ë‰ gÎcÇ´Õu®7ÆŠ¨CqÝífHÔ™ Wë:Ã7E»Ú©ɺ¨²¶ÐÕs· nûZµã{ÕN¾ÞÖÇcc»Pêݸï….Kmâ÷Ɔ¥as{X{‚xÒq~ N˜¦­Ä´Mfm{»QÿOª–Aª^›iVn•Û™g-††x2r1Ø[(f0J"(Úý#çrLvHPœžLʾCëÒ»—IÆò)‰v?g†œßêe‘g%Æ#äs­Uµ3ô-xà røýr8Ê<˜uùÓ˪Œ­>KH)ýÇ)#PH>,ãHÒF¡»f ö/O_ DMc¾ª1îKm‹æ7Að€%"8-5¤X'v£©[]ï{v®·³R=^õŸík˜ëõ¦´KŸŽApÁ/"~Hûo æW$Z!€ò8…’g k µˆ§„ŠA-¢â@Á I ‘¦B0¯t†Ùvê6ÛÎsÕäu1ë whœªO$kÚ¶z‰ýÛ{ {WŸWóÚðì.ž¡nö6Ð-Æ=ß5 5 å^YüÙt¯\`M¡Þµ…um¾•Û´w€ÕJY«ÜXe­›enhn«6ûäæª®]Ë$|Û'ex:U½…HvqavWªB.m«ÖŒ.Ã_»q“Õ :T¥ÝŽk 6Õ·Aƒf XµE¾-»&Õè6î—ðJ{¥×k¨Ò³ºÂxß;>¾‡š½‹ˆE$„6ã¨{èˆÂŠXÊBõ¡âD¯p¡ÎªåQ]^$I"ãÈ»+®a“ G.Äe7oZ•Íw…ôˆ:( ÝÓt¯š(«=¸®‡W»«o;lèŽHAx‹$Äd»Ü0ÿáYqmûÎ+¼%­EFxYáÍŽEê{»‘…Þ`Ùtôîæ«ÿ–tÙˆ”Il')fð bN’<,I-IÞ‘D/%o‘4LǹÛߊë¦ëÞÔ&‡¶ÞÿÍ#JH /#òè~ê 1øÊýÔ!Ag‰Öz­*Ug½ôîRø½›œÚ÷ÊÌ}Dn`ô$d'2Æë˜2ŽO9C«ñqYäæ!¼ðÇo»_ô§Û¥ªö5ýÀT endstream endobj 1198 0 obj << /Type /Page /Contents 1199 0 R /Resources 1197 0 R /MediaBox [0 0 595.276 841.89] /Parent 1181 0 R /Annots [ 1195 0 R 1196 0 R ] >> endobj 1195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [317.176 315.688 351.268 326.592] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 1196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [320.115 153.669 389.434 164.573] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1200 0 obj << /D [1198 0 R /XYZ 90 757.935 null] >> endobj 1201 0 obj << /D [1198 0 R /XYZ 90 733.028 null] >> endobj 1182 0 obj << /D [1198 0 R /XYZ 335.237 571.934 null] >> endobj 1202 0 obj << /D [1198 0 R /XYZ 90 555.272 null] >> endobj 1197 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1221 0 obj << /Length 1494 /Filter /FlateDecode >> stream xÚÕX[ÓF~ϯ°œB¦3cÇÞŠ‡B ÑJ…UûöÁ‰'‰YÇN}Yˆÿ½gæŒ;—…Ò½”EÁs=÷ócSgéPçÅèéùèÇç˜SkÇç<3çíèµÒî?ô^èHIÊ´ôLJB¥ïHîT!]Œ'Q@ÐKµ½Š³F‘Ë)¿€†[Ÿ´˜`øÎ$"><ÌÕM™æõB_|ð0yH#ó{ð/ hÙµxVí±a†ÍcÃìH´b†…•îð57ôï's Ìþ å@²ÏÈOe•:¡‚8¡ÂñÙiñ„94Òg½aD{a4 8aˆÌ‰¨‡?¬T©0Z0ŒÆL¸Û«1nÇ ·ã<¹ö³çÊ8_ZŠ‹²Xãhµ8¯ |>êÖ‰‰Ê6ŒœIÊD`gŸ[³½ã\ OM',ôç˜1æªÒd@èfE¾Ô#é‚•œKUV`MP·Ùà!@º’âàªe…“Ø òB·Ìœyeú •hdäÌ­Wˆx´TëØ@¢&¶ÉÒ‡…>r¥ÿƒö7›ù\UUªQ7lë÷AT Cׂ@¿÷9,w<"2ÞžF1­*­HZX3è[5½@£{œÆäv« Pÿë¦Ì© "̶§ÑTŸFiWIiqŠí™ß½}þÍh ¬“¸ŽQäz»Q¦‚ynˆ+PzFs³®M“¤ó¸6Õ#`ÖBp¢ÂBºVy;y³ž÷|êZŠ; Æ~th8$dj€ ±¸N‹œqò„û§`vŸB·"ºŽþ¶ëMsÛßBàìl' Äë‘XÐÂHtøàçi4ySµ ÍX¦ñ,³Ò¦y¥Ê®b-ŠÒ–®,]æÖ0Ý4妨ڊ[äÙv—´nÞÓêØ"¬Å1ÔM~A·ôë´ÂS~ÿ”G<Ö%Í›6h©y‘Ûe—îÃ=¸¯‹%DD¦'¢ãq4P©¹ý ÔTŸÛ¾†üõìíë—Om]4%Æ|m³Uù—âãv©ò}Mÿtòw endstream endobj 1220 0 obj << /Type /Page /Contents 1221 0 R /Resources 1219 0 R /MediaBox [0 0 595.276 841.89] /Parent 1181 0 R /Annots [ 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R ] >> endobj 1203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [267.244 614.806 336.563 625.71] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.324 487.285 219.415 498.189] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 1205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.322 487.285 292.642 498.189] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.667 367.721 224.675 378.625] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 1207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.446 367.721 414.454 378.625] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 1208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 355.766 158.323 366.67] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1209 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.04 305.947 274.048 316.851] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 1210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.704 305.947 432.024 316.851] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [209.75 256.128 260.758 267.032] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 1212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.415 256.128 418.734 267.032] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [196.918 206.309 247.926 217.213] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 1214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.583 206.309 405.902 217.213] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [281.195 156.156 332.203 168.111] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 1216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.677 156.156 513.996 168.111] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.555 94.716 280.563 105.62] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 1218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.219 94.716 438.539 105.62] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1222 0 obj << /D [1220 0 R /XYZ 90 757.935 null] >> endobj 1183 0 obj << /D [1220 0 R /XYZ 90 470.413 null] >> endobj 1223 0 obj << /D [1220 0 R /XYZ 90 455.843 null] >> endobj 1184 0 obj << /D [1220 0 R /XYZ 327.378 420.693 null] >> endobj 1224 0 obj << /D [1220 0 R /XYZ 90 403.966 null] >> endobj 1186 0 obj << /D [1220 0 R /XYZ 188.091 358.919 null] >> endobj 1225 0 obj << /D [1220 0 R /XYZ 90 342.192 null] >> endobj 1187 0 obj << /D [1220 0 R /XYZ 461.792 309.1 null] >> endobj 1226 0 obj << /D [1220 0 R /XYZ 90 292.373 null] >> endobj 1188 0 obj << /D [1220 0 R /XYZ 448.502 259.281 null] >> endobj 1227 0 obj << /D [1220 0 R /XYZ 90 242.554 null] >> endobj 1189 0 obj << /D [1220 0 R /XYZ 435.67 209.462 null] >> endobj 1228 0 obj << /D [1220 0 R /XYZ 90 192.735 null] >> endobj 1190 0 obj << /D [1220 0 R /XYZ 118.274 147.688 null] >> endobj 1229 0 obj << /D [1220 0 R /XYZ 90 133.018 null] >> endobj 1191 0 obj << /D [1220 0 R /XYZ 468.307 97.869 null] >> endobj 1219 0 obj << /Font << /F29 635 0 R /F38 780 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1244 0 obj << /Length 1679 /Filter /FlateDecode >> stream xÚÅXYoÜ6~ß_! Ñ^†‡N÷š¤I“æ@í‚Âñƒ,q½jt8”䣿¾ÃK+­¹N€¤)öw43~3óQØ»ô°÷bñd½xüœ¦^ŠÒˆFÞzã¥Ø‹#‚BJ¼uáù!bËÁû0¦}÷qI°ÏïÊb¹¢!öO{1佞Ÿð K’ø¼É9,%$ |B–çëW‹ßÖ‹O 6±G”0F1 ½¼^œc¯€õWF,M¼%U{e0VÞéâÏ~Ð_ÊŽBë/…±NMÙ6Ú½™ÿÇÇfr-‡¬¸ttã‰nì­HŒ"hÕpˆµT0•bˆ‘d•Ì ïÑð¡E(N‰eDûõ«&žæm}%ÊŽ›·Boûb#Eq}”†31jqib~/ž­Â½s\’ЇX”sgþÑ|A"Mão`ëãÚúûª¾ã¾6ßÑVþmuN[` BK Mò #f/îôØombM“6ˆQï2a’—®¼ÁÝ£t7)8}kó¥é³²ÙYT“ë% uf«Ç¬ëÚ¼ÌzëáMÙoÍ?z˜ìúFN[Q ‡ï«"ËboÅb4žUÀT²é5g¨xó@ ÿ»:aÿý– ®§™&;†’SsíujãÙÍ„¡>õfΠl.õ\‡=5aWfM‘‰B?mZQÉ)õ9ºDË °V?îÎÍêøžŠšÕ¼¾€F¢P`Dp ñ!( M|ʦ(s8ÈNÇX»PpÙoÌj“WCWJ \Ëò±–ª±û4d¬]ˆ,סè;é!ÌÞ[âJ°©ÍÚ7©ÖØú‡‹Ö…ìÄEhp‘o3ᆠÿÿÒƒ‚ÐÿCÆi†Æ òKÄeHpâïò³d‚g“L0Óç G:é?Z± ý€{â‚ç ÜéuÁÿæùhç‚çÙÐ º/º1ÒÝ„ou¬¹­èŽöʃl²¼ç÷r_[¡Å«Í~½h†ªZõ\Ôe“õдö“ø©ì"`ÔWX““Ù»rWrQ«–³^de¥r+`Ì﮲œ ‚×­ôOƒ*Ó* #ÿ5Ï #NgâÆ ƒصN zq#Úzt¿û¥“4VÔ  )ƒh¶ò4ä%HÕ^Ø´UÕJ\Ý(å’ >Iÿ‘#u(N S ÎÇøB«Á#­R¦TÌòŒªK 9Ûk¦íµM»Õ=³˜ˆ¤Ôª}úîÍ›ßÞ®ÆÃQ<æN+œºÆüþòt-éð»“% ý¿*W šI˜ƒ±ß¥‚¬]âX»BÛ¡Ÿ5µ½&hJg;V¡9\§A(˜ٽüìðŽ+JÇZ"Õ6Áª¡nŒoé*Áò„v5S0P gSˆ‡,déWÞ<œE”ˆFó¤ÚMJ“Z¾ÄOâlÔ?¨&S‹„LÁ Ўù'‡.¸ÿcô6Pi¶…@ÛϪúÅEI`á¼÷<Ëz‚ç%¯Š9Û ÐHæ:Ä CT-L¯;8¤*YÍ÷ß”ëg„žß§©€‚$yØd©ãa‹y;Œ"–à¿ÒDYÜ:÷¤·tïH&‘Y¤ïY½7&ɲ< ç×sååµóJFeÑódưÿVV3 FÍÙÈÁ? ¥ñ–OÎËä* R€¬¼CH;Ê„‘£<©R¿Z¸3Ö†<ÿaÛ5~„–ðl( ñŽ éÿêìn¢Z+0nZsâ1°çÄ€À|t¹)«"‡;œjƒêB´–f$§êÖTeÍÇ‘yT•Y5DCð« ØháâΚajÿÓ T¢è ¿ Ú/‚Jc(¹ú‹`˜¢04(xÁ.v×~ûí> endobj 1230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 679.522 150.532 690.426] /Subtype /Link /A << /S /GoTo /D (structfitskey_88e62afbb23808ae484b8734bb1685b9) >> >> endobj 1231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 661.525 152.744 672.429] /Subtype /Link /A << /S /GoTo /D (structfitskey_f1a8fb88bc5d4ba60f9f12d0885c360e) >> >> endobj 1232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 643.529 150.532 654.433] /Subtype /Link /A << /S /GoTo /D (structfitskey_68ab074cc13a9e0be1583ee93aa0db6b) >> >> endobj 1233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 625.532 151.08 636.436] /Subtype /Link /A << /S /GoTo /D (structfitskey_e6f81da89b09d92db5258191a1a9354b) >> >> endobj 1234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 607.535 152.186 618.439] /Subtype /Link /A << /S /GoTo /D (structfitskey_413484cd565be07b4adc75ed53c4ace7) >> >> endobj 1235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 589.538 151.638 600.442] /Subtype /Link /A << /S /GoTo /D (structfitskey_aa0b63820fb73086d2f55ea9687d8126) >> >> endobj 1236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 275.662 157.118 286.008] /Subtype /Link /A << /S /GoTo /D (structfitskeyid_9c19a56e7a92c1728bebd92e5370b9c7) >> >> endobj 1237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 265.175 151.051 274.021] /Subtype /Link /A << /S /GoTo /D (structfitskeyid_b20aa3220d9994d02a1791e35dc91a56) >> >> endobj 1238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 251.688 141.646 262.034] /Subtype /Link /A << /S /GoTo /D (structfitskeyid_8c8c5a6be67ef57333e80e71f320b62e) >> >> endobj 1239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 195.454 123.095 206.468] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 1240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.868 183.499 290.051 194.403] /Subtype /Link /A << /S /GoTo /D (structfitskeyid_9c19a56e7a92c1728bebd92e5370b9c7) >> >> endobj 1241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 171.917 123.095 182.448] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 1245 0 obj << /D [1243 0 R /XYZ 90 757.935 null] >> endobj 1246 0 obj << /D [1243 0 R /XYZ 90 733.028 null] >> endobj 1192 0 obj << /D [1243 0 R /XYZ 383.755 569.926 null] >> endobj 1247 0 obj << /D [1243 0 R /XYZ 90 554.066 null] >> endobj 1193 0 obj << /D [1243 0 R /XYZ 380.666 509.019 null] >> endobj 1248 0 obj << /D [1243 0 R /XYZ 90 493.16 null] >> endobj 1019 0 obj << /D [1243 0 R /XYZ 393.828 406.578 null] >> endobj 66 0 obj << /D [1243 0 R /XYZ 90 390.719 null] >> endobj 1249 0 obj << /D [1243 0 R /XYZ 90 293.114 null] >> endobj 70 0 obj << /D [1243 0 R /XYZ 90 238.982 null] >> endobj 74 0 obj << /D [1243 0 R /XYZ 90 159.211 null] >> endobj 1250 0 obj << /D [1243 0 R /XYZ 90 136.526 null] >> endobj 1251 0 obj << /D [1243 0 R /XYZ 90 136.526 null] >> endobj 1252 0 obj << /D [1243 0 R /XYZ 317.195 89.441 null] >> endobj 1242 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1277 0 obj << /Length 1359 /Filter /FlateDecode >> stream xÚÕXÝoÛ6÷_!`/2P³üЃa]–"E7`i€=¤E!KŒCL–\Rjâÿ~Ç9’«¸ÆÜ¬Ý)êx÷ãÇ#ïp° pðzöêzöò‚ò€#žÐ$¸¾ 8Ò„ ˜’ຠnÂEóÁ‡•¬7j=_ЇïZÕ­ë_‰[¡æ$ E]ʲˆ„„Î?\¿™ýv=û4#` ĪŽS”²8(Ö³›8(aüM€ãYpo¥ÖAD´Uðnöç „IÂIÜÃdˆ"ê¡ÊÚc{1mõßs‚C±•åÙYÑtð ><ЇƒIQB#§î=ޱ“ІR 1’¬•¹m§jQNhc J9éAqp®ï„ëÔÝz ¤Ù~sëÚuÞwB»[ÀYö]/Øö³Ýzæ$·÷¦Û¨yCŽFó`Á("|Dû*Q²|ø.4ž†—u) Ãá‰Ø¸áÁ²õ͇gŽ#—+•o 0jœÏyZy÷»z= nìÿáb­:/îœÍ iëâ„êa-·Çè¿+•áÇ.k¬?D€Óð¦Nc{—·Î¬GûÁ\ù^(Qå­œÓ8ül £ðq A<öûëi0{*/¼Ë5íÞ£D¾3tImi·Ï^é%¸(ƒ –lÓ™ð@÷Cj×zÿµCõÞä;‘—ÆùGƒ†3¥Û~Ji•?¸Ï{YU®·ôÒZxIã#=~ýZ¿Ùê “MQtJ™öbÇÀ€Ö ¨{©ý ”žK‡Ìô–þEfOkãÚS=RJ#®»ª•›Êž{ø´Á ŠüY‡I¦Íë¦c©6›ÅÓ4ìlí%<Õ3üXî„[×±˜õ9 ¦hçPûŠz¬ÌjD«\{EÏͦtN#õq‰EˆdÙ¿»´&‹¸SøVÖ"ïðÊk Aâµlj7¶ÉU¾m~^^°ìé¨ù“¬‹ª+½YB’1ƒˆ¸ ?Oè‚û@yXº›PC9ʲš_¦îNPñèn8ÏÛÜ­çBŠªÔ£°µGI`~,Q”ô—ð{JãýPû[æÉ€éo–¯FSw* y6šœh£Î¤>l‚6Q6ݲêw-ÞcÂiúxaö”=S¥´ŸV¨|˜Æ·ˆbGü8"ž妸á!¥¨ÚcP~×í†Í–ëÕO&`<Ò-é‰ç³«e»}Þ°ÉËRÖ«“‚€{¶s_h¡Ô^ôíMQ—%'î;ÇI8JpöX“§Y<æ '[ùO–ò-üìyõúãÿãº.‹>”™Ç^9_!óóœÂ _–Hi&Ù©—ŽsLºÿ°½ cŠXÆö«ðºöOêsÑæ²>m<ºPrcŸÂ_}F›úÇ—oQKËOZó`Ÿ(,ºóaxÁd:€¨Öî+·¹"vuÓºÔОÜÁ«Ý (ñ©“Ê®„s—JÂèF(#çµ¹¦òï«oôþ‡T>JpxùˆEKÝj— Çe6s ¶¹Ê vka“o“Šr_ °Ãö=›øRŸÙ­k}âËÃNÛœšâ§ª2c”D=+ùYLí%(Nù¸&c”æ67îir7Ý·HÁºÍF„Î_¿¾{{ùʉ«¦kRO…$‚’½BÆÚÒîÀª9KÃõ¥ÔŽêKhäùûÕÉ$CœdÇ'û¢d‚x ™+JÆűÏó^‹Z¨¼íOJŸ+þÞw.L=G,ÝGâ‚Ï"r§î‹bB}ÐÈö…ÀžIÓ‡s‰}ÎìË>çÍÃvåöv¸Ò‚¿A endstream endobj 1276 0 obj << /Type /Page /Contents 1277 0 R /Resources 1275 0 R /MediaBox [0 0 595.276 841.89] /Parent 1181 0 R /Annots [ 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R ] >> endobj 1254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [258.605 652.469 286.918 663.373] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 1255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.936 652.469 396.028 663.373] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 1256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 450.334 143.858 461.238] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 1257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 439.44 149.945 448.287] /Subtype /Link /A << /S /GoTo /D (structlinprm_e281f0f7ebeaf5038cc13c13946641b1) >> >> endobj 1258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 424.431 173.457 435.335] /Subtype /Link /A << /S /GoTo /D (structlinprm_3691ff3f40a0ba087637d30ffc87e6d0) >> >> endobj 1259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 411.48 162.388 422.384] /Subtype /Link /A << /S /GoTo /D (structlinprm_4c40bec32ec40035b8c1ef13db652270) >> >> endobj 1260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 400.586 172.351 409.432] /Subtype /Link /A << /S /GoTo /D (structlinprm_162762d02eaade6a53d63d70b8827caa) >> >> endobj 1261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 385.577 181.217 396.481] /Subtype /Link /A << /S /GoTo /D (structlinprm_eaaf26fd243da58fee173b075bed1de7) >> >> endobj 1262 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 372.626 181.217 383.53] /Subtype /Link /A << /S /GoTo /D (structlinprm_28a705f744a32cd05dd3aa86ca58998b) >> >> endobj 1263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 359.674 149.397 370.578] /Subtype /Link /A << /S /GoTo /D (structlinprm_f0a5cac7b1d2d3a0feb6905c05b122c2) >> >> endobj 1264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 346.723 161.013 357.627] /Subtype /Link /A << /S /GoTo /D (structlinprm_7f40c88135117b07a7767082ef24aba9) >> >> endobj 1265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 335.829 167.08 343.55] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 335.829 188.101 343.55] /Subtype /Link /A << /S /GoTo /D (structlinprm_2975830d4214bb6b35cb1ca922875057) >> >> endobj 1267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 321.796 157.696 331.724] /Subtype /Link /A << /S /GoTo /D (structlinprm_596f68ff17fce142f36530d72dd838c4) >> >> endobj 1268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 307.869 156.59 318.772] /Subtype /Link /A << /S /GoTo /D (structlinprm_5ef7cce6307f640aca1080d0d5ad9ba1) >> >> endobj 1269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 295.893 162.677 305.821] /Subtype /Link /A << /S /GoTo /D (structlinprm_eefcacedf2989970f0df2c246d84bfb7) >> >> endobj 1270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 281.966 173.745 292.87] /Subtype /Link /A << /S /GoTo /D (structlinprm_b73e780d0792b3570fcf2cf55651f22c) >> >> endobj 1271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 269.014 186.189 279.918] /Subtype /Link /A << /S /GoTo /D (structlinprm_091103ceb860eeed1a280effa0df28df) >> >> endobj 1272 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 256.063 175.12 266.967] /Subtype /Link /A << /S /GoTo /D (structlinprm_7036b8527bc8b220ad8a863442631f48) >> >> endobj 1273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 244.088 185.083 254.015] /Subtype /Link /A << /S /GoTo /D (structlinprm_5ac85757a7a46247e353a089374eb128) >> >> endobj 1274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 230.16 180.461 241.064] /Subtype /Link /A << /S /GoTo /D (structlinprm_b7a8cacb1454446f9b5a521703fcca75) >> >> endobj 1278 0 obj << /D [1276 0 R /XYZ 90 757.935 null] >> endobj 1279 0 obj << /D [1276 0 R /XYZ 90 733.028 null] >> endobj 1253 0 obj << /D [1276 0 R /XYZ 327.348 705.441 null] >> endobj 1280 0 obj << /D [1276 0 R /XYZ 90 688.714 null] >> endobj 1020 0 obj << /D [1276 0 R /XYZ 209.909 584.508 null] >> endobj 78 0 obj << /D [1276 0 R /XYZ 90 569.838 null] >> endobj 1281 0 obj << /D [1276 0 R /XYZ 90 469.308 null] >> endobj 82 0 obj << /D [1276 0 R /XYZ 90 216.586 null] >> endobj 1275 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F11 1076 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1309 0 obj << /Length 1807 /Filter /FlateDecode >> stream xÚµXëoÛ6ÿî¿B塿HêbÖ4 ZtmÖ؆4(d™v´é‘PR-ú¿ïø åÈi—¡°Éãñx÷»‡„½­‡½ãÙ‹åìçW4ó2”Å4ö–/Ã^Qâ-×Þ™¡p¾ c¿*›K^Ï4Âþiχ¢Wô¶a|NRŸ5ƒ©4 ‰O‚ùùòÍìh9»š8 {DŠŽ”‘WÔ³³sì­aþ‡Q¥Þ䪽ð¬¼ÓÙï3ü¨š4@8ެšˆjE_•¬Z+Ý^¶ÅP³¦Ïû²m„F nAC„™³½³lôÔ]>bä[±ÎÇÎù †$(¦¡óGø¸œÓÈ¿ž“,b’ØÏ¡G’øœõoØøˆZZ^”ZÓgÈÙzèzE­˜Z혞è[õüÌx«–n.XÃîÏäæL1ºS,íFo¾`ŠØ´UÕŠ=7e³U<5«WŒwjÝÝ níZ=ÈÇpyyi ˆ‡ÆYh¾!(‹´‡:29gŠP·¢åêY·ë BÙú@È À#1 ƒT:B”Õ)F\ g|«÷ö-"|ïÏ&¿³ŸÉs…¯Ðõ<Ž|ôL©Ò´½!xWÕÝŽÊ+=¡l ÄÐ1.ül|€€JŠ¢ {ªÒ—ÅŽÆþô áS(Ö¬êwÏ@2\#»Su‚Ân:Ëm“Wr*CˆÙ²)û2¯ÊÏ*ìä"o‡¾l˜Ñ|B£ Ê„F`_á )®-™D$H‘¬hëˡקêãSljÚÂ[ ¼ªðŽ#'䛸(J05l ØhßÅ R$ކØÊÞQ‰¦›²ª®8³˜³¹Bà®UϲY—EÞ3ƒÆ¼7”Ì0@]äšX1™™€Z· C&ØÉk'o~==I=óß½Ÿ‡Ø_LX$†³‰Áj™A¸\´ƒÌÆ Aæ´Ì„Pª<)&DEFÛÁ vƒß^» yià, d™>x#ÓKfbfDŽá2׊ٲf;Œ¹_æ¼/‹¡Êù\ÀRYþÏtHð z¶|-³8Ò2rI‡Sc@sËï47ù–‰ò†Õ˜ø¯µ<]E€zÿîí*›ÿ—®´ÈTk}¤>Zˆ{ø§ë@–;€•ß”3åÔ½•UOÔP–ÿ£qWçwÊCÕï^mGBܺL÷Õe›Ç÷”åhYvŠÍNU†™wƒHšk£ž—å­Ü¬£QÕt `YeZ¢÷• DVI×tÈÚɉ«×›G`§ß‚9pH˜ÃS»( ±âB&Þ—ëˆLbá÷ä:LÈ8×)¹B»\k¡l¡†NÅ„ÑÊQDEÞ1ms5Ýh͵dú€R™BH”—䆷µ©M!JH4† -Ç×Âïy5èáeÞ)S¹©Óô#§¹zl†¦Ð€—ÍŠhn·ƒ 4¸éÒ-ùº-0yÎíºaÕ±«6šîAô7›;súwB aÝ«J»“„ή8EqHÝÃ:•S‚Ëôq'‡#¢©õX9!%BY’†O"Bh¾ásx)uœa·ì€ú÷ø4&+ð¼é6"×êl%Úݼçå­lb§`– Q·—¬è!ÊÜI±jèG]©i@DrêvÞ!ÔSÞ ÚžéÐÑ`H Š:®±óÍ@ÓÏM-ÌP‡\€%Y~Q/'‡ä¼FÉ ©¥©3O?ѯÏ'û-£•󮸴ݰmFVÌTîFéÌl)oD««{†ÒIß²ö¸¥‚.^š*ÁÜë2ªíL¶¬Ïè9üÇ–yhš¯2#yiŒ0`е엇暶_D‚pl°›‹²¸°XP-ÍÕ ›)YY™éÊ ÿë}ÉÞûŽ0bÚÊ3|ÿ‘)¤!ö2“‡Ìt }5p>”L÷I&’©–ü( 훳ùðÑ·šwÓÚ°Û˜Þôþím bfÍ6;]^³q/ãHÒ+d,(Ž|ý¥C¼v쩘°°',¾dÚt?©”¤Ôs¦ëIË,àèt˜NìV2³m¡ã…ÄÇÐ軡ðeP~¾óÛ£ùæÃåá2ê›c”¡È|g9f ã¹M¦]üͯD”°•ÄÚø $Q¢=‹ ÕμÆaž¾}ýBÑ`<þÜô²½½ÛÚ×d{Ó –v) endstream endobj 1308 0 obj << /Type /Page /Contents 1309 0 R /Resources 1307 0 R /MediaBox [0 0 595.276 841.89] /Parent 1181 0 R /Annots [ 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R ] >> endobj 1300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 641.861 169.043 652.765] /Subtype /Link /A << /S /GoTo /D (structlinprm_e281f0f7ebeaf5038cc13c13946641b1) >> >> endobj 1301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 623.322 157.417 634.225] /Subtype /Link /A << /S /GoTo /D (structlinprm_4c40bec32ec40035b8c1ef13db652270) >> >> endobj 1302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 604.782 167.379 615.686] /Subtype /Link /A << /S /GoTo /D (structlinprm_162762d02eaade6a53d63d70b8827caa) >> >> endobj 1303 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.679 580.659 274.895 591.673] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 1304 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 568.704 119.22 579.608] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 1305 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [284.487 551.08 314.155 562.093] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 1306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [98.309 460.35 127.978 471.363] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 1310 0 obj << /D [1308 0 R /XYZ 90 757.935 null] >> endobj 86 0 obj << /D [1308 0 R /XYZ 90 733.028 null] >> endobj 1282 0 obj << /D [1308 0 R /XYZ 90 716.221 null] >> endobj 1311 0 obj << /D [1308 0 R /XYZ 90 716.221 null] >> endobj 1283 0 obj << /D [1308 0 R /XYZ 196.021 530.323 null] >> endobj 1312 0 obj << /D [1308 0 R /XYZ 90 514.219 null] >> endobj 1284 0 obj << /D [1308 0 R /XYZ 450.495 451.548 null] >> endobj 1313 0 obj << /D [1308 0 R /XYZ 90 435.444 null] >> endobj 1285 0 obj << /D [1308 0 R /XYZ 139.076 390.397 null] >> endobj 1314 0 obj << /D [1308 0 R /XYZ 90 374.916 null] >> endobj 1286 0 obj << /D [1308 0 R /XYZ 174.472 89.441 null] >> endobj 1307 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1321 0 obj << /Length 1108 /Filter /FlateDecode >> stream xÚÅWKoÛ8¾ûWè(1˧$æÖ¦MТ t{È"1Ž ›òRrÿ~‡"%KܦEÝœDŽ>çñq†ÄÁ2ÀÁÙìÝböæ”Ê@"Ó8XÜIL $XÁe(æc®J½1ëhN/³Í7>W·ÊD$ •ΈҔ“ðèjñiöa1ûoF`+VµHPÂD¯g—W8(@þ)ÀˆÉ4xhQë€SßUp1û{†¿k&eÇ¢7Q$¼©Eµ½Y)kÁ›SÂËâÅœ‚ÎvÑ¿3éNOzŒóúø8/Ôªñ`<Ï“ØcNSÞ)ØaùË#I§ø¬¼WzB!x•H²3Qˆ)Åá—ªÔ zN‰ ›Ê ›;åà 5uã&j¥ÖJ7ZÝ:a¦ýטìiüˇ«ç•n²R—z9ÜÀyU™¢ÔYã¥ÎM»M}4CÆS„w‘>yÿás$i¸pP–¡ qÌ;d™MÄ„$…è hb¿9§ ,aÀ‘">)6åc¹^þNVœ«fk´*&t²ˆAÇÄ`‚ìˆÁm‰a…mÚ¬ '†•öİlöGÐuÖ˜òÑ ‡4hõ: 7¦*Ú£o'N…ûû[]6OaÂ$苈‰Ðl»È}J0Re]JL¦ëÛÊ€ûe¥£A(üâÚ}C±2Br_„6YQØjõ¢½ÕÛZùÊpQͱÌ\+l)R+ÓtÿÁ)_KVåRٚMU+ïW¥Wέ6zÏ]ÃSN콪ת‡v7'PI~å÷úFuÉ^Éx_¥/ÊŠ«©SNâQL|4Åá'YøÑrLr¸RÚtGÐf0î”vò,"¡‚Smf`UÝdͶvâ–h 3Ýæ­´uw¥‡ôјïwþO¡`²r‹ð`Hhd7Õ¶ñ ]¥ØQvØœiPfŽ\Jkõƒ²âr~í¼¶¡íX4¨.“'¦£ÑŠì;,åµÎ! ûË ½§¶Fväo«¯í»îüô…ó…´ÛG÷Ù·¾¶´Î–¯m Ûoà+p\7ø~û~ªÎ¾Ȧ°_©fëëžP€§/%)AŒùƒ¾Æ‡ôu“ÜɾÈ|ûj‡;£$éKíÝc=† 14÷X á æäX$nmˆú®l±£ÿœ\|þøÎyÛUíèæÉ}ßWOK÷äzú?ë =Ë endstream endobj 1320 0 obj << /Type /Page /Contents 1321 0 R /Resources 1319 0 R /MediaBox [0 0 595.276 841.89] /Parent 1335 0 R /Annots [ 1317 0 R 1318 0 R ] >> endobj 1317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [324.747 578.739 387.082 589.643] /Subtype /Link /A << /S /GoTo /D (structlinprm_eaaf26fd243da58fee173b075bed1de7) >> >> endobj 1318 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.157 417.701 194.318 428.231] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 1322 0 obj << /D [1320 0 R /XYZ 90 757.935 null] >> endobj 1323 0 obj << /D [1320 0 R /XYZ 90 733.028 null] >> endobj 1287 0 obj << /D [1320 0 R /XYZ 90 693.486 null] >> endobj 1324 0 obj << /D [1320 0 R /XYZ 90 678.916 null] >> endobj 1288 0 obj << /D [1320 0 R /XYZ 220.32 631.712 null] >> endobj 1325 0 obj << /D [1320 0 R /XYZ 90 615.607 null] >> endobj 1289 0 obj << /D [1320 0 R /XYZ 420.168 581.893 null] >> endobj 1326 0 obj << /D [1320 0 R /XYZ 90 565.165 null] >> endobj 1290 0 obj << /D [1320 0 R /XYZ 329.489 532.074 null] >> endobj 1327 0 obj << /D [1320 0 R /XYZ 90 515.346 null] >> endobj 1291 0 obj << /D [1320 0 R /XYZ 327.378 482.255 null] >> endobj 1328 0 obj << /D [1320 0 R /XYZ 90 465.527 null] >> endobj 1292 0 obj << /D [1320 0 R /XYZ 198.901 420.48 null] >> endobj 1329 0 obj << /D [1320 0 R /XYZ 90 404.127 null] >> endobj 1293 0 obj << /D [1320 0 R /XYZ 184.156 370.661 null] >> endobj 1330 0 obj << /D [1320 0 R /XYZ 90 353.934 null] >> endobj 1294 0 obj << /D [1320 0 R /XYZ 184.156 320.842 null] >> endobj 1331 0 obj << /D [1320 0 R /XYZ 90 304.115 null] >> endobj 1295 0 obj << /D [1320 0 R /XYZ 184.156 271.023 null] >> endobj 1332 0 obj << /D [1320 0 R /XYZ 90 254.296 null] >> endobj 1296 0 obj << /D [1320 0 R /XYZ 184.156 221.204 null] >> endobj 1333 0 obj << /D [1320 0 R /XYZ 90 204.477 null] >> endobj 1297 0 obj << /D [1320 0 R /XYZ 184.156 171.385 null] >> endobj 1334 0 obj << /D [1320 0 R /XYZ 90 154.658 null] >> endobj 1298 0 obj << /D [1320 0 R /XYZ 184.156 121.566 null] >> endobj 1319 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1364 0 obj << /Length 1278 /Filter /FlateDecode >> stream xÚµXÝoã6 Ï_a`/ÎCtú°d»ìÖµ¸Ã6tM°Ð+Ž­$.Û';ýØ_?J²ÓØu“¢¹<Ù¦)’?’¢Hagé`çrôq6úpAC'D¡ Â™-œ;¾ ˆSâÌçÆåˆ'cì–ê®Tëñ„rìNkµ‰kû~-RIàÊ<–@ Å.áãÛÙçÑï³Ñ÷UØ!F4÷‘ϸ¯G7·ØI€þÙÁˆ…ó`¸ÖŽG<3g:ú{„÷šI‚·fzˆ"â7¶&ÅfžIm‡ âí¬óÔ¡fÕWŒ™eê÷‘çÓ–'Ks€}v¶þ'2«v¼Ã> ¡p&Ä7ÂÑ_Œ w eÝ”æµTy”Ù¯M%íK‘gOcÁ] ÈxÂvïÇàÀ"MÌ'ÄCDûw òPlyÊ(IÒ|I­º÷™õÒEBBD<êL¸=ìF!h¢p?&¯qÂÞ‡-ž–ŸrNUÂèŒ7þû2ø¥?±3¡b^h^©âNÆuZävy©h-Á²‹YÐ]¼›?¥yœm’67É'gȇÐàýy@l0¢ ¬ºC«14DA°óËPðB‚<Æ»±;êÈâ¹He–Tfÿ¶°ç"`}^¡H´;ð+¥¼³Æ¹™pl¬!ë –M1¸6 6%1‹–¥[ÚyÂKöëˆW‘Ú¯$.¬ËwWjúwÛ%·é~Ïæu ê-*ÊûAPWÿüu:Xå*==°z%ëè€zdâÍ‹MÞËóŸx9”†áÄ +Žj©+ü²PO§u`y¯¢|)òàA%Uº.3ùŸÌO‹E~ߤ‘’pžM\ä‹B­©9Í2+槆’¤cÊõÏ]{z.åvÉé ÃãqEá-*žŽ+o•í,öªxˆ+©Tïˆí6Hp43¿ß HìÍž©¯ckéD„Hàðm>ÛÓÒÔyGZÙtt¯XÊ8 =ñãèa°ü¾óà.YŸvæÇŠ×ÁP`)bXXu÷H«!ë©Bk¾ºþü…N¿ýz}9mÐC'ëûÁ›qb(}<eJ¿t ôÛnO JDdâˆ4óÉ9ô}´~¢Ü‡4ðºŽRŦNs©#ËÄk0 œþvJWc滲ި\&ÃYD ٣ㅹ;-Ö:´°XÇC«3fjBÕµv¥&TšXmÊ2KM:yaRÈ;Igrþ•U•á»+Ø<öGë·ŽÜF’x¾ó0îñÁ+AÏ;/ïA:[¿­%’à­·Zím–@¡S´½Íâ!â¼¹#¸”¹TðIkƒ}þÙ¾\è-#çöCØÁg9ã¾ý¢˜4> ÍÛ^ö4YaÞ=D°}ÓÉc Nñø´ìõÙ€ô(¾ endstream endobj 1363 0 obj << /Type /Page /Contents 1364 0 R /Resources 1362 0 R /MediaBox [0 0 595.276 841.89] /Parent 1335 0 R /Annots [ 1336 0 R 1337 0 R 1338 0 R 1339 0 R 1340 0 R 1341 0 R 1342 0 R 1343 0 R 1344 0 R 1345 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R 1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R 1358 0 R 1359 0 R 1360 0 R ] >> endobj 1336 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 539.073 143.858 549.977] /Subtype /Link /A << /S /GoTo /D (structprjprm_d304d66b3f3aa64fe9c7251d3c420d02) >> >> endobj 1337 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 526.679 154.348 537.025] /Subtype /Link /A << /S /GoTo /D (structprjprm_4f3c364f16d0b6498d7e11e6bb67239c) >> >> endobj 1338 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 515.227 153.811 524.074] /Subtype /Link /A << /S /GoTo /D (structprjprm_3894c2e551929b29adce50cd637fa351) >> >> endobj 1339 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 500.219 155.474 511.123] /Subtype /Link /A << /S /GoTo /D (structprjprm_46d6928a9026e7b3376dcf0d3f91db64) >> >> endobj 1340 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 487.267 163.225 498.171] /Subtype /Link /A << /S /GoTo /D (structprjprm_699ad609ff7c1935d8fb6a457a5b8164) >> >> endobj 1341 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 476.373 169.86 485.22] /Subtype /Link /A << /S /GoTo /D (structprjprm_e91fa3ff034b1c6de3ec98d8fb9e0ab1) >> >> endobj 1342 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 463.422 157.696 472.268] /Subtype /Link /A << /S /GoTo /D (structprjprm_b8dd3d8b1e462a2b261fc9e304885943) >> >> endobj 1343 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 448.971 157.118 459.317] /Subtype /Link /A << /S /GoTo /D (structprjprm_b165b11d417700de0a4187f133050a2b) >> >> endobj 1344 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 435.461 163.066 446.365] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 1345 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 422.51 161.003 433.414] /Subtype /Link /A << /S /GoTo /D (structprjprm_bcd2a3ee9f61b930d23bf741cea63bf3) >> >> endobj 1346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 409.559 169.312 420.463] /Subtype /Link /A << /S /GoTo /D (structprjprm_fecdd175932cbf29fcfac575b1a5cb9b) >> >> endobj 1347 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 396.607 165.426 407.511] /Subtype /Link /A << /S /GoTo /D (structprjprm_b3e207e26d1c9db06cedba2cf4460340) >> >> endobj 1348 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 385.713 169.86 394.56] /Subtype /Link /A << /S /GoTo /D (structprjprm_d7a41e3d03cb739c2a9aa1f8aabf54f9) >> >> endobj 1349 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 370.704 153.82 381.608] /Subtype /Link /A << /S /GoTo /D (structprjprm_e634b0747fe55f77e65b6909c94227d9) >> >> endobj 1350 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 357.753 165.965 368.657] /Subtype /Link /A << /S /GoTo /D (structprjprm_62e88bd3c9e02f38193a800035b83918) >> >> endobj 1351 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 346.859 155.474 355.705] /Subtype /Link /A << /S /GoTo /D (structprjprm_ae2c61d85c72e87f4b2b77a14c8eb316) >> >> endobj 1352 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 331.85 155.474 342.754] /Subtype /Link /A << /S /GoTo /D (structprjprm_164706f09314c493c7e9d2c7325f8372) >> >> endobj 1353 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 320.956 167.08 328.677] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1354 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 320.956 188.101 328.677] /Subtype /Link /A << /S /GoTo /D (structprjprm_30e78bb110dc7a8ad0303370ce20762c) >> >> endobj 1355 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 305.947 175.479 316.851] /Subtype /Link /A << /S /GoTo /D (structprjprm_36fa82794133f84373606b1f692ce8c4) >> >> endobj 1356 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 293.554 152.705 303.9] /Subtype /Link /A << /S /GoTo /D (structprjprm_3b40a2df3b436c4ffcf5be6814993278) >> >> endobj 1357 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 282.102 136.665 290.948] /Subtype /Link /A << /S /GoTo /D (structprjprm_fb805c40a4d37c195074c1305874d615) >> >> endobj 1358 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 269.15 133.895 277.997] /Subtype /Link /A << /S /GoTo /D (structprjprm_ab36c6218a33025ac4c5025de7c67d42) >> >> endobj 1359 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 254.141 162.119 265.045] /Subtype /Link /A << /S /GoTo /D (structprjprm_eef644ffeafea16e82b2b995a470a345) >> >> endobj 1360 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 241.19 162.119 252.094] /Subtype /Link /A << /S /GoTo /D (structprjprm_e699a5fb02198777343057972e1452d0) >> >> endobj 1365 0 obj << /D [1363 0 R /XYZ 90 757.935 null] >> endobj 1366 0 obj << /D [1363 0 R /XYZ 90 733.028 null] >> endobj 1299 0 obj << /D [1363 0 R /XYZ 342.87 705.441 null] >> endobj 1367 0 obj << /D [1363 0 R /XYZ 90 688.714 null] >> endobj 1021 0 obj << /D [1363 0 R /XYZ 90 671.224 null] >> endobj 90 0 obj << /D [1363 0 R /XYZ 90 656.654 null] >> endobj 1368 0 obj << /D [1363 0 R /XYZ 90 558.047 null] >> endobj 94 0 obj << /D [1363 0 R /XYZ 90 227.616 null] >> endobj 1362 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F20 595 0 R /F38 780 0 R /F11 1076 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1397 0 obj << /Length 2165 /Filter /FlateDecode >> stream xÚÅkoã6ò{~…>Ê@Ì#)RÅ¢Ýv)®½´ñ]fƒB–[­,ùôH6ýõr¨—-'Á6Ý~0DÒÃá¼g8¤ÎÆ¡Îû³¯WgÿzÇ#'"‘Ï}guçDÔ |F$gÎ*un\IäbÉ(¥î¾úm_íK.©{ÝTmÒàø'u§ª ]U$ –BŸS—ù‹ÛÕwgß®ÎþÆà(ê0ƒZ$ð¤“ìÎnn©“Âúw%^:jçîÁ7w®Ï~<£O’É=B}Ù“I¸%ô]¦òiû¦LÚ*š¸ÉÊBSè–\OD£}„ÙYayB^/.>PêÅ½Χ£ó ˆÏ¢ù@%}Ÿ-¸tïL‚$M@ݸHqP©¦­ •œÅýÈ]m³ÿ³g˜ñ®­­~kešsKþ¡*;zتB ÇVݱzöˆ“òÎîß*<ù®ÌóRïyÈŠŽµ±h=T‚aͪýXž TÝ„fBíÖªª¸—“/=#‘´ÚŠ+…rFî`PVøM¶q±Qé…±žNýó‰ðB£9X8—(4²jc­í'Øw³”tPfR¦jŠ÷Æ=Ÿ.hµ†ÄÙ§žQÑžð©ì︹}m&öÛìïf¬±‰!h3sêFL¸u¶)âÜNŒU °ö¬Èš,γ?ÐÕÍŸUÙ6Y¡p¢]ÔžwL›¦ lQÃÒeöƒ…û §Hå¼yóæË¡Ïx„E~ŽÑÀ°QZŠURîömc™²Ü‰>~à¬s0¤ënÄ1KîšxhýÏÞ§éÀ:5Y,=6 Sà¥YžãN-p´¶.]©Þ©5Wú›i–Äê¶ÄÝÿa´ëK‡/- eíÁR5‰¸?”ÇøÆ$JÙP”ÍI uü]Á¾jšuº@õ|ÎA(1Q!ñXØið}v  ‚ÔDS3Ô¬¶•RË\5êI*S º”aR“†úQ n^tR^?öƒw—«käȃq5+H„ÑÐÊGŒåãYù¤e»ÎÕTB}B>òåcr(s«8ÍÚM‚…5›`©»œ\A*6øG½ßªÊþwgÝzð¹^ðÜrˆ\Æ0¦N ²uèöqï”Ö”®vNÁÜËž†ÌR…_fj‹8kÐ:‘3òàÑOùqSwº¿[@HˆÛÜBÜëz"Î[»DbdŽDÊ QÊ:¡²Ð*‡yŽO¢â½$tä³^‹XJ aDj£à¾ü@½¹ˆË<"i8R%í-ô€è»®,÷ç·×Zù³†ËQÉ›ólñ„åbþþ¼žís÷jìÇ0ï¨6äkÓ®þ—”(_šâUU‰ëó†E‘²×ëÕÿÆ›êžðžòl‰ è~Ávögìâ9EƒIÀmÀ‚ü®íS™2øAË*­‘‹ÌJ@kù‡µepCo-T=Ç*g$áó¬²çx z^é =ê+ë9^'(ÎÑ«§`éÑÔ­#¦9bÁðC¼¶˜ÚÚné…íî~‰Ôésé9ÅXm¿´ì¶Åø>nAõ³9—„ñ`#º[]ŒŸ]¼É’Ù‹ÑúñÙIVd'zg#ßíôa¯Î\7»^Ý´¿4ÜAû^ÑÝC \Ö{•dZ ÉÑ5õÅQ/8õ04€>sÐ Ý·eÑ@‚¨qVC2À·—еDÁ8r“­J~Ç.üco³á©[›/ìë«Ù ‡Eã¼~>[…ÐÁçË$ŽË¤g‘¬u¿š­2(óâåÔ\Î!a>ñiøb$óõΡ\ŒœO’÷xÏýÛÿ\Íkݧ£÷–þ~ñ…½ž*«m°|tg©Ýø &²B#I³:î³HgÓ²HtÍu€‚‹<Ë] Þ©HOûF3‹°òЋ' 8 {þÕH÷cüÃg#×< ™S„~:”éƒuk±;Ø @ íÞÜ:Òd^ƒÂ¼£é‘éþêÁºÃ^¦&F¨Ô>6HŸ@Ñ5m«¼6Ïjææ9}Œ:|Ò„Ìg¿ðE³{ɲ ‘Òªâ=6»¶j¿ïï4Yj?Œ^v!œqʸíhiØ®«õóÛë_~cíûÓ¶í7åÇÇMß ï9ýêønÐ endstream endobj 1396 0 obj << /Type /Page /Contents 1397 0 R /Resources 1395 0 R /MediaBox [0 0 595.276 841.89] /Parent 1335 0 R /Annots [ 1361 0 R 1388 0 R 1389 0 R 1390 0 R 1391 0 R 1392 0 R 1393 0 R 1394 0 R ] >> endobj 1361 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 641.509 167.369 652.412] /Subtype /Link /A << /S /GoTo /D (structprjprm_4f3c364f16d0b6498d7e11e6bb67239c) >> >> endobj 1388 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 622.828 156.859 633.732] /Subtype /Link /A << /S /GoTo /D (structprjprm_3894c2e551929b29adce50cd637fa351) >> >> endobj 1389 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 604.148 158.523 615.051] /Subtype /Link /A << /S /GoTo /D (structprjprm_46d6928a9026e7b3376dcf0d3f91db64) >> >> endobj 1390 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 585.467 166.273 596.371] /Subtype /Link /A << /S /GoTo /D (structprjprm_699ad609ff7c1935d8fb6a457a5b8164) >> >> endobj 1391 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 566.786 172.908 577.69] /Subtype /Link /A << /S /GoTo /D (structprjprm_e91fa3ff034b1c6de3ec98d8fb9e0ab1) >> >> endobj 1392 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [249.112 542.311 279.876 553.325] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 1393 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.518 512.732 302.949 523.636] /Subtype /Link /A << /S /GoTo /D (structprjprm_b8dd3d8b1e462a2b261fc9e304885943) >> >> endobj 1394 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.272 177.082 199.488 187.986] /Subtype /Link /A << /S /GoTo /D (prj_8h_d994cb23871c51b20754973bef180f8a) >> >> endobj 1398 0 obj << /D [1396 0 R /XYZ 90 757.935 null] >> endobj 98 0 obj << /D [1396 0 R /XYZ 90 733.028 null] >> endobj 1369 0 obj << /D [1396 0 R /XYZ 90 716.221 null] >> endobj 1399 0 obj << /D [1396 0 R /XYZ 90 716.221 null] >> endobj 1128 0 obj << /D [1396 0 R /XYZ 352.354 515.885 null] >> endobj 1400 0 obj << /D [1396 0 R /XYZ 90 499.718 null] >> endobj 1129 0 obj << /D [1396 0 R /XYZ 357.863 466.626 null] >> endobj 1401 0 obj << /D [1396 0 R /XYZ 90 450.459 null] >> endobj 1130 0 obj << /D [1396 0 R /XYZ 369.804 405.412 null] >> endobj 1402 0 obj << /D [1396 0 R /XYZ 90 388.911 null] >> endobj 1131 0 obj << /D [1396 0 R /XYZ 158.393 290.708 null] >> endobj 1403 0 obj << /D [1396 0 R /XYZ 90 274.541 null] >> endobj 1132 0 obj << /D [1396 0 R /XYZ 276.145 241.449 null] >> endobj 1404 0 obj << /D [1396 0 R /XYZ 90 225.282 null] >> endobj 1370 0 obj << /D [1396 0 R /XYZ 477.92 180.235 null] >> endobj 1405 0 obj << /D [1396 0 R /XYZ 90 164.068 null] >> endobj 1371 0 obj << /D [1396 0 R /XYZ 135.439 89.441 null] >> endobj 1395 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F8 1123 0 R /F13 1145 0 R /F11 1076 0 R /F38 780 0 R /F7 1124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1409 0 obj << /Length 1101 /Filter /FlateDecode >> stream xÚÕW[oÚH~çWX•V²¥0{Æ6}Ji©XB²»ÍE•8ò…&-ûëw®ÔP`W‰Vižæâñ9ß¹}s:3:ï'ÃÆÛ3;1ˆ)¦ÎpêÄÐ )#g8qn\ˆ×DBwÎæ<÷š˜@÷²âËq¥çlʸ‡"—c&¶"Š¡‹Bïnø±Ñ6¾6P¤D“„>qÆyãæ:±ÿÑÀ#ç›:•;öŘ9—O x&ö¤d `¨ãû„kpt«U$9“ˆ„X& Å–r Ô§‚ú)ø(gÕ™ V-yÁ&;¤ù„1²…0¤AôÊb¦g †š•S=V÷Ì"-ظJËHÑN3€Áxà€—"îc:ÔoÓÒXšbš'R€ÑPd+÷Ȩ.M¼– ûïhµƒ^órY¥[cl¼é:o 6H‹jÓÿã¤b³’¯^,ƒ-Ó$ éJJíßïS©µO=LÜ$[î‹g“Gô9k÷,+GIV—ÀÓd”±–* ›×NSä0 ‘C@¢Ð€Æ˜l»iáÔëN¿;üpÜ;Úü(ý'ì—æú»ý¹×íŸ^tÛ{׫Óóg‹iŸ÷ÿèô‡Ýó¾ç÷ÉÖœ÷»í'ÚqÞóD’ºŸŸ!ã“à^ytOÛW'ScI1y’¸ãÞ û—)|DAàG›91´éösÞþà”<1[#³!h¢¨Ò[±-ùÇ4ù©æ¾Ô„¦la MÆ3ô’pžÔ鄨0ÅŽoÏöÄ!Dª#€I(Œ!ÆÆ˜…¹=híV1ówÊ1 4pš1¨aŒsjŸŒSç\°ÍTÒÆ›ß·ÈŠ7Gky_ ñ³nÄXº“Ìðn4×€kÞÿi7¨Ó.‚ûxwþÈ“bvèê#ÿíúØw/”v5•Ì)Ǻµj-ò,g*Ñä2-&é˜-Z^3 ÔVéí*Íefªé½‘(›/*½H²¬”DûMºÙRIýݨɖÛÿË|dÕ t›·.1±f.¶’+6”D×Nz± ‡þga¬ünÎ¥¦à d ŠÒDq­Xzôh‡Ê(~ä[Q—׃]ê )ÞV‡ ÿC¡¹$+£××êꜶ¥7}Y'Æõ`™¢ÛzýšpS-Ž¥^Sè8D$ÈëêÚWˆ‹4ŸgìoV¼X4”÷-·}L:ýÛm¼Ì}Á“I*JlÕ\¬r‘’<ë}aQZÝÛVçpK^ ›â}Ad_—i¢ß:Ââ—àÔgR€·aJ8K^ñ+ù{Ÿe1•—€Ä˜½¶J“àð_´vÖ-Þö«žF ûzû˜§¢G­¢~ÌÑו÷¬`\ôik†·“3a6Ò jo³V€Z$4 ”5¬¼£³A/þl_öº'z¨¦©î„Óòûj¦ù¹né?6UØ endstream endobj 1408 0 obj << /Type /Page /Contents 1409 0 R /Resources 1407 0 R /MediaBox [0 0 595.276 841.89] /Parent 1335 0 R >> endobj 1410 0 obj << /D [1408 0 R /XYZ 90 757.935 null] >> endobj 1411 0 obj << /D [1408 0 R /XYZ 90 733.028 null] >> endobj 1372 0 obj << /D [1408 0 R /XYZ 357.664 687.817 null] >> endobj 1412 0 obj << /D [1408 0 R /XYZ 90 671.089 null] >> endobj 1373 0 obj << /D [1408 0 R /XYZ 357.664 371.734 null] >> endobj 1413 0 obj << /D [1408 0 R /XYZ 90 355.007 null] >> endobj 1374 0 obj << /D [1408 0 R /XYZ 357.664 292.336 null] >> endobj 1414 0 obj << /D [1408 0 R /XYZ 90 275.609 null] >> endobj 1375 0 obj << /D [1408 0 R /XYZ 357.664 224.892 null] >> endobj 1415 0 obj << /D [1408 0 R /XYZ 90 208.165 null] >> endobj 1376 0 obj << /D [1408 0 R /XYZ 357.664 157.449 null] >> endobj 1416 0 obj << /D [1408 0 R /XYZ 90 140.722 null] >> endobj 1377 0 obj << /D [1408 0 R /XYZ 357.664 90.005 null] >> endobj 1407 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1420 0 obj << /Length 1368 /Filter /FlateDecode >> stream xÚÕÛnãDô=_áGGj†¹Û.âvÙ Ò-Ñ­OR¯ÛŒí6ý{Îxf;uÊ‚´*¼dΌϜûm‚ƒm€ƒ7‹WW‹/^Ó$HP"© ®6A‚ƒH$( ®²à:H,WcÖúc­wË8|ßênÝZøRm”^’8TåZÁQ,)I¼¼¹z·øîjñç‚+ž´ˆPÄD°Þ-®opÁù»#–ÄÁCµ 8e°ÁûÅÏ ü¬˜”!,Å &¢ˆp'k^:á¬ÐççÛ¢ºM #Â#B8X‘IÊ-X`‹ÅÇX 1ns©ÚN—*›¡Æ$Šâ±b\-™u§ì.ߨµ½S^Êê£Z·yUÚý:u€VµVòÚ îªÂM}§´'쮥vù€1-óVÙmY•«jIDxo~”.Òº-úo;€ór‹ŒNÁŠcDp2µÌ…¶wóÌßÙTÚ³p—ä¯Êâq)E80vòw¿{ûø7&ÐU׿¥j³r2õg'Sß‹S¾Ïò%ÁFiš@ÅáÖô <ñt¾Ëªî¶PS÷íñ3¾Ÿ×W^Ãjc¼°iT;ؾ§BÈˆŠˆQ"vû>IPÜ!œ¥¥3(Bs–‹pµx6Ø£g öˆ_,¸&+FF±ñI–“Q<{œahÚó‡Pl«!œ¡÷ô×â±½Jx4Ï0g(ާì¿ÃÊÈË0&Fb’Ot~*§áq¾òeX`|†VJÛÇ8…09ðaÒâD@<‰Xl)a<ЏO¤9ŸsÄÐél†…Ï#ORú”G2Šþ97£ðl`SÈ©;ر ìf4a<¬¥µ“]‚1Jâ‘ô˜Íð‹¨ÇñI2d“€ppßµViv3£)DHŒ8fŸ?¥¾5"á0]¥é”e†9 ª´çý¨x P_ÓlÚ´íû9oì™öœûÓöΟvx]•mš—îf¦`SØì¨OÀAz UÞSSG½‡€_­\û†Ò¨yagB½uÃáå›Ep=òöV_cTŸjÃ8Tm³;*j÷K˜<«<›‰ŠÆb&P¦< ¦:Í2˜ˆ™úµën]y¨?÷¦¸¥:O‡" æSº}ÒfÓ"ß–»a«;]Wïä¾å¢QQ™&Œ‘LÎæKâò¥oæu— ÂþM’xôΕ1›´?Ó^¦É$|[¶JïT–§­‘)êbVA —ÛU]Ù9𬋮wì3¥GCWf¯ntµ³Ÿmk`2öJêt§€gcB=â0Ưïúû€ì†t@k—$¬,ؤ&b-ŸÓ¤ÕºÚÕ]Û'ß4ðÆ/Mº5Ô5ýV⤄ƒ‡ë ¤Z§l,RÞº}]y¯>lúž «é-ÚDQø’;ÌL5kßö*šãòˆ5Ü+ªm§NÑmu^¥¦cN^ͱ!Ü\9!ÐÐú“Ÿ ”œz&ì<˧ó)4Å—Ê›M¢»7@J[¥ÇÕ©ðo #È¡tõEgZ¤\?2#‰Át¨¿_ü4#%…1‚ õÕL¶3„$LZÃ4öýÅostðÕ!Íéa"†^Ìå¬ÛØä¯ ¨gúãž6/æ² Ss¼süèzòuâUà+ÄŒºü©º Ý¿˜ºÃc`xèdêÙ§âÐàÿ6‚q+Q>ñ_#ÿoÑa€0Ù áÌõF•J§í!ìú£^›¼Q·v#íBð9'ç"²;x­P—<×'Я߼ÿáí+ spÓô½ümµܪòXÓ¿Ó1åË endstream endobj 1419 0 obj << /Type /Page /Contents 1420 0 R /Resources 1418 0 R /MediaBox [0 0 595.276 841.89] /Parent 1335 0 R /Annots [ 1417 0 R ] >> endobj 1417 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.157 456.181 194.318 466.712] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 1421 0 obj << /D [1419 0 R /XYZ 90 757.935 null] >> endobj 1422 0 obj << /D [1419 0 R /XYZ 90 733.028 null] >> endobj 1378 0 obj << /D [1419 0 R /XYZ 357.664 687.817 null] >> endobj 1423 0 obj << /D [1419 0 R /XYZ 90 671.089 null] >> endobj 1379 0 obj << /D [1419 0 R /XYZ 357.664 620.373 null] >> endobj 1424 0 obj << /D [1419 0 R /XYZ 90 603.646 null] >> endobj 1380 0 obj << /D [1419 0 R /XYZ 224.689 570.554 null] >> endobj 1425 0 obj << /D [1419 0 R /XYZ 90 554.201 null] >> endobj 1381 0 obj << /D [1419 0 R /XYZ 357.221 520.735 null] >> endobj 1426 0 obj << /D [1419 0 R /XYZ 90 503.674 null] >> endobj 1382 0 obj << /D [1419 0 R /XYZ 386.954 441.337 null] >> endobj 1427 0 obj << /D [1419 0 R /XYZ 90 424.609 null] >> endobj 1383 0 obj << /D [1419 0 R /XYZ 90 407.12 null] >> endobj 1428 0 obj << /D [1419 0 R /XYZ 90 392.549 null] >> endobj 1384 0 obj << /D [1419 0 R /XYZ 158.393 317.788 null] >> endobj 1429 0 obj << /D [1419 0 R /XYZ 90 301.061 null] >> endobj 1385 0 obj << /D [1419 0 R /XYZ 90 283.571 null] >> endobj 1430 0 obj << /D [1419 0 R /XYZ 90 269.001 null] >> endobj 1386 0 obj << /D [1419 0 R /XYZ 431.616 235.774 null] >> endobj 1431 0 obj << /D [1419 0 R /XYZ 90 219.047 null] >> endobj 1387 0 obj << /D [1419 0 R /XYZ 245.545 185.955 null] >> endobj 1432 0 obj << /D [1419 0 R /XYZ 90 169.228 null] >> endobj 1022 0 obj << /D [1419 0 R /XYZ 256.414 136.136 null] >> endobj 1418 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F11 1076 0 R /F8 1123 0 R /F7 1124 0 R /F14 1078 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1445 0 obj << /Length 1108 /Filter /FlateDecode >> stream xÚíX]oÛ6}÷¯° ˜X~ˆ" Úe Zt@WëC ŠÌÄÂl)“d§ù÷»ü*»²²%Ýš‡=¢èËKÞ{ν<nœÏ^-f/Ψ R)MƒÅu p R‚8%Áb\„¥QL0Æám“gõ2Š)Çá¼­·yëÆïõµ®#"C]榤T"$*º\¼™ý¼˜ý9#°ˆuÍŒùfvq‰ƒ%Ì¿ 0bJwÖj$”ÁsÌg¿ÎðÁ1 AŠsÚ“2„Sþ¸sÂéÀ%DŽƒ˜&ˆ%Ê9œ·U­ÝÊëªööÃL1R˜ÀÎüÝÜ™090óš‘7)Fœp¤„è ~q‘ %ig°ÉFÎM”$ý&D‡:"<¼¯u^ÕËxE‚Ò4ˆ‰‰!q+¿+Ê|½]úÔ2<%C ò[ü0â`Mú\Üå Z¸¡ IÙ»ùq$±"(~ÄŒ"¢<´§Y›9 Î ½^6–Y5“‘Âz HRˆÏ¯ÿH)ß[\ĈR”­Ÿ6ì¬o\nþ¼ôr €.€¤¯-D|uê6+ÖÚ×שnòº¸m‹ª|¸¢+=²#‘ˆ§=}}ñ~é‹$yoÖøºfX…Ecž2Ü6æTf¦­ÜÌmÖ4~¶öSuo–We«ËÖ›T×c‡ Qõ5Š\>TädºÈ9Âìx÷q%„ ê²ÑíGÌ1üÈ!+Œ‡]‘¹<µ+=åK_·õ>ƒíT ÆL_1:be»åö å¼\¯6zs¥ëƽöÙ® ?Ó ÚxÖueƒ²y^ùwÍOÜwëý?ÀŒ:âƒ"9vÞ™!ÔÉb øÓDŒð gÂxn¾ žïL0YmtÛylY•qiƒ¾‰Àö+!L1C$ÏXëL#lÚNÇfa{›îA¼3»Ûó9@Ý_çŸcèᘠ[„1K‘¢‹Qt¢x÷$Q̧‰ã CTþ4áÿT§€û_?gMü€ûeµ½ZëǨâIÜw ñ¯Êà'½ Þ“ÁÉCLµ"˜*R'"¡=¼X…:lF®ÑÃ_6“Ÿu°y;¢ƒ’L<½°Ÿ~ÃËTNé`å„6Á; ‰:&…‘•Â]Î&ÜÑcRDQ"½æÇ¥0ÿvR¸?îág8»‚«ëo~¥é¾Î¤€/àé>Îp…8÷]ô\—ºÎÚ®Z*¯:~ég¦$õ•{IÝƒà“„œpáÞ(&Ôß;ƶòW⇟æo_¿rc¸öð~Чէûwé#ý ó¾‡" endstream endobj 1444 0 obj << /Type /Page /Contents 1445 0 R /Resources 1443 0 R /MediaBox [0 0 595.276 841.89] /Parent 1335 0 R /Annots [ 1433 0 R 1434 0 R 1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R ] >> endobj 1433 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 625.136 131.683 633.983] /Subtype /Link /A << /S /GoTo /D (structpscard_37a06c885cf73736f2eb5e78bd1034a1) >> >> endobj 1434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 612.185 136.665 621.032] /Subtype /Link /A << /S /GoTo /D (structpscard_71912f084bc3cadeb0758756a723071a) >> >> endobj 1435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 597.734 156.869 608.08] /Subtype /Link /A << /S /GoTo /D (structpscard_9986f2ace84978f6cc543224b57592c9) >> >> endobj 1436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.696 540.632 448.883 551.646] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 1437 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.462 540.632 513.996 551.646] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 1438 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 208.284 131.683 217.13] /Subtype /Link /A << /S /GoTo /D (structpvcard_88fa516543184eaffe6bd2c57946d9a7) >> >> endobj 1439 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 195.332 136.665 204.179] /Subtype /Link /A << /S /GoTo /D (structpvcard_f011f1972d6d345540f36a5c08a30d1f) >> >> endobj 1440 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 182.381 166.841 191.227] /Subtype /Link /A << /S /GoTo /D (structpvcard_5c97562bbadb55b8a2db59d9c7878059) >> >> endobj 1441 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.183 123.78 449.37 134.793] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 1442 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.462 123.78 513.996 134.793] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 1446 0 obj << /D [1444 0 R /XYZ 90 757.935 null] >> endobj 102 0 obj << /D [1444 0 R /XYZ 90 733.028 null] >> endobj 1447 0 obj << /D [1444 0 R /XYZ 90 642.053 null] >> endobj 106 0 obj << /D [1444 0 R /XYZ 90 584.16 null] >> endobj 110 0 obj << /D [1444 0 R /XYZ 90 497.479 null] >> endobj 1448 0 obj << /D [1444 0 R /XYZ 90 475.167 null] >> endobj 1449 0 obj << /D [1444 0 R /XYZ 90 475.167 null] >> endobj 1450 0 obj << /D [1444 0 R /XYZ 362.337 440.038 null] >> endobj 1451 0 obj << /D [1444 0 R /XYZ 90 423.311 null] >> endobj 1452 0 obj << /D [1444 0 R /XYZ 397.395 390.219 null] >> endobj 1453 0 obj << /D [1444 0 R /XYZ 90 373.492 null] >> endobj 1023 0 obj << /D [1444 0 R /XYZ 195.643 340.4 null] >> endobj 114 0 obj << /D [1444 0 R /XYZ 90 324.046 null] >> endobj 1454 0 obj << /D [1444 0 R /XYZ 90 225.2 null] >> endobj 118 0 obj << /D [1444 0 R /XYZ 90 168.807 null] >> endobj 1443 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F11 1076 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1480 0 obj << /Length 1385 /Filter /FlateDecode >> stream xÚÝX[oÛ6~÷¯° ¨9’u Öíº)6 ‹­@ZŠDÛÂt+%9ñ¿ß¡Hɲ-;YܢÞDQ‡ç;—ä9ÂÆÒÀÆÕäí|òã% Œ.uù°á¹1JŒylÜ™ ùÖ”`ŒÍªŒJ‘YSʰ9«EÕj|Ë\XÄ7yq˜ò™ë˜[Ÿæï'¿Î'_& °AZÕÌCžÍŒ(›Ü}ÂF óï ŒìÀ7Z©Ìp¨ ÏÔ˜Mþ˜à“fRa—ufzˆjC/žÆÊ¶wEÔd<¯Ã:)ri¨›RÙN0X‡ˆ^™äÚ§r…"¾¸H䀯hÐ@<äRGiøˆVRÎPÊF6ñA¶•¹JÖ<QxA'ŠˆD'æ›Ç¤’#jæMvÁmg%™ ž‚3eæÚ"ÌärÕ+%êEI®ÞëWƒËëùL£cH\QB;ü›?•ŒíelD}Ò‰$#Z <¯ø<¢ÂAÁVCŽ„8Èa}þ¶6¹tnó ‡…ˆ‘5µ‰c^/”?‰z¼~­üůZ®)’‰¥fÛíÕĸk墪ⵠ_b%«ˆÕI$iªt ^¦a¤ã–Ô–þ\¯ZòL©í y‚¦¹§ãŒM™™º‰õ[¨³ˆ»,2f¢‘Ÿl `0drÏåFfߑؼ‘éE˜ñZѨ‰[ļȧy›¶¥²£Åš£Xsocw„£Ûˆ¸ÞÓ=›¢ôIŠ:ì$Eq§vXÌI°­Í}Êws¼–:ôáÿ•\¯e.¥A[/Õ ÊM ›6ñý—Ý£žOêYÉ£Z„©æójQˆLì*|ÑÉñ^à~Hò(•{µ•$dH—>z?è‚KÌé#þ¡Õˆ ßïÕü<Æ€ nÃz¼ ëPo yU;çÕ>+]X§¹ÝMø‘R¶Æ1}’œ8&å&Æv¸ÜYÚ«Á£pr#Z…â4H½)ùá ŒÍ;ÿÓît‡HÏEŒŠxÑ9‚ø„zÞÆzÇœÍç ^Õ ñå4ý:8íQZTžßÚ¯r=š3ïe,yâÃ( û2’<¹Ù’êJ$UvVÞž)Ã8Nò%9+[•:²OÇ.ª¸{'q'• 'œím/lѸwÂyÈñú›y£·têÈÅÁóZKI¬ì¡•Ô8çL+uÔéSm¨F÷ÙÞ^ð»–BÝ3-­ÊÇôfŒ÷²ȳ›ŸßÜ^Í ç)\ožç?{;|c?nèìkøñÝó1ûßäãÿñc¿0r\èLÝýºÙïõw¼“”w]>¯"‘”]ºŽœ¯øX/ì#FÈ ¤“%ë¡.ؼd[Xë£qjcÊŒLÊ+õ–äƒÚTNþ¥I„4X¾Õ…~vU¬z­úWi„¶"ÉÚC=  Ìë-V•TµÆ*z– ijT¡†ui°Û§f\vl² zÊ:> endobj 1459 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [401.28 677.939 436.467 688.952] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 1460 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 435.325 143.858 446.229] /Subtype /Link /A << /S /GoTo /D (structspcprm_feeb5f4056f271fd37291a712a7b6791) >> >> endobj 1461 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 422.374 152.695 433.278] /Subtype /Link /A << /S /GoTo /D (structspcprm_387d74de3215763d7e22c222b19a2c44) >> >> endobj 1462 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 409.98 154.348 420.326] /Subtype /Link /A << /S /GoTo /D (structspcprm_5f9a48a52144f8ced93baaffc107a3a6) >> >> endobj 1463 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 398.528 165.178 407.375] /Subtype /Link /A << /S /GoTo /D (structspcprm_2c5c2d97e6c5f617272834b1516c84de) >> >> endobj 1464 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 383.519 171.514 394.423] /Subtype /Link /A << /S /GoTo /D (structspcprm_74433ae0e7e1ec426777bafb402b50c4) >> >> endobj 1465 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 372.625 176.196 381.472] /Subtype /Link /A << /S /GoTo /D (structspcprm_4dbc8c7064ae790483017b6c81e7ded2) >> >> endobj 1466 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 357.617 155.474 368.521] /Subtype /Link /A << /S /GoTo /D (structspcprm_e11db8d7ff8b605eed87298a32fd094d) >> >> endobj 1467 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 345.223 152.705 355.569] /Subtype /Link /A << /S /GoTo /D (structspcprm_8ef0c963f1b0ee957f3403da7559a81c) >> >> endobj 1468 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 333.771 160.465 342.618] /Subtype /Link /A << /S /GoTo /D (structspcprm_ec5d37c00d382a84a090d4f52d9a4346) >> >> endobj 1469 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 318.762 165.995 329.666] /Subtype /Link /A << /S /GoTo /D (structspcprm_844792d006c308f465ce8ca593a37df3) >> >> endobj 1470 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 307.868 167.08 315.589] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1471 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 307.868 188.101 315.589] /Subtype /Link /A << /S /GoTo /D (structspcprm_6d4124d4db8f7addcbfee99a8634522e) >> >> endobj 1472 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 292.859 180.461 303.763] /Subtype /Link /A << /S /GoTo /D (structspcprm_55316470e5591401576ba3c5c384df0b) >> >> endobj 1473 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 279.908 168.764 290.812] /Subtype /Link /A << /S /GoTo /D (structspcprm_20db4194170d78054908acf94b41d9d9) >> >> endobj 1474 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 266.957 167.11 277.861] /Subtype /Link /A << /S /GoTo /D (structspcprm_dd01b70b4a074a7bdccff378ab61a948) >> >> endobj 1475 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 254.005 167.11 264.909] /Subtype /Link /A << /S /GoTo /D (structspcprm_fb6a33994ad13f402efb68d20a97eee1) >> >> endobj 1476 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 241.054 168.764 251.958] /Subtype /Link /A << /S /GoTo /D (structspcprm_6727d3a30592e54c7361e0434a795832) >> >> endobj 1481 0 obj << /D [1479 0 R /XYZ 90 757.935 null] >> endobj 122 0 obj << /D [1479 0 R /XYZ 90 733.028 null] >> endobj 1456 0 obj << /D [1479 0 R /XYZ 90 716.221 null] >> endobj 1482 0 obj << /D [1479 0 R /XYZ 90 716.221 null] >> endobj 1457 0 obj << /D [1479 0 R /XYZ 191.05 669.137 null] >> endobj 1483 0 obj << /D [1479 0 R /XYZ 90 654.467 null] >> endobj 1458 0 obj << /D [1479 0 R /XYZ 399.049 619.318 null] >> endobj 1484 0 obj << /D [1479 0 R /XYZ 90 602.591 null] >> endobj 1024 0 obj << /D [1479 0 R /XYZ 195.643 569.499 null] >> endobj 126 0 obj << /D [1479 0 R /XYZ 90 553.145 null] >> endobj 1485 0 obj << /D [1479 0 R /XYZ 90 454.299 null] >> endobj 130 0 obj << /D [1479 0 R /XYZ 90 227.48 null] >> endobj 1478 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F11 1076 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1512 0 obj << /Length 1676 /Filter /FlateDecode >> stream xÚÅXYoÛF~ׯ ü °¶{ò0Ї\v¤mj M[Ù4µ’P¤ÌÃŽýë;{Q”ÄØnÐ$O.wgçüf†Ø[zØ;½šŽ~:¥±£8 7]x1ö€ A‰7{3_ hÔü:3Ðù7™Y†±# *2]ŠÔ[¶0Ï®ƒPïå…N–uÆÿk8ÅÖe¡Š¤6Š£nÏÅ—Ѩ×êu5$ëw µÓeL|«Îu©}Ô¾?'ªÐ%)”–¬n²TÅ:Lþº ¸wÎz¿L³æ~âúìÐ4Úû…y—êë ƒ©ŸÝ»…¤Ëæö‡€Å¨cËëô[ËÆôçýæãÅPc ˆvÕðìüÝPlDèÛ‚¸6C\a°Á˜n¹¾R„"ÂÂ}®‡B½7¤ƒ%¡‚ ®ÿ°„_ší0†O†â8î·‹g²…(b]aCdYÁäUØv¥jóŽžË¢†˜ÂG{¢ªÌæä‰ÁÕŠJžuhnŠPÈÃ=Q³¼¿S¹Ëj"$Œ†Ìx–„ôi /1aB¼KödLŠ¥K¸Zì4›oežA7 )½¼:Y DÏ“™=-³Í2‚AÌ8¸PM \€xlS¶Ð Âp¡·éØÕë…B˜^‰è†J­Ñgkn¦ìêüŽÏ† Ûñ>G8è9ÁØâ@§ˆÿ®Ô®õ÷µŠÁÏüÓêþ°n…Ü(ìeg²gÒbKi'ë_qªl*¯ÍK`Ÿpr"BóF«-û>½¾øðî•¡9”[;»ß»¸Ÿï—nûšþ ôRˆ endstream endobj 1511 0 obj << /Type /Page /Contents 1512 0 R /Resources 1510 0 R /MediaBox [0 0 595.276 841.89] /Parent 1486 0 R /Annots [ 1477 0 R 1503 0 R 1504 0 R 1505 0 R 1506 0 R 1507 0 R 1508 0 R 1509 0 R ] >> endobj 1477 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 639.415 167.927 649.193] /Subtype /Link /A << /S /GoTo /D (structspcprm_387d74de3215763d7e22c222b19a2c44) >> >> endobj 1503 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 619.897 169.581 630.801] /Subtype /Link /A << /S /GoTo /D (structspcprm_5f9a48a52144f8ced93baaffc107a3a6) >> >> endobj 1504 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 600.379 170.438 611.283] /Subtype /Link /A << /S /GoTo /D (structspcprm_2c5c2d97e6c5f617272834b1516c84de) >> >> endobj 1505 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 580.861 176.774 591.765] /Subtype /Link /A << /S /GoTo /D (structspcprm_74433ae0e7e1ec426777bafb402b50c4) >> >> endobj 1506 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 561.343 181.456 571.122] /Subtype /Link /A << /S /GoTo /D (structspcprm_4dbc8c7064ae790483017b6c81e7ded2) >> >> endobj 1507 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 541.825 160.734 552.46] /Subtype /Link /A << /S /GoTo /D (structspcprm_e11db8d7ff8b605eed87298a32fd094d) >> >> endobj 1508 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.681 515.257 275.657 526.161] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 1509 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 503.302 121.98 514.206] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 1513 0 obj << /D [1511 0 R /XYZ 90 757.935 null] >> endobj 134 0 obj << /D [1511 0 R /XYZ 90 733.028 null] >> endobj 1487 0 obj << /D [1511 0 R /XYZ 90 716.221 null] >> endobj 1514 0 obj << /D [1511 0 R /XYZ 90 716.221 null] >> endobj 1488 0 obj << /D [1511 0 R /XYZ 320.811 506.455 null] >> endobj 1515 0 obj << /D [1511 0 R /XYZ 90 489.911 null] >> endobj 1489 0 obj << /D [1511 0 R /XYZ 216.474 444.864 null] >> endobj 1516 0 obj << /D [1511 0 R /XYZ 90 428.32 null] >> endobj 1490 0 obj << /D [1511 0 R /XYZ 448.462 395.228 null] >> endobj 1517 0 obj << /D [1511 0 R /XYZ 90 378.684 null] >> endobj 1491 0 obj << /D [1511 0 R /XYZ 283.005 345.592 null] >> endobj 1518 0 obj << /D [1511 0 R /XYZ 90 329.422 null] >> endobj 1492 0 obj << /D [1511 0 R /XYZ 250.617 295.957 null] >> endobj 1519 0 obj << /D [1511 0 R /XYZ 90 279.413 null] >> endobj 1493 0 obj << /D [1511 0 R /XYZ 174.701 222.411 null] >> endobj 1520 0 obj << /D [1511 0 R /XYZ 90 205.867 null] >> endobj 1510 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F11 1076 0 R /F10 1521 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1528 0 obj << /Length 1593 /Filter /FlateDecode >> stream xÚÅXmoÛ6þî_¡}³ˆ%)R/Š¡ÝÖ Åd±H‚B¶h[€M¹””4ÿ~G‘’e™IŒb@>$¦Èy/Ï=wöÖö.GŸç£_hâ%( ièÍW^‚½($ˆSâÍ3ïnÌQ<ñ Æx\î—{µ›ø”ãñ¬Rõ²2ã±jBâ±KS1Ù˜ÒÉÃüëèÏùèûˆÀQØ#ÍÖ…´—.FŠy¤Ą̃j%î§r¸¨ÑàJVBíD–§•ÕéQ›–nkQNOFÄ‚†½Žp<øÑÕ ´h\)ñ½Ò8|6S-dÝ„dִݳ+M`›já늫È|3´Ïê°:åiNÆÔ°Ãó­Ã± ÂAØ øÕó¾ -ä¤J·ýCUžv¡‹¤÷à¿ï3®e^•.ÒL8 19~èÛô“ÝNøøc6sA‰BÍ&盳ì€j#Œp„­ùaKÍ™°pi8°u^Ú$ïá¸Dçædbs²S±Mȼ¼lö~¯´¼1M®Z$dýüR÷i^[“WBÈ!ü$[XÖ¥®8îœÍe)TÕ®¯ZúJ·ùZîD«Á¾Vû¢¥å¹}ž„`X[–^Àå±Y¤m²{õ8e[+ÂŽš^ }bE8pA‚ÑãÊ&d,K3=VšoÛ÷r ÁßA«XØSÓEQW]kEprÜ1täh´c¸mÝJ!^nkAÿf¬~¡»1I3d¦G]O‹Fq¿Ö´ƒ'â°Ëo€€Ã@QðÞ6/+[f×·ß>Ý\Îìc^¶W{³²%Pƒ¡—«$"Ú8«C71ü§K8dß™_àÚ„‡¯?°Tp›â—B •vŒ_Ø*ñw;ø¢K„X˜‡Ðü›1kú>=ZØ›äÅçµCKÿ<• endstream endobj 1527 0 obj << /Type /Page /Contents 1528 0 R /Resources 1526 0 R /MediaBox [0 0 595.276 841.89] /Parent 1486 0 R /Annots [ 1523 0 R 1524 0 R 1525 0 R ] >> endobj 1523 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.304 654.467 400.28 665.371] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 1524 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.821 267.2 208.983 277.73] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 1525 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.11 93.459 275.413 104.363] /Subtype /Link /A << /S /GoTo /D (spx_8h) >> >> endobj 1529 0 obj << /D [1527 0 R /XYZ 90 757.935 null] >> endobj 1494 0 obj << /D [1527 0 R /XYZ 135.439 645.665 null] >> endobj 1530 0 obj << /D [1527 0 R /XYZ 90 630.995 null] >> endobj 1495 0 obj << /D [1527 0 R /XYZ 249.958 504.807 null] >> endobj 1531 0 obj << /D [1527 0 R /XYZ 90 488.079 null] >> endobj 1496 0 obj << /D [1527 0 R /XYZ 90 381.473 null] >> endobj 1532 0 obj << /D [1527 0 R /XYZ 90 366.903 null] >> endobj 1497 0 obj << /D [1527 0 R /XYZ 327.378 331.753 null] >> endobj 1533 0 obj << /D [1527 0 R /XYZ 90 315.026 null] >> endobj 1498 0 obj << /D [1527 0 R /XYZ 391.935 252.355 null] >> endobj 1534 0 obj << /D [1527 0 R /XYZ 90 235.628 null] >> endobj 1499 0 obj << /D [1527 0 R /XYZ 90 218.138 null] >> endobj 1535 0 obj << /D [1527 0 R /XYZ 90 203.567 null] >> endobj 1500 0 obj << /D [1527 0 R /XYZ 199.329 170.341 null] >> endobj 1536 0 obj << /D [1527 0 R /XYZ 90 153.988 null] >> endobj 1501 0 obj << /D [1527 0 R /XYZ 279.996 96.612 null] >> endobj 1526 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F13 1145 0 R /F10 1521 0 R /F40 846 0 R /F14 1078 0 R /F38 780 0 R /F25 1537 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1577 0 obj << /Length 1034 /Filter /FlateDecode >> stream xÚÅX]£6}çW¸ÚŠkÌÇ´ªÔívF]µÒì$RWšYU ˜‰@Æ_ßkl¢„¡™¨MØ'ûúŸ{¯`‚ˆ +ëýÜúá’Å(ÆqÀ4ÏQLPPÌEó ÝÚÇŽK !v³~ZË•ã2NìY+7i«û7"Ò¡‘-ªTÀPÄId3Ïù2ÿhý6·, PÑÎ5qèq”®¬Û/e0þìÅzì¬VÈg´%šYŸ,rp›ÌÃ$àý6#Ì0åÛ½¦°×‹ ØóŒ]«­Àz²³ž —†8`¾^~G8ÑVþ®•‡=mgs#Ú¬D6âÍ pÓÞœQšùRèÎ!L6&`I•鯨8Û¥æúS#×BÔßã¼æwÍ>~;.§ÜnQ5Òˆ´VôÀ¯]çzÌLFöº.ªVÈÆ ×zt»¶•IÕäµ\%mQWz2ßT©z2kŠj¸æÑ¡Ä®Ý¦k=•”‹Zír¥ Òe‹:J”ŽE™Ró@3›CÇLB¿çþ݈+ aä^oÑWßµ ˜†½ÁoºK(¸ˆÖ[¨8°È×qPf-Rˆ_é¶…p¬‹'Ò"J=›R¤:¨êñq)¤8¨êÊ- X\‰Dš¹A>ÔXÑè6—õj„‡ÑŠ¢h ²Ï€½ÁH4æat(1&ÞÖÔ OiwØÀRe–à˜™Ì}H:…ZlV¢2§°,šö{£fןÿþåæjf;ŽÐfB[u"ôpWF–Ö2¹0¢vse¡ÛnÎ"^-[ÝÞú®wÃÌáô|¨¾à¿Iìèig>T©bS zíW‡q _$÷¥hÙ/dOVÊR›·¦¯j¨1¼èßõå]Q¥å&#ÉähÇ6™?ø‚W‚÷Û(ܰx·°~Ó͘bb°§›’6Ñ/ QfÍ^~†•ÀúBÉ üLnîボº2•Õˆçá‚¢isù°·|ëFÁ‘¦§Áéd0q˜Ê÷A> endobj 1538 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.11 628.639 275.413 639.543] /Subtype /Link /A << /S /GoTo /D (spx_8h) >> >> endobj 1539 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 497.869 171.514 508.773] /Subtype /Link /A << /S /GoTo /D (structspxprm_533847a7e77e2bba8ce886289d31abdb) >> >> endobj 1540 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 487.065 176.196 495.911] /Subtype /Link /A << /S /GoTo /D (structspxprm_d3a5b851397a50e8644aeda10b184776) >> >> endobj 1541 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 472.146 166.642 483.05] /Subtype /Link /A << /S /GoTo /D (structspxprm_2c20a26fe559feacc85e6e76c31bbbc3) >> >> endobj 1542 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 459.284 163.076 470.188] /Subtype /Link /A << /S /GoTo /D (structspxprm_e83f0b38ecd0b7b7b6afb6eb42a61fd4) >> >> endobj 1543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 446.422 161.551 457.326] /Subtype /Link /A << /S /GoTo /D (structspxprm_f2a797bbae7610552aa9adfe75118908) >> >> endobj 1544 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 433.56 161.551 444.464] /Subtype /Link /A << /S /GoTo /D (structspxprm_5f4248299fb8a02ff1df6ed3d1baaa1b) >> >> endobj 1545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 422.755 162.657 431.602] /Subtype /Link /A << /S /GoTo /D (structspxprm_b67c62285ad58f5f0c1a88cb15ac3408) >> >> endobj 1546 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 409.893 166.792 418.74] /Subtype /Link /A << /S /GoTo /D (structspxprm_a37e50cd66795673d6bd43883a1be540) >> >> endobj 1547 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 397.031 163.215 405.878] /Subtype /Link /A << /S /GoTo /D (structspxprm_41ee038d00742dcf8cae9b6ed45a699b) >> >> endobj 1548 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 384.17 166.085 393.016] /Subtype /Link /A << /S /GoTo /D (structspxprm_7ba88553a468a9ef696c0c1eeda6864f) >> >> endobj 1549 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 369.25 163.026 380.154] /Subtype /Link /A << /S /GoTo /D (structspxprm_1d7fd26e54e3b253a9e26163445cbfc8) >> >> endobj 1550 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 356.388 162.667 367.292] /Subtype /Link /A << /S /GoTo /D (structspxprm_968cf3d8e4b0d082c6d617f5a38344f7) >> >> endobj 1551 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 345.584 166.085 354.43] /Subtype /Link /A << /S /GoTo /D (structspxprm_ef53f8244101a4229518b25b08143d18) >> >> endobj 1552 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 332.722 162.518 341.569] /Subtype /Link /A << /S /GoTo /D (structspxprm_51aa1b37a464c53a5c07a9a407c4b96c) >> >> endobj 1553 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 319.86 162.109 328.707] /Subtype /Link /A << /S /GoTo /D (structspxprm_6d41ec682a058f4028032bf6934f7fc0) >> >> endobj 1554 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 304.941 182.572 315.845] /Subtype /Link /A << /S /GoTo /D (structspxprm_a75c986198c4673e2caa30bd4ac73a30) >> >> endobj 1555 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 292.079 182.572 302.983] /Subtype /Link /A << /S /GoTo /D (structspxprm_678577f6866727419716361586fe34bb) >> >> endobj 1556 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 279.217 183.678 290.121] /Subtype /Link /A << /S /GoTo /D (structspxprm_a419711bf0079fff37d4adbae3278f5c) >> >> endobj 1557 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 266.355 183.678 277.259] /Subtype /Link /A << /S /GoTo /D (structspxprm_2d4ca3a63bb8871faec7928c8f713484) >> >> endobj 1558 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 253.493 187.813 264.397] /Subtype /Link /A << /S /GoTo /D (structspxprm_c0096d466fedc5ec61948044af06551d) >> >> endobj 1559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 240.631 187.813 251.535] /Subtype /Link /A << /S /GoTo /D (structspxprm_34e6a4ba58cd67ef619ab48a58c8b808) >> >> endobj 1560 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 227.769 184.236 238.673] /Subtype /Link /A << /S /GoTo /D (structspxprm_9c60b90b7911b9846b353991dbf38084) >> >> endobj 1561 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 214.907 184.236 225.811] /Subtype /Link /A << /S /GoTo /D (structspxprm_1f9bd735b5ffa618aa0713616a3b2b87) >> >> endobj 1562 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 202.046 187.106 212.949] /Subtype /Link /A << /S /GoTo /D (structspxprm_9cab306f378116a9b9388bd215a98c0b) >> >> endobj 1563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 189.184 187.106 200.088] /Subtype /Link /A << /S /GoTo /D (structspxprm_90656bb22c7fdb8c750ee5a16745334c) >> >> endobj 1564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 176.322 187.106 187.226] /Subtype /Link /A << /S /GoTo /D (structspxprm_a6ef9cc07973932f19c48062199e6689) >> >> endobj 1565 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 163.46 187.106 174.364] /Subtype /Link /A << /S /GoTo /D (structspxprm_c9e44005ceadafb8158df81fe022f46e) >> >> endobj 1566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 150.598 183.539 161.502] /Subtype /Link /A << /S /GoTo /D (structspxprm_25de138f15027a948887f59f79b59d91) >> >> endobj 1567 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 137.736 183.539 148.64] /Subtype /Link /A << /S /GoTo /D (structspxprm_6300648f1270fbd6f45fefaac054db70) >> >> endobj 1568 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 124.874 188.331 135.778] /Subtype /Link /A << /S /GoTo /D (structspxprm_307491e5045c959ed5212c54b6e300e9) >> >> endobj 1569 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 112.012 188.58 122.916] /Subtype /Link /A << /S /GoTo /D (structspxprm_709e6f9fd2c706705a019d865280526f) >> >> endobj 1570 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 99.15 188.221 110.054] /Subtype /Link /A << /S /GoTo /D (structspxprm_203c7de3b62de030e721e99cc0a5799b) >> >> endobj 1571 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 86.288 188.221 97.192] /Subtype /Link /A << /S /GoTo /D (structspxprm_84d43f663df39a476b33a9516f3662eb) >> >> endobj 1578 0 obj << /D [1576 0 R /XYZ 90 757.935 null] >> endobj 1579 0 obj << /D [1576 0 R /XYZ 90 733.028 null] >> endobj 1502 0 obj << /D [1576 0 R /XYZ 199.329 705.441 null] >> endobj 1580 0 obj << /D [1576 0 R /XYZ 90 689.168 null] >> endobj 1025 0 obj << /D [1576 0 R /XYZ 283.084 631.792 null] >> endobj 138 0 obj << /D [1576 0 R /XYZ 90 615.146 null] >> endobj 1581 0 obj << /D [1576 0 R /XYZ 90 516.754 null] >> endobj 1575 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F11 1076 0 R /F14 1078 0 R /F25 1537 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1628 0 obj << /Length 1431 /Filter /FlateDecode >> stream xÚÅXIsÛ6¾ëWðHÍD\ÜSÓÔm2íL›h¦'ˆ„$ÎP  R¶•_߇–(Ju'>؇·|o¥p° pðÛäÍ|òúšæAŽò„&Á|ä8H‚%Á¼ nB†òéŒ`ŒÃvû°U›éŒ2~ìÔ®èìúƒX 5%Y(d!`+c8 i<ý<?ùu>¹…bX³¥ ŠÍäæ3JØ`åYpo¨6AL#xÖÁÇÉßìÔÄGêâu NPeAJ#„fuþD)3âý½àfÆÀ‚²Ù-jáN´FjåTû`h´5åý”àO)濾…‚ëÿ‡›‡Œ{8˜Šâ,z †‡} N$RæVusY:}é½$z ü±}ˆþÓ쎞Ñîq^òBtüûK3Rz~#²­­D%Þ­Pêèöëk”‘„"¥pbeaá8(?)ŠSê¯ eôšÎ’%8šAwš¦*õÙ@Kš¸øµÜò²¬äj€ÆQ˜1Š¢,fAiõ× Þ‚«Z”¶¼m¡ªmW5Ò*}$üHcŹe3_ Gt(‘d(Í#¯¢ë4§¼"P‚e=™kBQD¢‘ ’lõ ;b¶ït áõν6K{Îë) k»n·¢è¯/¨ŠC·v‹Ë²çZ)»W UÙ¢¨É»ê±@¶h:c,ß9Å*§Ò®¥Ýi›ZÔ{»^ìÏEîŒÅ(eb†€ÍÌ#ЇO˜aø#Ãà1‘¾®Šµõ bjí{åÚõR5®‰WrÙ¨ 7~3[ÕhîªÒ»ö®âþ¶c³ÜÉâñ7µÛÙå ‘ÉÛ%”ykhÎzw™õºÙÕ¥]/„}j…A²n_ ^Î P%,|xá4”=ÛˆÍB(ÇX å Q©cæ­p’e£†*$îmš²‚D£^‚u˜1òÀ/&Þ4àe5e,D#1ŽOó‰º|º®Dí“©) šÜ§Ó0̽>]Á5WmÚ\]Ùa¬í–fq;ž“ÆG±¯$ [ªø(ÛPDúdû º’¢ËÊ’—<–%M7¶}̉ÛŒ‡á½ÝºùýËç1”f1FD×ʬz´.Ù|Ï­+ÏÛÌ~ÍÃÉ¥rչܼÙ|­í‘³½’ݱáÞ`&ºýV¼˜·çÓrvçüR-ÇQ°»ZQWOÖ'‡ !¤/a›í®å+Wl¤Ë„¾½øz·ºùä¾oÌhs@i€å>?"U·ÿ_Ðýtr‹+G\ ]ؤ/õ‹~âN\ýzDô0|ÞiÕÒ,l¤æ“æ¡)¨zª _./ dpÞg­©R·' ¸jg?™Ç¹aÙ‘šÏÕAŸ–VyíRÙÈÙ¡ç K¤]ñºž:q~LÐ×c‚&ØðÑÖ` t.ïd;ŽA¶© °²~ÁI¸‚` AÓDkƒ¦:ü‰î‡,CmL‚§+,èlÎ×!L‡2ÕÐ@Ihz¯ÙÉbmÒš+^t0 µ]UŒÿ`bƒÆÃ8¦‘‰H{v€¬¡> endobj 1572 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 721.97 191.639 730.816] /Subtype /Link /A << /S /GoTo /D (structspxprm_f252fd0c875bfe2dc99c56617ae2faa8) >> >> endobj 1573 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 709.487 191.639 718.333] /Subtype /Link /A << /S /GoTo /D (structspxprm_78d8a2235f18250cfa97a32625ab72a0) >> >> endobj 1574 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 697.004 187.823 705.85] /Subtype /Link /A << /S /GoTo /D (structspxprm_75c591192f69d3e284d037d0216c2179) >> >> endobj 1615 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 684.521 187.823 693.367] /Subtype /Link /A << /S /GoTo /D (structspxprm_cfdb74852a20099c1cdc3b2cc8faa03b) >> >> endobj 1616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 672.038 188.072 680.885] /Subtype /Link /A << /S /GoTo /D (structspxprm_7e1e561ce26f9be86978783bbd0dd496) >> >> endobj 1617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 659.555 188.072 668.402] /Subtype /Link /A << /S /GoTo /D (structspxprm_5ab73474c2a6e92885c805cc017f6fbe) >> >> endobj 1618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 647.072 184.097 655.919] /Subtype /Link /A << /S /GoTo /D (structspxprm_1d7633da24d461d6f791e003be2a508a) >> >> endobj 1619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 634.589 183.897 643.436] /Subtype /Link /A << /S /GoTo /D (structspxprm_cc8a46737906be2cee7cba0b2aa09d87) >> >> endobj 1620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 622.106 167.08 629.827] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 622.106 188.101 629.827] /Subtype /Link /A << /S /GoTo /D (structspxprm_b232cb470b7f96330512dea46791644e) >> >> endobj 1622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 607.566 175.479 618.47] /Subtype /Link /A << /S /GoTo /D (structspxprm_c8f016fe8e911c4ffbedde63318bb3db) >> >> endobj 1623 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 539.489 120.316 550.393] /Subtype /Link /A << /S /GoTo /D (spx_8h_192c7ea1edb2fc79d391a51bec7442e0) >> >> endobj 1624 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.957 270.346 224.378 281.25] /Subtype /Link /A << /S /GoTo /D (structspxprm_533847a7e77e2bba8ce886289d31abdb) >> >> endobj 1625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.316 270.346 310.42 281.25] /Subtype /Link /A << /S /GoTo /D (structspxprm_d3a5b851397a50e8644aeda10b184776) >> >> endobj 1629 0 obj << /D [1627 0 R /XYZ 90 757.935 null] >> endobj 142 0 obj << /D [1627 0 R /XYZ 90 594.414 null] >> endobj 146 0 obj << /D [1627 0 R /XYZ 90 498.814 null] >> endobj 1582 0 obj << /D [1627 0 R /XYZ 90 474.445 null] >> endobj 1630 0 obj << /D [1627 0 R /XYZ 90 474.445 null] >> endobj 1583 0 obj << /D [1627 0 R /XYZ 222.123 439.316 null] >> endobj 1631 0 obj << /D [1627 0 R /XYZ 90 423.01 null] >> endobj 1584 0 obj << /D [1627 0 R /XYZ 224.056 389.918 null] >> endobj 1632 0 obj << /D [1627 0 R /XYZ 90 373.613 null] >> endobj 1585 0 obj << /D [1627 0 R /XYZ 325.993 340.521 null] >> endobj 1633 0 obj << /D [1627 0 R /XYZ 90 324.215 null] >> endobj 1586 0 obj << /D [1627 0 R /XYZ 162.089 237.634 null] >> endobj 1634 0 obj << /D [1627 0 R /XYZ 90 223.385 null] >> endobj 1587 0 obj << /D [1627 0 R /XYZ 250.337 188.236 null] >> endobj 1635 0 obj << /D [1627 0 R /XYZ 90 171.931 null] >> endobj 1588 0 obj << /D [1627 0 R /XYZ 291.004 138.839 null] >> endobj 1636 0 obj << /D [1627 0 R /XYZ 90 122.533 null] >> endobj 1589 0 obj << /D [1627 0 R /XYZ 258.347 89.441 null] >> endobj 1626 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1650 0 obj << /Length 1099 /Filter /FlateDecode >> stream xÚÝXQs£6~÷¯à­0sV´BRfúÐëõnšéMÛ$Ó{Hó@@¶™bp0¶/ýõ]8ØÅؽóŒÛ¾˜/Ëî·û­V¢Îԡ·ÑÛûÑÕ{¦MtÀç~âhêȈ`àÜÇ΃+ˆöÆ@)u—‹Ï‹bî™ î]Y¬¢ÒÊ·fb ”k²Èà#%¨r™ðïoF?ÜžG€Ÿ¢Ô¦…$’ 'š©ã󇮕³©µæŽÏ8^Sçnô눺É8¡ØºIQ«q¾zJuϺ}}½ =&ÜuVù…ÆhÇuÆ IÀ|këw*¨Õò»ZœpP¨[ëÜšrUd&î±Æ"5´Šh ¬#ŸZɧâœPˆ>aìÅà¶¿†ß%Å×ÓZi"}~*­Oê—šõ£ŒÖ˜Ê d–IÐd‰ ÿr~øDÂ9 ®¡0˜>™2ü—áY»ôÏ)ïñÙeUŠx?¢Á¢ñÄNÂÏ¡ž/ï;SXp«ŸèÎÜ™OìuR˜çNîÕ_Mo’¶7f¹0íœ_6SW˜MWiX|ýá ÇÃN¾¢<[–aV¾±Þ«®ó;+Û6oñ%©\°Š8Kt2,ˆ¯;Š3å­¶0° •{ʼnC˜¡|g=xÓ†[ÞráRu \äP¹´eÒ–ÍÅÊ¥ ḻŮ“Èt[[±lùxrVUaÃ^VÙѬ$e«Ó&$­–»¬½,›gv}«Ê=ICÄz _r¢ÀïM—:…Ý&Ã-ÛÿÙ‹Y^晕ë1Øé–Õ7;ëÚ@þ™ÚðOgõ¬æ$c_ÂI@ëþýÃÐæ6®"ÿ/ðñæÄtº ZïõÎÝQñÕwfo^¹Š75W+½‘Þ>Ýž&¡Ü¢(%¬;y´B¶KcÔƒ‚h±n‰øÒ-g_€©èê‹mÔi251%uŽ0Ó\cãÀ¾ @´ša®F/Z­òòoO ÷ÜKcO\ iï­öÜu®tófŽúôýÝO?¾µ²_ŸÕÓpÓ|ßåŸ_¦&Ûô/"²S& endstream endobj 1649 0 obj << /Type /Page /Contents 1650 0 R /Resources 1648 0 R /MediaBox [0 0 595.276 841.89] /Parent 1486 0 R >> endobj 1651 0 obj << /D [1649 0 R /XYZ 90 757.935 null] >> endobj 1652 0 obj << /D [1649 0 R /XYZ 90 733.028 null] >> endobj 1590 0 obj << /D [1649 0 R /XYZ 262.352 705.441 null] >> endobj 1653 0 obj << /D [1649 0 R /XYZ 90 688.833 null] >> endobj 1591 0 obj << /D [1649 0 R /XYZ 265.579 655.622 null] >> endobj 1654 0 obj << /D [1649 0 R /XYZ 90 638.895 null] >> endobj 1592 0 obj << /D [1649 0 R /XYZ 285.186 605.803 null] >> endobj 1655 0 obj << /D [1649 0 R /XYZ 90 589.076 null] >> endobj 1593 0 obj << /D [1649 0 R /XYZ 271.108 555.984 null] >> endobj 1656 0 obj << /D [1649 0 R /XYZ 90 539.257 null] >> endobj 1594 0 obj << /D [1649 0 R /XYZ 283.163 506.165 null] >> endobj 1657 0 obj << /D [1649 0 R /XYZ 90 489.557 null] >> endobj 1595 0 obj << /D [1649 0 R /XYZ 265.819 456.346 null] >> endobj 1658 0 obj << /D [1649 0 R /XYZ 90 439.619 null] >> endobj 1596 0 obj << /D [1649 0 R /XYZ 286.919 406.527 null] >> endobj 1659 0 obj << /D [1649 0 R /XYZ 90 389.8 null] >> endobj 1597 0 obj << /D [1649 0 R /XYZ 313.628 356.708 null] >> endobj 1660 0 obj << /D [1649 0 R /XYZ 90 340.1 null] >> endobj 1598 0 obj << /D [1649 0 R /XYZ 501.568 306.889 null] >> endobj 1661 0 obj << /D [1649 0 R /XYZ 90 289.828 null] >> endobj 1599 0 obj << /D [1649 0 R /XYZ 353.165 257.07 null] >> endobj 1662 0 obj << /D [1649 0 R /XYZ 90 240.343 null] >> endobj 1600 0 obj << /D [1649 0 R /XYZ 479.135 207.251 null] >> endobj 1663 0 obj << /D [1649 0 R /XYZ 90 190.19 null] >> endobj 1601 0 obj << /D [1649 0 R /XYZ 417.356 157.432 null] >> endobj 1664 0 obj << /D [1649 0 R /XYZ 90 140.704 null] >> endobj 1602 0 obj << /D [1649 0 R /XYZ 154.259 95.657 null] >> endobj 1648 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F8 1123 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1667 0 obj << /Length 836 /Filter /FlateDecode >> stream xÚíX]OÛ0}ï¯ðJ$êú#ŽíJ¼0Ú•öÐñ"µIIÒøõsb§ËPH ëÄÇxil÷æúøÜ{ì#p8éŽzƒc"„Ò'>M€D€û2‚Á(c‡Aéö1BÈÉç·ólæö CÎy‘-´ÏÔDe.ŽJB¥‡CÂ!¾{1:í}õnzXO…®\39e œõÆDzü H¥«ÊjñŒçŸˆ!cå5­(¤XhÛÊæL‹,QQ‹7êC.qm¨aƒ Bèö)FÎ2-Ðe Pey`ºã|0»0ÍC˜&y$ž™D4æÀš áyõ$ú%.l 1nZ2èÉ5샰°æQ’ÚbßÌL]tUþw¹sI Y³ÄÓ@³]® Z‡ÍPõ±{ô)Xþ0Ò°:HË,ˆ^,PG*‹«œ©–ZØv)ó:1ÏI¦nZå_wfhצ•©|®jÁ© ¢8m†~š†qaßëà×ì'Ñïœiá×C#ÙJ/í¢·¤õ-è ©‚\B„iíy,Uq7Wm$dþÂÞ^‹/½`)×¾–:"ù¢×å´†† Ç­±ñ¶I}»_•ÊSïPÆc¸XØsÅl1fg©¡’«ÚVÄ ß&Ø–gDÅù›Ð‡]C·Lƒ”ËmdÂ!âxcjcŸ@ÆÚ)ö·Ií æùý¥ug]ù¼¿Û„æ]l×,$òsYlUžT;Å4}%ŠšÖþ⼈Ã[­ÈÎjŲüQ±¼TÅBÑSNβ_µÒyñê•ñ”:dƒdôrãP0=¦”ìøoŠFñ*JÇ-Ä2ذßsሿVµèO[Ÿµ‰JN…½àc>³Ñ8Q‰Ê‚BÙìHóüV7ŽËЪKÓñÍ£¡‡‡Œ›A˜Ø2¨´Mm…þãÓù×/‡¦íéÜ2­K»[¥·wW*y¸Ò_Ýû4Œ endstream endobj 1666 0 obj << /Type /Page /Contents 1667 0 R /Resources 1665 0 R /MediaBox [0 0 595.276 841.89] /Parent 1682 0 R >> endobj 1668 0 obj << /D [1666 0 R /XYZ 90 757.935 null] >> endobj 1669 0 obj << /D [1666 0 R /XYZ 90 733.028 null] >> endobj 1603 0 obj << /D [1666 0 R /XYZ 358.095 705.441 null] >> endobj 1670 0 obj << /D [1666 0 R /XYZ 90 688.38 null] >> endobj 1604 0 obj << /D [1666 0 R /XYZ 400.652 655.622 null] >> endobj 1671 0 obj << /D [1666 0 R /XYZ 90 638.895 null] >> endobj 1605 0 obj << /D [1666 0 R /XYZ 308.767 605.803 null] >> endobj 1672 0 obj << /D [1666 0 R /XYZ 90 589.195 null] >> endobj 1606 0 obj << /D [1666 0 R /XYZ 431.646 555.984 null] >> endobj 1673 0 obj << /D [1666 0 R /XYZ 90 539.257 null] >> endobj 1607 0 obj << /D [1666 0 R /XYZ 261.455 506.165 null] >> endobj 1674 0 obj << /D [1666 0 R /XYZ 90 489.557 null] >> endobj 1608 0 obj << /D [1666 0 R /XYZ 413.354 456.346 null] >> endobj 1675 0 obj << /D [1666 0 R /XYZ 90 439.619 null] >> endobj 1609 0 obj << /D [1666 0 R /XYZ 261.455 406.527 null] >> endobj 1676 0 obj << /D [1666 0 R /XYZ 90 389.919 null] >> endobj 1610 0 obj << /D [1666 0 R /XYZ 421.991 356.708 null] >> endobj 1677 0 obj << /D [1666 0 R /XYZ 90 339.981 null] >> endobj 1611 0 obj << /D [1666 0 R /XYZ 308.767 306.889 null] >> endobj 1678 0 obj << /D [1666 0 R /XYZ 90 290.281 null] >> endobj 1612 0 obj << /D [1666 0 R /XYZ 440.233 257.07 null] >> endobj 1679 0 obj << /D [1666 0 R /XYZ 90 240.343 null] >> endobj 1613 0 obj << /D [1666 0 R /XYZ 307.661 207.251 null] >> endobj 1680 0 obj << /D [1666 0 R /XYZ 90 190.643 null] >> endobj 1614 0 obj << /D [1666 0 R /XYZ 412.986 157.432 null] >> endobj 1681 0 obj << /D [1666 0 R /XYZ 90 140.704 null] >> endobj 1637 0 obj << /D [1666 0 R /XYZ 311.537 107.613 null] >> endobj 1665 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F8 1123 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1687 0 obj << /Length 1338 /Filter /FlateDecode >> stream xÚåX]oÛ6}÷¯0 šá—>¬Öµ ZlKìÁ Zbl²äQRÒüû]Ф"§ŠãÒ¢/ERW÷Þsν¢q°pp6{}9;yGE ˆi\^ILPDIp™Ë0BÏc¶rµÓÛù‚F8¼hu—µv|®®•ž“4TU¦`*Å1i2¿ºü0{{9ûgFà]8 ½í(A ‹‚l;[^á ‡ùFL¤Ám¿kpÊàZ³?gø Ÿ”!GÞO(bÜùš×ݪTÖ¿f÷ ü>=Íç$ oåœFáÍœàPIž‚y<2ƒIPL¹µþ7ްÝÅÇ»b$…½ýžsÕvºRù„5£D¿ŒëÙ¥ ëüÈÖÁKçy}m¯v=ë:—ý[ã>øŽÝîRUëvãÖ ?ÒªÙ)R[Û«,ôÓ6–y±UUSÔU©šæê¥{´Êí!ä‚#²à¸"‚£ˆˆ}X¢C°xÆÐ<$&¶nŠLùì›üèFN&ÇN>â ¡@wêßr+oT{·› Ž%'co&3L1G©˜Nqü%Ì7÷vTÖ?ûµ*ý‹Š¦-²1ÀeíÃø¿ }r‘!ûpù^ˆòÛ“‰{b»@Q<øðâÅ”rÀ–`~Ë dê1[¬OüÓÒIQÍb ¨ô˜êôÝÈå¨ ÿ-éD£“gïÕ?®>8> •jåó€CÅamÀz¯ æx='á>µÙgÔ†GœB`t¯¸éÒO~¦˜í“Ð\n-`ÒÄœÕUÓʪ}iƒJÇ1Ѥû ^Ù„ŒÁÆ("ÃŽl"18äÅH’±°Ý(ë ¸o³ è¦aN‚Dä`ö•£,ÖWŠêAïÅ&ÙÇiO’ˆ"QŸ7ú |“¡òæd;’ù` œORÎï]Ð$ ɾâbpûÕÀCAÇÊþë¡/ów›³õÞ V”2ý¨âI Šçl,êÀjFǼ۬QZ;ïù;1é(™˜M¼/AüþKØ?dãÄÁùÇÝ—ZÉüj"% C$Â#úÿˆ!XøÞhDp8㚤æ€Ã<¼Ý¨ÊÎËÊjm‡À‹¶kìrÑØ9íßÜ϶??$Æ@©V•{2i¥}‚.¯k½…ÊS»÷ÉUݵޚ²"÷½v¬qëÇž;ê7ÏìÉ\¯Ýýül,Gp´ñš¤ö¹°ØC9Xí‰õPš7†‚u‘OP…b„q4Á”ýZ6bÓNæyQ­ï÷««L]Õ5*W)]È¡²@ú”nýúu­½bŠu§7Gé]§wu£œtà@w7£ùH¡+_âýðΠ×òŒ‹½ŸÎNþ ØÕl#'õbäŽÙ—dôòÐØ6ë啵½°— Ç13¶Ü‚1IJ…£)ô9¹6Á™‰·–—fŸYs Ü6´~V¶ÙÆM™ÆaŽÁ}*`ÇRîXPCüe§ügãÀn“u]»›’™ûÚ¼îªÌ÷Pßà{¥ˆ¹RÔ·†iVŦ=²¯©?ž]~»U í«K _X©ù ∤ÉWþ6ÙÇ€UÌÉòrž+WF1])K[-«f¬sCU©åVµÐ‡ÐDÅ| ÀŸŠ*+»\M´šˆA} á϶è Âo€(Ñf (M3¿ìÕ…‡ÿùÅ)P{üËÏÿÕ#‘€_ö¯¾ }äõ§*¥å mŸ ?üàá¤ZÙ›Ø^>åä4JìÅ„::š½¾8üõÛÅïï_Û1ï6£•;꼩?Ý­¡Ú?ˆô_Ö R" endstream endobj 1686 0 obj << /Type /Page /Contents 1687 0 R /Resources 1685 0 R /MediaBox [0 0 595.276 841.89] /Parent 1682 0 R /Annots [ 1683 0 R ] >> endobj 1683 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.157 280.199 194.318 290.729] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 1688 0 obj << /D [1686 0 R /XYZ 90 757.935 null] >> endobj 1689 0 obj << /D [1686 0 R /XYZ 90 733.028 null] >> endobj 1638 0 obj << /D [1686 0 R /XYZ 489.737 705.441 null] >> endobj 1690 0 obj << /D [1686 0 R /XYZ 90 688.714 null] >> endobj 1639 0 obj << /D [1686 0 R /XYZ 303.796 655.622 null] >> endobj 1691 0 obj << /D [1686 0 R /XYZ 90 639.014 null] >> endobj 1640 0 obj << /D [1686 0 R /XYZ 454.928 605.803 null] >> endobj 1692 0 obj << /D [1686 0 R /XYZ 90 589.076 null] >> endobj 1641 0 obj << /D [1686 0 R /XYZ 307.661 555.984 null] >> endobj 1693 0 obj << /D [1686 0 R /XYZ 90 539.376 null] >> endobj 1642 0 obj << /D [1686 0 R /XYZ 434.146 506.165 null] >> endobj 1694 0 obj << /D [1686 0 R /XYZ 90 489.438 null] >> endobj 1643 0 obj << /D [1686 0 R /XYZ 307.661 456.346 null] >> endobj 1695 0 obj << /D [1686 0 R /XYZ 90 439.738 null] >> endobj 1644 0 obj << /D [1686 0 R /XYZ 196.052 394.572 null] >> endobj 1696 0 obj << /D [1686 0 R /XYZ 90 377.844 null] >> endobj 1645 0 obj << /D [1686 0 R /XYZ 358.095 344.753 null] >> endobj 1697 0 obj << /D [1686 0 R /XYZ 90 327.692 null] >> endobj 1646 0 obj << /D [1686 0 R /XYZ 230.89 235.774 null] >> endobj 1698 0 obj << /D [1686 0 R /XYZ 90 221.105 null] >> endobj 1026 0 obj << /D [1686 0 R /XYZ 90 201.557 null] >> endobj 150 0 obj << /D [1686 0 R /XYZ 90 186.987 null] >> endobj 1685 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F8 1123 0 R /F11 1076 0 R /F14 1078 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1734 0 obj << /Length 1248 /Filter /FlateDecode >> stream xÚÕX_oã6 ϧð£\t’,Évo]‹»[ì`í¡pb51à?©l·Í>ý(KNb7m³&¹vO–)‘ü‘")JØ™9Ø9|>ŸÑÐ Q(¨pÆ·Nˆ_Ä)qƱsårDðpD0ÆnM*Ž(Çîe¥êieÆ?ä­TC¸2ŸJ X0—ßãoƒßǃ»]Ø!lî#ßãÎ4\ýÄN ôoF^8ͪÌaÔƒoê\þàqRaÁ ÎӍРœ³D¦qÙhoÙoð˜8#J‘hù¯)åçjÄÁè$¯,Y[ f֔ͭîc/šuXW"°3"…œì©ãââ?Ÿ¶áJ `™a#žÐó˜O[¶ïÛqA*jÑÑ÷B—E‹]ð½â½¸¨'©ÜÑ öý=1NÕýr7JŸAÊ8â,ÜÍ“ÿéîhA1ã¬åMòX wŸË1âùŽ- À©¯æf>=nî/¢8NòW Ì»åX)óR ËŽ‡p?|ˆe ‡×/-o@i¿R2Û ë+-Mñbè?LK©Tï$ï&("žØ×°žŽµA"D*Ùͯh²›‹C”Š—üy\ JYÝ«áñÃ}{Š›{²o=>ÀWÚžq:g7ÿÆÇ[Þ©õ9¸o÷ÂûX¾s<éÓz½ÜFÃÀwFÔú­o¥ˆØ{马¢$•±¹þÊrª’E•¹AÝÑ„2äAd5rÆskZG% Ïx‹Ñ^{ŸÊò8òøº²7búÐ|æ)/õŸ€l¿-T5ˆši%ïêDiÀzº* µRQ^ê•–M†»u©V(x*É£J–h8â^è~]«+“²²êŠ[K•JƒÐÀaÇÂ!8‘€3¹°Î—ÙD*ࢡçVóH_çCæfuYÚDš/Td35Y¶‹¥!Ôp@Ò5æØøˆu¢’ ä¯4Kîå¶mÒÇ7K'Fj”ÇFQ*ŸBT¡g²¡çþýÛå_¿˜±*ê*Éei–<ƒ˜b†[aQCÏweU«\ÆÛb€!JÈ&pdΈáJ¬Çí#Ãe‘I¥z“ô×à„AUUãK³ôQX/iÒF6ĆlÔOsK¨Õ¢(Ótã4‡|°ŠZÇmÊÝJWB`7-Sž.‡‚»hKrà-™Hm&6O/6 ‹iIHƒ6ÛÔã›|«Ö'¢qH“m''ë^éiƒke+—ãóD%÷º:CtÀí&pHH!×ÌÞ™˜ÒSãyRš9«£¡š¨×#õz¶‰)MÐ ª ÿHUÊÃ\ær­Sµ:õßÒ,ÖÜ0Ï­¸Û"M Íó`os=¿z„#ïPu “±èVZIk…Mé&¡Ê!ŸôBp[Òz¼…é<Êg2>éž«·2q¨ÂÛÏŠ­½Çëݼè-æåŒã;tßÚ'ƒ!/ªvž¦ËÖɲ—6ºé­ýÔU ƒ\Fù['Àâ­€û]9´O¶·lGP´½Õ:†EOšƒ:„þ¶€š»¾_·ïÖ…>d‘y·æ!âÜ–¯s($ Žô¸-¼æ{ÑδÇåÄüó!ø„‘î›?Š µU]¯m³yuîÁ˜5oø›áxZ<.gæ$Þ´ô_ ½˜Û endstream endobj 1733 0 obj << /Type /Page /Contents 1734 0 R /Resources 1732 0 R /MediaBox [0 0 595.276 841.89] /Parent 1682 0 R /Annots [ 1684 0 R 1699 0 R 1700 0 R 1701 0 R 1702 0 R 1703 0 R 1704 0 R 1705 0 R 1706 0 R 1707 0 R 1708 0 R 1709 0 R 1710 0 R 1711 0 R 1712 0 R 1713 0 R 1714 0 R 1715 0 R 1716 0 R 1717 0 R 1718 0 R 1719 0 R 1720 0 R 1721 0 R 1722 0 R 1723 0 R 1724 0 R 1725 0 R 1726 0 R 1727 0 R 1728 0 R ] >> endobj 1684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 697.247 143.858 708.151] /Subtype /Link /A << /S /GoTo /D (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) >> >> endobj 1699 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 686.353 137.771 695.2] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1700 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 673.402 143.579 682.248] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1701 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 658.393 153.541 669.297] /Subtype /Link /A << /S /GoTo /D (structtabprm_29505cdf78fb12ca5951295fc16f4819) >> >> endobj 1702 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 647.499 172.65 656.345] /Subtype /Link /A << /S /GoTo /D (structtabprm_1ef3d0af652bb59fb838a6b01bb133e2) >> >> endobj 1703 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.972 634.547 179.952 643.394] /Subtype /Link /A << /S /GoTo /D (structtabprm_fa6969fd752bb4e3823e8facf86bbd60) >> >> endobj 1704 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 621.596 175.668 630.443] /Subtype /Link /A << /S /GoTo /D (structtabprm_cee8b63d1691f1f531a1bb4854c6bf4c) >> >> endobj 1705 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 608.645 138.319 617.491] /Subtype /Link /A << /S /GoTo /D (structtabprm_4263d73c71a9a5e77643f572c483b7ab) >> >> endobj 1706 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 593.636 161.013 604.54] /Subtype /Link /A << /S /GoTo /D (structtabprm_0777c3de4601874221031a8ad37eff95) >> >> endobj 1707 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 582.742 157.965 591.588] /Subtype /Link /A << /S /GoTo /D (structtabprm_dc7e170dba47f4e6d40afabfdaecfddd) >> >> endobj 1708 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 567.733 146.349 578.637] /Subtype /Link /A << /S /GoTo /D (structtabprm_48cbe51ee26f0615036308fe72768403) >> >> endobj 1709 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 556.839 172.351 565.685] /Subtype /Link /A << /S /GoTo /D (structtabprm_77130658a6e330e0edba348d1dc7edf2) >> >> endobj 1710 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 543.887 184.924 552.734] /Subtype /Link /A << /S /GoTo /D (structtabprm_ade738f7269d71d34fdf3d52f1c61d88) >> >> endobj 1711 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 530.936 167.08 538.657] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1712 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 530.936 188.101 538.657] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 1713 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 515.927 156.59 526.831] /Subtype /Link /A << /S /GoTo /D (structtabprm_8572ca79676edfe06b3d1df00f93384b) >> >> endobj 1714 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 503.952 150.503 513.88] /Subtype /Link /A << /S /GoTo /D (structtabprm_e19ca756ab2190f5d5ced59ad0a1a4bc) >> >> endobj 1715 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 491.001 148.839 500.928] /Subtype /Link /A << /S /GoTo /D (structtabprm_36adcba673ae8ede86b80f7e5111e0ec) >> >> endobj 1716 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 478.049 153.82 487.977] /Subtype /Link /A << /S /GoTo /D (structtabprm_71057a73168d71019b0caaa203fe5a05) >> >> endobj 1717 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 465.098 156.311 475.025] /Subtype /Link /A << /S /GoTo /D (structtabprm_5c62c8fd3dc6e9a3c928be9a1ed81ca1) >> >> endobj 1718 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 451.17 166.274 462.074] /Subtype /Link /A << /S /GoTo /D (structtabprm_9d2c36c4cfb17532ba5f08cbd90a5785) >> >> endobj 1719 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 439.195 185.382 449.123] /Subtype /Link /A << /S /GoTo /D (structtabprm_bf7f932bcefad1f0e371167971018965) >> >> endobj 1720 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.972 426.243 192.685 436.171] /Subtype /Link /A << /S /GoTo /D (structtabprm_1ce970a854c9976d8b3e4e26df102b3b) >> >> endobj 1721 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.972 413.292 192.286 423.22] /Subtype /Link /A << /S /GoTo /D (structtabprm_43276034ba8e0954a6e2632117cd0afd) >> >> endobj 1722 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 400.341 188.401 410.268] /Subtype /Link /A << /S /GoTo /D (structtabprm_c05f0ad36debbabf441ca8d8aac59a96) >> >> endobj 1723 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 205.2 158.522 216.104] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 185.275 156.859 196.179] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1725 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 165.349 166.821 176.253] /Subtype /Link /A << /S /GoTo /D (structtabprm_29505cdf78fb12ca5951295fc16f4819) >> >> endobj 1726 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 145.424 169.332 156.328] /Subtype /Link /A << /S /GoTo /D (structtabprm_1ef3d0af652bb59fb838a6b01bb133e2) >> >> endobj 1727 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 125.499 171.653 136.403] /Subtype /Link /A << /S /GoTo /D (structtabprm_fa6969fd752bb4e3823e8facf86bbd60) >> >> endobj 1728 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 105.573 172.351 116.477] /Subtype /Link /A << /S /GoTo /D (structtabprm_cee8b63d1691f1f531a1bb4854c6bf4c) >> >> endobj 1735 0 obj << /D [1733 0 R /XYZ 90 757.935 null] >> endobj 1736 0 obj << /D [1733 0 R /XYZ 90 716.221 null] >> endobj 154 0 obj << /D [1733 0 R /XYZ 90 386.767 null] >> endobj 158 0 obj << /D [1733 0 R /XYZ 90 305.336 null] >> endobj 1737 0 obj << /D [1733 0 R /XYZ 90 283.024 null] >> endobj 1738 0 obj << /D [1733 0 R /XYZ 90 283.024 null] >> endobj 1732 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1775 0 obj << /Length 2511 /Filter /FlateDecode >> stream xÚíZmoܸþî_¡Z Ë’Ô»ƒèµIê»Ø—ž _Phw¹^!»’OÒÆöýúÎpHêÅRÖ9ô>臄¯‡Ï<œáš{w÷ÞŸ}wsö§w2ó2–Å2ön¶^ƽ$,’»Ùx·~Ä_,çÜoóÕ}}X,eÄýë¶>®[ªÿ¤¶ª^ˆÔWåZAWÊãЗÙâÓÍ÷gooÎ~=°÷„–%, "o}8»ýĽ ôïqd©÷ g¼PPî½ë³œñž|¤§ #ÒófW4‹eÀ¿)îÊ|oíNQ¥(‹¶È÷Åoy[T%öÅ~]Û¢T¯´¦¤b}gtýéý™w» ¤Äm7ªý…Gþ 3—Ô‚u_()ü¶¢ejµ®÷ÇVÑ nùZµÇºTjÔa¥j£bµíTá£óâ€IÃrz›æ h^ßT”Øi>6·±%Ø›Ià-…`Y9ÙóÕ'ýPì÷t浂©Tý…ó ¿£:šË¢Üë­ {wykkxJXÛ妲Rª¤Ú¦*›05ËÔüøáí_®ßÂ'qì_ý¸¹óö|Â"I†“Ö"NKøªÙUÇý†ê+Ô1Ôèí@‡Þ”KAåÃô›ˆþ"_ºfíÂõ¦aæ:ßï•Yx[ÕfÁ¢ ¨(ë¦%}Úâ Fs*îóº-ÖÇ}^OÁED,N³“pp–q1D@c½Zp„TVõFÕTÕ¦ÑCÆ—µÎUýdêy™ß©ƒ*}ká_y‡ccj?^}X¡øÿ¢æÊH96Ú4¸¤Yš,•Î2ýÕ'ë/`jýP4Úƒ4`pW1íʩ۫ü³Þ!rX>îÛä (Œ:.d’IÇEiQ­­|~~9aèx%ï‹…Œü/ ùúúˆµ*DHºçêˆTafmÝz É} ݱ®à”ŠÒ9\þ¨…7Ì™U0»¸Ø~ Îâ$œ¹³°'¿‡ž2PqÚÜbpEi:\DtXŒ¹¶Zn}ìøÖ…_Võ¼ê‰&®zëêÊ:o”1&ª¹ÓGEdÃh¸€ð/id[W‡Á&¬Œ¿à)æû£±ù}Þ9ú4hb¹.§b{,׻ةïλ£õØÞÍÎ ›#vœõ²2r›#0ö¯Gøpo°|¨6ÅöÉ®þrL=LëoDØû&ŠY¥}*œ°0‘Câ9?ÿaŠ{àJË‚“~…Rû–C¿Àž¨ªÌ0Ú[—h7¬8ˆÂÀW{ÍGFâ–Êœ ZmÝÚ…ìð^•wín»zµ¾Û÷ዃ»ª1ʘõ2E:"‡Q¡ŒõEŸÓYš„Ö°Æ ‰³, ROYKÄÂÌXSLH aVæõ&½†#‡‹fB ,…;¤/QNKL&ž»S¼'T &21zùÜ")Kà/ÔrÐC1 ò36Á «¶®g]‡N°1çnÄ3Ãϵ®ím‘—›áG*_ï\Ô£PìcQšx¨¯(ò‰Ž— gQ<Âÿ×I9;IÊ©!åÌ‘rjH9‘rzŠ”³YRN{¤œõH9’r: åÌrjI9rêH93¤œ9RN-)g€Rݶ¤œÍ‘rï þ· 9üƒùߟ¢ähÌFá Ñ`pyÆûâ EÇ#y™%™èôóÀ¨Žµ±¡s&‘™$ :kcñ66tŽeNEŸµQ‚>ÅÚzÕ9ÖÖƒ:SÁÚF¡6%2„Öq!|R3ð4Õº°y$Ì]©öA‘¼¥LàÓ*urAæ‡E¬ƒklÒÖ¡r¹Ü@À_6° ˆÍ÷ÔÛ§!lt£<1 ÉảÎô2œ8P.à‡ 9zFøMb.Í9ƒvš$Ô¡¶& ëóŽ*jS˜­Æ†Qjð0²j°$%¬ÏXÚRs÷ñ<›7¯¨ñxûiîëÛO¯,±¯E˜ë¦hZC*˜°Íó+Åï²ùZ¢ºœÑÈǹG‰É¸ÿgâÙÔn9µ[NEË4²®Ê6/Ì|ÚvŠ<©‰>ÀWë 8¢/Ãtdjh»ØG·H @ü9â’2KÈßÑÊiB¤ŒÊý§È¶G}L½¾T"éGR_*¯\_IÀv·‡¥øDýoÞPYè܆)µ†rP=F#tâN¼ð¯ŒƒïÔsp4:ççà!É)7Â;©˜â{&“ð›¤\!.iwa¬>f¶IÁKÏ|ï.n®ÉÕ3ž&CsF€èàæÉ`eÓ @fâ4øÄU$9ÜEN·ÿ¤)A?ò“éÈ„’n¿ƒ ºfgä&Ju l&,É[…q'p7jb¶(eBÙ=‡ú{…ùʃ겋æ0Kðª ÃćÛÇ·ªÖ¾‚]ƒû# Sz‰Àz‰ :|§5 …™yÂ. 2sô@3T•û'3ŽÛ˜¥¨@xÖàŠ¤)¦­eKd£:hiéój;ålCz” 61¬K¹Fä;T˜|-i/£PoG.© “¾ æÖ~˜—T:¿5ŠvGµ«©Ä)”,J"þ<ã4$„U¨5ÞðûªiŠÕÞ, q 9JyR4zBèÁÒ—ãY£fŸJÇÇñUú´¼h¥”ØOUŠS⦱ËÇ GÞ…a_dHª¡—r£ÛέZx:w ЩÞìUÓ éýeO!63*^îF&ÜÝTG´ósLM2¿#â]׈Õ/ø0÷Dì› Æ³øÅÁoú¢àwû⥋}¥ ÝSªyâ ‡OœÝ±ãÛæ–fäÔìǾØMÃÁÉØW¯6û¢ óbÑ[¿¡ºX ÿ&ë’]šÔA`6 ÞÚWNFÕJóâÚ>¡”•ï»8j”a?KÔ¿í)ôEPŒ¿Š3pÆu7²5>îq‡pï&ÉŠÃPˆ‡¡ —3ìÔŇCìu8ÄÚgäÔìã»iXœÄ¡^u‡Ý:HWëÙ í–m†jÙ÷žgOJ“XüÿSÛï{j³È—pAÓÅ>£'°þó»QêdFÓ½÷“ dg_ÎÜÓL¾ÙÔtaõˆbŒY‡¿²äöWÌ4Ï60zÀÿj´2¸ßAíÓoª®lÞÈlÇ–:pMàÀ¸Ð°K!tO0Ëe‰6暸=À-sŠN±ä¯'̳ßÇLB>Ntã~ju%ºÓ}­Zû*f_Á6j«oG{Ž2ÿ‹[¹ýlwCÅç׉㿈S–˽ðOìŸ2tn"¢ŒE‘Ê{Uª:w›·¯}—¶ò±¬VÔˆMøÏÏCq%Ô’\Hs5á\ §Ÿÿzýáâ;ª‡úÏ%4> NþV=>ݹŸÝNÿ§mB endstream endobj 1774 0 obj << /Type /Page /Contents 1775 0 R /Resources 1773 0 R /MediaBox [0 0 595.276 841.89] /Parent 1682 0 R /Annots [ 1729 0 R 1730 0 R 1731 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 1771 0 R 1772 0 R ] >> endobj 1729 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.081 719.912 274.951 730.926] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 1730 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 707.957 120.874 718.861] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 1731 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [282.396 690.333 313.718 701.346] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 1762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [98.235 599.228 129.557 610.132] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 1763 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.844 599.228 251.406 610.132] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 1764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.715 537.704 442.327 548.607] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [98.315 508.124 129.637 519.028] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 1766 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.398 508.124 251.961 519.028] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 1767 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [320.724 446.599 365.336 457.503] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1768 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.165 422.689 447.805 433.593] /Subtype /Link /A << /S /GoTo /D (tab_8h_006d6e8cb373e0dc3e9ccf128adb9411) >> >> endobj 1769 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [465.18 422.689 499.819 433.593] /Subtype /Link /A << /S /GoTo /D (tab_8h_aded7db92aa2758198b33f35f5f18d6e) >> >> endobj 1770 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.337 260.47 354.949 271.374] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1771 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [330.941 198.945 375.553 209.849] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1772 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.783 186.656 304.731 198.612] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1776 0 obj << /D [1774 0 R /XYZ 90 757.935 null] >> endobj 1739 0 obj << /D [1774 0 R /XYZ 196.021 669.575 null] >> endobj 1777 0 obj << /D [1774 0 R /XYZ 90 653.098 null] >> endobj 1740 0 obj << /D [1774 0 R /XYZ 435.83 590.426 null] >> endobj 1778 0 obj << /D [1774 0 R /XYZ 90 573.949 null] >> endobj 1741 0 obj << /D [1774 0 R /XYZ 434.963 499.322 null] >> endobj 1779 0 obj << /D [1774 0 R /XYZ 90 482.844 null] >> endobj 1742 0 obj << /D [1774 0 R /XYZ 132.958 313.193 null] >> endobj 1780 0 obj << /D [1774 0 R /XYZ 90 298.772 null] >> endobj 1743 0 obj << /D [1774 0 R /XYZ 338.516 251.668 null] >> endobj 1781 0 obj << /D [1774 0 R /XYZ 90 235.19 null] >> endobj 1744 0 obj << /D [1774 0 R /XYZ 90 89.441 null] >> endobj 1773 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F8 1123 0 R /F11 1076 0 R /F7 1124 0 R /F10 1521 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1798 0 obj << /Length 1785 /Filter /FlateDecode >> stream xÚíYKsÛ6¾ëWð(M, À—{jÚÚ㦞IÏôàz24 Ëœ’„ÂGlÿû.^$(S¶â©“K/ƒ‹Åc¿oXaoãaïtñîbñöÄO¼%¡z7^‚½($(ð‰w‘{—˼ZŒñ²K¯·MµZû^~êš>ëtý#¿áÍŠÄK^gºb²%Å««‹ß¿],¾,Ì…=¢tŠhàeÕâò {9ôÿîaD“Ø»SR•Ç| eé}Zü¹ÀO®Ó§‡Á¸Nä£È¬5ýuÉåÞž挋( }JÕ¨¿1¦Zh¢^öej”©uÚ´iÒ‡U,Ì€†Ã·Ü|l­:Ñonu½0SÝñƨȹ\Pí ’h°æ´åÛÃa'&rã„ ÂF¨Uû7†\‡Ø¬óòýçó+„”þü«Ëó«ŸæìBc䨋PG£]ZÎÍj$(›AçÇÓ…w¹öi0XüýdÑ£1([ˆ£Õšâ`yWtòä0uÀðñ\·óŒÐ¢Öͯ+?€£}(ê»Yy2Wf‰VXEi§EŒÊÀª4†mõWeYèMu1˜qE–ÜÎI`PÖ‰ÆH6jë°Ÿ5v˜CnAÀš*uWlzѷ僱n­ËŠW¢Q¸@3œ•ÔG$a>Ɔ…E£=Û:›16$ 'ÑGÞõÄÙcm4‘"Ñdy±Š]ZêfÝW׊VÌpú&Œ€öxŽ­îPg¥1ÐÎf9¤>]scrG|Ûˆ\:Pí ˆ»j£ˆ Þ罉¼hl‰±ÀI!f›Ìèa •xŽÐMþD“?£)DÄŸh:£†‘.BÛ2ê vôû¶L&8Ÿ1TŒbFÝ žaéša˜#4¦nz–´‡6ÙØmšçÒŽ¡ögC™¾î[K,Ãÿ"UþL«åÍàXo„qÇiYlêÑoûf+ZnÜ®¨KMA…çý»š†Å!†Ëm=ŠðM^[ðp|Îù†1Jùö ø|¶ŒQ6d`T¥dš¬ Q6†À(’ì²LuáúJ÷sÉë ¸ø½CÍfŽã||êãÝ-˜o2«[E™òZŒÃ¢åŸá`³dá6€g¢ix»u®‹‚RÎåú‰ë—@•¨E'ê"³3ˆîí0LÚè ‘‡k‚¿ŸóÇ‚kò¹v`H^ †[ü#1&ƒxÝV0 ç¡ Cèå¥ Ñ‰ÐVPƒ2Õ²$Ÿ@¢œÐœLðŒŽ.E™­(õÅN~Qh”nÆ|vv°’ó7GUmûìÖÞScíØ9I‚ÆÔ±v4AàµÀb@̔ՌUà‚Æž#t4½«îÜFí…æƒ<çtkïÔgggGS®ð/½º%8n‰Ÿ-¾¬®tó.ÈxMóÄÝÒ '9/»t7TÚ92­‰Q’$óœòŸ}òÄ(ÄÁKh5,òÑ“'D8ŠþgÖ+0+üþÌb‡0‹}fíµÀާß!Í~.šEŒãÖô2Hèëq‹ßw:iR=ϰW|ž“X€†²FLÍe:ÆÄ4ÆÄ4Ôc Ê´6¥¨¡†Ãm%or«´*ê¢ê+;>7½é½í¥æº\ö|:O³ÛýñèéÄÇ.§]‘ zÕªÖ¹Š»õý¨¼ÉèØ“7‘P˜M3'¾Ì›üwi“ˆ=÷S2êì 2" ¢Ú+@§‹Ú<´”9"›ÊEhŒ¦ŽL&d¥`šj wäÖaúÄöá᛼䅽ãI2ñCÂçHeAåjœ-(ÐRÆtŽËE­Á½L( Gd¤ãóm×øœ¼~ØA#³˜nÚ1×g_›¥ÿô[óÖìë¬S }î²Òú÷Òøöµéšõhê¿Û-·k³Ó8³·*”Ÿ²v£ýòé³wºÎTJÉõC¿Šû‡þ?ÃÝé¿-«¢H endstream endobj 1797 0 obj << /Type /Page /Contents 1798 0 R /Resources 1796 0 R /MediaBox [0 0 595.276 841.89] /Parent 1682 0 R /Annots [ 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R ] >> endobj 1786 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.381 649.605 150.33 660.508] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1787 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 575.875 131.952 586.779] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1788 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [332.609 476.237 377.221 487.141] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1789 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.239 414.463 383.851 425.367] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.407 402.508 463.529 413.465] /Subtype /Link /A << /S /GoTo /D (structtabprm_77130658a6e330e0edba348d1dc7edf2) >> >> endobj 1791 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.239 352.689 383.851 363.593] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.559 340.734 400.277 351.691] /Subtype /Link /A << /S /GoTo /D (structtabprm_48cbe51ee26f0615036308fe72768403) >> >> endobj 1793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.772 226.276 150.72 237.233] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.08 214.321 390.719 225.225] /Subtype /Link /A << /S /GoTo /D (tab_8h_aded7db92aa2758198b33f35f5f18d6e) >> >> endobj 1795 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.157 152.92 194.318 163.451] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 1799 0 obj << /D [1797 0 R /XYZ 90 757.935 null] >> endobj 1800 0 obj << /D [1797 0 R /XYZ 90 733.028 null] >> endobj 1745 0 obj << /D [1797 0 R /XYZ 219.184 640.802 null] >> endobj 1801 0 obj << /D [1797 0 R /XYZ 90 624.075 null] >> endobj 1746 0 obj << /D [1797 0 R /XYZ 139.255 579.028 null] >> endobj 1802 0 obj << /D [1797 0 R /XYZ 90 562.301 null] >> endobj 1747 0 obj << /D [1797 0 R /XYZ 327.378 529.209 null] >> endobj 1803 0 obj << /D [1797 0 R /XYZ 90 512.482 null] >> endobj 1748 0 obj << /D [1797 0 R /XYZ 424.891 467.435 null] >> endobj 1804 0 obj << /D [1797 0 R /XYZ 90 450.708 null] >> endobj 1749 0 obj << /D [1797 0 R /XYZ 482.498 405.661 null] >> endobj 1805 0 obj << /D [1797 0 R /XYZ 90 388.934 null] >> endobj 1750 0 obj << /D [1797 0 R /XYZ 482.498 343.887 null] >> endobj 1806 0 obj << /D [1797 0 R /XYZ 90 327.159 null] >> endobj 1751 0 obj << /D [1797 0 R /XYZ 503.754 217.474 null] >> endobj 1807 0 obj << /D [1797 0 R /XYZ 90 200.747 null] >> endobj 1752 0 obj << /D [1797 0 R /XYZ 198.901 155.7 null] >> endobj 1808 0 obj << /D [1797 0 R /XYZ 90 139.346 null] >> endobj 1753 0 obj << /D [1797 0 R /XYZ 184.156 105.881 null] >> endobj 1796 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F11 1076 0 R /F7 1124 0 R /F10 1521 0 R /F8 1123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1816 0 obj << /Length 667 /Filter /FlateDecode >> stream xÚÍ–_o›0Àßù–öñÎM{èšdëÚJK"í!­" N LdM¿}Mlª& QµÙ >[ç»ßÝŸ- ‘s6uÞ©@ N9š.r‚%hš¢™Ë0!^€û˜T²,½eàNêrÔFË…,=¹R%R/E¾®O¼Ûé…3˜:?¢}"[Û,Ä¡ÏP’;³[@©^¿@€}¡Ç­VŽêë1Cç›G9©³NÀnaWÊÒÕñÝC™÷ûùüª!Òfà•@=bNcå =ÂÜÂÆ©ÍÈRÅ™™­+i„BeOg.Öˆ5+vÍúFìÁ…Ýp×'‡‹ºà*Yÿ¹ݹûzj8 Ýpyüpr<Ò—è?ÜŸÍG{;5(í]©TnNèÜT' Ž”º(Êôo‚c´% ô½ýb'9HJìÂX”eË˜ËªŠ—–ì>Vi¶RKlLøQw°ïV*ÉÖ©uFÈ+MæãP·%0ŠØÒ­L£X¾?`)qDI«øñ@1uZöy´[Óó¸ŽMDÕÌÒíázi‰{©!®G)æmO¼¡”íìA³³gÃ,7]¹\Úö<Þ*4îª:®×»î^L4 ¤ºÆä7}èɹ*Ž;¡Ç$…ªìÑIîãÒ¦>x]D‚ Ú£ ~Õ^:C„´Ý¶X«¤^ê0k ú ¼)-ÿˆXo£™ü¼²»ŽyµÜߨ,Ͼš ÆãùÕd4¿\¦ŸowÔö†<‚Do}¶ïAŽE¨O½y긳ÿõH*YƵLۻʌW­0ô(så™p3è¤ÏB3£@¨‘n{Ñè°.¿œY_n`¤»'3ž›§¥Tû‘>¥¾½ endstream endobj 1815 0 obj << /Type /Page /Contents 1816 0 R /Resources 1814 0 R /MediaBox [0 0 595.276 841.89] /Parent 1682 0 R /Annots [ 1809 0 R 1810 0 R 1811 0 R 1812 0 R 1813 0 R ] >> endobj 1809 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 174.773 151.608 183.619] /Subtype /Link /A << /S /GoTo /D (structwcserr_417d725c2e5615c3fb73cc210e0ccff2) >> >> endobj 1810 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 160.74 158.802 170.668] /Subtype /Link /A << /S /GoTo /D (structwcserr_210814c32ace19b9d09e4774e94a3c3c) >> >> endobj 1811 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 148.87 199.738 157.716] /Subtype /Link /A << /S /GoTo /D (structwcserr_311c9994c1d3793b2c98d706987bcd09) >> >> endobj 1812 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 135.918 179.265 144.765] /Subtype /Link /A << /S /GoTo /D (structwcserr_278b3daecfc93a28c31750e6a6dc3718) >> >> endobj 1813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 120.91 152.147 131.813] /Subtype /Link /A << /S /GoTo /D (structwcserr_cf8ea013ae1dc84ed25d5ace5a0a7000) >> >> endobj 1817 0 obj << /D [1815 0 R /XYZ 90 757.935 null] >> endobj 1818 0 obj << /D [1815 0 R /XYZ 90 733.028 null] >> endobj 1754 0 obj << /D [1815 0 R /XYZ 184.156 705.441 null] >> endobj 1819 0 obj << /D [1815 0 R /XYZ 90 688.714 null] >> endobj 1755 0 obj << /D [1815 0 R /XYZ 184.156 655.622 null] >> endobj 1820 0 obj << /D [1815 0 R /XYZ 90 638.895 null] >> endobj 1756 0 obj << /D [1815 0 R /XYZ 184.156 605.803 null] >> endobj 1821 0 obj << /D [1815 0 R /XYZ 90 589.076 null] >> endobj 1757 0 obj << /D [1815 0 R /XYZ 184.156 555.984 null] >> endobj 1822 0 obj << /D [1815 0 R /XYZ 90 539.257 null] >> endobj 1758 0 obj << /D [1815 0 R /XYZ 184.156 506.165 null] >> endobj 1823 0 obj << /D [1815 0 R /XYZ 90 489.438 null] >> endobj 1759 0 obj << /D [1815 0 R /XYZ 184.156 456.346 null] >> endobj 1824 0 obj << /D [1815 0 R /XYZ 90 439.619 null] >> endobj 1760 0 obj << /D [1815 0 R /XYZ 184.156 406.527 null] >> endobj 1825 0 obj << /D [1815 0 R /XYZ 90 389.8 null] >> endobj 1761 0 obj << /D [1815 0 R /XYZ 184.156 356.708 null] >> endobj 1826 0 obj << /D [1815 0 R /XYZ 90 339.981 null] >> endobj 1027 0 obj << /D [1815 0 R /XYZ 187.245 306.889 null] >> endobj 162 0 obj << /D [1815 0 R /XYZ 90 290.162 null] >> endobj 1827 0 obj << /D [1815 0 R /XYZ 90 191.689 null] >> endobj 1814 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F11 1076 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1852 0 obj << /Length 1235 /Filter /FlateDecode >> stream xÚÍXKoÛ8¾ûWØ‹ Ô,¢$‹=´iŠÙÛØCŠDÛdÉ¥¤<þýŽDR–Õq›fwO¦Èá7o8;+;Ÿ'“÷§T8 ŸúÎbéì>Aœg‘8W.G„Ngcì>ÄåVm¦3ʱ{Y©:®ôø«\J5%¡+óXÂTŠÐetz³ø2ù´˜|›Ð…ÒbóŒ;ñfruƒæ¿81:­ÔÆñ(ƒß̹œü5Áí¤ aŸwvDŒ¥'²ŠÒL&Ú¾YÆ*ÝVi‘76îagF=Ä<¡qki„úÚXrme R©,FæXicİ9˜”—ú«Z7qbÄÍëTi¬g³PV<‘ïš¡çFf‹œî>Vu”鉤çU‹U,àÏîEʽæËBm"»»Ñ]QW?ÎÌ Qè93¦à&´¹¬ó¸ÙôN–E­b³t1ͤYЊ`¥¹YGï¤ÒㇵTfºƒ¶¾7ËS¥þXÉ\ª¨’ a¨cÑO›¬§©Ì,ÿE a†øÛ Øç\oì²'ÍMbkžçó¶Öåxî@føÔÓ8›àÙÔŽ:õ(*Ë"N‡ô÷CZ­õH‡‚ìѧª[ØÈ(Oó•þhÙnÖiÜ"Ȉ­Ì£²¥¶kɳÓQ¥G]„mdúÔ§šÎH]Ê}Æ’ATu~X ;¡m¤ª4®³H 3èh6;>Ÿ‘ÒäÖm^¼ÌÊùÏ$aǵR¶‚tÙ˜N)w(ÏwO{ ··çgŸnoM”ܪ"–@»AÞD±*PìÆPã1ÔˆÒ8¯#S_ˆ×óÌcˆðÐÖ8slÄ}‰X™ë{mŒ•múôÍ ÔÕ ÂÄ0êÖA8# Ôü€3ºÈhP㊠ژцÂDW—`r·…vNõe­S0×£ZÊavŸrXj)ß üôì\SËÊm|ÜSƒ“µKƒ£Ž3Çàå }Ę?Ö¾’y^góy—­Ñ‚¡‡£Æxÿ‚1†¸ç¦xS¸5emKŒØ”«µÁ8tfoÂÉÏ’}LF+¹ãJÓH-Y"að“ÍÒ‹íÈÇ¢PIšC}6§QEyÙ¿½u‘…ÃPIUYøýjø[šÇYÕ„ô$9CèªËï#XÐa;¦Ðz† †Ì#„ÏA4ƒÜ:‰ªHûÓ^ÝíuÛõ{A">쇄 ù¶¼¦”ö8W3n.=Ý´ jezѯ­€i]X´lí šàQ`›¼RG=¦åaô°Š¤¨ï29rÄXˆpì±Söb88u±Ú¦ãöÍ<ޏ'Ž ÄÛZ¹1ñ¿ d"³êÈXÝ7ž¯gSy¯1Ç#¶R¸÷}­­užVûŠõ¹åä* 7õƒÚ€½ã¢üæ¶WO[ùF¶ï2äûe'+òm‘É_Tx艪—õü”,«¥úöæþ4zô3tJ1ôo{7lï_åÐ1 6Ñxußÿ{Ƈ¬'á±ÿÎØe|$¸Žõ¿2\ ÎM³ñ¹{[êgƒiXþ´ƒÓ¦ É;ýáë‚ç™ó@QÜtTí¥‘µ=Ùß/ÏÏ>è1ô_xø;)ŸàY;ð<ýŒ/¢† endstream endobj 1851 0 obj << /Type /Page /Contents 1852 0 R /Resources 1850 0 R /MediaBox [0 0 595.276 841.89] /Parent 1860 0 R /Annots [ 1833 0 R 1834 0 R 1835 0 R 1836 0 R 1837 0 R 1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R 1843 0 R 1844 0 R 1845 0 R 1846 0 R ] >> endobj 1833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 255.233 143.858 266.137] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 1834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 244.339 149.945 253.186] /Subtype /Link /A << /S /GoTo /D (structwcsprm_70cac2976524a5f0a6aeb2b3fcb95834) >> >> endobj 1835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 229.33 173.457 240.234] /Subtype /Link /A << /S /GoTo /D (structwcsprm_adad828f07e3affd1511e533b00da19f) >> >> endobj 1836 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 216.379 162.388 227.283] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) >> >> endobj 1837 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 205.485 172.351 214.331] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de355cdce054938cfa36e06ef9c51446) >> >> endobj 1838 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 192.533 172.65 201.38] /Subtype /Link /A << /S /GoTo /D (structwcsprm_7a0a1ce2432cef9377f70367ea1fd18c) >> >> endobj 1839 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 177.898 163.763 188.428] /Subtype /Link /A << /S /GoTo /D (structwcsprm_a0ae3f3605566be2e85e51e5b52c3b52) >> >> endobj 1840 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 164.573 165.417 175.477] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 1841 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 151.622 175.399 162.525] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f8f679749574250cb9ba09e1f05fab5d) >> >> endobj 1842 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 138.67 172.63 149.574] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5e04127eb71da6e1350467a7a6d236f5) >> >> endobj 1843 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 125.719 171.514 136.623] /Subtype /Link /A << /S /GoTo /D (structwcsprm_da1b98589c0127d34766b4c6b5d6cb41) >> >> endobj 1844 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 114.825 176.196 123.671] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5d0b60efc55a61525b9beb26ead4859e) >> >> endobj 1845 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 99.816 143.858 110.72] /Subtype /Link /A << /S /GoTo /D (structwcsprm_0e31f1eef036258c2957da9b985945dd) >> >> endobj 1846 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 86.864 161.013 97.768] /Subtype /Link /A << /S /GoTo /D (structwcsprm_912eed291f15134e8cfb8750acc6c4bc) >> >> endobj 1853 0 obj << /D [1851 0 R /XYZ 90 757.935 null] >> endobj 166 0 obj << /D [1851 0 R /XYZ 90 733.028 null] >> endobj 170 0 obj << /D [1851 0 R /XYZ 90 670.034 null] >> endobj 1828 0 obj << /D [1851 0 R /XYZ 90 647.722 null] >> endobj 1854 0 obj << /D [1851 0 R /XYZ 90 647.722 null] >> endobj 1829 0 obj << /D [1851 0 R /XYZ 302.59 600.638 null] >> endobj 1855 0 obj << /D [1851 0 R /XYZ 90 583.911 null] >> endobj 1830 0 obj << /D [1851 0 R /XYZ 120.475 503.615 null] >> endobj 1856 0 obj << /D [1851 0 R /XYZ 90 488.945 null] >> endobj 1831 0 obj << /D [1851 0 R /XYZ 90 471.301 null] >> endobj 1857 0 obj << /D [1851 0 R /XYZ 90 456.73 null] >> endobj 1832 0 obj << /D [1851 0 R /XYZ 90 439.106 null] >> endobj 1858 0 obj << /D [1851 0 R /XYZ 90 424.536 null] >> endobj 1028 0 obj << /D [1851 0 R /XYZ 203.394 389.406 null] >> endobj 174 0 obj << /D [1851 0 R /XYZ 90 372.679 null] >> endobj 1859 0 obj << /D [1851 0 R /XYZ 90 274.207 null] >> endobj 1850 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F38 780 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1939 0 obj << /Length 894 /Filter /FlateDecode >> stream xÚÕYËr›0Ýû+´´¨z Y¦m2Í´‹&žéÂÉxdP\wx8;v¿¾ÂØmLÁ5îJBHœs_ºº9@àzp9¼»"ð çŒ‡w0dƒq&C1Y!4|öÓ¥ŠFahx—©•Ÿý[ù(Õ»CûRq×s‡”ŽÆ7ƒãÁÓk,ðîÛŒCNð£Áä@ß©ç‚çݬØ„ê6wƒ¯´ç‰Žø¢|1r M]À …Èaé{BØþ°L,¦%H ÖÅ›œ‘šï©ÝîæäÒ,×¾PÁÑêwWØ~éèxL¿)°¢5_,QåÐæä°l¹>‚øMÔâb‡ èQ|ZžEÜ L¼L«aP‘ØtÂhe”´Ñ(Úg]¯«Qj´e9žv.ÜNž YÍB™¿)Q¤.Dœw¤è5m™íE•d¢–Î'Â,\Äf|=Âl(C%;áøß…j¦¼0žØÇÃ@ÒQ0? ãUÔ‡òJ>D0´Ý®.”„u»ŠE\è1Ò^í÷ˆ¡*šîN‰yÆ"’UfÓ xÂIÉvÕÉ Ùç¤Tç¿•¤Û^X6‡_ 2)FDü¼2 ÿ²%ê9™¥½¢þ±J=®|Z-â¤[înƒýªûÚ ­%TY“&$Òs™TŒšò%™nÓì›éRúo€ª!ß""ö¹>)Klëgš¬”/ *rM¦Ê+MŠx–P¥u9¸^®g§83ÃuÕs63^Ui)ò‚þTUE¡‹;æðZ]YCâ’þäÑ:J¯kMóª2±ÙµÃxžm—•žíšÚzC‘õŒÙèêZL³±¤e2 gÉNg›æbm5Ó(ÖUbÇ”Q_²ñ®a¡ýF¦§j¶–±Î‹É"¨®ÙlN»þäA°¨ó9‹2èÙ¬¿=)\Äå=öÔ\ã{¾/ÃÖ|ô\ã|ҥߚžkœ>OȆB ¦NG',cå¹ç*Ñ´¿`iÜã¢iÎRNÑ4›EÚS)jâŸG4õÕr±9û3Ú9üÿ€¤Ȱ:ÿ—捻°Ûöjêpuæ@SwuÆ<Ș]@_ËX*‘É ¸%Kâ¢ýrè\ˆ®‘fŃS4]Øø‚ñ≠üî-ï=æsU<|{÷ùÓeÑ·!FEo¶-ÚÉf;—ljDKú ;@ endstream endobj 1938 0 obj << /Type /Page /Contents 1939 0 R /Resources 1937 0 R /MediaBox [0 0 595.276 841.89] /Parent 1860 0 R /Annots [ 1847 0 R 1848 0 R 1849 0 R 1875 0 R 1876 0 R 1877 0 R 1878 0 R 1879 0 R 1880 0 R 1881 0 R 1882 0 R 1883 0 R 1884 0 R 1885 0 R 1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R 1902 0 R 1903 0 R 1904 0 R 1905 0 R 1906 0 R 1907 0 R 1908 0 R 1909 0 R 1910 0 R 1911 0 R 1912 0 R 1913 0 R 1914 0 R 1915 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R 1920 0 R 1921 0 R 1922 0 R 1923 0 R 1924 0 R 1925 0 R 1926 0 R 1927 0 R 1928 0 R 1929 0 R ] >> endobj 1847 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 719.912 167.638 730.816] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 1848 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.608 719.912 187.564 730.816] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 1849 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 706.981 142.752 717.885] /Subtype /Link /A << /S /GoTo /D (structwcsprm_4c89dafecd036e169f96cb84d53ace65) >> >> endobj 1875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 694.05 159.907 704.954] /Subtype /Link /A << /S /GoTo /D (structwcsprm_42052d557bdef2c5640a6d19b6d9ed8b) >> >> endobj 1876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 681.119 166.532 692.023] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 1877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.502 681.119 185.352 692.023] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eca2fcc30058310d020181ae16bf256) >> >> endobj 1878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 670.245 162.388 679.092] /Subtype /Link /A << /S /GoTo /D (structwcsprm_fd2f31d782b3becce4ca2f9b495ec0b1) >> >> endobj 1879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 657.314 172.899 666.161] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f124a4259475ea355ced38e73a05363a) >> >> endobj 1880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 644.383 149.397 653.23] /Subtype /Link /A << /S /GoTo /D (structwcsprm_8b3a65921acc0dabfa4efd19a003ea6e) >> >> endobj 1881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 631.452 151.997 640.298] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c3c9c869bef4e4850dfd9762b33ce908) >> >> endobj 1882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 617.021 145.501 627.367] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e7609283351ea46484690f873f8ea9c3) >> >> endobj 1883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 605.59 158.802 614.436] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9ee8fb568ca75874bab00825b768f8ca) >> >> endobj 1884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 592.659 157.965 601.505] /Subtype /Link /A << /S /GoTo /D (structwcsprm_7320fc64e7705cc7495eba07482b5c55) >> >> endobj 1885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 578.044 169.84 588.574] /Subtype /Link /A << /S /GoTo /D (structwcsprm_922f0f57b8c35cad3d01ceedeba01d4b) >> >> endobj 1886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 566.796 173.447 575.643] /Subtype /Link /A << /S /GoTo /D (structwcsprm_49eee6450b1a646d3fe01b8965a63af4) >> >> endobj 1887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 551.808 174.005 562.712] /Subtype /Link /A << /S /GoTo /D (structwcsprm_15485177ea8bbacefc29a5a5cba98c8f) >> >> endobj 1888 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 538.877 166.323 549.781] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e6b40e2adeb31414871c7cae68619d63) >> >> endobj 1889 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 526.504 165.975 536.85] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ad387ccbd7847672b5dc2223d9124120) >> >> endobj 1890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 513.015 177.611 523.919] /Subtype /Link /A << /S /GoTo /D (structwcsprm_88b55f6c8d122f3ff63532de85698864) >> >> endobj 1891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 500.084 175.2 510.987] /Subtype /Link /A << /S /GoTo /D (structwcsprm_0730c37f09502eb364f4e7d7addb8ab8) >> >> endobj 1892 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 487.152 174.851 498.056] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c0cb013b1505fb7abd4167ac0db0e0aa) >> >> endobj 1893 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 474.221 173.736 485.125] /Subtype /Link /A << /S /GoTo /D (structwcsprm_6a88e64207df5007151c2c25028ce3eb) >> >> endobj 1894 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 461.29 165.417 472.194] /Subtype /Link /A << /S /GoTo /D (structwcsprm_65801f93622504672ee3faf8f2110e48) >> >> endobj 1895 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 448.359 165.975 459.263] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c089e5d0e3191255ceaea7f8591b27ea) >> >> endobj 1896 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 435.428 165.984 446.332] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eac54f497e1244c8106dd3ebba12223) >> >> endobj 1897 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 422.497 175.25 433.401] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f300da5a94594a9769ab312bb56dde83) >> >> endobj 1898 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 411.623 175.937 420.47] /Subtype /Link /A << /S /GoTo /D (structwcsprm_0936d10c2ac93d13d096b1711ac639a1) >> >> endobj 1899 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 396.635 163.763 407.539] /Subtype /Link /A << /S /GoTo /D (structwcsprm_8715975565c8bbd0c562a32eee40fd20) >> >> endobj 1900 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 383.704 174.692 394.608] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9fd60ce9e6bc31df07ed02ce64b48be4) >> >> endobj 1901 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 371.33 172.61 381.677] /Subtype /Link /A << /S /GoTo /D (structwcsprm_2166fb650f937d8870711d8be5986b66) >> >> endobj 1902 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 359.899 146.069 368.745] /Subtype /Link /A << /S /GoTo /D (structwcsprm_94c26ce331cc876d63baeeada9820241) >> >> endobj 1903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 346.968 148.839 355.814] /Subtype /Link /A << /S /GoTo /D (structwcsprm_8625c0a6ff99c754566c46c2372df801) >> >> endobj 1904 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 331.979 168.754 342.883] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 1905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.724 331.979 190.891 342.883] /Subtype /Link /A << /S /GoTo /D (structwcsprm_292133b2b7143b969a3af6a3f2cf3709) >> >> endobj 1906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 321.105 166.532 329.952] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 1907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.502 321.105 191.439 329.952] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9063e8d0c956e9eae7f7d6f3608b9ed2) >> >> endobj 1908 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 306.117 161.003 317.021] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5b56e1b378a6ae9f8dfff5c364f0653c) >> >> endobj 1909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 293.186 158.234 304.09] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e352318ce3202dab1b5db8b9ceec7703) >> >> endobj 1910 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 280.255 141.646 291.159] /Subtype /Link /A << /S /GoTo /D (structwcsprm_08098820949433d1336841d32d0b62b5) >> >> endobj 1911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 269.381 138.876 278.228] /Subtype /Link /A << /S /GoTo /D (structwcsprm_b7f7173e6d2b1b8028a3275bdd751e79) >> >> endobj 1912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 254.393 146.617 265.297] /Subtype /Link /A << /S /GoTo /D (structwcsprm_b9729795155b8f37afd80784fb70068b) >> >> endobj 1913 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 243.519 164.211 252.365] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de8495d3ca5047eeadba5934d0bb2708) >> >> endobj 1914 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 228.53 157.417 239.434] /Subtype /Link /A << /S /GoTo /D (structwcsprm_b63cdcf6ff8febd1b40d0e044ca7d7ef) >> >> endobj 1915 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 215.599 175.479 226.503] /Subtype /Link /A << /S /GoTo /D (structwcsprm_b253d36f0dc1716952285c6078622e66) >> >> endobj 1916 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 202.668 167.1 213.572] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 1917 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.598 202.668 180.111 213.572] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3224bd06f8f4d2d7d398533eb44a49e8) >> >> endobj 1918 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 189.737 168.196 200.641] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 1919 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.694 189.737 182.303 200.641] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c8391dd770637dbb841067996b7777ba) >> >> endobj 1920 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 176.806 169.86 186.584] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 1921 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.358 176.806 185.63 186.584] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e83952aec7c1ac76c090bc89bf4eeea7) >> >> endobj 1922 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 165.932 167.08 173.653] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1923 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 165.932 188.101 173.653] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 1924 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 150.944 188.211 161.848] /Subtype /Link /A << /S /GoTo /D (structwcsprm_603ef3ab7f3bc42cf8d8bf99b79b63ac) >> >> endobj 1925 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 138.013 156.59 148.917] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5780880281f2f9d085d2e06919b7647a) >> >> endobj 1926 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 126.058 162.677 135.986] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5ed753e401cda620a04adfb4ebfb8e0d) >> >> endobj 1927 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 112.151 186.189 123.054] /Subtype /Link /A << /S /GoTo /D (structwcsprm_164e3852bcd2dea8b5f73e1dff79ddf5) >> >> endobj 1928 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 99.219 175.12 110.123] /Subtype /Link /A << /S /GoTo /D (structwcsprm_6778d31ec5a2ee643dc5f0a8af630b03) >> >> endobj 1929 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 87.265 185.083 97.192] /Subtype /Link /A << /S /GoTo /D (structwcsprm_42e0ff2da3b0c1ca0a9509f787ed1951) >> >> endobj 1940 0 obj << /D [1938 0 R /XYZ 90 757.935 null] >> endobj 1937 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2020 0 obj << /Length 2069 /Filter /FlateDecode >> stream xÚÕYKsã6¾ûW°r¢ªF|8§dg=5©ÍacWíÁ™JQ$,³B‘´­üút£AJ”©%¶“Ú›xuýõ× ’{k{.~¸¹øöJ¦^ÊÒHFÞÍ—r/ŽSRx7…wë+&äb)8çþcÞnÍf±”Šû×éóŽäŸõ6 ‘øºÎ54ÅIšøA¸øtóãÅ¿o.>_ÐÅ=a×V1‹å囋ÛOÜ+ ýG³ M¼G;jã…2€gå]_ü÷‚;;ùÄ^~`¯à ƒÄ‹eÀx¤Èè_¤TVý0Ï»]*ØAÑô«JcÏ·W"«ª5ïÁãf’0¢§¬×4pŠ˜0hoõD‹ð .+ZOú™-—0L±òMÖ?•U™™Ý7ßøDìL—É{+—›­5ä­iBùe'Ž-™ë¨²ÜÎM-òiƸå`ÝÍ;c<¦_ß͸š[{“íh•›@,Hœ$5ì‡`¾/wcSj<Ú4Ï2 _v“t²Ð’ÑãêãÍ5I÷:+¬ÿ@¾3Í%8Ë9jB= ïs dÀ(žr x1Qé€#Peq¸€DÁ XµoîŽØ[ ÙöÁ°¶ßn«r†²¨•œ3%Äñ)Œä×MªÝ{³mZHðFA ¤ØhC‹O êÓf\¢o]S#`ì”vX”9€¶`#cI—Ð>"…ÆÀ ¢¢Ì5b…Ç~ÙQsÙÒÓ¢åi«óβ,´m ”ѨÁ-•Ëc(éö•›—«OÑc9¥Áévõ†ž…†]BêA©êÉ–dðÚaˆ9vØG+ŒÂhyÂ-Ù­[²ÄHqQ“„'zù!¿¬ËyäßÚµí&PuU5ùh䉯ìH»õ¦bL¶kI.kêìfsi–„g%S.Ÿ'SÔU¤iÞ5ˆ–DGù¬Ðwx6Y_ÙyÑüñ ƒ鯦®¬¥gé†mÀ™(;fÃÆÑ¿8l€…®;8E.µkÑY~O3 QÐôB„et~j›ø0ò«æ™êÑô92†Hj0‡É!Í °Êh˜Bó†ûÕÄQÌÒä 7DþÆTlÝLº@öÎ30“”-µOݶx2”§Ð¦G ¸Ó&LA#ÊûSˆÄECéZøKÒbì'@Ûrt3NÕ¬{w$esÊ¡h„Êé©ÚÄ`JùìþÈñ#Bÿ{DHœ›@@XJ×¶ÓÛw_Á@¡ÀðÉ„´Z:S!GwPM0®¡K¤YU@wxàøÖ˜aîØ)ßM³±Vb©4Ù`¼$ì ßÔ8‡3ð³&TÝóá.ᚪ΂Y¼'…!½ÎÜÿÚáÑ¥¦Ü¶dX {²¦ÚÚªÌÞØµª²ú77Ìr<¶‹qaàX!Û–@¨ûªZ¢ç«ªÝŸ„ð«¤%íò)\øDMiž" üÂfÓ'N.9ÃGñ«RWà §É{ŒÅl¸ãßjhâx?Â.t£³î¸¼Ä›Z¶ž¿Ùd«ÆŠ–8GËÄCÆÇrÃUì*xúœ+»;HöNã¨b‡Åðü]'=Kë½NC Sý‡C‚v² }îHY8ç7“„¤:¼r~ –Á¾ oÇñ$ ÿ™Nâb,yÜÞ¸?”>‹z­‹Ë)fýOXʘ)œ¸®ÏFƒâ{WÖÙSÙžøŒÄ?³ µwd‡½P]5^£½+×àŽÕViøL¼{^'§,ûÍ_4:7Ûòé˜d_[É6k y¡«îÍ•Ìþêy E3i^_ÉÌ”WWR5õ¶©Þ^MÖ}]ÍñI¨\S‘œû[røm±4® ß¦*eJ¹ëÐàJ“u÷¯¦¦çOƒp…ØÑ+z‰è!øe(.ULo’ãW{UñgN@™àS†xß<íÖô)çp§ÙïTþ endstream endobj 2019 0 obj << /Type /Page /Contents 2020 0 R /Resources 2018 0 R /MediaBox [0 0 595.276 841.89] /Parent 1860 0 R /Annots [ 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1934 0 R 1935 0 R 1936 0 R 1991 0 R 1992 0 R 1993 0 R 1994 0 R 1995 0 R 1996 0 R 1997 0 R 1998 0 R 1999 0 R 2000 0 R 2001 0 R 2002 0 R 2003 0 R 2004 0 R 2005 0 R 2006 0 R 2007 0 R 2008 0 R 2009 0 R 2010 0 R 2011 0 R 2012 0 R 2013 0 R 2014 0 R 2015 0 R ] >> endobj 1930 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 720.889 185.382 730.816] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5072893bd9beddb33967697d501acdce) >> >> endobj 1931 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 707.351 176.495 717.881] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f1cb3e68560d1ac42c620cfe3900af95) >> >> endobj 1932 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.163 694.043 181.466 704.947] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ee7f71c872491b25e1d1440e5dfa8153) >> >> endobj 1933 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 681.108 167.638 692.012] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 1934 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.608 681.108 200.296 692.012] /Subtype /Link /A << /S /GoTo /D (structwcsprm_6a3fa7adc304567271c5cc0eda3ac986) >> >> endobj 1935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 668.173 166.532 679.077] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 1936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.502 668.173 198.084 679.077] /Subtype /Link /A << /S /GoTo /D (structwcsprm_042875def8cab8354c5b2c40ab9fa374) >> >> endobj 1991 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 656.215 175.12 666.142] /Subtype /Link /A << /S /GoTo /D (structwcsprm_7a88af56c4c978c6d4213ae1f4bec87a) >> >> endobj 1992 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 643.28 185.631 653.208] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5444415c94c7ab0226788f5efe93221d) >> >> endobj 1993 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 630.345 170.697 640.273] /Subtype /Link /A << /S /GoTo /D (structwcsprm_4ed527b90d49e8365c1b727f7bec29c7) >> >> endobj 1994 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 616.808 182.572 627.338] /Subtype /Link /A << /S /GoTo /D (structwcsprm_092c11d209ecdd16bb79858c68e4d582) >> >> endobj 1995 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 604.476 186.179 614.404] /Subtype /Link /A << /S /GoTo /D (structwcsprm_0d15534535c7f9308c9daa2cceff29e7) >> >> endobj 1996 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 590.565 186.737 601.469] /Subtype /Link /A << /S /GoTo /D (structwcsprm_13fab263ca03f35844fdaca289b7dfac) >> >> endobj 1997 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 577.63 168.754 588.534] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 1998 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.724 577.63 203.623 588.534] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e09d5bf005e3bd7ee880353e8816ceb8) >> >> endobj 1999 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 565.672 166.532 575.599] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2000 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.502 565.672 204.171 575.599] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ce7e0986c79d73bd3a0613034b71974f) >> >> endobj 2001 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [474.933 472.301 513.996 483.205] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 2002 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [234.214 418.811 268.853 429.715] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2003 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.788 394.901 389.639 405.805] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 2004 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 382.946 126.692 393.85] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h) >> >> endobj 2005 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.645 382.946 239.833 393.85] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2006 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.413 370.991 216.601 381.894] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2007 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 245.424 174.014 256.327] /Subtype /Link /A << /S /GoTo /D (structwcsprm_70cac2976524a5f0a6aeb2b3fcb95834) >> >> endobj 2008 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 225.532 173.456 236.436] /Subtype /Link /A << /S /GoTo /D (structwcsprm_adad828f07e3affd1511e533b00da19f) >> >> endobj 2009 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 205.64 162.388 214.357] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) >> >> endobj 2010 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 185.748 172.35 196.652] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de355cdce054938cfa36e06ef9c51446) >> >> endobj 2011 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 165.856 172.649 176.76] /Subtype /Link /A << /S /GoTo /D (structwcsprm_7a0a1ce2432cef9377f70367ea1fd18c) >> >> endobj 2012 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 145.964 172.908 156.868] /Subtype /Link /A << /S /GoTo /D (structwcsprm_a0ae3f3605566be2e85e51e5b52c3b52) >> >> endobj 2013 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 126.072 174.562 135.85] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 2014 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 106.18 182.871 117.084] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f8f679749574250cb9ba09e1f05fab5d) >> >> endobj 2015 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 86.288 180.101 97.192] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5e04127eb71da6e1350467a7a6d236f5) >> >> endobj 2021 0 obj << /D [2019 0 R /XYZ 90 757.935 null] >> endobj 178 0 obj << /D [2019 0 R /XYZ 90 552.113 null] >> endobj 182 0 obj << /D [2019 0 R /XYZ 90 345.476 null] >> endobj 1861 0 obj << /D [2019 0 R /XYZ 90 323.165 null] >> endobj 2022 0 obj << /D [2019 0 R /XYZ 90 323.165 null] >> endobj 2018 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2054 0 obj << /Length 1556 /Filter /FlateDecode >> stream xÚµXmoÛ6þî_¡6Ps$%YRŠ}hÓ4ÈеYc`Ò  eÚÖ&K.%5ÉŠþ÷É£,9JZt3òÂ#}º7>|xõÖõÎG/磟^óÄKH2ã3o¾òêE3FBμùÒ»‡„ñÉ”QJÇ·iµSÛÉ”‡t|U«&­­ü^®¤š°x,‹TÂR'ñØ'7ó_Fgóѧ_ÔcÆv‘Ƚt;º¾¡ÞÖñ(ñ“Ø»5Z[/à>Œ¹w5úmD1NÚ‹—vâetF?ö"î: mÐ8·î÷Ïkÿj¼?y×Ó°ÍéäDɪ^©O½‡Àгþõ¦ \óÿäævÂèXL8>¶»bwtßíaöãITGOâèÒå±Ë”ª²ÇNCäuž‡^ˆ^Óö$0ެ‹ù&«&SŸ…ã*["7“`\o¤]ÍŠ¬ÎDžý#ê¬,쇪lê¬.ö|Ÿé*Y !…?ö0q£T—Ö’i¹Ý5µÖ%æ( ³8†§-Ô\” _mÊ&_Zy!qͤ` 0N™o7²x¼þF#­EÖ 4LÒ0¦"Ÿ°q.Ñ÷ªTèsƒQ@”\U.’l+…vBÕYÚäB ” AÂ0q‰ã¥ù°>S?N"žûÊݫ܇]´c©–RYÑTÇ|„ÇFÚ9 ·T÷(‹B¬åV€¼©OÙøím› ¥woßÀ%DÇÚé­4•)v‰®me@ØW¦ë­yTÕmV™Ãrí6<€Y.Å߈½­¸oáÜäõ#àó9aI°ïFü`G’ìö®wY5Pl‡aG|–ólÂC¸‚᜺`¶Ù„cYÁàɬ¼m43 ÖÊŽ»ìÎ<ŒGRKŒEßï¥Êqš–°YÑžF™›½©H[¨ÎáºX=õ0úÖAÃðÈí%H–¢>fôúSĦ€éˆMÒ¢dŒ@§6u{¸aZ”j+òüÞοFHE%]‰Ír¢eGw²ƒ¶hö׈+Un‡°†æuwû+ò§;QaI:<‰ðqd(ì°jŠ‘­Mo»n܉‚çÎTQÑ’ÈE‰v«fQÉO <˜#Ò·å2[Ý;ïO!>ì!ÞGÄ/Ëf‘Kû ºtëuèvÀvD‚ˆ÷™I7z×4šH*f„&³>HõŽ[Ý «ëŸµ|ž}¶¼}`ºô(ÙG©7úýñ‹å8 ²}ÀG>A—|ôÏO_U8*¥9%àAûVÌÈiYÔÎA±>ðÐ=¤z®ôWûuFOÛ£þl ¨ºßa4îóøéûË‹?¬2´DÝÛ„A»‰!˜Qe"ÓÀ'A Rcp< ìÒo"$< B8 öÑCÁû8-ì¯'˜´á4ì©>Ì“”pΜ»ËÓ-c>ámÔÙ€‘$Q«ðqÀB@’˜=½ç>¨t³¦ÝÛÂßt_’Z‰¢ZiŽE²‚5Uv4Å“iJWD›ºÛÉ´–KÛ«Ci K‰úÔéдLý/v4‰E/efCcµ ô:˜YçÊÏ_'$p_Õa™°ŒÊÏvøryÊ>²gv¢eÞʼ³Î?ò¯Ï‡+ŒêÁ÷^Ó±î‚.l̲½± ÝÖbkuØÛÜ9Ý›‚O_¹KB9»Ÿ3ñ£µs\¥Ü^óøíWæai¾Jòâ¡QÔ«ì—‡å®ãñý _°ÛM–nZ,ØÎåSƒ=“¹X¥k¾à6ýÿòía©m{Moà·W Sˆ!@eöP™[f–ùc–Ù€eŽ–Û¼_yÍb’í}ç/÷Fn…ƒúÙ7ra‡C>—…T¢«ëR~uÂk½;ra'3;0z°“0BÐRýJÏàY뺮÷÷Ó«7/­À†§Qýª¼»_Ëâ0ÓE endstream endobj 2053 0 obj << /Type /Page /Contents 2054 0 R /Resources 2052 0 R /MediaBox [0 0 595.276 841.89] /Parent 1860 0 R /Annots [ 2016 0 R 2017 0 R 2039 0 R 2040 0 R 2041 0 R 2042 0 R 2043 0 R 2044 0 R 2045 0 R 2046 0 R 2047 0 R 2048 0 R 2049 0 R 2050 0 R 2051 0 R ] >> endobj 2016 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 719.912 178.985 730.816] /Subtype /Link /A << /S /GoTo /D (structwcsprm_da1b98589c0127d34766b4c6b5d6cb41) >> >> endobj 2017 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 699.987 183.668 709.765] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5d0b60efc55a61525b9beb26ead4859e) >> >> endobj 2039 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 680.062 167.927 688.779] /Subtype /Link /A << /S /GoTo /D (structwcsprm_0e31f1eef036258c2957da9b985945dd) >> >> endobj 2040 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 660.136 162.946 668.854] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 2041 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 640.211 166.821 648.928] /Subtype /Link /A << /S /GoTo /D (structwcsprm_4c89dafecd036e169f96cb84d53ace65) >> >> endobj 2042 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 620.286 161.84 629.003] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eca2fcc30058310d020181ae16bf256) >> >> endobj 2043 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 600.361 162.388 611.265] /Subtype /Link /A << /S /GoTo /D (structwcsprm_fd2f31d782b3becce4ca2f9b495ec0b1) >> >> endobj 2044 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 580.435 172.898 590.213] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f124a4259475ea355ced38e73a05363a) >> >> endobj 2045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 560.51 173.466 571.414] /Subtype /Link /A << /S /GoTo /D (structwcsprm_8b3a65921acc0dabfa4efd19a003ea6e) >> >> endobj 2046 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.485 532.923 278.673 543.827] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2047 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [456.576 532.923 486.234 543.827] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2048 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 520.968 120.316 531.872] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 2049 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.041 503.343 314.681 514.357] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2050 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [98.199 411.99 132.839 422.894] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2051 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.909 411.99 254.471 422.894] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2055 0 obj << /D [2053 0 R /XYZ 90 757.935 null] >> endobj 1862 0 obj << /D [2053 0 R /XYZ 196.021 482.586 null] >> endobj 2056 0 obj << /D [2053 0 R /XYZ 90 465.859 null] >> endobj 1863 0 obj << /D [2053 0 R /XYZ 450.495 403.188 null] >> endobj 2057 0 obj << /D [2053 0 R /XYZ 90 386.461 null] >> endobj 1864 0 obj << /D [2053 0 R /XYZ 139.076 341.413 null] >> endobj 2058 0 obj << /D [2053 0 R /XYZ 90 325.309 null] >> endobj 2052 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2069 0 obj << /Length 2277 /Filter /FlateDecode >> stream xÚÝYÝsÜ6÷_¡éÓîM–%ê+{H“8㎯Mãm;7>Ï,Ñ»ºh¥­¤íûë Ðךv’»¦7s/K $Aø°®³q\çíÉwë“ç§^â$" ½ÐYß8‰ëD¡'uî\.!½åJº®»¸ÍÚ}³[®¼À]\tÍ!ë¨ÿ^ßèf)ã…®2 ¤(Nâ….¯Öߟ¼YŸüv"a/ב†w‰Èœlwryå:9пw\á'±skfíåùЖÎÅÉO'îìœîÑ9=_¸a@ç\o5¦íê&ÝðGÝäp4Ó½©¹Óm‹–zÞê5uÒ¦Iï©Ûu¿tǽ´}À‰GäœQ,žÑ÷íÖÈ%Ñ_¥oŸŸú±‰$r%ÞÇ…D¬nÒ@àbŸ-W!ÿ¯ÈÄQpcX¶’ 1¾ø_h@D±çLÈ»o‘~$´U 7Â]"Äï²” ¨C™Ó‘¯ùN¥^Ê`±)ºb—vZ0·)T\gå{Bö;"R„'FK^®KMˤš,‹|z V›Uÿp]ßÂ;*òú9¼/²\—õZÒm%#Ú.ÍUÓ¹¾ðeÜ3~[|Ô•…!+JÆr¹ T´x™çn[üˆõ  °7ñš¶£]ꮺùÔ´â–à†]Š{iZVW]ZTEµ™íÃ๨@4PTYc¶iŸYDˆJ–.‚EŠ$`%½zýæ|™x‹5-,MDã åýµ‹Ô"fÅSl X©@ø¡áWDFƒ þˆ?iù?BˆOâÇ¡Ñ-þ°3 ?„L§"BLKÁ. …B6EÈd‡p†hÐ5“[ÆÏK/ôæý2¿,¥,^žÛQŒJû/P£@ 6ØD³çt}¨ ›p¿®výp¢]ŸU-É:£vácÔîdªÑ.¶¬Ýa4ºM›ËÈ»"êL¿¼ÇC¡yjÈþœ¯~þáÌjÖ@?yZA`³®ßOù€fd¼ÿý:Èí¶È¶æÁYùAë%£…_¬\£*}ô>¢ÆøñÄ c»Ói{hXHÓû]%ìæA×ýƒQ9p´„I<Š÷SžóËv£p¡Êmz•"âq_ˆR 0÷aC P<ô<áŸx¹ÁþËzd%” ,¨ ˆ¡É[ÁP; Ájgö÷²µ©Q D b]5Jቾ¿¢¶ÞwE]ÁK`¾¶:5Q ö-·]ø€rãV.¯ØahglTRD„m©o:¦”iõ»KðÍôÀÛÜ-/èeö»Ûë¬Ó9Qºš$‘¶?÷·lú€Ø_¤Ô´%m0@‹Õ`L8< ´¸,Å ó"ìm‘—]ßù×WÔy‡§J÷&>†Ï3Aó~èxòÍ¡Ê gŠ`1ˆo6Í¿{â\šYà™]S¡Ç5Îrî2ØÁprÝfMqMçñ!xyŒ©;—rÇ+‹­±ŸPÈŽ EUÇ*ÊÔ<–:ÏšÛ&­ÚÒ<žñ±»]]•÷ôuh͹€KUW«‰ÀqŒÝ#3uÀ®çôÈ»CÛñÞ3¯+ã܆+²Ûì3‹”S½O:¨Ihô¾Í!õ`*ˆO™Ûê>àCñ¸†óv¶º{LAb8ÓÄ~O&Ó “EïYÛhQ^/Ò;Ä(bPå ÏššÎ3’€ªîˆ` çÙgœu)O×p}µO°=l€ÙSŒ : ‰£ÙšSwDBïlm–0á1¹¼â‹g ?H™ê•¡K@þYb±D¼~(<ßñº=CWüJÖÔæ”¥5Zƒ36®å¬ÞÑŠz³èþù«hÂèæô ût%…'ƒÇ ÅÆÀ¤Júš""@žo1" %DDŸˆX=^Ãåp€=žâbdm…ˆ±€÷3šŒF,àåF,À•ÅBøgaáâlmýghH³Ì$›ÒT1Äc2µÂãj„uSÃÍÕ16`”ê*˜/ã3J´iBƒCÝý^·ßZÄôbãªkžÍ^sèš(ð.èÒÎzŒu­þp½Õ­É»Ïl |cZ"¡àvuΩ¹êsvµ(ëj£©*³Ê²Æµ·x,$´]Â^ [3ùôl}A={¼J0ÍØ£Ø]¿oŠmÛPˆyF qHÓrº/ǯêP–+˜²Cá˜M Vú•y?UR³ì->ÎÞPƒOdoÁשÞH9©ÞÀ‡©»@KzÁŽÕ ŽÕ›ÉTS½Á–«7“¡1{CV³ú͸‡œ×oÓ]ÁÇ1°þüœ|ý÷woìiHú_šŠ›ä;’ñ¸ƒÁÏ6ÄÅ@°@’fÉ"|Süƒ½kæ…q-¶‡½ ;}x[³´åAã ±ƒÖ¯cñoÝÔÔ«n+Ú§EOºáåi—mun{š§òXžò{U@_±Ï†aÚ‡ÉGy´+&ï óA×ëÆ\‘ÚL‚f‰±ú–FÛ-×^aàšWìÓ<×L»-º-QÍSɧ¤üøRƒ 7ÅfÛ9æC³ÖLlëÞøÓñ¥0ºí Ú}ñ»ëËÂiË]=n2º•!:åÙÕ¦ÛÎýiðáOƒ?͟ΫaɼˆÚG÷Æ·‚löu©?¯6ö¶@!}4aš¥ê-:î dŽ\ú ¹èàÆ…DCÝ!çOc}*áʘšeø‰gd_'åÔo‡øïÆ$¢ÿžŸFN(’\Õ5üÿQýC³·†Iq;“I˜äCn±yxiÈ‹-•` qÖù?¼ûñÜæqU žs¨gØn"Ôèo/9ȾbA5ó#ÌXÃyáÖÒ›ãíÝ/¶ªÊÌ©fž˜ƒ¼O²°]dVwŸ\„œC—G;‹G˜àÃ̾ëÿd£r"MNÉ4ydßèLçü‡":”›>ßá¢Æ³#ï&„˜EœÇ<†13þÜÿûÿEGÜ‹ AÀxz«+ÝŒn´f÷·¾sŠ8Ó×ôò¿„î %_ÿùèâ«æÿDœÛÿ§øë«‹ó³ï¨¯àéçÌŸÝñëúî~£«ã›þò÷—+ endstream endobj 2068 0 obj << /Type /Page /Contents 2069 0 R /Resources 2067 0 R /MediaBox [0 0 595.276 841.89] /Parent 1860 0 R /Annots [ 2059 0 R 2060 0 R 2061 0 R 2062 0 R 2063 0 R 2064 0 R 2065 0 R 2066 0 R ] >> endobj 2059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.683 452.327 459.852 463.231] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) >> >> endobj 2060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 440.372 133.337 451.276] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h) >> >> endobj 2061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.63 428.416 260.818 439.32] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2062 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.129 410.792 305.316 421.696] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.83 410.792 369.326 421.696] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ef5d64e333f758458b1edaa617911513) >> >> endobj 2064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.262 381.213 304.449 392.116] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.15 381.213 368.647 392.116] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ef5d64e333f758458b1edaa617911513) >> >> endobj 2066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 351.633 124.191 362.537] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2070 0 obj << /D [2068 0 R /XYZ 90 757.935 null] >> endobj 1865 0 obj << /D [2068 0 R /XYZ 174.472 670.382 null] >> endobj 2071 0 obj << /D [2068 0 R /XYZ 90 653.655 null] >> endobj 1866 0 obj << /D [2068 0 R /XYZ 140.939 608.608 null] >> endobj 2072 0 obj << /D [2068 0 R /XYZ 90 593.883 null] >> endobj 1867 0 obj << /D [2068 0 R /XYZ 141.058 546.834 null] >> endobj 2073 0 obj << /D [2068 0 R /XYZ 90 532.109 null] >> endobj 1868 0 obj << /D [2068 0 R /XYZ 277.903 325.207 null] >> endobj 2074 0 obj << /D [2068 0 R /XYZ 90 308.479 null] >> endobj 1869 0 obj << /D [2068 0 R /XYZ 277.903 192.318 null] >> endobj 2075 0 obj << /D [2068 0 R /XYZ 90 175.591 null] >> endobj 1870 0 obj << /D [2068 0 R /XYZ 434.097 130.544 null] >> endobj 2067 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F14 1078 0 R /F40 846 0 R /F11 1076 0 R /F7 1124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2105 0 obj << /Length 2157 /Filter /FlateDecode >> stream xÚÝYKsã6¾ëWðHUY9·I6ã$5ylƵ{p\)Z‚,V$RCRö8¿~»ÑEÊ”dOœJ6'‚@³ÑÝè×òà.àÁåäË«Éïdd,Kd\-ƒŒ:LI\-‚ëP1!§3Á9æÍ¶ÞLgRñðC[ïæ-6KSOEšrn`J§YFzzsõÝäë«Élj€½x ,o¥™ŽT0ßL®ox°€ùï΢, ,Õ&ˆeÏuðaòï ?)§ŒOÔ^N&™àNØEµ»]óf·Û &A0àÆ{Üx0š%2&f¿pÅ/‹©TáýT(Ðk:‹TæåqX›vW—ft‚–cÓY"EØ® Í”yÛã@ßE»[8ŠjI³Ý's³6M[äkšGY/HX!zÂÊ$a\£Q°R•–é(E¢˜%:­Xœ9¥¶#zÇ,Ͳ Gt[ë,¼;T>oÝ÷ýSˆã"ö’¼;ÍTxõÓï¿&Z¥G›°NËÑæ#Òd Gæ ®ÁL°ýÝ3V=cÀdNX §7‚eʹÄOÿ‘ظMŠf’ií×βSD³XËEÐó¶Íç+³ ·¶rÏ•óÕuUÞ9±ÔŸŠÆ9ñª˜¯qþÛTðи•mmæfá‚Þ‹%=æÎ%¸)CÁH1J:Ow6‚ílHÌdÆÉ¿qà^D¸ÉiöÖ‘­Í²¥‘•>Ö(P¾[·ô_¸G7Ê×;+*¼7Æ}IÇ8¡¼Pß¹ñóå$¸¶ë²EY`Ú#ZÊ–BØmŒ9Í"ÊF~ yà÷½rÅíTòpç$+Jo <µGÒgž7Ny<(;&åC‡{(Öº‘°¦Š" ‰Âjl§NhŒë 1ÐÓ™¡Q‘’ò úÖE‚|Þîòõú‘Vw žüLAÐüPµ¦ûlQÕN¾v•;ñÐi<ó§.ɘ©Ä{´+Oý>ÒŒ«.4®FXö7ŠåüêL"âC¶«jç*‹5_[”w]l.|4TÅ9zÐ¢ÞøV¹Ùû"?áꌅûÀt~€ŸØÆQYíãÕ˱ÊÑ‘|Âw_^ÈAŒ¨~l°‹ƒkE`)‡åMœ(oTƒ›viŸWæˆ*œ"‹Dêñ²¸‡ ð”Ô^íKÖA”åÊç18:§ç²6wzf¼þæ÷g_È9_øÃ"úÔÐP@YOÇí!Ÿa‡œŠÙq{¨?ÇZR_iå¼–Þ0"ÞúÃÞeÖ¦¼kWDe³<ÉIæ»]Eï×k8­Ãª´|ªÒ±Æ†Ÿ¾TÀ°4¶ÒhJI83(íŽW'\å‚ † „áúà[JßÚ¦"Âþhúü»©«xtäN°(Ûáñ•Ûû¿Ö…ËÝæÖ‡våjª)Ûºð…×’Ëç2U‰4êg™kßÔ5”ÙD…/Ž€ø„ý6ù§çyýA³ÛO£Ã^w` Îa{zu[ž¸SkÉÄ\Ý\˜¡r‹§Ê-~z²Á@ [SÑk¨¬Õúo—tñ6Ò~Ä,ŠŸd[>8vîn0ßä-"2d¼]¿rš¥ûdŽ×0¦Íý,†#5Üß"'ÏqèDHÚãÒ»]æîv™xÓD×ôtKˆ¯Û ò]‚ Ž”2“ÃúþÇŽ]í¦L }Êø)‹“Îl› O0aéþŸq—ŸÛ°wŶfÞ¿_[BfL@±íh“ãh«ùÇ¡ÕæõѪ>a¿¿5Zm>­ZµfRFþòF¶{…'u¯8qê:?=Ýp…m¸¡*Žc¿á†×®á†ñI´êv;ª46è24踻ÛÕ5èGT´OjÐa°oÐGÀëKÛõæÐj:†V›£hUõ»æ¡Õf¬ª§,âÉsЪ`öÇÞ°¥V#}VaeV‘lIdî·BÚ«Q¬v¤)UXô`µ·ÔÕHwÎïÖO´¢iÏÐÃ^VuäÀ*|ðWƒÕæoVO{7qø3>IY…ç™ÿâý?øý?f`¡2¦”sÃKSšÌæÐUåRó÷~ð=ÔÜÒKBÁßÄâÒô&9^è[;#­·õ¿úðþÛ/iÛ_ü}#þ«úôxG%³¯éÿ²u, endstream endobj 2104 0 obj << /Type /Page /Contents 2105 0 R /Resources 2103 0 R /MediaBox [0 0 595.276 841.89] /Parent 1860 0 R /Annots [ 2078 0 R 2079 0 R 2080 0 R 2081 0 R 2082 0 R 2083 0 R 2084 0 R 2085 0 R 2086 0 R 2087 0 R 2088 0 R 2089 0 R 2090 0 R 2091 0 R 2092 0 R 2093 0 R 2094 0 R 2095 0 R 2096 0 R 2097 0 R 2098 0 R 2099 0 R 2100 0 R ] >> endobj 2078 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [324.235 672.708 358.874 683.612] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2079 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.704 672.708 424.96 683.612] /Subtype /Link /A << /S /GoTo /D (structcelprm_3f9ae993e97f0e73e3f59117929eeda6) >> >> endobj 2080 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.886 660.753 191.074 671.657] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2081 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [276.608 648.798 311.248 659.702] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2082 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.575 488.204 286.611 499.108] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 2083 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.389 438.657 288.424 449.561] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 2084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.261 421.033 217.9 431.937] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2085 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.678 421.033 375.714 431.937] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 2086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.049 409.078 185.112 419.982] /Subtype /Link /A << /S /GoTo /D (wcs_8h_42b2578d76ace7ca6114d82b7ae46a89) >> >> endobj 2087 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [421.815 359.532 450.916 370.435] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 2088 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 347.576 123.643 358.48] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2089 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.22 347.576 469.283 358.48] /Subtype /Link /A << /S /GoTo /D (wcs_8h_42b2578d76ace7ca6114d82b7ae46a89) >> >> endobj 2090 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [432.813 329.952 461.914 340.966] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 2091 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.04 317.997 226.228 328.901] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2092 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [227.957 300.372 263.145 311.386] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2093 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.575 226.916 285.505 237.82] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eca2fcc30058310d020181ae16bf256) >> >> endobj 2094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.389 177.369 287.318 188.273] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eca2fcc30058310d020181ae16bf256) >> >> endobj 2095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.039 159.745 211.679 170.649] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [314.319 159.745 362.248 170.649] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eca2fcc30058310d020181ae16bf256) >> >> endobj 2097 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.42 147.79 162.378 158.694] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e790c9ce6c9b7a4845cf1c3c97b1e97a) >> >> endobj 2098 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.368 98.244 450.363 109.147] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 2099 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 86.288 123.643 97.192] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [429.114 86.288 467.071 97.192] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e790c9ce6c9b7a4845cf1c3c97b1e97a) >> >> endobj 2106 0 obj << /D [2104 0 R /XYZ 90 757.935 null] >> endobj 2107 0 obj << /D [2104 0 R /XYZ 90 733.028 null] >> endobj 1871 0 obj << /D [2104 0 R /XYZ 495.664 651.951 null] >> endobj 2108 0 obj << /D [2104 0 R /XYZ 90 635.497 null] >> endobj 1872 0 obj << /D [2104 0 R /XYZ 261.685 602.405 null] >> endobj 2109 0 obj << /D [2104 0 R /XYZ 90 585.95 null] >> endobj 1873 0 obj << /D [2104 0 R /XYZ 112.725 540.903 null] >> endobj 2110 0 obj << /D [2104 0 R /XYZ 90 526.506 null] >> endobj 1874 0 obj << /D [2104 0 R /XYZ 320.135 491.357 null] >> endobj 2111 0 obj << /D [2104 0 R /XYZ 90 474.902 null] >> endobj 1941 0 obj << /D [2104 0 R /XYZ 189.695 412.231 null] >> endobj 2112 0 obj << /D [2104 0 R /XYZ 90 395.777 null] >> endobj 1942 0 obj << /D [2104 0 R /XYZ 271.866 279.615 null] >> endobj 2113 0 obj << /D [2104 0 R /XYZ 90 263.161 null] >> endobj 1943 0 obj << /D [2104 0 R /XYZ 319.029 230.069 null] >> endobj 2114 0 obj << /D [2104 0 R /XYZ 90 213.614 null] >> endobj 1944 0 obj << /D [2104 0 R /XYZ 166.961 150.943 null] >> endobj 2115 0 obj << /D [2104 0 R /XYZ 90 134.489 null] >> endobj 2103 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F7 1124 0 R /F38 780 0 R /F40 846 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2129 0 obj << /Length 2506 /Filter /FlateDecode >> stream xÚÍÛrÛ6öÝ_¡Gj&ÂîôÁIãŒ;ílÖöLÒÎMA»©’Twöã÷¤H²Æ^ëACÂåÜo,'tòáäíõÉ?ÎÃd’D†rr½˜$t¢$#"d“ëùäs  §3F) n³fS¯§³PÐભ·Y‹íK½Ðõ”Å.3 C*Nâ€ÇÓ߯>y}òç ƒ³è„Ù½…"Š‹I¶>ùü;Ìaüç %<‰'·vÖz…¾Åäêä_'t'݃3ä„Jpž5pr)~Î/®¯°µÒéÀ³íMZ7]€­¶e«k»P:ÍVä=z0ÉIB ö˜W8‡ÇÃ9Œ˜–›’{v$Qq7áßž-"’Äý!ëÔm1D˜E„Åýÿ™2è)ÁÝ­iVõÑÊ[ü6«j[¸±¢JGÿ €‘e[aÇžv‚,ª—ŽW—N&Ÿ‘hM–Âî8Ùáþi:!0;—ømWÚ1¢®Ó;³j2 )%RE“*Žaii`’Vfµ^ëÒl$àÜ4ä0@<Š6ºý ?v0Ø#7|ÝÔºmðªÑ¸}ê†jýç6¯õGÍfÙ¶®Šâ'”•‡¡JˆHøQHƒPÌ# _¦†£ÅV7ßZwgÕ²ÌÿÒsC5âkÆ™$*J&³dMìôŸ„„%ÎÌ«íM¡q5‹«UL$D¿QÊ=G(©°›ƒöäô4›{œÅ’P¥@f3êvçFùœpÖÓóCþE—ž ÁX¨dÎ,Ldpn¨VÕØYåM[Õy–ØÏªõ&mó›¼ÈÛ»©Á›éŒÓØ ¹ÇTpI•cô<À4E{*ôJç5Ûͦª­ÔB¯EÍÆNZ€H—i«ÝÌÎr r˜|UéVT ·rå¦y©Óµ%“c-lë´lU½¶Û =‡v}ƒvUYÕfÚ4U–sìßæíª›ä¥G¦Sux¾ûɧ+áñ3êÊt%Šä–³q¸¢I‚!^ý9Èd (F!Æ ÒTë]«6}-=á±% ȾêÆFÁ“N øAEÜ[Ïw—SNƒN#\Oœy¸Ë€ôìͰ—sö{-ä28+öír…Àv> ]§w8VV-ŽX(¬+€^VÍìŽ_Á< 0õHˆùˆò±Ž}|ç“|NÂø¥pSÞìt¥}³©+ôàpŠ”s6`¥k7-oðÛäë%ˆ™\¹ÿ–eÕ̓}]l˜/ð»Ì/úb(×m›»oV•lËlgs”æ&=Ž„’~ç Š¨À–ysÆ!/]ÌÜ©6˜u°Ñžé‹j4‡€À íÐ2ÙŽáçÆÄ‰¦a¬TºÄ9í*u£s Š¢Ý’ÛUndÈÌ0î‡c¸åu%ŽŒ—o<‡H°9âü– BöŒ3ÎÉCÔø¹­éèPŸ5u’Rk +¸ŒIÌ»°Bâ:ˆ½ÝÉz§ô½åÁ”ìt¹Cì°>‚PNX!=Ùï¨ÑÛÜmMO}FÂŽ8|\ÎØcüSñ/|<îè娳£Ž4dŒ×L…DJãÆa}(žˆ>{ýc »|èOfRNMbç9K÷«>AÈ” taÃ{ÖX)rd..Ïαþľó5èV̸Í~ìNí¡7²é‘•M3n<ÙhOð‰s{r?ðí"IŽÂ.ô’ù£çˆ„€‚îÀ|ÿË4 Á&xÌ Vľ9­Ã³„¬3„a,|® ç{µî^Ð&ÁÍ4¤ÁÖ–*xW¢0~laŒZº-lÊeF vYtE¢E]­»E©[n“,Wéðd"­ä÷{¹ï7>;߀ ƒYp±px”®Rc³_XWµ#pÛ,áGaOXü cB$H¯Õ^±ÉF©Š t€ƒÆ5©,BC۲Ϭµ×߆,UtÔ¢ßc ɵ ¿éº2|Wò†¼…-“EÆüHÐXA«ÚÇ€…%ÏúŒ,‡K}`É'2VãØe&¬ÄT'l®zd'ô¥ih[ÿHmN½]Û„-á{£ñÏ>S‡€À»ˆ½~\Ê{Í04»Ò€qT]Ì´¡‘––°>»£ y:;:Àêï˜-÷fǤIMnïI0SÂÌ+ `º!nKâ8˜–]ßÕ³]•Î%[žHíÌ·;ÿû¹@O?ˆ±š¼iÜU{03tèTu¾ÌKS=5Ãö/dÁý˜6{L é(ü´Ê ŸG cÐåø(±$‘;'{7IQ¶#*U$ÓW‘ÌÄE¬T¼¾èïGRQ„7H›Û}´ä!´’ˆÄ*y>ÑLñpn<ã1¿¯“ÏWud7®bËj}AÌÉnô°X6ßOü„"a"]â'Ÿ˜ø…¿¨®>’ÄBî ÛŒ“¸ ›ò«.åWÁÙÅGs+bOªæ+Á$1;ò>.‚©‘¾ت²p-dÕ^aÆ»›ŽBX­v;w½ô+RFav`¶Àn)lÓæöB©›‡·1‘Âî݉nÒ¼ž @Ä&.¬¥v¦kn–éDPW;‡9§uÖÖéRãÌM‘–ºû;uÛæÝn›M‘TÍ̳óë÷—»&°U6xði·±àúâÚí¯‚”}¨Üû€F1‰C5ÒÓ 4uÁ4×¶è>ºÆ8\ug!dý»(üHÿJŽQ¢À#qÙ R÷@ýU‚S“ÏåÔüìü»\Òþ©êsÔAûCv¥˜ÁUQS}ƒó¼'qŒ†`X:~ÕvpÈa±a/àÞºçŽRb¹Eµ-çn )ƒ–òð½q}ó"ÂúÁÈ=ò‰zÏpàÍL?í=ÏMž°¼v—Þ÷v0‹:OJálÏ“v·Rœ»$Œ‡Á<_kHaªÒú:ø§É×y‘ÖF³ÌÿmõÀ»#˜ÞAµÉöA2«Dj¸<›ë¢ÝÛÁx|ñ>[3³»Ú€ÙŸ­5h÷°Ëü±m4:†Øüi@…EU•)hÞæå²‹ÜªLÏ·µö]¿$O»~ù´ÒMôw»µÓ]Ÿ:Åä8*{óñMwÿ2PÏÇDê¾pQ†O08‰!Fž…`âYèôÞÝ®J ×Ä/ûa´ÝþKC ³ `Lù‹pàˆßà|/ ÁgAøê,ø?¨O¤çþû\“„ÅO}žÛ=–ÀÀŸåŠ„áâÜ@£z÷b¬{íñk×87Ô7Ø‘îR“žFìT(—éRóþ؆AfnåèüéÝÕ/o±F]´àb¤Ÿª¯wK| 1ÄôHGãµ endstream endobj 2128 0 obj << /Type /Page /Contents 2129 0 R /Resources 2127 0 R /MediaBox [0 0 595.276 841.89] /Parent 2134 0 R /Annots [ 2101 0 R 2102 0 R 2118 0 R 2119 0 R 2120 0 R 2121 0 R ] >> endobj 2101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.546 719.912 442.541 730.926] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 2102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.253 707.957 203.44 718.971] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.507 240.312 410.985 251.326] /Subtype /Link /A << /S /GoTo /D (structwcsprm_fd2f31d782b3becce4ca2f9b495ec0b1) >> >> endobj 2119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.239 240.312 487.227 251.326] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f124a4259475ea355ced38e73a05363a) >> >> endobj 2120 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.177 228.357 284.655 239.261] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) >> >> endobj 2121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [303.674 228.357 362.114 239.261] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de355cdce054938cfa36e06ef9c51446) >> >> endobj 2130 0 obj << /D [2128 0 R /XYZ 90 757.935 null] >> endobj 1945 0 obj << /D [2128 0 R /XYZ 90 699.155 null] >> endobj 2131 0 obj << /D [2128 0 R /XYZ 90 684.585 null] >> endobj 1946 0 obj << /D [2128 0 R /XYZ 394.565 637.381 null] >> endobj 2132 0 obj << /D [2128 0 R /XYZ 90 620.654 null] >> endobj 1947 0 obj << /D [2128 0 R /XYZ 482.365 575.607 null] >> endobj 2133 0 obj << /D [2128 0 R /XYZ 90 558.879 null] >> endobj 2127 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2139 0 obj << /Length 2157 /Filter /FlateDecode >> stream xÚÍYësã¶ÿ®¿‚ßBÍX(@|\'ŸÏãLÒ^mM3Éå&C‘´Œ†"U>üèôï P”?î.mon|X‹×îo_õÖõ.fß-gz¤^JÒ(ˆ¼å—R/Žó–…÷Á„ó£”ú÷y·m7óE ¨Ý·CÞ#}UÞ”íœ%~Yç% ÅIšø<\~?;_Îþ9cpõ˜Þ[Ä$æÂË7³©WÀø÷%¥ÝE·¡<Þ×hìäW*(ü±#u‡T -/ À”áÿ;ÙÉUe†@BØÞšªQº¾‡Pl£æ+døéìú‡Ëïn›¡Åud¾à4ò/kÞfm/ó¡…Bïä؆Á+¢ œÄ3»ÐçÀOà"œ~1€z¨eÿˆ¤¼qh8d$N¹UÏÙ[JÀz’è%˜Ä/Á$x &a¸;ʤñ6ØQÂCmC§va>…âÿy°aQú&Æ¥”$·öœÊ¥K-)D§Q¢gWsNý¿*”-ç)õO·âJIãµä"æÉ¸©1—p"c謔= ¦c"PZÐf]×äÒ¸¢ Hö·8c,+ôÁQÉ~(L/{°KwÚÓ;;ÞNe_®¾/‡âDNMë ÎÒöXÍÒNP1 ŽúIOËSH_RþIžV(µó’mo,Ôú™lên\„2ñ5D£‰›ÁpKG-XÈ Ä"–Š]ŽKàŸMt¥uLÖ+ƒh(Lro§¤JØÈN¹8ál|æ…¼CMlùkœNW9½|”‰f`®ÖÿçMáJ47ÏûûùWç„td;™H¨œÞáéÐóÝ6Ïä¶{`¾[ Ê#„¡[ ܨ!¿ÍÚ}=d_þÅ4ãÓOb~6<ÈJfí£*óÏà„,ïñ¥ 娄ìÍ,šdƒš£i ¹ëe—·rk3CËtª¼àŒç Œß¸9–€³ݶK5S؃;©zFµ¿kLª>Þ+.fh¶);äé†üW°b™rÖ¹ š‘ ÓÙòç÷箨ÛEüù¨„IË^°\„ƒd[…N™-õWUVÿŽCZòjL‹Nl[¹­áèTj0.¥ƒ%õз[è(§‰ä6{R?ˆp`ØnM¦˜g™«ÊtÞ à ^¥£ÜL vºøÅYEœÖÆe¶mfLS PƒÁrn1g³Ëˆ¥Ì;YØòÅ€ö«äºÞŒéÒvh·MWvÆT›º2‡´)Ò íúýT]ä2Fê¶Âð)g˜7U=l>Ó9?²Ã ñº-uÒ¤æ 0¶gj0qT¡~Ìíe/0n² ²9Bëra£·¯†4ÛeØ}w¹¼Õ;1—ܦµ¢Î 9±b·"¾S¯ÍZ™a}# „U¹ÓÂ~€mË|´ÝQƒmiKµ£UÁxieæÃfØÂßÇ¢¹ì¥YÒÝ6CUìß?PL®ð¯²m1gŽÑ‚Cò¶Ì ,ÛŠZ[\A·’]ÿÆÂ}Œ‰ Æô"NEŒ„| )wU$ÜÕˆf®ÏØÝê^ñ î;œ@ D™o€[“ª jbǘÓ=¥<Çב#ÇfÞ×ýOP6™ž\áà5Gæù Î.ÚûÄ RAôó\ŽR Nc”¡"²CÐÁÀÛÀO0†&¬Cª5šL©Ðò!>š^¾RÖˆ¤éû14F|8p£‰Wâ##ûÙ_T=ýÑ™&€yéËiÂX?˜z:N¡œÞ7Só‰N@‘9u³eyÞlšB¿IتUUS¯K%PÍUÙÏCtP&ÔënX vXGM9²,ÐquÀªÔ’ÕgÈìíZ…vÕF‰K¦»èo‚Ƕºß_Uµ–Ò‘>d/o]þë hÍ ¢Ò±›QñYn¶U–êp³IDh¿ÂV’£t€‹xâf…·°ðSÑÄD&¬ÚDÄÎD€ÏN)hzêiwD~›ÕE³ÁÁ²mµ{RÖ;>—f÷J› ¦\S’ˆp÷èíù•Ëz Yü©ÖsTkA™íDGò_DG÷¨ç‹¤éQ˜¤;„¨ŽÎ±›:±K¡3"$HéȪãŽjM4™ìb¢è Bö軾TŸ÷sÜÖ DMÉzÇû£äúg7J^YŠí£d,Ñ¡Ó)RòÚèìˆIc¸þ€(R"„QêEY—­ÉÌu±‚í–x§P®°aÃ蛽1öª~Ôiƒâµ9Áøè0j’“¼m×ã—²ñ¥ÿ(ÆNÙ endstream endobj 2138 0 obj << /Type /Page /Contents 2139 0 R /Resources 2137 0 R /MediaBox [0 0 595.276 841.89] /Parent 2134 0 R /Annots [ 2122 0 R 2123 0 R 2124 0 R 2125 0 R 2126 0 R 2135 0 R 2136 0 R ] >> endobj 2122 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.281 692.325 407.759 703.339] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) >> >> endobj 2123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.401 692.325 483.841 703.339] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de355cdce054938cfa36e06ef9c51446) >> >> endobj 2124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 650.791 124.191 661.694] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.896 650.791 430.083 661.694] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [455.556 650.791 513.996 661.694] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de355cdce054938cfa36e06ef9c51446) >> >> endobj 2135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 609.256 124.191 620.269] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [278.661 559.437 316.618 570.45] /Subtype /Link /A << /S /GoTo /D (spc_8h_615d3ef3a505a8be7da1578d9338d218) >> >> endobj 2140 0 obj << /D [2138 0 R /XYZ 90 757.935 null] >> endobj 1948 0 obj << /D [2138 0 R /XYZ 265.291 612.409 null] >> endobj 2141 0 obj << /D [2138 0 R /XYZ 90 595.682 null] >> endobj 1949 0 obj << /D [2138 0 R /XYZ 321.201 562.59 null] >> endobj 2142 0 obj << /D [2138 0 R /XYZ 90 545.863 null] >> endobj 1950 0 obj << /D [2138 0 R /XYZ 429.942 471.236 null] >> endobj 2143 0 obj << /D [2138 0 R /XYZ 90 454.509 null] >> endobj 1951 0 obj << /D [2138 0 R /XYZ 315.671 391.838 null] >> endobj 2144 0 obj << /D [2138 0 R /XYZ 90 375.11 null] >> endobj 1952 0 obj << /D [2138 0 R /XYZ 465.747 312.439 null] >> endobj 2145 0 obj << /D [2138 0 R /XYZ 90 295.712 null] >> endobj 1953 0 obj << /D [2138 0 R /XYZ 277.903 221.085 null] >> endobj 2146 0 obj << /D [2138 0 R /XYZ 90 204.358 null] >> endobj 1954 0 obj << /D [2138 0 R /XYZ 213.805 159.311 null] >> endobj 2147 0 obj << /D [2138 0 R /XYZ 90 143.301 null] >> endobj 1955 0 obj << /D [2138 0 R /XYZ 212.151 97.537 null] >> endobj 2137 0 obj << /Font << /F29 635 0 R /F38 780 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2151 0 obj << /Length 1695 /Filter /FlateDecode >> stream xÚµXKsÛ6¾ëWðH͘žé!±×™$N,%Mâø@“ÅV$’²¬þú.¸¤žœº©tÀâµ¾o±» µî-j]ô^z/^óÐ IèqÏ­Z¾ÇˆäÌ%Ö- ã}‡QJíE\ÍʬïpIía]Îãåk5VeŸ¶ÊcM~¶Kû·£7½Á¨÷£Ç`-j±F·ô‰/¤g½›[j%ÐþÆ¢D„µhFe–Ë”SkØûØ£G÷É¡ž\ï“À?l7O¢·‡Û>=M¢ZE}.í‡{½5ÐG7ôQËa>ñ¸‹ê¾SI/ÒftŸI8ÙIßqE`GóÇtšFå0h¢ÌM z-Q»cK„E©f¥ªT^Gõ†Jš¥‰3+ҼơÝ̺SZÜUª|г`r‘ã¤4ÇÎËá6Œ‹2‹ê<—»y.¸„œ¯9×~N–9z¤åtc$”-’IÒ³ 7£„ ÞiòˆçÊnÀdrše§UeZ`n7Ör¤$c°=NX¸Í¯ Gù´žÇ-÷è.·\È­[-i†tYw]U•ÍMð÷ûöØÓó|ªCËEZµã•ÞÐãl¥¹J°)ÍwtÆE–©¼ÆÊwJ¹š6Œ5ÇÜà7C›‰û sI\¹¢á¼/¤ý²J{4p®^ J ƒ¯&üÕgw»\h±(“\÷KÑ6µpØ6ÃLÑþÜ€„®÷ËìOµ?î3â³Ðl€¬5À¤˜ßMÕ¶ ªó4/Ÿg‚Òà^Úº:åM%ªª"NÁ(¬/Òz‚R²Ì£,£éjVTeŠuð'eÛOÓYÆX‹ 0ÍÑA½ZVµÊª:•yx’ÁGMÿ§Ë÷W}—Ú_p‚6©ó £¢<2€±öPؤÁIBùЏÁ‡«³ßÍôkzµ1 —ÛÅ4Õˆ\i€ €øöû¢Æ®h6›r ­º^X^ž]QÚD³ÑÛ*]£)\±F³ÏlUMŒC.˜˜ëå–‰ñ#&–ý™<Ääa+Âßµ2Á©ý®HÒÆ—€= Úoæ0 ǾóÆ,t«VøîÍ96ÿ†ES…>«ÂüˆÔºMö£/ç¬cÔ9/ûÌ•öç¾ ö…áT®„°Þ?Áe⢄:+rÀù7lí¯æ{Ä™Ñ͵!0Tø¶ë|bC\',⸠Á!F"ŽÓûì&\¶O­Ø¦êkjEG-HÔ ¤VØ]ÕÁ⧨•~°I­9–€Ñ‚mQ*ö(…¦C”kô–RóFˆOƒvˆ‘I÷“@ã½*ž ü½K*·ßq›F蚎ïºlƒ¦“ ­¤Ä–´a™JžDeÒÎSï™n(u9¼dÌ—Q¦L4 Ï'!ó;ÔÙ‹Á•óÅœ3ȯy6ÀëÂM‘4Ü#K«üú,•. ¶³¹o&M.‘kîo²ÛŽx§™y0-!È@}f2* É(í’Ñ혮ëE»ø: éÚfL×uŒémN¸œ)ó „»+x¯_ž†_‡¦ î7ôŽuIBß?z³ä >;pµ¼ƒÐV3ÿjh‡ ³.;<7.B“Àê‹€¢V¹¾E öãnNUô‹€VÈV69ü08;€ª€ÜôITƒ ÇÙœ'o÷Bˆ9…^“qöã EGÒ XsçÀkvè¸:X7¶ ÉW×ówè퀆ææM‹IOPÔ/¥®·Â¦¼Àz’Žõò kuÚ©Ãw\“ö鵡¶]Þ³«5ñнqe ª(. |·Ñî5F»˜SŒ‡Té}OS&×V&° J{V°~ÊRî~ëôðúÁÏ~êì>qB¨ðá ø‰S†DÊÄ •«_üÍ&[Ó{× ¯5¾ê+ŒžºìTúXãTËmBšÛ¥ œ ß^¾B^£¥»%–çÅãò.ÜÎIÿ/ÿ˜ê endstream endobj 2150 0 obj << /Type /Page /Contents 2151 0 R /Resources 2149 0 R /MediaBox [0 0 595.276 841.89] /Parent 2134 0 R >> endobj 2152 0 obj << /D [2150 0 R /XYZ 90 757.935 null] >> endobj 2153 0 obj << /D [2150 0 R /XYZ 90 733.028 null] >> endobj 1956 0 obj << /D [2150 0 R /XYZ 151.19 693.486 null] >> endobj 2154 0 obj << /D [2150 0 R /XYZ 90 678.796 null] >> endobj 1957 0 obj << /D [2150 0 R /XYZ 367.298 631.712 null] >> endobj 2155 0 obj << /D [2150 0 R /XYZ 90 614.984 null] >> endobj 1958 0 obj << /D [2150 0 R /XYZ 90 557.982 null] >> endobj 2156 0 obj << /D [2150 0 R /XYZ 90 543.412 null] >> endobj 1959 0 obj << /D [2150 0 R /XYZ 115.375 496.208 null] >> endobj 2157 0 obj << /D [2150 0 R /XYZ 90 481.518 null] >> endobj 1960 0 obj << /D [2150 0 R /XYZ 114.916 434.434 null] >> endobj 2158 0 obj << /D [2150 0 R /XYZ 90 419.744 null] >> endobj 1961 0 obj << /D [2150 0 R /XYZ 222.073 372.66 null] >> endobj 2159 0 obj << /D [2150 0 R /XYZ 90 356.49 null] >> endobj 1962 0 obj << /D [2150 0 R /XYZ 421.294 322.841 null] >> endobj 2160 0 obj << /D [2150 0 R /XYZ 90 306.113 null] >> endobj 1963 0 obj << /D [2150 0 R /XYZ 419.043 273.022 null] >> endobj 2161 0 obj << /D [2150 0 R /XYZ 90 256.294 null] >> endobj 1964 0 obj << /D [2150 0 R /XYZ 243.453 211.247 null] >> endobj 2162 0 obj << /D [2150 0 R /XYZ 90 195.237 null] >> endobj 1965 0 obj << /D [2150 0 R /XYZ 358.042 149.473 null] >> endobj 2163 0 obj << /D [2150 0 R /XYZ 90 133.463 null] >> endobj 1966 0 obj << /D [2150 0 R /XYZ 359.866 99.654 null] >> endobj 2149 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2175 0 obj << /Length 2043 /Filter /FlateDecode >> stream xÚÅYIoãÆ¾ëW¾„FýØÍ}nÎ,F‚L’g x(²-¡H½&5ýûTuiègCNꥺºö¯šòœ­ã97‹o׋ÿ¼W©“Š4R‘³~tRω#)B%uáÜ»¡j¹’žç¹Oy{0ûåJ…ž{×™cÞÑøV?j³”‰«ë\ÃRœ¤‰ÈåÃúûÅ»õâÿ wyŽ´¼ÃXÄ~èäûÅýƒç°þ½ã ?Mœ'KµwåÃoåÜ-þ»ð¾(§ò……£œB‰Àcaó]fH<ûõë¶=µ­•3GÑ€Ÿ7áç9+‹HÄîW/ônÊ¥ ÝK‚f¯–«0NÜìø©¬ÊÌœ€@Â’ô]!Þ™Æn·Ó´ÔtÞ™¬Â™r Ú‡lƒ›&ÛkÚÁ[Ú.«‹Ì´Ù<ögÚn¼¢¬iõiWæ;ZêveË‹Ké¹YKË{µG£‹W¬bz¡¢iÈ»»ûåîîö úÉ„0ðÁGÐ[ºlÆZ¡Hã¸'3w­‚TÄÒwV¾2½ð‘dÍqSés/}Dmt•ÕÛêÏyI¥Þ¥—Tâ»kôJ”‹œyx_h<¶} i·Ë:µ»æXtpÃÄÇVL×Ðo¡ófhZM„YMËͦՆäá4©š¼ìN´RÖÄÄwMV”($Z:_: "©n‰‡iÙ\öæZ×]+æ==gwõlnÀoQùçò•¿Ì‹˜,ÊÈ­9Þcw;=I›hÜêzê¼iLQÖYÇgŒ>@2€¦YW6õ\\«4I0„ãÿÞÜý¸Tž{ýáÝLl‡J¤¾üZl'clƒ+ "לnH*d¦Ì0tÑ[+? DFì´ˆ9çࢦ5àœ§¤ ª¦ÞBvÃ$H­ª>A$º­µ)ëíŠ.ªŽExîýwë;ýfs­x²É7RB°ÂIâR•û²ëÏ¢•ñ7Jè# Ë;ˆ'{P¹‡ê8‘s&ëcU­àÀ]c/±aØóY†¡û¥H Î#ÑçH„<8Dpóæ QŽQHTÁ”ʾÎkŽnüâ5÷Éǃ4Içí’øeÄÆ7ë_~žûìä€FƒšåÜw'é‹t›Þ9,ÓSÙíXf“•A ÌŠ¬Ýi–ΦaP ­*AW é¯Ý³ˆ©ôVçðˆêñ*kÇï9÷ÉR_ ³ªÜÖ„Þ8…¶£ÅŽñ³‚{ù±?JD ÑôÂoýý7þH¤1ØŽ¾ñ‡ð¹ÜèZî ±V3Æ~èï‹4#kD?Ò{È×aL3åáŸV7¤mÆú÷ÃwßÒ8€Ơ˘ð¶ùtÚRW4Õôwïýr} endstream endobj 2174 0 obj << /Type /Page /Contents 2175 0 R /Resources 2173 0 R /MediaBox [0 0 595.276 841.89] /Parent 2134 0 R /Annots [ 2164 0 R 2165 0 R 2166 0 R 2167 0 R 2168 0 R 2169 0 R 2170 0 R 2171 0 R 2172 0 R ] >> endobj 2164 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.796 505.01 190.044 515.914] /Subtype /Link /A << /S /GoTo /D (structwcsprm_292133b2b7143b969a3af6a3f2cf3709) >> >> endobj 2165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.796 455.191 192.813 466.095] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9063e8d0c956e9eae7f7d6f3608b9ed2) >> >> endobj 2166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [304.504 405.372 334.721 416.276] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 2167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.872 375.792 233.1 386.696] /Subtype /Link /A << /S /GoTo /D (structwcsprm_94c26ce331cc876d63baeeada9820241) >> >> endobj 2168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [475.212 375.792 511.506 386.696] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 2169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [109.2 346.213 139.417 357.117] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 2170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.939 260.528 334.934 271.432] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.094 230.949 235.092 241.853] /Subtype /Link /A << /S /GoTo /D (structwcsprm_8625c0a6ff99c754566c46c2372df801) >> >> endobj 2172 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [475.212 230.949 511.506 241.853] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 2176 0 obj << /D [2174 0 R /XYZ 90 757.935 null] >> endobj 2177 0 obj << /D [2174 0 R /XYZ 90 733.028 null] >> endobj 1967 0 obj << /D [2174 0 R /XYZ 145.292 693.486 null] >> endobj 2178 0 obj << /D [2174 0 R /XYZ 90 678.761 null] >> endobj 1968 0 obj << /D [2174 0 R /XYZ 186.457 631.712 null] >> endobj 2179 0 obj << /D [2174 0 R /XYZ 90 614.984 null] >> endobj 1969 0 obj << /D [2174 0 R /XYZ 198.781 557.982 null] >> endobj 2180 0 obj << /D [2174 0 R /XYZ 90 541.255 null] >> endobj 1970 0 obj << /D [2174 0 R /XYZ 194.626 508.163 null] >> endobj 2181 0 obj << /D [2174 0 R /XYZ 90 491.436 null] >> endobj 1971 0 obj << /D [2174 0 R /XYZ 197.396 458.344 null] >> endobj 2182 0 obj << /D [2174 0 R /XYZ 90 441.617 null] >> endobj 1972 0 obj << /D [2174 0 R /XYZ 148.42 313.501 null] >> endobj 2183 0 obj << /D [2174 0 R /XYZ 90 296.773 null] >> endobj 1973 0 obj << /D [2174 0 R /XYZ 211.413 222.147 null] >> endobj 2184 0 obj << /D [2174 0 R /XYZ 90 205.42 null] >> endobj 1974 0 obj << /D [2174 0 R /XYZ 323.482 172.328 null] >> endobj 2185 0 obj << /D [2174 0 R /XYZ 90 155.601 null] >> endobj 1975 0 obj << /D [2174 0 R /XYZ 269.027 98.598 null] >> endobj 2173 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F40 846 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2194 0 obj << /Length 1751 /Filter /FlateDecode >> stream xÚÅYÛrÛ6}×Wpò$u"^ý渶'iÒ&±:ŽëéÐ$,!¡H$c»_ß"MY¶S'OÀ°8»{° agé`çtòj1ùù„FN„"ŸúÎâʉ°øy”8‹Ô9ŸzˆÐÙœ`Œ§×I¹‘ëÙœzxzVÉ:©tû#¿ârFÂ)ÏCA…S—Î.o&Njɗ ½°Cšµ½Ìs’õäü;)Œ¿q0bQè\7RkÇ¥ ~3çlòa‚ïÕ“2„}¯ÓQäFFY‘í´ÖY¾TÁ2xkìÌI€|êêUþÆÖRî¶CŒ„ ÛÈ|äU-sžŽ¬Æ|DÄ ÂbDëð:OùŒxÓݽ*¤nT+®Y‘/EU§¦›…LEWü¥ˆóT7Bfßm0æ.FGΜÄzxÀqváW÷àá=+ê «Òj0qõ<¸]¸”žüG!‘§¡ÝF7À¨FŒj(5+gº×£û"ˆ‹õ2‘éùÅù…î7À©Æõ ÌPȬýæOc)ãÛrÇB‡ï_ëFqÕ¸Žl¹4!þñtâœë…OZ*œšãiYÍpä—»&·&#EžqCX«¤›kµŽ°ScÞµ¸Ù¥Nã@¢ÏI©7¼9<°ä‰hOµµ¹‚X nÂC™\]eä ·ÂÀ°#·!¶E¬ÛÕÎÙ¶EÓ²¦Àz»ßŠ|®îw¡0O†©O‡ºO›¹^züyì Ú£ÍYU|Vqj£´ÓäáûÓ'ìOÍþGàle%Tª3Dc©<ÉêT´~$ÁÝI>†$!¼íð¸ÿœ$Š÷ 83‹s›Ñ݇2”K¡oÜ,¸ß¹Ï8\ºß»¿£s¿9宨}.'þPÇy%þµ—JÿÞ#ipæÚUΪ¼ýý×ã³1:ßÑéË‘Åz Ô38`è"BÂLJ†š"žlË>I?ôf.öxs±a, ){±ñ8=žˆkµXÎTŽ.ªÕZ$ß Ï쾘…°Ý¥ºëlwÌ (aÏ}©žÜÏ$v‡†~JK§²¨7Z‹¼^_r9sñÔÔ÷-JYQ|¶bU|™ñ3.y—[ä6ùè=2˜Üä6÷æ‹°‘zñ«7»ÇfžzüR×pMýr7tk*Þ¥GÕêŽÑ,‡™\]m_öÒ*ÈØ³&‰àÆyR¾áyÚ"dsë6Éëxqo~ÑÚTæ?Áþ' £bÓè°ïNˆ|?€-œ=“ ÿÔ—Ð;@ªŽÉàÚÙõÂ64 ^Èøm³o{ɼÝñXõ?lAÆR ÕÜcË¿öR3¡²{ØÌC4 ß@¦=C߉ãÒ€7âƒFCµ=Ï^×Y%REH ¨u›fÁñ‡@…Pé÷*‚£Å_ïGÞ;CA§½}ðÓù-òJ7FÙô…;g/T“ªBe­¯…Š\5VçÒ±e®Óõ-ΖEs·h]çèIY¦[«XÑ¿}iRR¢*õ'] ©¡’Wf¨Ð¿s¢?4Ï|j`És®Ëf=¬KvWÅ.íWì\Ê¢óŠá+ÉW¥M!Ò‘âco¤øÅ»R¡Mœv\¤hôйÎ;Jƒ›¸ã|‘—\Vö{[Õ-ó®*ÝÔR=(Ùr6Ïng>êÎëßðЦàú…ýcÂGQ è¼ùcƒ‚ÀòÓ©~ðšñÎ6NÔñø¥îøú‡à—xîPû\B»@úóèìíëWº ù6ן¹”~)nnÁæÃ“þÂòP* endstream endobj 2193 0 obj << /Type /Page /Contents 2194 0 R /Resources 2192 0 R /MediaBox [0 0 595.276 841.89] /Parent 2134 0 R /Annots [ 2187 0 R 2188 0 R 2189 0 R 2190 0 R 2191 0 R ] >> endobj 2187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [473.548 604.439 511.506 615.343] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 2188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 592.483 126.961 603.387] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 2189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.336 592.483 183.957 603.387] /Subtype /Link /A << /S /GoTo /D (wcs_8h_f3f00b876c8212d43f32a51feeadaa81) >> >> endobj 2190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [307.711 502.024 332.667 512.928] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [407.807 229.173 438.023 240.077] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 2195 0 obj << /D [2193 0 R /XYZ 90 757.935 null] >> endobj 2196 0 obj << /D [2193 0 R /XYZ 90 733.028 null] >> endobj 1976 0 obj << /D [2193 0 R /XYZ 304.315 705.441 null] >> endobj 2197 0 obj << /D [2193 0 R /XYZ 90 689.608 null] >> endobj 1977 0 obj << /D [2193 0 R /XYZ 306.576 656.516 null] >> endobj 2198 0 obj << /D [2193 0 R /XYZ 90 641.057 null] >> endobj 1978 0 obj << /D [2193 0 R /XYZ 153.252 566.057 null] >> endobj 2199 0 obj << /D [2193 0 R /XYZ 90 550.224 null] >> endobj 1979 0 obj << /D [2193 0 R /XYZ 340.568 505.177 null] >> endobj 2200 0 obj << /D [2193 0 R /XYZ 90 489.345 null] >> endobj 1980 0 obj << /D [2193 0 R /XYZ 386.954 89.441 null] >> endobj 2192 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2210 0 obj << /Length 902 /Filter /FlateDecode >> stream xÚÍWMoÛ< ¾ûWèh‹&Ù–lõ¸¶ÃÛØ¡+ ÅVRŽÉòÚþû—¶¤4I½nš®'K4E>äCIA+DÐYðn¼=Xð˜£ù ‚2N1‹)š—è2d˜ÆÑŒBÂÛ¢Ûèu4‹ /Œî cÇçj©tDóP5…Q–‹odÖw’ïø¦œcF½óK­dyå ’µ™Ó›Ñ ó˜ùp±ºé®n‚š{‹çÊôºQå„Í„ãLЇÜ0j©%µ-›nÙêµ4UÛXÙFj¹VFéÎÎ}'WÊN+'.UWèj®­Ø­67No£Ûº]õnfÚ±†lñè•«¢ó³]úŒâ§bëÄaÆ„ÎR‚)Ó|ñ ¾ U?â d“|e˜åüO³Š/ÁØ{U«ÎT²~e¤A Ÿ‰´l‚´nS<" dS¤Áþ%àì÷¤9Å— íb£ `êµq|&Îò ΀'¥õÄAM ÆsRo îqÎу½§(g˜‰ا" ?-‡o —§\Ôª|Í’†·7ª±rÙX=ˆ¨ÕvØiúÎþ ™öžG©¹ñòm¢a\´‘UãV– &µ]‘@…ìä¢í·¦ì•癥 æÒbq¥$|ãv RO“¥ûÚÆ;$uÌÅAq…Ë€+¢ŸQü«;=&˜6Q)»¤Xä[Ö×þ6ßî£Óˆ²°Õ~ËÀ&küVì;·UÚ¦¾8 ±G}XýñàÅ·͉8fsòÐãöd'ĸT®¯r5‘¼.ž+_d!ý5ÂFÞAqÿk€¾).ÛÊx‚È,‡<³¿#²ÐClª»©Ã)ç˜dÙ‹›3X;ÿó(Ó£RZªÚ¼’@Ùñkw<ádýJæ{/ØeßT戇Èö.;|ó èþðýëß½‹ :ûîe˜à™j”–Æ÷y¾Küê§QÌBµ°n?”œ¤ôdhŸ‡YL†þ0Zº>Ðoï/¾|zgÇ)Üúv´¸·ßíÝýJ5‡‘þƒ'‘ endstream endobj 2209 0 obj << /Type /Page /Contents 2210 0 R /Resources 2208 0 R /MediaBox [0 0 595.276 841.89] /Parent 2134 0 R /Annots [ 2204 0 R 2205 0 R 2206 0 R 2207 0 R ] >> endobj 2204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.111 670.093 442.096 680.997] /Subtype /Link /A << /S /GoTo /D (lin_8h) >> >> endobj 2205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.977 620.274 452.058 631.178] /Subtype /Link /A << /S /GoTo /D (cel_8h) >> >> endobj 2206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.756 570.455 451.5 581.359] /Subtype /Link /A << /S /GoTo /D (spc_8h) >> >> endobj 2207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.157 509.055 194.318 519.585] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2211 0 obj << /D [2209 0 R /XYZ 90 757.935 null] >> endobj 2212 0 obj << /D [2209 0 R /XYZ 90 733.028 null] >> endobj 1981 0 obj << /D [2209 0 R /XYZ 90 721.043 null] >> endobj 2213 0 obj << /D [2209 0 R /XYZ 90 706.473 null] >> endobj 1982 0 obj << /D [2209 0 R /XYZ 449.996 673.246 null] >> endobj 2214 0 obj << /D [2209 0 R /XYZ 90 656.519 null] >> endobj 1983 0 obj << /D [2209 0 R /XYZ 459.958 623.427 null] >> endobj 2215 0 obj << /D [2209 0 R /XYZ 90 606.7 null] >> endobj 1984 0 obj << /D [2209 0 R /XYZ 459.401 573.608 null] >> endobj 2216 0 obj << /D [2209 0 R /XYZ 90 556.881 null] >> endobj 1985 0 obj << /D [2209 0 R /XYZ 256.465 494.21 null] >> endobj 2217 0 obj << /D [2209 0 R /XYZ 90 477.483 null] >> endobj 1986 0 obj << /D [2209 0 R /XYZ 90 459.993 null] >> endobj 2218 0 obj << /D [2209 0 R /XYZ 90 445.422 null] >> endobj 1987 0 obj << /D [2209 0 R /XYZ 184.156 412.196 null] >> endobj 2219 0 obj << /D [2209 0 R /XYZ 90 395.469 null] >> endobj 1988 0 obj << /D [2209 0 R /XYZ 184.156 362.377 null] >> endobj 2220 0 obj << /D [2209 0 R /XYZ 90 345.65 null] >> endobj 1989 0 obj << /D [2209 0 R /XYZ 184.156 312.558 null] >> endobj 2221 0 obj << /D [2209 0 R /XYZ 90 295.831 null] >> endobj 1990 0 obj << /D [2209 0 R /XYZ 184.156 262.739 null] >> endobj 2222 0 obj << /D [2209 0 R /XYZ 90 246.012 null] >> endobj 2023 0 obj << /D [2209 0 R /XYZ 184.156 212.92 null] >> endobj 2223 0 obj << /D [2209 0 R /XYZ 90 196.193 null] >> endobj 2024 0 obj << /D [2209 0 R /XYZ 184.156 163.101 null] >> endobj 2224 0 obj << /D [2209 0 R /XYZ 90 146.374 null] >> endobj 2025 0 obj << /D [2209 0 R /XYZ 184.156 113.282 null] >> endobj 2208 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F38 780 0 R /F20 595 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2228 0 obj << /Length 698 /Filter /FlateDecode >> stream xÚÍVMoÓ@½ûW¬ÄÅ>dØïW„´U«‚Ä¡Dȱ7%±ƒí´É¿g›µC[E$ô´ãhòüÞÛñÌ`t‡0ºÃàå9ÕHƒT áiŒ¤ À)Aà ݆‹zc>4㤪¢å8¼iªEÚ¸ø“™˜*"*4EjìOŠ*Æq4^gÃàG@ì»0"kl.A2ŽÒYp;Â(³¿_! L+ô°Îš¡˜2{æè&øà¿ò¤ °àž(Ù‘Mëy5ë÷g_Óf57d,ÞBÀ¨G$;€/˜ãóˆð°l%N‹ÆTE’»§Em\Pù*<ûÒÂêßa¢wx©–W½eÜü>MªÌax ƒ` X)‹ÕRÃÌó& ±¤]Î/½ó{—ËÔv®¥ Y—|[™$y<é%rvRk´ÏšúIk8hE´¦öYc«]É}¬á€crJk$n­ÉÊÅ87;¤ùan¤™O¦€¥<©JrT•ëÖT6É3K[±Õ£Ô¶Þ˜é•–y²ô© 49má²?Ûp‘Ìþ{–ñqK-³ƒðy”?ªÐz>±Â3AšdlÙz'ˆªüÆ,ªo„XÉ„ì1B´%k‡×)½‘oÚMî‰ÅC¸xXTŸ7 (¥{z#ÿ©7„€æœvæÄ@ìNuØVëí[4k‡x¶lª$m¦eÑ2š¸3-Ë*›IÓ2ÍËòûb¾)ÑÜÔ.žTåÌEƒËÃH³ðÍàú <†î4ÌÓ"ÍY÷‰“­LÎ@êÍe¾ò]Žíˆ›/áÎ4ö2-)øæÜ6•Íùz½Ýwëùî–¿8jß%¿[îhiÙ¹åžk༕xa SY³î²Ýù¾ Î#ÊC3vÂ÷cÒçÒ=QLhëócnWMŸßÞ\_\l«»h¼rç»r¹º3ŮҟÏ>x endstream endobj 2227 0 obj << /Type /Page /Contents 2228 0 R /Resources 2226 0 R /MediaBox [0 0 595.276 841.89] /Parent 2241 0 R >> endobj 2229 0 obj << /D [2227 0 R /XYZ 90 757.935 null] >> endobj 2230 0 obj << /D [2227 0 R /XYZ 90 733.028 null] >> endobj 2026 0 obj << /D [2227 0 R /XYZ 184.156 705.441 null] >> endobj 2231 0 obj << /D [2227 0 R /XYZ 90 688.714 null] >> endobj 2027 0 obj << /D [2227 0 R /XYZ 184.156 655.622 null] >> endobj 2232 0 obj << /D [2227 0 R /XYZ 90 638.895 null] >> endobj 2028 0 obj << /D [2227 0 R /XYZ 184.156 605.803 null] >> endobj 2233 0 obj << /D [2227 0 R /XYZ 90 589.076 null] >> endobj 2029 0 obj << /D [2227 0 R /XYZ 184.156 555.984 null] >> endobj 2234 0 obj << /D [2227 0 R /XYZ 90 539.257 null] >> endobj 2030 0 obj << /D [2227 0 R /XYZ 184.156 506.165 null] >> endobj 2235 0 obj << /D [2227 0 R /XYZ 90 489.438 null] >> endobj 2031 0 obj << /D [2227 0 R /XYZ 184.156 456.346 null] >> endobj 2236 0 obj << /D [2227 0 R /XYZ 90 439.619 null] >> endobj 2032 0 obj << /D [2227 0 R /XYZ 184.156 406.527 null] >> endobj 2237 0 obj << /D [2227 0 R /XYZ 90 389.8 null] >> endobj 2033 0 obj << /D [2227 0 R /XYZ 184.156 356.708 null] >> endobj 2238 0 obj << /D [2227 0 R /XYZ 90 339.981 null] >> endobj 2034 0 obj << /D [2227 0 R /XYZ 184.156 306.889 null] >> endobj 2239 0 obj << /D [2227 0 R /XYZ 90 290.162 null] >> endobj 2035 0 obj << /D [2227 0 R /XYZ 184.156 257.07 null] >> endobj 2240 0 obj << /D [2227 0 R /XYZ 90 240.343 null] >> endobj 1029 0 obj << /D [2227 0 R /XYZ 187.245 207.251 null] >> endobj 186 0 obj << /D [2227 0 R /XYZ 90 190.523 null] >> endobj 2226 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F38 780 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2263 0 obj << /Length 1455 /Filter /FlateDecode >> stream xÚÍX[oÛ6~÷¯Ð£„Î,I‰ºä­iã"EÛa± ÈŠ–èX¨.žD'õ¿ßáEªeËvŠ¤ÝžtD‘üÎý"ìÜ9Øy;¹œO^Îhâ$( ièÌ—N‚($ˆQâÌ3çÖeˆøÞ”`ŒÝ¹àMãM)Ãîl6©4ô'±GbWT©€¥˜Æ‘0ïóüÝäj>ùgB ;DßÍ"ùÌIËÉígìd°þÎÁÈObçAï*€úð,œ›Éo|’Oê#2Ãç.¹ag–‹"k5zwÎâ³$D;SJQØÿ‹R68ãÜNWÒ.+ š;+Ê'½AÁåƒSýiìL E #O¼¾ü±×É«ì4=®xsBx„¹_eÅËýóêëmD?ןK4‹{¯¢y’Å*„G™{ÿ$“W¨”Ûµø>]ž‘¯¨«»Ó˜M­${ø±ÎXeyùvz9#ÁN¸S‚‚¶™£ûG¸ØË "ÚÎ Q3O³ö(%dõfQˆ.ýá(Úeóñ¬pÀ‚î,$i¾]ï'ÀÝä9 C gêSDö-Ó#bsý!y^ˆÌ¤Ô7¢M›|-óº2œÐÁ84@~˜{f›*ív±u@݇´…„MÜ‚´ {úAötæþû°ÊÓ•"‰›·ž¾!¯¼C°QìÖ_<A˜™ |#ë’Ë<åE±5{ÛSÜÅÍ:_)6NðÐ Ù„ÍÚ\Ë+‹¨4n–ê¥ÕЮ¾}#Æzg²…ôP“`÷vluµ²¶m›·ÚËÁz!E±‚ãpKÜ×/^B«øôãÐ]ˆ”oZa>@Xê'7hFì‡vÍSK¦u¥Rn®úZõþË•¡¬ûíE5ä„“à|Tû»ÙYïLXv2ˆ´R.©^Uìjyf×ó›ë_ÍËJðÌô/g£1(fÍ«+$D Z)É1>ÂnÁ‘ð19è[j»6?Á&ï‚ý¡Z9bÒmB¬]÷Àb¨H˜ ÁþnGà6íñ[ƒµn8O*ÚV™X¡”&©¦—µ%`€2eмšq#…:Ó~¯:ücê膴Ÿ®‘×0‹@ÿÐÉœgà²ùÒîÝLDu*×] DDaz`ˆ%gfïôòt ƒ¶¥GT¤ƒid¢çFz{íQËõåîÇA€ ‡Æ ¬ñôø6°žègߟi¿CîŠqÑÕŸóªs~õájä:õÉû¸Õû®ÐTïÂ.ºÂQ=Æ!"@Ž;BòØŽòÿ/Uþ~õi¬´A{€Ù3ª±wäý¿j!   Ù#ªu?Ó`ŒÀ›ÍÏ4–À„bÕ÷VT¢á²›þt•…燎˜©†{h_ä‚EæbBmžT{»\ùÇë›÷×—† Zù·]Qüº½Û²AÒy(O endstream endobj 2262 0 obj << /Type /Page /Contents 2263 0 R /Resources 2261 0 R /MediaBox [0 0 595.276 841.89] /Parent 2241 0 R /Annots [ 2225 0 R 2242 0 R 2243 0 R 2244 0 R 2245 0 R 2246 0 R 2247 0 R 2248 0 R 2249 0 R 2250 0 R 2251 0 R 2252 0 R 2253 0 R 2254 0 R 2255 0 R 2256 0 R 2257 0 R 2258 0 R 2259 0 R 2260 0 R ] >> endobj 2225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 699.305 131.683 708.151] /Subtype /Link /A << /S /GoTo /D (structwtbarr_8743b84c99b4b5e7ab7bf0653507a180) >> >> endobj 2242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 686.353 136.665 695.2] /Subtype /Link /A << /S /GoTo /D (structwtbarr_1e88ad32570534a006e96cba721489b5) >> >> endobj 2243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 673.402 146.627 682.248] /Subtype /Link /A << /S /GoTo /D (structwtbarr_f8ea7b15992ab7a86be63ff83318be41) >> >> endobj 2244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 658.951 164.719 669.297] /Subtype /Link /A << /S /GoTo /D (structwtbarr_9f1fcad814aa3da08dfa75ede2a07deb) >> >> endobj 2245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 647.499 153.512 656.345] /Subtype /Link /A << /S /GoTo /D (structwtbarr_24487eda7b17800f41bd4a452c6306d5) >> >> endobj 2246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 634.547 152.864 643.394] /Subtype /Link /A << /S /GoTo /D (structwtbarr_10c8dba85b62e2794071dd50a41c4bb1) >> >> endobj 2247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 619.539 155.464 630.443] /Subtype /Link /A << /S /GoTo /D (structwtbarr_750832793167bbeebd1074e29844415d) >> >> endobj 2248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.114 606.587 151.35 617.491] /Subtype /Link /A << /S /GoTo /D (structwtbarr_2ff7c235353320c6dd98951484012ee7) >> >> endobj 2249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 595.693 149.397 604.54] /Subtype /Link /A << /S /GoTo /D (structwtbarr_f862b4f90b0406ed8dd0c240768d4bd3) >> >> endobj 2250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 582.742 164.062 591.588] /Subtype /Link /A << /S /GoTo /D (structwtbarr_901403d05f985d4a1fbd2fdc9585bd50) >> >> endobj 2251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.972 567.733 183.409 578.637] /Subtype /Link /A << /S /GoTo /D (structwtbarr_41c30234dbdf18ac094872cf39562172) >> >> endobj 2252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.837 511.189 163.13 522.203] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 2253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [304.678 511.189 341.529 522.203] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 2254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.994 487.279 134.21 498.183] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 2255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.594 487.279 235.128 498.183] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 2256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.972 487.279 390.823 498.183] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 2257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.849 487.279 445.143 498.183] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 2258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [456.533 487.279 494.222 498.183] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h) >> >> endobj 2259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.358 475.324 191.598 486.228] /Subtype /Link /A << /S /GoTo /D (tab_8h) >> >> endobj 2260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [99.245 435.846 124.201 444.693] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2264 0 obj << /D [2262 0 R /XYZ 90 757.935 null] >> endobj 2265 0 obj << /D [2262 0 R /XYZ 90 716.221 null] >> endobj 190 0 obj << /D [2262 0 R /XYZ 90 554.159 null] >> endobj 194 0 obj << /D [2262 0 R /XYZ 90 422.272 null] >> endobj 2266 0 obj << /D [2262 0 R /XYZ 90 397.903 null] >> endobj 2267 0 obj << /D [2262 0 R /XYZ 90 397.903 null] >> endobj 2268 0 obj << /D [2262 0 R /XYZ 204.31 362.774 null] >> endobj 2269 0 obj << /D [2262 0 R /XYZ 90 346.047 null] >> endobj 2270 0 obj << /D [2262 0 R /XYZ 300.28 312.955 null] >> endobj 2271 0 obj << /D [2262 0 R /XYZ 90 296.228 null] >> endobj 2272 0 obj << /D [2262 0 R /XYZ 90 209.546 null] >> endobj 2273 0 obj << /D [2262 0 R /XYZ 90 194.976 null] >> endobj 2274 0 obj << /D [2262 0 R /XYZ 330.426 159.827 null] >> endobj 2275 0 obj << /D [2262 0 R /XYZ 90 143.1 null] >> endobj 2276 0 obj << /D [2262 0 R /XYZ 321.221 110.008 null] >> endobj 2261 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2294 0 obj << /Length 1185 /Filter /FlateDecode >> stream xÚÍXKsÛ6¾ëWp’ u€HúÖØ²§·“Æš¤'Ó¡IHB‡"U’Š­þú.^4ES®ÝqÚœ‚‹»ß>)ì­<ì]LÞ.&oÎiâ%(á”{‹¥—`/â1J¼Eî]û|:£ ûç²fuVe»(Û´•U9”&òé—Å»É|1ùsB{D#±Eó²Íäú örØça$±w«¥6^Hø-¼«É/ü¨V4@˜3£C$@rcì˲5Êݶ7i]Ÿœˆ»ô%Ìÿªô0ÜÃÞŒDˆÓÐ`}Æ ©°/ €Ä «e.äWQŽ@NQ℈X™¾î Ÿšÿº¸œA ²È‰É–˽,Wưvmé¿‘eZïífzã¼¢½kEÙ€WЈ³ˆ£ JÂÞQ¨×aÐS#ø #êd“`B1JÀŒÇ(!ä›2„Üÿ!ÏkÑ4æA‘„‘!Om€)´nZó ¡úN_”ûiiŽj^É¡,Xºj×F^‡«Ìêv-³µYv8÷ îHïd£Œ¼÷!(aÖkæ¢Æ9Ý•ˆÊVµl¡`Åb£ ¯v*×B#ŽY?Ž¡Ðm‚a4h·cÑ„Yümó‹Çþû ¼!jó ù‚_åbÊ;úÕ–Î2øµDèµõžZʦÆRQTYjòo,šÉUXìwwZææ¨‰Ž~w KnuD«÷0&¸m7Í£€„"Œº0HÌWÝ(¦Ýlët(: ¬ÓØ" B™(Ðz8Ú}K¡[‰(31ÒašÒ.1h¯e™»s@|µ­ÿ@ëWšA%k¢®­ìã‘–¶©Ñíª­wY»3êéÜëÆÅAlÕا0ºyñ3¥ìàŒw=c K£Qí5´Ö+;½~Ð2º¡‹b[oNu @Áä<ÔÑ 7‡8QZN¡|5­L µØÒ²YVõÆŽÒj›š¡òzƒFo6ˆq0Efo<ª|–/GÖëÜ">Î×éüòrþó@½Q£‘‰j©WÿŽ{[0ÞÜAŽª7;>Ë;6µ®ìa¾jú5L¯å}õ»× ‰¡÷³¾ëéZBG¸+‘»R¶G"áˆcgò(Œ”kÝÉ_µ`³,åï½›f5Ðæø‘qùggЙØÖÓ ò….áÏ#Ãái.^ŠŠmÝ~‡T ¿Áõ ?õÜ}zs”DP̧7KsUåB”¢N»ØÕ­ŸÜâ\þ¼öÏ‚OBrÂ"óD1¡fµT²•ýäützuùã[³õÄ«ÛäÞuº»ýÊŒ}KÿwÉ€ endstream endobj 2293 0 obj << /Type /Page /Contents 2294 0 R /Resources 2292 0 R /MediaBox [0 0 595.276 841.89] /Parent 2241 0 R /Annots [ 2282 0 R 2283 0 R 2284 0 R 2285 0 R 2286 0 R 2287 0 R 2288 0 R 2289 0 R ] >> endobj 2282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 263.228 168.196 274.132] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 182.465 185.91 193.369] /Subtype /Link /A << /S /GoTo /D (cel_8h_055ad88aa219a0207e221d62e03d2e23) >> >> endobj 2284 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.461 182.465 271.119 193.369] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 167.845 194.077 177.75] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 143.611 202.507 154.515] /Subtype /Link /A << /S /GoTo /D (cel_8h_0474e3e2d6c39249acbe58cedd573e84) >> >> endobj 2287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.005 143.611 249.261 154.515] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 104.757 203.055 115.661] /Subtype /Link /A << /S /GoTo /D (cel_8h_9e188b582ee4eb815466e86bb684fc82) >> >> endobj 2289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.553 104.757 249.809 115.661] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2295 0 obj << /D [2293 0 R /XYZ 90 757.935 null] >> endobj 2296 0 obj << /D [2293 0 R /XYZ 90 733.028 null] >> endobj 2277 0 obj << /D [2293 0 R /XYZ 320.673 705.441 null] >> endobj 2297 0 obj << /D [2293 0 R /XYZ 90 688.714 null] >> endobj 2278 0 obj << /D [2293 0 R /XYZ 456.462 655.622 null] >> endobj 2298 0 obj << /D [2293 0 R /XYZ 90 638.895 null] >> endobj 2279 0 obj << /D [2293 0 R /XYZ 200.495 605.803 null] >> endobj 2299 0 obj << /D [2293 0 R /XYZ 90 589.449 null] >> endobj 2280 0 obj << /D [2293 0 R /XYZ 305.201 555.984 null] >> endobj 2300 0 obj << /D [2293 0 R /XYZ 90 539.257 null] >> endobj 2281 0 obj << /D [2293 0 R /XYZ 191.867 494.21 null] >> endobj 2301 0 obj << /D [2293 0 R /XYZ 90 477.483 null] >> endobj 198 0 obj << /D [2293 0 R /XYZ 90 416.645 null] >> endobj 1030 0 obj << /D [2293 0 R /XYZ 90 382.659 null] >> endobj 202 0 obj << /D [2293 0 R /XYZ 90 382.659 null] >> endobj 2302 0 obj << /D [2293 0 R /XYZ 90 282.202 null] >> endobj 2303 0 obj << /D [2293 0 R /XYZ 90 201.439 null] >> endobj 2292 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2337 0 obj << /Length 1120 /Filter /FlateDecode >> stream xÚÝX[oâ8~çWXÚ—D*_b'iz¡£Ž:m˜éHm…R0 ‚´Úÿ¾'±Ã$]ж»/ØØ'ŸÏå;Ç‚ˆ Ïµ³víÃ%ó‘}É$j÷‘O+)Œ¢v=XS»N !VWð‹]g‚X—Ñҽ¦ê«È¦ž¥Â. qâIßr\û©ý¥Öh×þ¨QX‡ šâ »\ î¸öðDPÆ¿ ‚¹ï¡Ÿ©Ô9ŒC;B­Úï5btÜÖjÝINwJ$v¸‡\J0¥Ž6à‘1‘ª“}‡êÌù­§ a¡2“‰’ÑÀhÛLÅÁꙊ;*ŠÆ³A§ê“ÍòÅöÃ¥CÊK'Qž1,†êÔÁ¾ct¿PÓÈæ®¥ºA¬zx\Áõ qìÓ·rÅ‚Íþë®x3_ÌØâû¢”Öuîc⡺Ã1\Ã4ÂùXEA<œ„³F9­tV¥n”¢Ú} 0wzθ¡“^$"nCð°#}ð…_h=Î×f³Óúv~ÞhµÊ`’3ë“ ·ÈÉvµ\æe@7ß®¯;w·W7íFsk4fÑJ4?C;³¹°N/:w¶Ï¬Óæé× ÙVHSì Y09Ã>¿½m^tÚÍÓ›Ö&_~ÒušW¢¯ùó ¼°°sRî²'®~T€‰×ÝÛ”X·Íë‹ H©›¿‘rN0È)âBn0L3\ÎÃî›fÄ0Œw&Ä0n2á‘2‹£yw7Â4—†ý/¿3:˜Aþ£+!Ü8$o¸Ã£™ €ÂútKq)Ô¨º'±pÜr‘êóQ¬Ý߇¦†L"=ÐÏ:ñ‹zµqfF#o+Ø'rýH©c‡ÎǪÞîб:ÎzÄ/‡îëðXM£x[¨R~Ú9EŽó0s–pN¸’–2î.J¼*ÙŽ°&óxªÿUá(~üBéÂN{¬Bébâ‹bØZ*žOßsØŠæÞ°¦Ìì7°3npQå¯,’'à[Æ,5°L¸X±ágiKa•gf‹Íã 5+)0Ø›ÌŸÓ 3ôp–Òzª[¦bîJÌÌM@’D‡›S¡9~L_†ùO î+8MŸ8ȯ\š…ƒŠ¯GA\š]ÐZ¿¦÷Mà?uy©| jT'õŸ“hÔ³3VÃ^4 FÆŒ(‰GÎ /ÆéÅå_ªFp^×7À5Vsg?Vk„=XíIúÊj”Än‡:F°NÑ] âò˜ánaè˹\ql\Ñ„Jä©ÌóÈP™cî–¨œ§Þa´^T|»ÜNi£¦<ŒÏ÷É¥/¡rÂéiBîƒ8]u¡7+~OV ¢aF¾Ùý%w4꾑æ_¥‚â¤W"éÞ—´p±ãæËñ¦×³‡e±*Ì•ß%ăzû>/fOŸû.øB?} ‹Ì›ŸU˜¼Ž(SŠ&¡n¿fK› K=®™”|tèGáêŒPföñD6ÛËïÏ[×WgæúŒ)ѽç¥n/&‹å@…eKÿf]ô endstream endobj 2336 0 obj << /Type /Page /Contents 2337 0 R /Resources 2335 0 R /MediaBox [0 0 595.276 841.89] /Parent 2241 0 R /Annots [ 2290 0 R 2291 0 R 2305 0 R 2306 0 R 2307 0 R 2308 0 R 2309 0 R 2310 0 R 2311 0 R 2312 0 R 2313 0 R 2314 0 R 2315 0 R 2316 0 R 2317 0 R 2318 0 R 2319 0 R 2320 0 R 2321 0 R 2322 0 R 2323 0 R 2324 0 R 2325 0 R 2326 0 R 2327 0 R 2328 0 R 2329 0 R 2330 0 R 2331 0 R 2332 0 R 2333 0 R ] >> endobj 2290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 706.961 203.055 717.865] /Subtype /Link /A << /S /GoTo /D (cel_8h_2fe5a30084717036a54e7f0a920da105) >> >> endobj 2291 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.553 706.961 249.809 717.865] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2305 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 668.107 205.825 679.01] /Subtype /Link /A << /S /GoTo /D (cel_8h_f72e24d2f169c3c343c55c880a74050f) >> >> endobj 2306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.323 668.107 252.579 679.01] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 629.252 205.825 640.156] /Subtype /Link /A << /S /GoTo /D (cel_8h_c398f2bea2deac6d86c10a7b3efca966) >> >> endobj 2308 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.323 629.252 252.579 640.156] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2309 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 548.49 211.912 559.394] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c31) >> >> endobj 2310 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 533.267 202.268 543.453] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c314ca7a593593157772f3788801138dd12) >> >> endobj 2311 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.226 533.267 352 543.453] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c317fa1e5cb9c23e5f138638dad3f938e1e) >> >> endobj 2312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.958 533.267 488.302 543.453] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c3133a743bdcdd17bae9c6961234ed6b642) >> >> endobj 2313 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 521.312 257.252 531.498] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c31367cf89b74764f9462bfa50c2eb50fb6) >> >> endobj 2314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 505.028 252.061 515.558] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c31cb1dec1ea393b198b93a26425ee901a2) >> >> endobj 2315 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.632 505.028 357.515 515.558] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c3144042efc5a9894182447dfcbcd24e1d4) >> >> endobj 2316 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.086 505.028 483.343 515.558] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c31ac8beaf37d754d1a7a7aab5307a2140b) >> >> endobj 2317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 449.794 151.05 460.698] /Subtype /Link /A << /S /GoTo /D (cel_8h_1fe1b137ade45ea28e61f44d4708fb77) >> >> endobj 2318 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.493 449.794 209.152 460.698] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2319 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 435.174 253.604 445.079] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2320 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 410.94 156.012 421.844] /Subtype /Link /A << /S /GoTo /D (cel_8h_39bb7bf8e545c200191d51884ecfb89b) >> >> endobj 2321 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.455 410.94 214.113 421.844] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2322 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 396.319 221.971 406.225] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2323 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 372.086 151.598 382.99] /Subtype /Link /A << /S /GoTo /D (cel_8h_db2e4565f61a9de5fe278d9035850dc3) >> >> endobj 2324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.563 372.086 233.221 382.99] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2325 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 357.465 229.297 367.37] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 333.232 151.598 344.136] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 2327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.041 333.232 209.7 344.136] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.893 318.611 230.785 328.516] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2329 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.572 294.377 154.019 305.281] /Subtype /Link /A << /S /GoTo /D (cel_8h_1fe7f134670262eb54b6049c0275a27b) >> >> endobj 2330 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.764 294.377 211.423 305.281] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2331 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.755 243.568 154.202 254.472] /Subtype /Link /A << /S /GoTo /D (cel_8h_6661c05703158b0808038b7d551f1ea1) >> >> endobj 2332 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.312 243.568 211.971 254.472] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2333 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 150.85 210.796 161.754] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2338 0 obj << /D [2336 0 R /XYZ 90 757.935 null] >> endobj 2339 0 obj << /D [2336 0 R /XYZ 90 567.464 null] >> endobj 2340 0 obj << /D [2336 0 R /XYZ 90 468.768 null] >> endobj 2341 0 obj << /D [2336 0 R /XYZ 90 169.824 null] >> endobj 2335 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2380 0 obj << /Length 1669 /Filter /FlateDecode >> stream xÚíXKoÜ6¾ï¯ЋÉ*¤Þò-±ã AZ ±’  %®—‰^¥´¶·¿¾3rÊ®=ENK ‡3Ãož\æÝzÌ{3{u={q^i˜z×K¯`^–ò ¹w]yŸü4àógŒù¥¬ƒÕ|&Ì¿Tµ¤Õ¹”zÎs_¶%"–§…çó/×ïf¯¯gÎ8èa7r“,È¢Ä+›Ù§/Ì«€þÎcATäÞ½áj¼8Œà·ö®f¿ÏØ£6†QÀÒdkãÖÊ 9 °®"ó.äPjÕªkÑ$Ãöä0oÆA$æz%¼Vûº[ª•~%¾júZ6²is\Y®^è‘8ºådëòíõm}œçÌït]ÑÆy×éJµb´ŒW›a” ±~f ûx~?œ6‡Q´•Е.¬@ྜs_ÔÖÄ{5®ð†x'΃"±Ð€Óä0*QƒoòÐ/·Ú‡`¾ÈXŽ—žóÄßÐ~%?3¶’¾9®ºjÀÈ;"ÞHú^2R–vÒ›q»%މîû9w@LL!ö¥îšcWPí(u#+E˜e|_R˜M$á>â(hYƒ…¦õ¨E;€±0ñ`ÎÇÁžjÄ­•Þ«DDÖßIGǼ™yŸ #àÚëÆòPŽ˜âE¯Ë‘ÄݯT¹"‰e×BR´mˆº&²j÷ÀÀVÊŠ¬qN¢ i’‚Þ5ìöÍÙL#‘¸†Zpêð¤V‚”‡p8<ÅSù—€Ã‡ÇDì‡Iîî]ø0ÈÍ7!½ÜñÀÁT‚5ŠRÿmK»T"˳+åF:MkÆzme¬ÔíŠHµiLwv€9âªJ«ú,çÓ.§Î é0Du¦Û9öC†4ôÐpUiîˆAt0䢂Ñ9¾hv‚4Ÿ¯²ÜmÚQ™ÙýFZfÕ>– Æ„`uè IÛ~²ØöúëT„ ¶ÉGaÀ‹x÷þ·ï7A›÷GW®16„{LßæèöñòKupúüõû÷¯£5†à͸[š•«1Û\Áð|±c€Â‹´ß?|ö•iò6/·Ùû z¬훦ì«+ÞWÎ9 8,Ùv¼?b!^Dz†Qd°“ž¦o&•æ#²Ó˜Pv¾Ò¢ï¡sá‚à 2âéOn}9qMU@3o†Û-É}ïCq¶ Š´…Ip‹û…ìéíLSÄ¡úÂ’+Àøb—Ñ/«ÊA²tSÆ(¿Q×ÑÕv$hzÃU«q3Oè“®>vG»[)µ¨;Ћ•Âyž¶¢:Ž~d<ò1€ŸäûàG'Á‡Aèß?þ þIðã“àØñß?ý¿€ŸíƒŸœ¦˜Ÿe矀¿=6ý/2̓‚ç?úW¤û 2 Š,Êí_I$‰ç7²•z÷tcî¯nq‰öÉúH釳³˜Ÿ%}…Œ‡MäuˆÂùþí+ZÇg‡­ï¢{ØÜÊvzÓ¿Fv­n endstream endobj 2379 0 obj << /Type /Page /Contents 2380 0 R /Resources 2378 0 R /MediaBox [0 0 595.276 841.89] /Parent 2241 0 R /Annots [ 2334 0 R 2355 0 R 2356 0 R 2357 0 R 2358 0 R 2359 0 R 2360 0 R 2361 0 R 2362 0 R 2363 0 R 2364 0 R 2365 0 R 2366 0 R 2367 0 R 2368 0 R 2369 0 R 2370 0 R 2371 0 R 2372 0 R 2373 0 R 2374 0 R 2375 0 R ] >> endobj 2334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.637 659.698 189.296 670.602] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2355 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.912 618.163 155.677 629.067] /Subtype /Link /A << /S /GoTo /D (cel_8h_1fe1b137ade45ea28e61f44d4708fb77) >> >> endobj 2356 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [276.535 618.163 306.193 629.067] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2357 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [421.566 618.163 457.292 629.067] /Subtype /Link /A << /S /GoTo /D (cel_8h_39bb7bf8e545c200191d51884ecfb89b) >> >> endobj 2358 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.94 606.208 395.252 617.112] /Subtype /Link /A << /S /GoTo /D (cel_8h_db2e4565f61a9de5fe278d9035850dc3) >> >> endobj 2359 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.202 588.583 186.514 599.487] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 2360 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.634 588.583 364.293 599.487] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2361 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.781 576.628 368.093 587.532] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 2362 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [194.816 564.673 244.957 575.577] /Subtype /Link /A << /S /GoTo /D (structcelprm_408a39c1d060d5b32f884f8a8c60aaa2) >> >> endobj 2363 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 547.049 123.085 557.953] /Subtype /Link /A << /S /GoTo /D (cel_8h_1fe7f134670262eb54b6049c0275a27b) >> >> endobj 2364 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.631 547.049 174.713 557.953] /Subtype /Link /A << /S /GoTo /D (cel_8h_6661c05703158b0808038b7d551f1ea1) >> >> endobj 2365 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [490.694 535.094 513.996 545.997] /Subtype /Link /A << /S /GoTo /D (sph_8h) >> >> endobj 2366 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 523.138 126.413 534.042] /Subtype /Link /A << /S /GoTo /D (prj_8h) >> >> endobj 2367 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 448.97 163.762 459.874] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2368 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 391.395 138.508 402.274] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000001) >> >> endobj 2369 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 371.306 314.366 402.274] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2370 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 303.768 138.508 314.647] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000002) >> >> endobj 2371 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 283.679 314.366 314.647] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2372 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 216.141 138.508 227.02] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000003) >> >> endobj 2373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 196.051 314.366 227.02] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2374 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 128.514 138.508 139.393] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000004) >> >> endobj 2375 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 108.424 314.366 139.393] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2381 0 obj << /D [2379 0 R /XYZ 90 757.935 null] >> endobj 206 0 obj << /D [2379 0 R /XYZ 90 733.028 null] >> endobj 210 0 obj << /D [2379 0 R /XYZ 90 509.564 null] >> endobj 2304 0 obj << /D [2379 0 R /XYZ 90 487.253 null] >> endobj 2382 0 obj << /D [2379 0 R /XYZ 90 487.253 null] >> endobj 860 0 obj << /D [2379 0 R /XYZ 359.307 452.123 null] >> endobj 2383 0 obj << /D [2379 0 R /XYZ 90 435.396 null] >> endobj 862 0 obj << /D [2379 0 R /XYZ 90 362.339 null] >> endobj 2384 0 obj << /D [2379 0 R /XYZ 90 347.769 null] >> endobj 863 0 obj << /D [2379 0 R /XYZ 90 274.712 null] >> endobj 2385 0 obj << /D [2379 0 R /XYZ 90 260.142 null] >> endobj 864 0 obj << /D [2379 0 R /XYZ 90 187.085 null] >> endobj 2386 0 obj << /D [2379 0 R /XYZ 90 172.515 null] >> endobj 865 0 obj << /D [2379 0 R /XYZ 90 99.458 null] >> endobj 2378 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2396 0 obj << /Length 1133 /Filter /FlateDecode >> stream xÚÕWMoã6½ûW¨èE*–¤HIÌ-± ‹l’Ú^ldaÈÕGªÍz}G"¥ØZ;MÜ^öDŠä ‡oGØx0°q1:[Œ~?§ÂH¸Ô5kC`Ãs ┋ȸ3]D,›`ŒÍP&èѲ)ÇæyœH՛ɵ,,â›2 aÈÁ¾+L&¬/‹£ébô÷ˆÀ>Ø ­_î!ÏáF˜Žî¾`#‚ñFŽðçvUj0ê@›óÑ#ü*Fê ìò#¢ÈÕ8ä=Æ4ÓvI¿-eQ¤åC?Ô}78»ÐâA#ž]Œ #!\¬ãµÛD>©‡A%£Õ^¼…—øÈð qù4ŠÀ¸…³Î ÕYá_ÏÁfPD¥†š§OA¯â$®6–ËÍßÔx]J½ó˜ï^;£žâB†U²QβܢÜ|VqVV2ˆPc6ˆ»Mà‰cØEÄu^‚ïèÐO³:•àÍ3ålayÌÜ<高ä!Ìg•Zþ’Mr˜ØòÕN‚·á…-ÛÁí»£H^œ¸ ænŒàt>œ*ãéÕt6[Î?ÇÓù|¯<áÈ÷v,®?]]-oo.¯ÓÙ;ÌΚ8,o-ÚÙéÇ#lÇ77³Ér1;½~àKÀ{œeùòÏ#¬>[„›7³«ÉŽíq#ŠÙŒcš#çu¾ÐíMc=Áâ¬êùg±êßcŽËª¨Ã—¹§"UÙ@ØvV;äŒÁ­kÐG­Ú¡–‡˜G»5àkOZ‚\â½øá¤…±ó‘‚ؤKy¼l‹ [h8n=ÙTp³”U©zA’¨N*Ó•,ÚQfæk=ûЦÀôK(vô¤Ù  ô«\µ‘\·ZV'•ÚåksóARËY6cܼÔåc^'‘ꯤjAà"eÖùƒcWqÄßõ Ù¸ûÚ°H›÷·uÀl¯ÊêèUJvrã F\ev«D;He1=$9»ìéÞ„Ft4±ÙÃBãl@ ƒ‹¸è™4–‰,›)"WE•ðÖ¤[úüÔƒ~ýÌ „_I,ó4Ø™¬ê¢‰~68ð¡ÇoK]硵~áŠÆ†Ó3d×#¤¡õMÝSʇLäÓøª¸y†²k H‡|íãºN’}e÷eDÙÔE]˜K óÞ'Õ!­°Ù¬a!ÙV)ºG¥Öªòï•*ÆÛjéÿ‘*wT¹ ª¼“*Ö»èñîÑ+àå{ôª©ˆ )5=‚¬á˜.T@´òB÷«Ç@; ôÐc`Q¬%AWTRjjðåª`SÖ¹jK(d¿SÛB¡Ñd)0(x]aÔm,%Å[ä… ˆ Ù͵#õ…ìÊË=føÂ8?¹Âÿ.0Lh…qn…é× ÿ¿\ â¿õ÷«ûír‘ð_ÿvq8×é}!³¦Äî2ª»ð]缉µ\©W5Ÿ0rÂ=õE1¡:ᛵ]Ö}ϯ.ÏTdëTÞt5޷̓̆'ýÚ’˜ endstream endobj 2395 0 obj << /Type /Page /Contents 2396 0 R /Resources 2394 0 R /MediaBox [0 0 595.276 841.89] /Parent 2241 0 R /Annots [ 2376 0 R 2377 0 R 2387 0 R 2388 0 R 2389 0 R 2390 0 R 2391 0 R ] >> endobj 2376 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 694.708 138.508 705.587] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000005) >> >> endobj 2377 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 674.618 314.366 705.587] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2387 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.109 405.358 239.768 416.372] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2388 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [484.338 405.358 513.996 416.372] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2389 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 276.633 189.337 287.537] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2390 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [445.204 217.059 474.863 228.072] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2391 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 98.232 189.337 109.136] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2397 0 obj << /D [2395 0 R /XYZ 90 757.935 null] >> endobj 2398 0 obj << /D [2395 0 R /XYZ 90 733.028 null] >> endobj 214 0 obj << /D [2395 0 R /XYZ 90 661.076 null] >> endobj 2342 0 obj << /D [2395 0 R /XYZ 90 636.861 null] >> endobj 2399 0 obj << /D [2395 0 R /XYZ 90 636.861 null] >> endobj 2343 0 obj << /D [2395 0 R /XYZ 107.713 577.868 null] >> endobj 2344 0 obj << /D [2395 0 R /XYZ 107.713 561.998 null] >> endobj 2345 0 obj << /D [2395 0 R /XYZ 107.713 546.128 null] >> endobj 2346 0 obj << /D [2395 0 R /XYZ 107.713 530.258 null] >> endobj 2347 0 obj << /D [2395 0 R /XYZ 107.713 514.388 null] >> endobj 2348 0 obj << /D [2395 0 R /XYZ 107.713 498.518 null] >> endobj 2349 0 obj << /D [2395 0 R /XYZ 107.713 482.648 null] >> endobj 218 0 obj << /D [2395 0 R /XYZ 90 466.894 null] >> endobj 2350 0 obj << /D [2395 0 R /XYZ 90 443.64 null] >> endobj 2401 0 obj << /D [2395 0 R /XYZ 90 443.64 null] >> endobj 2351 0 obj << /D [2395 0 R /XYZ 90 267.843 null] >> endobj 2402 0 obj << /D [2395 0 R /XYZ 90 253.304 null] >> endobj 2352 0 obj << /D [2395 0 R /XYZ 90 89.441 null] >> endobj 2394 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F46 2400 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2413 0 obj << /Length 1697 /Filter /FlateDecode >> stream xÚíY[oÛ6~÷¯ÐŠ=8@Âò.ÉöÐn)V´E×ÛCR ŠÄ8ÚdÉ“äÆþ÷;IÙ’å[Ú¢{Ø‹EÉÔÇsýÎ!…½©‡½×£—×£ç—4ôBJ*½ë{/Äž/ ”x׉w3–ˆœ]Œñ8Vz8» /ÓL™ÑGu¯Ê3ŒUÃ#†Ž>ûtýfôËõèŸu°G\á#Ÿ /žn>a/ço<ŒXxͬ™Ç)ƒkæ]~á½2R†°­Œˆ#fåLóÚÈÏK;¾ÅÇE^ÙÛª.ñæ´™–øù%áË)‘„hV¹Å˜™Y\nÌò÷©›XfJG^B$r#ˆžä]@ )( |$)o!´Ôo PŽ‚p7Hó´®Ì¸~°¾}kÕ>.îÍ5j|cœRN­w>¾y7=k´°ÿlÚlQ¥ùt?Ðc\5RÝ·’v1ÇÂ…àñ»(ͳ•MµÀ‰JÌÝ}QšA’FÓ¼¨ê4¶Ú.ÊyQ© u {F‡™`/Ú\9±Ñüá VŒÊh¦jUV“ÎûkœnÈÇ¡vÂà+k|ŽBPÄïŦ|¸]H„¾›üJe Œ2ëÃ2Ê+ÐÕi‘[­[¹÷ëÍ!ËdWíª^@–ŠqÞÓ¹/Ó€®WuT/l •ÇŠóùŒŠq”-TÑ# ŒÆúÆ\”Š~D ÈT<1!pµˆcUõÔ‚Ÿ„‹ý Ä‚¼_dÙSC{^èÈ+«J%h aD$€7ȇO¥6Èç8ÆáQŸ}CÆ!b’XÆ-„u€q¢Œ3¼aƒb1ÿŠÄÅqQ&š\LŽzÉP-æó,uLñ˜Ö©ý'­‘ÑÕJß!×÷E­É‘3`ÉH/É)ŒÒÊ<+‹EæÊ<ÎUƒóÂμ³ïÆQ–™?)pS©â:[½Ð·V7SÓ,ë¾òñ&k€ŠÿÖ4äîV{ §WSÙ’V;X´Aˆòä DE—û Òûƒà½ÉD‡d4ÝNT‚BaÃ)µqåšqVÚ3Ö›”¦Ò©(wac+˜J ÓÜ9uMá·\³Ÿù0 CùMÿÇÿÙþ0Û³¯Áöüû±ýÉ¥‡Za~u©­M”&. ‹¿€:ôØÅؾÅâ¢aͨV§GÔ±p'@–]@k™¤Z=]Xu»U¸Ôqëú>€•-”d#t¹DŒµõí§ÚE ’¶ÉIÎ;\“¨:J3'º*K·à â2šZµeüˆˆ›Lp(ìRÛ€«<ºƒÅϺ:ØGàŸæ­Ý½ô@·âsDƒp¨[n…r[cô˜u»óß®n°À‡ºJNiVÀ.\hÛ`(·4š/‡Ðp³y}Új­=¬Z¡AÀÓà)hY6('¼‡æö¸à·¤X@Ä `K(\¬cȆ…AkÂé?õW`»W¸`ZâPØÆÀÆÞjp%³åﯤ g'<Ô<܆Ýü!Ýaéð‹p¡W©£dð ž$2oÊÌæù«ËœEõ®ŒØ»#úB-jUÃrÄBÑÇ]ï5hÎ ÄÖé†&š½†Øì¦º{¶˜Øƒ÷ Ð(휊 ” Øb/_QWÛ`P‰ØæQ¥')”Ùª½®{U[$º§0ó,ÊU÷¦ß¸]NÜm 7±·D¥œ£@†§(~‹ ƒ7úK}+M 9;`‚ìþþ”A,l:Tßuw_Ú•³ÿ^WÞb¤$½¾ê˜C£|yž¯ö‰Lýf§e§ÿ~FC,¹&Sù´~8  kl¹Ùp#®jÌŸWÙ^³‚öþÚ¬[2Bs‘&êŒÑ'Ypy¾:àrÝ ÙÉL&nw±½lžWj‘Ø,}–(ݤNK¥ªgÀ±®?T Úy[|v©­]·^o‹|šÖ‹D¹·Õêy¼•æ!…t"§±“–9o1¥ÃäI‚SÈs‹+Áò©ÞØ|ÖVÃ;‹jUÕjÖ%Ô5Ùö˜õÆúêÓ~?_·)þ©ž‚2~nKî.?1ðS@w0Lv²Û•À¢ìû°~Çw»LïR©ÙdŸæ„Pڳɓœàº“ 9è·dtð|£÷éAEñƒ›¡crÍbàÊ™ÊëÞyˆÞu†Çí§÷ž‡ô¿É…\G~:sŸÌ$ }èôÍ'3"!,Û¿V¹*£ÖY.]Þ¹Á¥6‡º37Ò\žp2¾¹£˜Pk+=×YåWWo}iÆlFwöûÎÏÅr5Uy_Óß,øG endstream endobj 2412 0 obj << /Type /Page /Contents 2413 0 R /Resources 2411 0 R /MediaBox [0 0 595.276 841.89] /Parent 2418 0 R /Annots [ 2392 0 R 2393 0 R 2403 0 R 2404 0 R 2405 0 R 2406 0 R 2407 0 R 2408 0 R 2409 0 R 2410 0 R ] >> endobj 2392 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [216.275 702.288 245.933 713.301] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2393 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [295.138 702.288 341.394 713.301] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 2403 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 583.625 189.337 594.529] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2404 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.163 524.124 187.822 535.138] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2405 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.538 506.5 403.62 517.404] /Subtype /Link /A << /S /GoTo /D (cel_8h_1fe7f134670262eb54b6049c0275a27b) >> >> endobj 2406 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [420.846 506.5 454.928 517.404] /Subtype /Link /A << /S /GoTo /D (cel_8h_6661c05703158b0808038b7d551f1ea1) >> >> endobj 2407 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.855 506.5 513.996 517.404] /Subtype /Link /A << /S /GoTo /D (structcelprm_408a39c1d060d5b32f884f8a8c60aaa2) >> >> endobj 2408 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 375.882 189.337 386.786] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2409 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 312.455 351.484 323.358] /Subtype /Link /A << /S /GoTo /D (structcelprm_1b9cbfd7cfa2306464d57dc4acd03b06) >> >> endobj 2410 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.738 312.455 477.899 323.358] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2414 0 obj << /D [2412 0 R /XYZ 90 757.935 null] >> endobj 2415 0 obj << /D [2412 0 R /XYZ 90 733.028 null] >> endobj 1133 0 obj << /D [2412 0 R /XYZ 90 574.897 null] >> endobj 2416 0 obj << /D [2412 0 R /XYZ 90 560.369 null] >> endobj 2353 0 obj << /D [2412 0 R /XYZ 90 303.727 null] >> endobj 2417 0 obj << /D [2412 0 R /XYZ 90 289.199 null] >> endobj 2411 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R /F8 1123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2429 0 obj << /Length 1538 /Filter /FlateDecode >> stream xÚíY[oÛ6~÷¯ÐŠ=Ø@Ìò.*öÐv)Vt[×ÝCªÍ8d)“ä5þ÷;IY’å[ÛÝЗD’©ï|ç~Há`ààùèÉÕèñ‚E’Êàê6ˆpJ‚%ÁÕ<¸KD&S‚1ÏtŠî&S*ðø"Iµ½z­ou1!j¬³Øk#£¬ŠÕ¬þ¶Š8·M À¦5¡†™]ÅekUˆ„jXL A’4ÞêjnÛh”@'ñ+³4[ Á)¤àÁ±pa´Á‹«!< }ü#àÊtHÙq"N×µ|XQcàâTÀÒ¹už¯ h %T“Wv˜°]®m½¹éȨ³˜)Ž !‹®pãÎNÁŒaÚ¶7®½É²;‘yˆ0oøÞß%§¨t¸qÔ¶*@¦qÅ> úa–COB]¢Ú‰vuG(Fíx©ëú€u9LͲëËD a3#ô;Ê›Š`*Ïv‡™‘‹ö0j _·‡» º¬’8í·ür ?2˜÷7!xÌÈü6™òqÝt¥¹•ƒ}Wò“ún• ˜¶E¾ä<¿H²^O¿Oã¬7Ól¦ÉýÛj¶Ј:ÛWœšñ«;¿o€º}g`gðý@ÐÚŽ ×zvn7$Qè?íÔ)3cìR ßÚ1Ç ›îvæ[Ò.ÚЂ7sЛ !ÄY5ÇTg‹êîAaê7ïºÇðƒövæºÒ.v #H˜ô`ÊHæú=ÐPÒÓÙã°]·õ\žæÙ"©Vsëqæ¦EÀ´·³Jrö–öf£¡~â­7™öò4‰{q³ß $2HÇ ßô4᳦aîŒ`ðo¨¿<Ùì…j@N³:“®h¾Å”×M¢N±øV™„š˜]“Ýø ïDËuYéåöþpp‹~¬£B3……ÝrsØSgëÅQ…M¿êFÓΞq_êÕ<·×ýBëòÑÁ‚ÉØ‰‘æ'’ fØT÷ƒÇHööÖ×)Ïî¶ö±ö—T/uVõŽL>Ó± õµ!~¾ºuÒi¢‚n"¾&~;Mü_Ÿ&Ê/~šx|:ÓÿʹbÄÄ·sÅù\‘QD"±9WîTñÍ$¢°¥K °%ó,Ÿ­LŸ´Ibœ©@9bÐ&7¯o¾é¹,£û]\ =*‚XûpÀŸXŠ áÂï¹Ît±‰h_)~ñ&ô{{#í?‚Ï99¡½£˜P7–˜µ>²þxzùòç'öš#‚»ó,X/tÖ×ôêã", endstream endobj 2428 0 obj << /Type /Page /Contents 2429 0 R /Resources 2427 0 R /MediaBox [0 0 595.276 841.89] /Parent 2418 0 R /Annots [ 2420 0 R 2421 0 R 2422 0 R 2423 0 R 2424 0 R 2425 0 R ] >> endobj 2420 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 643.997 189.337 654.901] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2421 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 564.295 351.484 575.199] /Subtype /Link /A << /S /GoTo /D (structcelprm_1b9cbfd7cfa2306464d57dc4acd03b06) >> >> endobj 2422 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.738 564.295 477.899 575.199] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2423 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 247.078 189.337 257.982] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2424 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 167.377 351.484 178.281] /Subtype /Link /A << /S /GoTo /D (structcelprm_1b9cbfd7cfa2306464d57dc4acd03b06) >> >> endobj 2425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.738 167.377 477.899 178.281] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2430 0 obj << /D [2428 0 R /XYZ 90 757.935 null] >> endobj 2354 0 obj << /D [2428 0 R /XYZ 90 555.329 null] >> endobj 2431 0 obj << /D [2428 0 R /XYZ 90 540.759 null] >> endobj 222 0 obj << /D [2428 0 R /XYZ 90 153.803 null] >> endobj 861 0 obj << /D [2428 0 R /XYZ 90 131.492 null] >> endobj 2432 0 obj << /D [2428 0 R /XYZ 90 131.492 null] >> endobj 1031 0 obj << /D [2428 0 R /XYZ 90 111.964 null] >> endobj 2427 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2451 0 obj << /Length 1010 /Filter /FlateDecode >> stream xÚÍX]sÚ8}çWhÚ{f-ôé¾¥ºi“t–°ítH¦ãÚ¼ vj›MØ_¿W–Í´0̓DztuuÏñ¹Ö• #‚ÞµÞZí P€—¹h0BAžK±d b4´\Ìl‡B¬kBXYLâ܆G Ol‡Ibõ’©2­¾)ó-•Fº+à„Z’Ù7ƒ÷­î õ½EaI‚hµ„ô°Ç%Šf­á A1ô¿GóÀGw•Õ Æá>EW­?Zd#\Jq %kâeWþ\¼e»Çý&r˜À\Æñë$¦ó&»àîÕ]TDY:JÆxòÊL^£&s†i ÌäNX†fÕ«2ŸGåÜ,\Tä4èÀYqA], ‡1ì6讓ksÐБNQy­G4Çù¸&»_Ùè• –²©´I¼æjóÞî ‚|Ç:†`È¡¢†õÁæœqb-î²Üæž”I D1bÝ'éX¯…÷¬´Üi–‚÷PzäGÀÝþ'œÎUƒ~”å³°L²t;ð ±8<ÀÞ´à˜J^+Fé¨ÓÃIäu\{|œ«ÞÙàê÷Nÿë‡î—Ïš°ýΦ7mFî Ým/{½i¨= Yß’r©™$ÒÒz ™B¦ ° §¦£~ÕV,Ò2¼?žÆžOÝ'›‚BNÎÿìî =›<~0òV”ú˜;ýxqѽìàLüBÁEÙl¦Òò@¬ZnýîéÎü_ÈY•¢*ªSõ¥Ðuz²ó‹öÃduÔm 6,UübÒiÐ?9;ïö·£¥äÈÒØ©3<ʦÓìni]—GðmJjƒîeç…K 2ï¬sÞ½ÜFð5‘¤HþUÙ¨j >ÓñIÛÿ{MÒR÷èkݪOÊ D>Ìã|ÄÍ©)€ªZ».€¶'¬Å­ŠÕè`ÅSiü5Bß \±¯!¿ùѤs…³Ì´"§jYi—æ\Qš›ÎxyÜÐï.À«C›dŸ§‘.dFåöØÊ¹íƒ¼Rœ»ŠŠ fE“°‚Ì­‰ c•áìçºÖÍo¦31;6·ÒÅå*ZfkÃI\ÔÃûõÌž´•«uÿ[¢¬´MÅ §\x˜3 ^ „ð:V™…ø´±Isõ—ŠÊ'…ïpxË>÷@eÕaz¹Ê#é¹!ó±Oéj€;‚Ô-ÞØ­8/|¹v$„>ˆ»„nlC°Ë‘›woÚ·¡>ï[EóœÛBZÙ¶%µÿ ºù›Â…¨ÿÔ¿Íß dƒù9!,›\z§R•ë Á„–¥æ~Ñ4z6ƒcå7óàš%o}#=óÄeõö©m³äçÓ«ó³·¦-0ììfg^˜{'»_ŒUº†þB 36 endstream endobj 2450 0 obj << /Type /Page /Contents 2451 0 R /Resources 2449 0 R /MediaBox [0 0 595.276 841.89] /Parent 2418 0 R /Annots [ 2426 0 R 2433 0 R 2434 0 R 2435 0 R 2436 0 R 2437 0 R 2438 0 R 2439 0 R 2440 0 R 2441 0 R 2442 0 R 2443 0 R 2444 0 R 2445 0 R 2446 0 R 2447 0 R ] >> endobj 2426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 640.704 174.602 651.607] /Subtype /Link /A << /S /GoTo /D (structfitskeyid) >> >> endobj 2433 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 601.849 166.851 612.753] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 522.063 245.028 531.991] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_42bdf2e2f36d1dee9e06732c75a8ff89) >> >> endobj 2435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 483.209 247.1 493.136] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_5077485c3de4b7bca55698eb66110a76) >> >> endobj 2436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 444.354 245.137 454.282] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_6400ad537ecfd565fb39a574831edf41) >> >> endobj 2437 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 405.5 234.069 415.428] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_9361fbafbbbba777da623fc3b9e96d2e) >> >> endobj 2438 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 366.646 221.895 376.573] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_705c7c2c9700367e0e8b82d5033e6fa3) >> >> endobj 2439 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 327.791 236.281 337.719] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_8393f26f643097bb78326a85b4e2e7a4) >> >> endobj 2440 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 287.961 198.074 298.865] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_23868c17c44dc94add97438092d3058c) >> >> endobj 2441 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [253.625 287.961 289.69 298.865] /Subtype /Link /A << /S /GoTo /D (structfitskeyid) >> >> endobj 2442 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 275.009 187.564 285.913] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_e6ae55940dfdf1155736df656d83a7cd) >> >> endobj 2443 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.115 275.009 271.428 285.913] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2444 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.29 220.15 181.765 231.054] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_88ab82d73e5c2607f0a40af8917fffe1) >> >> endobj 2445 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.945 139.387 154.402 150.291] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2446 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.075 139.387 400.14 150.291] /Subtype /Link /A << /S /GoTo /D (structfitskeyid) >> >> endobj 2447 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 127.432 142.224 138.336] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2452 0 obj << /D [2450 0 R /XYZ 90 757.935 null] >> endobj 226 0 obj << /D [2450 0 R /XYZ 90 733.028 null] >> endobj 2453 0 obj << /D [2450 0 R /XYZ 90 659.677 null] >> endobj 2454 0 obj << /D [2450 0 R /XYZ 90 540.061 null] >> endobj 2455 0 obj << /D [2450 0 R /XYZ 90 237.221 null] >> endobj 2456 0 obj << /D [2450 0 R /XYZ 90 158.361 null] >> endobj 2449 0 obj << /Font << /F29 635 0 R /F38 780 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2476 0 obj << /Length 1277 /Filter /FlateDecode >> stream xÚåWKsÛ6¾ëWp¦pÆ‚à#7Û’S§¶3•Õd:¶'‘°Ä‰Dº$[ýõ] M=­¶Ç$,Åb÷ÛÄ™:ÄùØ;÷N/YìÄ8XàŒŸœ˜8a@1gÔ§Î= 0sû”‚aªš¥¥ ŸÏÜ>ã]fsi¨‘|’°!™'z*öEÜsÇŸzÃq﯅#‰Cë#xˆC;É¢wÿHœæ?9{qä¼Ô\ ÇgŒsç®÷{T—y˜ܨûÅe&&sYÕG7{a#él¤ö½Èé3†ƒfóc|msßç`kRä•2F&3Qj–ÓKêw¤qŠ5E¬B<+GÛ[N­á£--B쇬³ÍüM–墚nª¢Ï¿g!z\[{3Ñ'NÂ_ ï{`#œ>õqìûæ;%Ô²2Æ”®"©–en¾²ªxMõŸ¬ðžSÖ<Ð÷bLHßÔ{mÐ`jÃf •€IÍY%eö¬²"?!.ò±çÇ=NàG·@bÊ´}0 3Le.Ë,1—Wã;CͤH!`kúY”UK—…K9ú‘¥µÒ0£ »Cäií@¯!ÒŒ«R&E™Ög†HÍ„²§—–5›æEÙÈš¬¬Ì™]ýz±®Ø£¦ÇÜÆ¥Ñ®:Ùƒ˜¶:òÐKR=g³½¸„!õˆ1QûD 삯 »A«ç,ó¹6& ­1@Ì…R5Ž@/„]Ô‹ª¤²ì…K¹0Pë?+ÁÀîžÊba(a†¸·¹.#àÉ|zÀnNŽˆ*`ªµ†±=7³˜"²\ëÁ9¦B¬¥ ¨æARÄþ[†°6Côù¹•4(’åBæ¦6G6S ÞÚ¦×/éÚnÞ¿Fß~þùUøy40 ä•P«ÖFzÑj—´óÌÖ¹…¨¾ê©(7l­:%D—:15ô$S}ãÊD5›Êº¼4ÙÁÿÿý0Cì)íTó=Ÿ×a2u9s3× žMBøXÝW€ìë±j]´å/.õ8:»þcØâÌ~Jœ¸LÏ/åÚ; ôÅç››áí¸…Øÿ)!NŠ…® ÇÌ»ûïFòhxÑâÀ×ïàëÁ½eðõÀû5¾^s¹i¢ÁWÓ ¾šs_½þ†¯gîɽøj ïâ«…tñÕß"7ã&ÎZàÖ}só>hˆ§pñq/lwo»né-Í—LÙVY•е¾V5ë«:Úƒü9ë”úh£sÛ±OpõÅBZ3ϦÈdº¯÷[k¢#’`ˆß`8KÓ&GÚ|›ˆä{]‡…¹Æu#],žÁ3@D­Ü€£3¿¬¤Ä_ïÖ)<ü¦SÞˆÚíX8¦QÃA÷=Â. û,ð1‹Bh_ouñã=]]G ä”™2,Ž›’G"˜2% fÚ’“mI‚ù­’ë’¤9•$#í’BÖJlfØܵúóy¡ ÿËú†Ùë KÍì±9st6„»½q5¸Þ6%“*û[O5¥Êe¢ÜNy6ǯ²T£qúÆ™åJÏ4íÖ Ú«Á¿=ÿðé­‡6Ñ<õ Ê|C7oçÇ!<|Íۙǘsõ3©ÎüZÃÂ> oâR{TNÌG`J>øôÍ#”ÙÌ×¼MöCK}unhC¢4¨íw_WðBÛ´ôwÝ%\ endstream endobj 2475 0 obj << /Type /Page /Contents 2476 0 R /Resources 2474 0 R /MediaBox [0 0 595.276 841.89] /Parent 2418 0 R /Annots [ 2448 0 R 2464 0 R 2465 0 R 2466 0 R 2467 0 R 2468 0 R 2469 0 R 2470 0 R 2471 0 R 2472 0 R 2473 0 R ] >> endobj 2448 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 697.247 224.644 708.151] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_d966ed3fefd26c9546ec078171e3940b) >> >> endobj 2464 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 614.801 123.095 625.705] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2465 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.533 602.845 159.384 613.749] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 2466 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.293 602.845 214.144 613.749] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 2467 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.625 590.89 154.717 601.794] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2468 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [287.806 516.722 321.898 527.626] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2469 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [287.806 466.903 321.898 477.807] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2470 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [287.806 417.084 321.898 427.988] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2471 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.596 367.265 328.688 378.169] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2472 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 298.477 138.508 309.356] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000006) >> >> endobj 2473 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [292.161 218.606 326.252 229.51] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2477 0 obj << /D [2475 0 R /XYZ 90 757.935 null] >> endobj 2478 0 obj << /D [2475 0 R /XYZ 90 716.221 null] >> endobj 230 0 obj << /D [2475 0 R /XYZ 90 659.927 null] >> endobj 234 0 obj << /D [2475 0 R /XYZ 90 577.316 null] >> endobj 2457 0 obj << /D [2475 0 R /XYZ 90 555.004 null] >> endobj 2479 0 obj << /D [2475 0 R /XYZ 90 555.004 null] >> endobj 2458 0 obj << /D [2475 0 R /XYZ 461.523 519.875 null] >> endobj 2480 0 obj << /D [2475 0 R /XYZ 90 503.148 null] >> endobj 2459 0 obj << /D [2475 0 R /XYZ 462.479 470.056 null] >> endobj 2481 0 obj << /D [2475 0 R /XYZ 90 453.329 null] >> endobj 2460 0 obj << /D [2475 0 R /XYZ 478.23 420.237 null] >> endobj 2482 0 obj << /D [2475 0 R /XYZ 90 403.51 null] >> endobj 866 0 obj << /D [2475 0 R /XYZ 203.922 358.463 null] >> endobj 2483 0 obj << /D [2475 0 R /XYZ 90 341.736 null] >> endobj 2461 0 obj << /D [2475 0 R /XYZ 90 269.421 null] >> endobj 2484 0 obj << /D [2475 0 R /XYZ 90 254.851 null] >> endobj 2462 0 obj << /D [2475 0 R /XYZ 135.16 209.804 null] >> endobj 2485 0 obj << /D [2475 0 R /XYZ 90 193.077 null] >> endobj 2463 0 obj << /D [2475 0 R /XYZ 90 175.587 null] >> endobj 2486 0 obj << /D [2475 0 R /XYZ 90 161.016 null] >> endobj 2474 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2501 0 obj << /Length 2091 /Filter /FlateDecode >> stream xÚ­YÝsÛ6÷_ÁKo標 ðË}J|uÆÔmcuúàz: I¼H¤¤’è¿¿],H‘4%Û™{ˆýÞß. î¬x·¸øáÚ‹˜Å8‹•s' ó=á,2çÞ ˜7› ιûç^So²jŸ.ÛÌæžÏÝë|«iôQ¯4¬E®.RœŠ%®¯f‹Ÿ/~Z\ü÷BKîÃÂY(}'Ý]Ü?p'ƒùŸÎd9_Ì®£< ¿[çîâ÷ ~V\O2ø¸LZ³P¹‡GéIøï2ÝïtÑ$M^({ŠI÷N3aÏçEñ'ïñ„C"d§ì!5_æ p"·Î×…Îpãq=¾»«˜Å,iZj@*;§Ñ¬Ý™ÏyBó•~¬ÊT×uYÑÒ.I«’ÿ¼ºûpóîï›ÛÈg¿lòtC‹»ä@sËiy§¹,ö­Ý¾¤uZ¸qÍ6l6—\‹Òö`;£Ê×d÷îF¶.i¸–‘²8äm$ЪX×g<²Öý‘ UÆê€3Û²XG`à Ì;ê!ó#"¾Øä5IÚþ6­ë}ßý× &2»^X0«µ Êï/œ{³~Œs8aÞ×ÖnIêo¶A¾22=1ú$f~ œyÌTÎÓ&3ú£9;ï¶ùÞÖú%„ÑÊGz÷òá É"ËW/tÉÖ/±ô'À ¯Ãå¥ÉŒ¡Å]fùÅÔ±<&®²i{½/R“àçs¾ªŸòûÒëýô9äGmV¥›n’Š„•B é3/Œƒ!½ÑI¦« Ὀy€vÛ=ðB÷áûÙ<äþ1ä¤AÙÐí‘âÓL‚Í•N'ÈKÁŽBœ¥ vP€#ªyVOQå,ˆÕ€làÖMµO&#o vaÀb¯¥p–¤Œ8 vÊBB´#'$˜+1.â!ø•þN›g=ü}’Véq&¤ ¨ì÷¥:!™€0ôÕÈ8S¦Ò£¸:Rô%«À2ÈÃam:†ñÓ”EÝdŸ7Ä pÇîcRÕº¦1T$ ZcÌ'icŠÎV•)40„Äh’¼È´{®ow4aAq´ Â“é™S¸=Ùniw¾à°¬²V’"£A³ÑyEÇ>Ï<Îî[i!8J2ˆÕoàéÄ¢B+= ËÕ+Ajª PHÔl°6rÜœ³8¦r(äù É‚]w [_ž¨*ƒˆ‚90²ïµÎSüÙ˜:ÂQ_Â~DHÉ<ÞëÕÑá2ìL&ƒ¡Ãq ÜA D€µy¥)”p‘ÂWa Àw«ÒÒî5!èêšVvùzÓÐqìgpª\"sY/K*a½ä rùŒTu‘ƒD[ëlê¯|+2®P¾›_é£*÷éPŽŽÿ’Ç÷¶ùÁºîI²XY†?%Ø}ÉÀku4ã7½ ¤†8~C H tßéjk,*Ü7iRe´˜ï’µ~cíßXvòº©é ¢ÕüZ‹¥MK!â´R3ŠÃ·wW774|¬ /Ð_­_—ؘAPÜò‚~ÉD0¨’bm‡ü«Çq¤Ü¦lgB»†Zµ}(|’„évŸiKøößÓèÝ,f±tß¾³_®g‘ dp}M“”ô0¸úhñ ‰×:Í2S%Á 9:iF.â–º»áöW Ÿ}ûívÖÙåEÒèlœâƒÜœ{ …ˆ@ŸÅ2zErŽ*úÉ Xv%ôv¿[ꪃ±³Êåù(@ïÎë¡b¨{Õ#ü=lY?©``œÓ’¶ÊõHøžrÀàY%"&äP‡¾´ò>'?ÒünÌ%XrIULru¢Š™-•ÝÛ«‚x9ÃS«ªÜÑ"a* FÅ3|bÚ·Eœúœ›tCZ -´`˜ÒšÉÀ9ì  Á × •ò"#1)¡"S{wpAT^w®s ~=­Ôª'ì*8bkKÝ2«´¦áNcÔ?žæ(ù$ÇËËêëS¾pUÞ× _Z&µ¶b,¶„±€¿¯éR¯ðæ½=g…@NË”–{jcBAĻד›T©LƒA¥›}e$ª7Õt{LÆýú|ï(ǽ#¾øÂ}k:9à²KštC,O$„mÔ¸éX‡¹¡‚ˆ•̼¶˜wHžW¯¾Zö>Šrª‰£³¨OO73è-_úhþñèÔH´¯l«ª¬êgÐ Û_«eÿ"sJMÂ.êÀô·ÎPHe» ¥¨oW~׷Ô1üC½Ï„l~¾™&õL¸ÔÏÓÁý…1‘©Na<É›ÑÙÞ–ÁMö áßÞáà¶è ¡†J ±^Çç©©nô½++ÄvÙ¶Ø^lë‰<öñ0‡/efj»-Ó„ŠLO‚ƒðåß –U‘µò´Ü … c+â @ÿ(‹™"ña‚§–­¶Ù(?µ=.\ ª|1$Ü»èb"#Û’ykÚ“w9…/sbÑ©Åè&7²ÏÔ î®Iš}—°ÕöÂÒÍ¢þV¾MFû´ø—çùãpÆç ~IϹwûß“‡z™Øé7y'ˆKäºáÿÃ}ù±KrüHêzŒ±\Ñy¹<+WóÆ…ÎÝàÊ4;P¦G<ÆJ‘Áñþ'Ñþ°8D)Í~Ì|ß¾½¼×…®’x[i~i×èZ½¤€~¿TâÒéËãÂkUðŽOñôLcHJN£å¡}ðüzXëb¬éÿèUpk endstream endobj 2500 0 obj << /Type /Page /Contents 2501 0 R /Resources 2499 0 R /MediaBox [0 0 595.276 841.89] /Parent 2418 0 R /Annots [ 2489 0 R 2490 0 R 2491 0 R 2492 0 R 2493 0 R 2494 0 R 2495 0 R 2496 0 R 2497 0 R 2498 0 R ] >> endobj 2489 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.302 613.315 203.682 624.219] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h) >> >> endobj 2490 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 522.788 156.888 533.692] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 2491 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.642 424.711 162.956 435.615] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2492 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.257 271.438 247.321 282.341] /Subtype /Link /A << /S /GoTo /D (structfitskeyid) >> >> endobj 2493 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [374.449 271.438 437.631 282.341] /Subtype /Link /A << /S /GoTo /D (structfitskeyid_9c19a56e7a92c1728bebd92e5370b9c7) >> >> endobj 2494 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.622 259.482 236.362 270.496] /Subtype /Link /A << /S /GoTo /D (structfitskeyid_b20aa3220d9994d02a1791e35dc91a56) >> >> endobj 2495 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [254.008 259.482 317.19 270.496] /Subtype /Link /A << /S /GoTo /D (structfitskeyid_9c19a56e7a92c1728bebd92e5370b9c7) >> >> endobj 2496 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.33 247.527 246.283 258.431] /Subtype /Link /A << /S /GoTo /D (structfitskey_43de42050c7e0232c9f7c5a28bfede4b) >> >> endobj 2497 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.137 215.653 290.451 226.646] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2498 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 102.226 187.992 113.13] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2502 0 obj << /D [2500 0 R /XYZ 90 757.935 null] >> endobj 238 0 obj << /D [2500 0 R /XYZ 90 733.028 null] >> endobj 1185 0 obj << /D [2500 0 R /XYZ 90 714.318 null] >> endobj 2503 0 obj << /D [2500 0 R /XYZ 90 714.318 null] >> endobj 242 0 obj << /D [2500 0 R /XYZ 90 509.215 null] >> endobj 1194 0 obj << /D [2500 0 R /XYZ 90 486.903 null] >> endobj 2504 0 obj << /D [2500 0 R /XYZ 90 486.903 null] >> endobj 2499 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F46 2400 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2510 0 obj << /Length 3110 /Filter /FlateDecode >> stream xÚZYsä¶~ׯ˜Ú‡˜ªìÀ$@ðØTì½,Û«µWrœÄv¥8CŒÄ˜CŽIŽeù×§Ýà%ÎJ›7}~Ý#u³òWoϾ¼>ûüLW©H#­®w«Ô_ÅQ ´ V×ùê'/ò|ø¾ïýìû²koóæºž¸=_Kí{oŠÒPëƒÙ˜K@û®°šˆKŒ»úP‚”s7pç3¾Î,Í’g³ÇŠ%À"ÓpŠ&´¦¤„w·5µzáA›…‡óø ¼ßŽä a¤_ÔE5Yp‰A®N÷>ñ³g¨ ¼%#`ÂY¥n¸+'æˆ+µ5-Ýð80¯1”ˆÒ]H.‚bê ?Žfˆâ, /r.í†ßoMh¾Ñ²*65 ðCjéÐL‡&+R“uÎVí%Ou£æ”i^ÛÃÃ` Ú_ÀHþ´@׳F…rÆ‘TeèÛ(9ÁIHNÖ=Ðå„jH1)ÂSoX›½q÷â9³õŠÖŸr”=;GÖ&?k›ÈÐh¯­[5\øö‚t‰ü!‹!+9K]¤XŠÔBÍËwBÆ„^HÌ ´îHQBÂ9øíCµ %d4H*¢3ûÓôûí7«™{ÊGâ Á÷nkdÛÙ8’ãÅoYì J/í(‡/÷ü1`BÚµôb¿—7E×Z¦kÖ8˜_²Oõàÿ«¶$ç‚3ö=0>}Lœx–|}@QLzJ®7EGmtþd@ ';þv´ ,À%\h_’(H¾±MéAŠ x,QQ˜Ðœ%&þÚOĨþià³7Í]ÑòN{kB‚kÀ%Ù°ž(—”$6üa7 ùU‰^…ÇL^…ûwÚË10 œæ›²5ðŒ\QÃÀ ¬«›g®F0abáOƒˆ/^t÷3³ íÓ`ÇÍC›GÚȱãõå«¥ÄW -ûìÈ‚…C¤8æ>GfËþöÛ-@ËMã6“fú6öŒ˜L¥.°‘<¬qh.àƒ÷Ïù¢c‘¤jZŒ‘â´³Ÿ˜(Ïñp¨›Î™}nLeš¬,þ—jŽfƒæE§(ïýÛ‹ïhèÛšªHÒ»âŒó£ªÙÌB_™¡ƒÙ•»‚àÁïðOVÞ؈ÙÜ?,dõI=Þgsž€Q¼Ï±¾°ŠêHyºOÊ„‚ÅÈã·&Ë) .L¶¢Ð"¹¥ùáNuLRÆ÷‘„]Ò%-3i~Á±ŒÈ挩¯Ò»Ž âO¬ÑEO¨ÑƒÒò¦8¥5Ǽ^/¥P €.”"åS’\%¢¤vÏç6ŸÆBÉ'd&ÉR:cVàó@ÃÚÔÝíÈŽg×ûBëärÒán„A}­ÍÃ+;¹vîn¤"fËœ ÕÆô«RLƒÛSÁ£½†„Áb\ì×¶<æýÊú€–¹Ì)t5:ŠaÈó©Òƒ'¼¾Íò‰9%þlIK"¸4Œ>V´Ò"ŠÓ>/x I"ªB*jÕY¸„k¿¨-,سö£ñ;p•)0lS;£ÏHØuÂÀÍË WÕ§ÎxÈ&¥Rá'ú Æ„y‹“ä¤GdPE¤A<õ½áÊØ¸–À=–n^ úÌBðÁ›+]ôÞc¹ãmó@é~€(Z<®’TÀÌ {Å¿™ô?(Í~¾x¨¿“ÁPç8éo{OÑ5£Ük_»áƒiöÅ$8w Y1“qlYù7†·Ž!Kö RÈ›üÞ>_Â)"ŽÒIž BOCÇz*ôÜX¸n£¼ò)4JE¡j˜¤÷Àà¡¡´³ÈiÄçœÞιŸ¸ì® Ò3ÔˆW*8…È‹V0R¶²wçL.¨6ùì‘ B„ç§7þHxq}õÕ«ÿyùþÝ»×—×N|YwdAo\Ps Æ€½ZÓÍҾǔõÿ¸LÐ)ˆ;×ê/Ú]fÞåX7]=o(–=€¢Õ¬’÷¸†÷¨uR![$ñ«.Š9¦@°••ìCh‡ãÏxí‰Hø;ì=Ü_?2)>Ý5*.¶Â£ÐÞ,àƒVÖÎè,³¶£¡ª®Ö–a‹GYx6l8f]MH"g1“б)¶Ë¾Ø.èÇŠ“þ˜$ï\MäÊ¿ØêY©€²ÆÈ9ïE?‹4‘Ÿ$ÌEçnKº ³cš Ïÿ=&J%Oýï÷O<¤7*áâÑ)$ \8k3ç)Ôì‡ß¹Æ›o¨¹´äE¼Ð\Q~ 9àZ~|yõíÅ—Ô…Ëd\9âUýÇ=$íó—þíCV  endstream endobj 2509 0 obj << /Type /Page /Contents 2510 0 R /Resources 2508 0 R /MediaBox [0 0 595.276 841.89] /Parent 2418 0 R /Annots [ 2505 0 R 2506 0 R 2507 0 R ] >> endobj 2505 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.493 539.712 178.807 550.616] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2506 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.068 372.249 357.076 383.153] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 2507 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.496 166.838 456.043 177.742] /Subtype /Link /A << /S /GoTo /D (structfitskey_935a63ff3aa2c0403ed8eee1a94662e7) >> >> endobj 2511 0 obj << /D [2509 0 R /XYZ 90 757.935 null] >> endobj 2512 0 obj << /D [2509 0 R /XYZ 90 689.599 null] >> endobj 2513 0 obj << /D [2509 0 R /XYZ 90 653.659 null] >> endobj 2514 0 obj << /D [2509 0 R /XYZ 90 589.868 null] >> endobj 2515 0 obj << /D [2509 0 R /XYZ 90 539.37 null] >> endobj 2516 0 obj << /D [2509 0 R /XYZ 90 512.783 null] >> endobj 2517 0 obj << /D [2509 0 R /XYZ 90 448.992 null] >> endobj 2518 0 obj << /D [2509 0 R /XYZ 90 422.405 null] >> endobj 2519 0 obj << /D [2509 0 R /XYZ 90 371.907 null] >> endobj 2520 0 obj << /D [2509 0 R /XYZ 90 353.944 null] >> endobj 2521 0 obj << /D [2509 0 R /XYZ 90 308.086 null] >> endobj 2522 0 obj << /D [2509 0 R /XYZ 90 293.454 null] >> endobj 2523 0 obj << /D [2509 0 R /XYZ 90 279.196 null] >> endobj 2524 0 obj << /D [2509 0 R /XYZ 90 252.235 null] >> endobj 2508 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2539 0 obj << /Length 1877 /Filter /FlateDecode >> stream xÚ­X[oÛ6~ϯа•šåE”ÄbÐ6M‘¢ëºÆØÒ¢-:ÑfK.%5Í¿ßáM–d9t/EžËw.$®¼9y¹8yvFE ˆi,ÖÀAÄ) ypÆˆÍæc^ÉæfU7Ùrá]Ïæ”ãð¬ØH;ú(×RÍHÊr¥§’”G!gŸoO^/N¾žØÄìÀ”0¬¶'—ŸqÃüÛ#&ÒàÆPmƒˆ2xo‚‹“?OðÒR†p̽´q'ï_3AÃLÙÒ‹xZ­Ú­,›¬)ªR \ç4B,½åˆ8«ª¬»ru)½àÙ‰zÛ§ ¥.fõ'Œ™%Ș (¡=ÚÔ×¹ú"•ÚÖW—°Wœ„ŸÝ:Ü[71’s’ ˜Fvýk¥*eeÚʺήdm¿šÊÍfÍÊù¦¹vzƒÓšÖÑ}›Qf›ÖýR²iU)sûµVÕÖŽd湬Ûr¥í…:ÕA‚sªeû±‘4ù!°Æ,íé>òËÏE¹Ú´¹£$¤GÉJ6μ¿Nð¨G°.šº¨@ CNQ‚RJ<áožÕbq JSD„ÃÜiÖdV«‹Fµ+°§Q¬6È÷Ðù–Ä(!產Øc÷¥|°&¸œs¬½§¹º?:€Ô•‹¤†Fï|Ó,3¥«ÇïggR Ž´z爂J‘×÷dx‡[ªµ‹€ pÇ’0/ʬq^ÜTÕ¿íÎM‡Yía4‹xè¡ôòüýbï/ß½F“"ŽÍÌÂ`œˆ!Âhg…ÿ›U‹ò“ÚHý¢d–qP±±T[JýÜȉ$A(A1gY¢/;¸!íÀ·Þ# pžZ jYÍ ??}4ÆI‹#–ˆÇˆcví$9Ô¢A°ä1mFã‘#€`uNaš Ázv¾¸°B=éBµoÀNìw[Ì„†Ÿ%p6©µËOzPvéQCP”W~B#»mŠRêHyžÒØšu©²+4§²É 5º$|*ë•*v¾FM¸zdÙQ²<®éÈÖ@©šB¸—¦\‡Åv·‘ûús‰ ø—Ù—3:Œ¼‘`¨:ég³zmjÌ>™È¦ C}tÒIðˆ§qßIÀQç#›‹j§FQÛ?;Ui×|+r°¨.ò­1 8ÀV.cF6‡¯´RçèD/¾RÙv+Ufs†yxÞX²ë¬¶$K)K;U©R»J¹ýñQpC¿ÔX¾¿AË‚c;¾)škû×Ök˜Ê¥öaYØ„ç¶ò4Eí;£M¼wúFÞ“ÆEyºƒ°æÓI§V—uEÇöÂÃŽåÁpœS‘Z'Š$,+mv=a+î¿ìÛš èþ~uñîü¥¬–ÿÈ•[¶)–*S·öc9£8l»Â-MújÕÊWUîF^€’5„‚ßøZ*G íïÐTwh¿nõJìD[Ëu»±srz²‡2OeHéhÔSÕ&—ÊNY_¨ÚD¥ù·¶ïdšª¹öK ºÀ›,f¡ß2«û¡zÛ u ¹ «ókßr–U9ß&árâxØ)éœG]ÎóýÁ9,ífW=¸Lǵ/Ô.Í:N+WkàMi>ÔÔU&G¶ïõ#vÐð´«¿º¤Oñƒ!ã#~ûÚ>.ÀP`¢ÇhqdS0¸ˆ)1Øq¨ÄC¶t‡Ã]¡TïŸ8p° ™N&#ÖŒ„ JzŽuÇžmt8A« m®kXÁªÙm=>¹®~ UÆd’Qk ¿¶…ÚgHß&—¶_ï:†©ÒG£´p|Lés­¸+}hÜû裘 ˆ$Ž|?üaF´¾ÙV6´Ïô/Ã(I‘ñCа>õYƒFxÂá„B8±q¨m×aH;#|¨iR O³ÝÖ…°CžË7£óëÓQ¦²>ÎtGã~-o'X–ª,¿XöC˜ì;™ž]öCw5Ø:ç1ÓnpH 0˜ÏÇ  Qì»Ú÷ívéíåOi} {.;SeÇüÎ ×¶0 ú=ª&p U¹WÏ{Ô\°¤;N¼Ès(ÅZ§4µz¦¾þÃ@;N™[ø¶}’šîV¿µiº_Çû$ø?q†ršÛÌåZ÷†Â…ëÆ~€••¨pú¹ÎÏdMSÙ\¶!lX¡ý=°N<.„ÀÇ„ÝÝl&{ ‡xxÛ ÙnÒS8èiV­‘Y¦µî]0 „Âã®ã>ÕÑú{§{Ž»ww”:$\8äE½jëzœ°»€ŽÓß_,å¦Ò×d7³x|Äãê 0wt{üÿt/þ÷¥ðh¤CÊ]Q´\“—yw×céc4TRwU÷Qš‹*–£"0ÆÃäÿXqÆ·¿1œ¿IúÐË_éC7ÀRwé q5ôF–ÒÁt*tŽýÝδTÒ5…±}ü<"Ïyb¿(&ÔeFMëkHw¶€q„Ö‘Óêûí•,ÇšþËãÌ{ endstream endobj 2538 0 obj << /Type /Page /Contents 2539 0 R /Resources 2537 0 R /MediaBox [0 0 595.276 841.89] /Parent 2546 0 R /Annots [ 2525 0 R 2526 0 R 2527 0 R 2528 0 R 2529 0 R 2530 0 R 2531 0 R 2532 0 R 2533 0 R 2534 0 R ] >> endobj 2525 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 566.6 166.532 575.447] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2526 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 483.78 195.872 494.684] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) >> >> endobj 2527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.962 483.78 316.957 494.684] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2528 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 401.334 164.589 412.347] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) >> >> endobj 2529 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [106.717 377.423 155.623 388.327] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h) >> >> endobj 2530 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 359.799 164.589 370.703] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) >> >> endobj 2531 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.999 186.139 338.994 197.132] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2532 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [400.921 186.139 428.916 197.132] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2533 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.933 174.183 198.928 185.087] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2534 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.331 162.602 200.624 173.132] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 2540 0 obj << /D [2538 0 R /XYZ 90 757.935 null] >> endobj 246 0 obj << /D [2538 0 R /XYZ 90 733.028 null] >> endobj 2487 0 obj << /D [2538 0 R /XYZ 90 716.221 null] >> endobj 2541 0 obj << /D [2538 0 R /XYZ 90 716.221 null] >> endobj 1032 0 obj << /D [2538 0 R /XYZ 374.54 681.092 null] >> endobj 250 0 obj << /D [2538 0 R /XYZ 90 664.365 null] >> endobj 2542 0 obj << /D [2538 0 R /XYZ 90 583.517 null] >> endobj 2543 0 obj << /D [2538 0 R /XYZ 90 502.754 null] >> endobj 254 0 obj << /D [2538 0 R /XYZ 90 446.46 null] >> endobj 258 0 obj << /D [2538 0 R /XYZ 90 322.315 null] >> endobj 2544 0 obj << /D [2538 0 R /XYZ 90 300.003 null] >> endobj 2545 0 obj << /D [2538 0 R /XYZ 90 300.003 null] >> endobj 2537 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F20 595 0 R /F38 780 0 R /F11 1076 0 R /F40 846 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2570 0 obj << /Length 2368 /Filter /FlateDecode >> stream xÚ­ksÛ6ò»'¹¡®‚/Ñù”:uê^š›‹=Ó¹N†¢ W>T‚Šêþúîb—åPNêëdb‹Åbw±OHzOzo.¾»»xq­2/Y¢ïníeÒK“@Ä*ðîVÞ?ÑlH)ýÒÔb;›«XúצÔ4z¯×º _×€B™©ÐÓÙ/w?^|wñÛEçH/ptãT¤aìÕŇ_¤·øža¶ð«ò"·ôn/þs!åQ…B&1ñø®é´½Ä3QŽ¥7R‘¨ˆðnj`:Œý¦]Ó0Œü®!P•›ºƒÿ4ûùêöíÍw„‘×+^]ßÜÝÞü›&¹¥US¯ôNߺ£…Ò,Û¼5ÚÒÔtŒÇóºa¼n+c­Y:Mƺi™t= bÿþôPÍIˆ,f©é$ÄËb¿hVšFN¢ 9+Ê}‚ñVç$>Œÿ+¥*µ}Ž7—øŽØúɼﲢ[›‹Ù<Šbÿ‡f¦bÿ ñ/¯Í"éóþn«‰ÀQU@c½¯‹Î45ßÏø"Ã4 ËɃ¼tö#YS¾ú8wBÏ çDòCa»|9qß*ax¤Kø¡æE¡wåIÍß¶Íïiج͒±¶¶Ú÷o.¼nýÐ-›qÈ0yÅví¾è)¯4ŠQëMMýª…Ÿš z0ÝÖ0—ty‚ÔA"’Y³:îPíaºðwmæTÑ.£Õ`T¼†èÀ }{FäóŒ"´ø¸B♞kÓušcF¿Ö쑌ÓÔ›/œ:¡4¶(¾¶;]˜¼,ï§œü ©ÏU >¾Í»G®!Ï\l=˜²œ9”fÝéšè¡a-gJú( ®‘SÃJ^΀³þÉï-À—šÙ'WÌW³ÑxK´†úéé5G»˜zÿÝíJSäèS–0àâ7m^M) ïÌho!(Mù g}𬧥PÁg®Æ6È…PYx|•ªXù¶)÷.À,ðóU³ëÈ]EIR,À·`ì,-¡ÏØþq35m½þ3¢wØr6S§šeù¬î~§Wzý–3©¼>¹¬„t´‡´Ù 6 ‘=+l5˜kàúKšVºZB€Æø¼X€’Ÿƒb5Ï—M·}ÄÙ‚3±È‘ª™¡—†¹‹%ÇDäX>ILÞåLô¼œHëØé lÂæ*év·C¿7ìXås¸á¶ÅÖŒoMµ£ í)BŽ C¥ñÓëãäb¿åš2(a÷t-U!0u‰$\p 3°ìªšå‚Üà:0*MwOKÎÎŽ¸‹£“DN'–Á¤ØÐjgZ§›(@8¼Í¦uŠÜÌ ÷t ¥Ìè¶€C ê¶Î÷b* Τ˜Ī‹ñ’Ž)äËEÔdôâ:ˆÆ}y ýý¨” '."Ù"Õœµ y|^š‰ñÓJSu¦ ¤O‘Ûn8wPÂYñ¿BôXM£§Én8h@D©Ø8`Öêßö¦Õ«¾ïK2!Õâ4ý¼u= Ä©=_kãMÒW/ɸ#Oâqã‘PŽAèÕ·ß€Ì Ötûœ ˜:>,¼*j@œÃ$\y7Žª¬d¨²ð`J'vÊ4™Õ`ÔOã„««DõÔƒÞ[`äœ ³æH©,B࿪¡8è 蕊^¨púS^C€NÜõu¤ÔT@!WW2¦®Æ¥Y÷z”¨AœÍHOÕvÓ*ʾø˜0sXO{<À¶7!TЊ¨¹K‚ï®ÕÐ.BÁ`ûXåEÛТÝ/m·~¬;^!–?ÚSèÊXì³÷Æn™gö«uÛœiG]+¬F•LƯ&©â†w܎ᤆ¼4=ÒvU >¡sŽziïTÚ”Pø–¦2]ÏŦs¯êÜëPë¬.™3ÍIå6¾Ò|1ø¨Ç%ÆaÛ{,½*Qvæ>*f®ÛB—TrYtú&1<³öŸ½øÅ·I,Åï®a$d˜>á Ù‘ƒÊà䊂5öÍ𰉥Ï3P¾n[±}6‘? %dÄ;_SÅ^ŠkAw¨}×OB6¤ ˜™+%¢lÁ‘[©ø¡Fb9øî£úìÚj²:rIo$‘«‹”H"¨‹(tRæà­©uÎwÞµèym]ú8:î.§…Jw¨]`Oœ)ÃNt63|šG¡’ÓÌëáäoÒÔ7ËÁ£Êz{óîí÷歷ÏÕ,æݬ¿¶z™P<'áGBÐt"Ä¥æi]}ñjnØçø_gí4 OÉNéG2HYCÕÜÊ “à–éPt@·Ó±ƒ3×:Â. óP¤Qô·\,H ÿ>‚ãVvó€›ó[¦ñÿò ½†ü7 ¡qwÌ©2þd•©`ñµ¿Xõ¿TA«‘‚+Ð/Uq&â˜ÕöFר½ö¿ô®úS?¸ÆÄ¦—4IèÈË(¸ŒSš)(ΰˆÛþq‰@ÒhÉ¥äëæ÷û®Jú'k-C endstream endobj 2569 0 obj << /Type /Page /Contents 2570 0 R /Resources 2568 0 R /MediaBox [0 0 595.276 841.89] /Parent 2546 0 R /Annots [ 2535 0 R 2536 0 R 2547 0 R 2548 0 R 2549 0 R 2550 0 R 2551 0 R 2552 0 R 2553 0 R 2554 0 R 2555 0 R 2556 0 R 2557 0 R 2558 0 R 2559 0 R 2560 0 R 2561 0 R 2562 0 R 2563 0 R 2564 0 R 2565 0 R ] >> endobj 2535 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.908 678.378 232.903 689.391] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2536 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [303.965 678.378 328.922 689.391] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2547 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.935 660.753 278.93 671.657] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2548 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [442.625 660.753 467.581 671.657] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2549 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.88 648.798 159.836 659.702] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2550 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [304.908 619.218 332.903 630.122] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2551 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [459.22 619.218 487.214 630.122] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2552 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.319 607.263 351.275 618.167] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2553 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.086 607.263 474.081 618.167] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2554 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.241 398.243 184.235 409.257] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2555 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [324.558 398.243 352.553 409.257] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2556 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.663 356.708 131.658 367.612] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2557 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.008 356.708 191.964 367.612] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2558 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [449.31 344.753 474.266 355.657] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [381.723 332.798 409.718 343.702] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2560 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 219.868 167.1 230.772] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2561 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 139.588 183.688 150.492] /Subtype /Link /A << /S /GoTo /D (lin_8h_fce62bec193631f6e6b58c5b786cd660) >> >> endobj 2562 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.239 139.588 267.802 150.492] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 125.133 193.091 135.038] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 101.066 201.411 111.97] /Subtype /Link /A << /S /GoTo /D (lin_8h_ffec8a2c0650ebd2168d7772b2ecec19) >> >> endobj 2565 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.909 101.066 247.069 111.97] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2571 0 obj << /D [2569 0 R /XYZ 90 757.935 null] >> endobj 1033 0 obj << /D [2569 0 R /XYZ 449.758 335.951 null] >> endobj 262 0 obj << /D [2569 0 R /XYZ 90 319.374 null] >> endobj 2572 0 obj << /D [2569 0 R /XYZ 90 238.675 null] >> endobj 2573 0 obj << /D [2569 0 R /XYZ 90 158.395 null] >> endobj 2568 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2614 0 obj << /Length 1025 /Filter /FlateDecode >> stream xÚíYmoâ8þί°t_©ñú=ñJûá¶ UWÐíÕî©­ † Â-ÕéþûÙqRÞ ZÐõªŠvœÉxæyfì±A`¸¨}ìÖÞ5ˆJAèDÀr‚Awn™ëa„3ŽbøÃõGN#+Ûk«¡J]8*õE’P‡î}÷s­Þ­ýYÃzp®—ûЧ„“Úí==þ He~æRÀÕítj_k¨°q[kmGK¶c¤­¥ð1ÒQëÀ!<7§üÜz\»óÛ@Ý!DbU¼4F¦£ÂÚv.fÔ^‡S#ç±§Òt2Utíúl³|µ}×`ÚÁŒ„@Áð0ƒ”pkÿ'5M]ê;*ìgjŸQWÁÃ+õ ‰$ÇÂc˜*õFáØ4ÍþïXàca1SÙ[\”qAoXŽ-Èôc±²zTBÈ¥oÕÔãùD¥ý,JâYEÇêd÷#bb7|JëÜŽeÁ ½%á'%”IçïÝš—Wõv»×¹9?¯w:›|psAt¶C‘OKEW7ÍfïúËåU·Þ^×XmÒÁûióŒ”& ©YÃPò‚µV½õ¥í îü±:‰‰Ž¶ò g»ã®ôýòêâ¦ù{»×ê~ß¡Úæ#²„A‰| Ínnbc‡G ‡(ΞÍ#ýÛäÂâÈ|ž?ôÇã$<³ý§Á¸¿ˆfÅà,Kça¶Ç¾6Yq ³e×ü@nR¿²^!D è–ÐÀ¸”ÑJµ¥xKVRÙÃÂTpÁj2ûóqáR¨±Ï=IR;0,;Ùu°wÅ«ñtKæ>$ÕæADç`•^! tzɽ³4‰mÛ*; —pG=ØaŒÞ3üžûÅIaRì+F¶Ü[¾wš—mŸAŒlï¡(Þ?%‹Ç‘Š+žkOÿ<Ü endstream endobj 2613 0 obj << /Type /Page /Contents 2614 0 R /Resources 2612 0 R /MediaBox [0 0 595.276 841.89] /Parent 2546 0 R /Annots [ 2566 0 R 2567 0 R 2575 0 R 2576 0 R 2577 0 R 2578 0 R 2579 0 R 2580 0 R 2581 0 R 2582 0 R 2583 0 R 2584 0 R 2585 0 R 2586 0 R 2587 0 R 2588 0 R 2617 0 R 2589 0 R 2590 0 R 2591 0 R 2592 0 R 2593 0 R 2594 0 R 2595 0 R 2596 0 R 2597 0 R 2598 0 R 2599 0 R 2600 0 R 2601 0 R 2602 0 R 2603 0 R 2604 0 R 2605 0 R 2606 0 R 2607 0 R 2608 0 R 2609 0 R 2610 0 R ] >> endobj 2566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 707.58 205.177 718.484] /Subtype /Link /A << /S /GoTo /D (lin_8h_58c2822debf5b36daa18fe8711d724f2) >> >> endobj 2567 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.675 707.58 250.835 718.484] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2575 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 669.963 206.373 680.867] /Subtype /Link /A << /S /GoTo /D (lin_8h_a6d3f59059c532b0217f570f2b4f50df) >> >> endobj 2576 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.871 669.963 252.031 680.867] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2577 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 632.346 201.959 643.25] /Subtype /Link /A << /S /GoTo /D (lin_8h_8970e09d61fde987211f8e64061e1fa1) >> >> endobj 2578 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.457 632.346 247.617 643.25] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2579 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 594.73 201.959 605.634] /Subtype /Link /A << /S /GoTo /D (lin_8h_a78f202b20674909aab523018106546e) >> >> endobj 2580 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.457 594.73 247.617 605.634] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2581 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 557.113 205.835 568.017] /Subtype /Link /A << /S /GoTo /D (lin_8h_cb8c02645d7cc3d42e3db6ebf74de192) >> >> endobj 2582 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.333 557.113 251.493 568.017] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2583 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 519.496 205.835 530.4] /Subtype /Link /A << /S /GoTo /D (lin_8h_7232df93295216e063c438671652c2b4) >> >> endobj 2584 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.333 519.496 251.493 530.4] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2585 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.518 440.528 211.797 451.432] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f) >> >> endobj 2586 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [221.529 440.528 307.665 451.432] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f2544660be2086b8225623e8a7b534dfb) >> >> endobj 2587 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.421 440.528 445.974 451.432] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f84e4dcf5e518ba3dce985ef7c9687513) >> >> endobj 2588 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [467.73 440.528 513.996 451.432] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f28004da63d882a7df754d49047ea7f2d) >> >> endobj 2617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 428.947 160.087 439.477] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f28004da63d882a7df754d49047ea7f2d) >> >> endobj 2589 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.657 428.947 299.085 439.477] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1fd2248fa36c9d85c91187179ae95207e8) >> >> endobj 2590 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 374.889 149.955 385.793] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2591 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [254.78 374.889 283.342 385.793] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2592 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 360.887 252.618 370.792] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2593 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 337.272 153.721 348.176] /Subtype /Link /A << /S /GoTo /D (lin_8h_b8fc0ef6b34eb3327b13a00de78232b1) >> >> endobj 2594 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.044 337.272 271.607 348.176] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2595 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.831 337.272 357.394 348.176] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2596 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.898 323.271 228.804 333.176] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2597 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 299.656 154.916 310.56] /Subtype /Link /A << /S /GoTo /D (lin_8h_ef9ead7c6ea6ab08f3ba3fc6a1c30303) >> >> endobj 2598 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.359 299.656 211.921 310.56] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 285.654 220.985 295.559] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 262.039 150.503 272.943] /Subtype /Link /A << /S /GoTo /D (lin_8h_946005b038f5c584691630b5d39369e3) >> >> endobj 2601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.467 262.039 231.029 272.943] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2602 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 248.037 228.31 257.942] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2603 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 224.422 150.502 235.326] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 2604 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.945 224.422 207.508 235.326] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2605 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.893 210.421 229.799 220.326] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2606 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 186.806 154.378 197.71] /Subtype /Link /A << /S /GoTo /D (lin_8h_e4947608476c198ad27759d1e562d655) >> >> endobj 2607 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.821 186.806 211.384 197.71] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2608 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 149.189 154.378 160.093] /Subtype /Link /A << /S /GoTo /D (lin_8h_5490027e9699680dfefe370c28691243) >> >> endobj 2609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.821 149.189 211.384 160.093] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 111.946 156.191 122.476] /Subtype /Link /A << /S /GoTo /D (lin_8h_cc7d26efba3ca08d36047253a9315dcc) >> >> endobj 2615 0 obj << /D [2613 0 R /XYZ 90 757.935 null] >> endobj 2616 0 obj << /D [2613 0 R /XYZ 90 458.883 null] >> endobj 2618 0 obj << /D [2613 0 R /XYZ 90 393.244 null] >> endobj 2612 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2654 0 obj << /Length 1582 /Filter /FlateDecode >> stream xÚíXKoÛF¾ëWè…BªÍr—K‰¾%q8p4VÛƒ¹’‰ðÕ%i[ùõÙYÊ’"±AÞ‚ æróøæ›Ù¡¸·ñ¸÷nòz9yy%b/fq$"o¹öbîÍ£€)xËÌ»ó#NgçÜ/òŠÝOgBqÿ*/4>éµ6Ó`áë*…)Éc!}O¿,ßOÞ.'OÐýÀÊUs6—ÊKËÉÝîe0ÿÞãLÆ ïÑî*½PHxÞíä· µQHÆ#E6þ1…Ÿ˜‹•c*;M ˆ°úјò8öR(°Åô)0w=ÞçéýÔN/᪥…¤(h:¯ö½‡•JëÌÚ‹°D“ä; ÒºlúaÃú™r,‡ågÝÇ ÛºÔŽFäh©Ë•6¸) &éhTö­I¥i¦ÕnÉÆÃnv+} ¥°þ5-  Í×°ƒ$Ë=ÉTÆ¡:ûN®¥œèd%ÏÉðìÑ “…¯6œèS‘|óâ…«EÒºŒZM÷{W%óΕǪ¦'ÔĤiûÂbÌvBçP6ÂòFƒÒG{6žåK*ä üû̇ÿÁoüÑÃ!Ntt{^€Õ‚ØŸ—Ä-m×`ú1v‹ Scî<ä–8ÓÕô,“*ÙØ]jŒ²û ÷DÈü¾¡¡ öH¸„Z 9pfÔœf2¤1$³¶¦Ì¡tÚ”:Ë“N“¶${Rô´#‚ô…7œ†Üúâ Ž×L°£&1I©;›­ÏŠÀ¤nP˜¸Ñ£6úT–µ=ÔúÜ^ÐH`* R‰À ["”ò¶‚êÎïÌÍI Ä?ɶ¥u,†­“U;ÙšÞ[@O»£6<¤÷<." IØUØŽÚµ›Z9ÃS(à´úö†y÷Ó¼+¶´>£%cÛ¬S÷‹+5„Ö'2‹îœ¬×cqæ.ÎØÃ$ÇˆÏÆ²g¯˜¡ñtÐ3ZVœ!O¢‘—M¡KHµ#¿íîDØÆÀ®šý®àLr"FŠ~ÿ”yb¶ô GLþ„c‰4†"ò€Èµ UØòI,±ÆuîüX"K¸ÁÛA[ZôP*-ÇCÿº#m@ý–F7¿ÏÀ¶¤ÚÀÍbhjmÙžvµÉ¿ qQîJ‚ -Mg§9Ûå3TÛr,HÞÌÞ0׵Ň]›,ˆÕsó'vÍu\®ù«Ó#• íßqÃgî:Ç_²ƒÓ7×oÞ~¤1"׿ßt½¶£]혋¨¾|Þg¬¿ï:÷Y{ ÇvY²ãÔ¤Ë)vî›–»–7<øáÐ>Ë¡ùCO@k[ú îwóôíÐWÛ¸Oÿ+$gmð®1Ð5[OEpÀ'⸋äQ0¨ë>T†©S.'@›qÇð]"SÓv©úlLá–ÊÎ}x ²`sƒíñ3w_eÙ€ˆmq-4Iú•Š¿Év—sÙ WßÝv)ÿÏ ôÈÇY–R¥¦¦[Ê!öm§“ì4øðHø‚ðÕ||yü´Ùþÿÿ?< þšÀÒ?#ð_"°;vüsP´`q°øÑ_ƒ†_"ÏåÂý ¤b¦”«ãït¥E“й«ƒ†ÁÚ§WôÑ#àap¡æô&x š¸w@:‹›ë×4YÀ+ðeý´ÝèêØÓ¨'ío endstream endobj 2653 0 obj << /Type /Page /Contents 2654 0 R /Resources 2652 0 R /MediaBox [0 0 595.276 841.89] /Parent 2546 0 R /Annots [ 2611 0 R 2630 0 R 2631 0 R 2632 0 R 2633 0 R 2634 0 R 2635 0 R 2636 0 R 2637 0 R 2638 0 R 2639 0 R 2640 0 R 2641 0 R 2642 0 R 2643 0 R 2644 0 R 2645 0 R 2646 0 R 2647 0 R 2648 0 R 2649 0 R ] >> endobj 2611 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 697.247 209.7 708.151] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2630 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [104.421 602.845 132.984 613.749] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2631 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.302 561.311 184.97 572.215] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2632 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.9 561.311 223.334 572.215] /Subtype /Link /A << /S /GoTo /D (lin_8h_b8fc0ef6b34eb3327b13a00de78232b1) >> >> endobj 2633 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.693 561.311 281.323 572.215] /Subtype /Link /A << /S /GoTo /D (lin_8h_ef9ead7c6ea6ab08f3ba3fc6a1c30303) >> >> endobj 2634 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [401.932 561.311 430.494 572.215] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2635 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 549.356 119.22 560.26] /Subtype /Link /A << /S /GoTo /D (lin_8h_946005b038f5c584691630b5d39369e3) >> >> endobj 2636 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.613 531.731 185.829 542.635] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 2637 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.772 531.731 363.334 542.635] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2638 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.092 519.776 359.308 530.68] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 2639 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.526 507.821 222.571 518.725] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2640 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 490.197 123.096 501.1] /Subtype /Link /A << /S /GoTo /D (lin_8h_e4947608476c198ad27759d1e562d655) >> >> endobj 2641 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.47 490.197 174.562 501.1] /Subtype /Link /A << /S /GoTo /D (lin_8h_5490027e9699680dfefe370c28691243) >> >> endobj 2642 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.458 472.572 277.363 483.476] /Subtype /Link /A << /S /GoTo /D (lin_8h_cc7d26efba3ca08d36047253a9315dcc) >> >> endobj 2643 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 386.449 162.667 397.353] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2644 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 328.874 138.508 339.753] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000007) >> >> endobj 2645 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 308.784 313.271 339.753] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2646 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 241.247 138.508 252.126] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000008) >> >> endobj 2647 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 221.157 313.271 252.126] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2648 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 153.62 138.508 164.499] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000009) >> >> endobj 2649 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 133.53 313.271 164.499] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2655 0 obj << /D [2653 0 R /XYZ 90 757.935 null] >> endobj 2656 0 obj << /D [2653 0 R /XYZ 90 716.221 null] >> endobj 266 0 obj << /D [2653 0 R /XYZ 90 659.927 null] >> endobj 270 0 obj << /D [2653 0 R /XYZ 90 447.043 null] >> endobj 2574 0 obj << /D [2653 0 R /XYZ 90 424.731 null] >> endobj 2657 0 obj << /D [2653 0 R /XYZ 90 424.731 null] >> endobj 867 0 obj << /D [2653 0 R /XYZ 358.211 389.602 null] >> endobj 2658 0 obj << /D [2653 0 R /XYZ 90 372.875 null] >> endobj 869 0 obj << /D [2653 0 R /XYZ 90 299.818 null] >> endobj 2659 0 obj << /D [2653 0 R /XYZ 90 285.248 null] >> endobj 870 0 obj << /D [2653 0 R /XYZ 90 212.191 null] >> endobj 2660 0 obj << /D [2653 0 R /XYZ 90 197.62 null] >> endobj 871 0 obj << /D [2653 0 R /XYZ 90 124.564 null] >> endobj 2652 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2674 0 obj << /Length 1435 /Filter /FlateDecode >> stream xÚíXÛnÛ8}÷W؈¹$%êâ·4u‚¹5v°»HŠ@–[¨,y%¹‰ûõ;äPŠ|˶Øí[àICòpxfæ ajÍ,jõ>Lz¿ŸòÐ IèqÏš ­“ðå8I`±vç©(ñeÅ_ŸûŒÚQ™ThŠ‹Å2ªÓiš¥õºï ûí«Jšw|¾ëŒf4IK×ÙÁò¢Ï…ýŒi^Õ2JˆZ¶Åû€A™c \J¨ïwÉ÷’_Éwò1ùþáÌç/ïäÿZòƒƒä¿ðå;ùÿ'ù#A—|ÇP?ÊW Y‚¿EŽ`“¾ïÚë¥ ÅÇ"†ñ¼Æ €. 8,wÃaMÚvÀµqãD1âÔ8R”Ãr½ÎÁ8#NÚ\œ_noÇw''£ñx/†rž ±±äêîââñæúüj2ºý™u—£Ëë[•Wý̪ñùÕÙÝÅ1,Ÿü¹±n;tœNÝÝÐ5—ŠÓU¿Æí`¤:Þm•æu'øáûT è4Ú`;tˆ j¨(ËŠxO²©bᢙi/ÌN»€>„ÍÔµÛ©‘5~E¥Ù:_A¶î© WŸu@-JªpÒxަ8ª$›¸)+&¿²juU;™'ø©cè ë 4í«RB7ÔeužãœB×+ú ‚PÀÍ\i*LRê4ŸmÂëfh›u¦Éu69d8W(…©:C#@˜b•yí„´3ÿ», ÒÜ'Ú,ÛþÛÇ HÈ‚ý×§ù·Ç#¡ïæß½H˜æz&suÅnD¥¹:^6/§ªÊ)~xø`t財ðñ T„› Ss›*ûãd|qþßá’IŒ­›«éËz&óí“þ BÝ× endstream endobj 2673 0 obj << /Type /Page /Contents 2674 0 R /Resources 2672 0 R /MediaBox [0 0 595.276 841.89] /Parent 2546 0 R /Annots [ 2650 0 R 2651 0 R 2661 0 R 2662 0 R 2663 0 R 2664 0 R 2665 0 R 2666 0 R 2667 0 R 2668 0 R 2669 0 R 2670 0 R ] >> endobj 2650 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 696.295 138.508 707.174] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000010) >> >> endobj 2651 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 676.205 313.271 707.174] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2661 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 612.511 138.508 623.39] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000011) >> >> endobj 2662 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 592.421 313.271 623.39] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2663 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 528.727 138.508 539.606] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000012) >> >> endobj 2664 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 508.637 313.271 539.606] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2665 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 444.943 138.508 455.822] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000013) >> >> endobj 2666 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 424.853 313.271 455.822] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2667 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.422 207.267 279.985 218.281] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2668 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.644 189.643 219.206 200.656] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2669 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [254.704 177.687 303.749 188.591] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2670 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.723 123.794 402.286 152.86] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2675 0 obj << /D [2673 0 R /XYZ 90 757.935 null] >> endobj 2676 0 obj << /D [2673 0 R /XYZ 90 733.028 null] >> endobj 872 0 obj << /D [2673 0 R /XYZ 90 669.002 null] >> endobj 2677 0 obj << /D [2673 0 R /XYZ 90 654.749 null] >> endobj 873 0 obj << /D [2673 0 R /XYZ 90 585.218 null] >> endobj 2678 0 obj << /D [2673 0 R /XYZ 90 570.965 null] >> endobj 874 0 obj << /D [2673 0 R /XYZ 90 501.434 null] >> endobj 2679 0 obj << /D [2673 0 R /XYZ 90 487.181 null] >> endobj 274 0 obj << /D [2673 0 R /XYZ 90 411.597 null] >> endobj 2619 0 obj << /D [2673 0 R /XYZ 90 387.382 null] >> endobj 2680 0 obj << /D [2673 0 R /XYZ 90 387.382 null] >> endobj 2620 0 obj << /D [2673 0 R /XYZ 107.713 329.976 null] >> endobj 2621 0 obj << /D [2673 0 R /XYZ 107.713 314.741 null] >> endobj 2622 0 obj << /D [2673 0 R /XYZ 107.713 299.506 null] >> endobj 2623 0 obj << /D [2673 0 R /XYZ 107.713 284.271 null] >> endobj 278 0 obj << /D [2673 0 R /XYZ 90 268.803 null] >> endobj 1316 0 obj << /D [2673 0 R /XYZ 90 245.549 null] >> endobj 2681 0 obj << /D [2673 0 R /XYZ 90 245.549 null] >> endobj 2672 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F46 2400 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2701 0 obj << /Length 1954 /Filter /FlateDecode >> stream xÚíY[oä¶~Ÿ_!}˜v¸¼ˆ”4 4íz‘`³›® äa7(äm IJŠíþúò’Fž{Óíä(êð;‡ß¹itÑèí⻫Åë žEÉWÑÕM”Ñ(QŒH΢«"ú´T$^­¥t¹+kr·ZsI—åNã죾ÑfÅÒ¥®·°$hÆÅR±Õ/W?,Þ\-~[08‡FÌÉ• I„Œ¶ÕâÓ/4*`ý‡ˆ‘¥Ñ½ÛUE10î¢ËÅßÔc¤S¬,ž`e2%\ª$þLcj}«é^Nbƒ ·©ÎÊÖ ÒÁ t²'„ñ4l¿ºóêÖ}u úºysƒãýŠÁƒÙø¸mS”uÞùOò‡“KݾÂǾÕ~c×àXèN›ª¬Ã~còGœ¶å?uKf0,°‘)Ö,&)÷øÓ³êÃUžSž)Be6¿h9è§€Ùäu{Ó˜*ïʦ¶kl¹ÏM^Y*2å}c•·ïº»¼Å¥H—e"À::Hkp,ë²+óh‹_UºjÌ#¾«ò:¿Õ•®;Ø’ÉÜzV}|»ˆÖŠÈL‚ ɤÜ›j³ùL©Èot>­y/Û»¦wWókc«;œ¸«qÍp¼¿Ó5άåÜèƒã€Ý ëØ‰ݽXÁMD—Õ°,iÐÔ‰Öù¯^h•û5£Û~ç4쨡B KϾ²Ãñ.÷´ÊwFç…gеvÀåÔÆÌæ¬:ˆë˜Å“hÍ9IÇ?ê®7–Êu»9Kž”$4°)Hà·—]Þõ-1VŽõûŠKÜëC‰ÀV!‰H½ˆÏœËù=JàÝ@Ô¼ì·[ÝμÅmâ§„0/ä}¿Û¢Ù'‡‰õ„Pðfß”ubÃ>oÁÏO€QçÁpæÇÀ w©»fë}Î>ߨ˜“CÆ3@ðS‹]ØËjÌÔê-FÆ&÷+"„ ÎþgÜqx£”ð!t0Çò!x9ø¤ Vpพ|þîÑÁ_bæÍ³u ¿®ók8üU®ÏK½ß¶ ðø•u?ë 3ùKâ-pàILx ¤)8D6dFøã>æÁå¯ôíÞ_›=£ÄÈ5‹ÇYBâѨîzœË` Üõ»l ¥6ÁÔ­?«íL¿Ïõ̜刌Á† ¶ñ€“ðIzhÍ1G¼˜Šðé`<˜cÖSër‡YÅԚئ¾-ëÛsGp{ü µ1ˆÇX¢ñiÌ@<¤.I%À#~Nç íMwoþ­/Fk!åòC½³"•òIPÉå7e=©ìŠÃãµß±7X¿—….¾ñK¹éPŽ3µ’£¼Áp0wáF¸RßÂC"ÜÝÙ5Pw8ï´á½e½îNZ@„s‚¶S¹C~ö™Ö4®Ú %¤ÑU܆ûCOÔd™ƒS’R/ö'øCÁu˜6OÔˆÇò‹Šä!*,’c’Ñ!²|ï‚2ðÌôúN'T“cYgçH5»ûοݚ}ùà¿Ûoƒ€ºðo ½ëüZà$æ‘C)…n;[|Ë,™X~°¾t_¶SéÅ`ýïRfÏè Ù»¯0©)WÃâ̧øÖ¯7á½n5NGh ²·Ž-þq%c*äAXzdØIž¾bK¬"ø>~Øê½ßiwÛÇp¨—_÷ŽêO€b²ôþ®Üúvn›·:dí±æ¸/QE«íoB®> endobj 2671 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 693.131 177.68 704.035] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2682 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 610.053 188.241 620.957] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2683 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 579.844 350.388 590.748] /Subtype /Link /A << /S /GoTo /D (structlinprm_2975830d4214bb6b35cb1ca922875057) >> >> endobj 2684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.642 579.844 476.803 590.748] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2685 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [221.978 523.35 250.541 534.364] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2686 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.061 523.35 373.73 534.364] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.264 511.395 458.48 522.299] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 2688 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.817 407.021 273.862 418.014] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2689 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 323.942 188.241 334.846] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2690 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 293.733 350.388 304.637] /Subtype /Link /A << /S /GoTo /D (structlinprm_2975830d4214bb6b35cb1ca922875057) >> >> endobj 2691 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.642 293.733 476.803 304.637] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2692 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.377 237.24 279.939 248.253] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2693 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [320.215 237.24 349.883 248.253] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2694 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.656 237.24 408.872 248.253] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 2695 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.954 237.24 442.622 248.253] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2696 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [302.75 207.66 331.313 218.674] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2697 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [461.772 207.66 491.44 218.674] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2698 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 95.621 188.241 106.525] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2702 0 obj << /D [2700 0 R /XYZ 90 757.935 null] >> endobj 2624 0 obj << /D [2700 0 R /XYZ 90 573.664 null] >> endobj 2703 0 obj << /D [2700 0 R /XYZ 90 559.595 null] >> endobj 2625 0 obj << /D [2700 0 R /XYZ 90 287.553 null] >> endobj 2704 0 obj << /D [2700 0 R /XYZ 90 273.485 null] >> endobj 2626 0 obj << /D [2700 0 R /XYZ 90 89.441 null] >> endobj 2699 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2723 0 obj << /Length 1572 /Filter /FlateDecode >> stream xÚíX[oÛ6~÷¯Ð€=È@Í’”HI0`í–bEStM€=¤E!K´£M¦<]ûßïP$eÉ‘ì¬è: "Ê:úx®ß9v6v^Í^ÜΞ_ÑȉPÄ)wn×N„€Ä(qnSçÎåÈŸ/ÆØÍ3‰îç ʰ{•åB¯Þ‹µ(ç$t…Là'GÔs9¼}=ûåvö׌À>Ø!-. Pà1'ÙÎî>b'…ß_;yQè<´R[ǧ\sçföÛ ŸÕ‘zsÖé¨þŒž™¬µn ð®4ë˜á¤•¹­ê²Iúb[¥ñó+â÷¶!œ!? A‰v—{ZÊç=©ùµ2€¥Eú‚pÐÃaD 9 ú{!,Ä©ßA(­5 î¡Py¬‚[¤Ö†] VWz]ߛ؀½µè~.Öú·±ÑA)7&:ï_Íœ»ot0Oú>kªLnÎ=$U«ÕºÓtˆé"H‚Ýë8“ùAÃfJáT¤ún]”z‘fñFU%ÆÚ¦Ü•¨ÐòÄé þòÛ+Á&›ßÍaǸŒ·¢eµ¼ÄfAˆ©`!̨u¾GRPäÃŽÃ\èë‡Ùx‘~“Isë2–¿ë¬ÆäNéóFû¢”~/êj”¹òÄâSF,½©ãº1T*£Ïç9enœ7bˆè\ …žñ¥ì4”)^êøß4I"ª³àŸÂ, Mò¶Éó/Íë]¡Ò®´~®*‘¢‘"†}á¸Ø‘ô‰‡O%zÄó4¶ñ"D"þ•Ø&aE¿~`؆uJÕ¶¡ˆGþ)Û<ÓîΗD¡+… ]\朹æYœçE×¢Ò"[±-ʃ^낆…¢¨éhEñÒr¹ËöÙvó(jËôDØAÀû€2 Q–ñÁ¨©àÚxÃüÔì.*»0^Z€Ï#Æz~‘Aã$)ÊT±¨®ùÂ2àIáWÍn—g–²ú>3O2ƒ´°Õ¹¶IlÁºN Tõïwy,{ÈОP1Ë¥ÊÄxó˜½URáaïz[Ô°£ï)§Åµ]e•^•ESÍé)”Míª0’+ó(Ò þR$u~øa¾`mmV"Ôûà%ðŠßÒö§by ¿:L›©ž+3é~¢IµgSÍ@ìéî„*íŒÉ\ÂcY4á}C˱TÑ=¨Ä0ÉTÀ66îciû¾™D*”J›SÛxckÇêç› FÕ¿ÑX¿ÿ¿«^êªäo«•9¯ 5º\ÛFºÓÅqÝfJÒ/³×[ŽõÑy8°©ôî¥q½ß³ ‰ÉF@Š‚ãÓ„¢°kèÄ#˜ÀŒÑ7"¾%´³¨a¼É!Ñ3¼¼¼D‡)s¥²ÕÎÔ:í*3ˆ¾Fy^7‡ü8¦F´+H5ôø%uÓxÊÒn¸U“ÂFœhnǤ®ª/4#åBs¸2^ÁæÏ,º¸xFÀOú­ésÊÈ0øùhdäýaÐ'Äôµ¦ƒaÐ>ýp½ Ã`„pøONžà–û­jÁ(péRU&Œ'#ˆè옰-¢w±K$)r±„ ÀüÐÕ•ÏÒ¢àŒÂñ£Â0ã%ã CG Âw¸Í>“à "ìo š2̒ɼb79ÎÞæù£ƒ>ÝÞMó»&fêGM¶PÔ"·'þv¦4Ó÷`¬*Þ 8Hצeež>zó©:@,ø7ÿ¦*vª‡ä)t =ëJm®–ö¥[5³{œ¸²Ù®TûTkõíF]{QR§­0rEœÜe>· ‘Ô…y7rS­J»\©I¹©-®Ö–íÙ¾“I$ã}VéìeN9|X GU ó²úØtÁ—€@Â/ðå±¼§¼è©©´cÌŸÔÙnøákºVÎëìÃðÕ›{:wQá#UL*ì¡€ŸSøë-Ž¥üÛŸ_O¿(ó°M§'~P¶’9Ìd0ƒéÉ -3ŒüJHQ‚7{-Q\ÛÅ•2O¬ô ׂ—>Y²@ßQh5v$¥Çaë÷—7o~}¡×>„@¯V&Þ?ûÃFÈSKÿÑÎÓ endstream endobj 2722 0 obj << /Type /Page /Contents 2723 0 R /Resources 2721 0 R /MediaBox [0 0 595.276 841.89] /Parent 2728 0 R /Annots [ 2705 0 R 2706 0 R 2707 0 R 2708 0 R 2709 0 R 2710 0 R 2711 0 R 2712 0 R 2713 0 R 2714 0 R 2715 0 R 2716 0 R 2717 0 R ] >> endobj 2705 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [215.737 702.288 244.299 713.301] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2706 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [293.504 702.288 339.76 713.301] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 2707 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 584.431 188.241 595.335] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2708 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.349 525.296 342.685 536.31] /Subtype /Link /A << /S /GoTo /D (structlinprm_eaaf26fd243da58fee173b075bed1de7) >> >> endobj 2709 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.015 525.296 423.35 536.31] /Subtype /Link /A << /S /GoTo /D (structlinprm_28a705f744a32cd05dd3aa86ca58998b) >> >> endobj 2710 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 513.341 117.566 524.245] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2711 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.098 513.341 477.144 524.245] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2712 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.705 495.717 431.797 506.621] /Subtype /Link /A << /S /GoTo /D (lin_8h_e4947608476c198ad27759d1e562d655) >> >> endobj 2713 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [452.917 495.717 487.009 506.621] /Subtype /Link /A << /S /GoTo /D (lin_8h_5490027e9699680dfefe370c28691243) >> >> endobj 2714 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 483.761 138.049 494.665] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2715 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 365.904 188.241 376.808] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2716 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 318.632 350.388 329.536] /Subtype /Link /A << /S /GoTo /D (structlinprm_2975830d4214bb6b35cb1ca922875057) >> >> endobj 2717 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.642 318.632 476.803 329.536] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2724 0 obj << /D [2722 0 R /XYZ 90 757.935 null] >> endobj 2725 0 obj << /D [2722 0 R /XYZ 90 733.028 null] >> endobj 1315 0 obj << /D [2722 0 R /XYZ 90 576.013 null] >> endobj 2726 0 obj << /D [2722 0 R /XYZ 90 561.541 null] >> endobj 2627 0 obj << /D [2722 0 R /XYZ 90 310.214 null] >> endobj 2727 0 obj << /D [2722 0 R /XYZ 90 295.743 null] >> endobj 2721 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F38 780 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2735 0 obj << /Length 1729 /Filter /FlateDecode >> stream xÚíYIoÛF¾ëW°@Mgå>hÒ8Hàt‰ÝöàMd\Ü!Ûýõ}î¢d9hŠ Ãà||óÖï}¤°·ñ°÷jöüböý) ½…>õ½‹µbOú J¼‹•w9÷_, Æxž&9ºY,©ÀóÓ$UvõN­•^`®ò.1R6÷ÙâêâÍìåÅì¯}°Gj½B"É„g³Ë+ì­àú#Þ]-•yœ28¦Þùì·v6â­¸g+¡Ÿy’2„}a ~O©¨·ožó.—Ì''`ÁóŸ·iêî»ôÆø®–4>£·:ë0wn‹$¯À_{•¥Z¡¡ö–D ¶…:[Þª¬ÐV]”¦EUI‘Ûóõ"ôçmÁNÌÕQrIˆ– V?úë +‚¾C4 H2¡ö–­Ž*8 Ú|ŒœŠAâ8â\4"YTéäÞz”öX&ùf›Fz!ļöß[JÑó§ "æ…ˇVÕVç¥Ý޾A>bÌo¶ûaÊ Œ(oÈ3—{X©ªNƒ=SZ7fª,£®*w!?¦ÊNN@áT©%k·_]ÃæÏíê°Ö»¸…ìSï±ÀðOFúm@GY]J‰½%§ˆˆ m~ø“ ö¡lCiL¿§·fíÏÍe¥·qwÏ5$r 51~1³BÜï ‘6© Ḇ Â2ld ./kÓvµQIÜæ=‹B¯&4ÒÉ®`Ÿ¢Q¥*›RÐI9…q‘—.F«b Ù™Pï›e×|Ù&>ÂàKHè¿rûìU¾dbøÐA…ÂÁåmr¿ga²³ISNÞÒÝ_‰|ÊÛŒ™ÂØí/†šjsïʲ®ØJGy¹.tV6}›©UU®µî :uX§1Éá¶{¢* ˆ¨tGnˆ ãʧ a¡ù¯ ¯4,_pÓÕõ^Fý4ý €~ÉnM‘`}rh*Ö1¯:æ{™C¬+.°hªÈA9ž¢]f“½š¹D˜·&5ŽNh§PLüß4ã[¢µs¨pÀ¹BăpštÝ*Ý£\ƒFqú ,ë²EmYR³<û} â‘룦˜ ü݃š»¤r Ê8j+HJ•Di3 ’2£»_6‡™„€âßejô)üç Uƒü´Õñ‹^5€Þ »êFí†Û¤eY “3úÀ­÷ަ脳bãnÁ#ÈíW9LÄŸàÏ ;®ŸöEŽš´¶†¾uáaŒÔÔž1<¿Vö|PU _Ly •gÊˈF¥…=/'bBxX„êú±– †¶SÚ¾…}7¥R-ÚYõq"²ù²õèÊZtw£´šÐÆàÍ›óñhði$i;g¢|5eÀBpÈ" «ÖäH»€ÖEi¦ ÓˆwöªÙ¢¾é6˛دàIà7¥C­Uy <ݵtMì¾´Ç1hr,ûìáÞÞ†”ˆ‘6Ó¯À¦†½i tYm»–-neÖf˜*ÂÜ€Þaìââ2b×;C-Œ‚|\cO&ë©ÔøP£c>>΋ÿ£/œäQ&jíLú³È¢ë$aösñ’Ñ<[*"ùcRhÄp«ì§"Þš—@kµ©|°rÄš Ö#âô˜F|é)Øf(èj÷l`¨„J¡½€zeå¦áͽ á½§~ƒë±ƒ—;”rôÁBïT{¯¬ÚRêWY3Æ×ºÈ•Œ-ëmïvÂøw ܦáü ù‰Â‡Y¯ö' » ¾R¹ÒðÎèìjªëm³85^¨k{âÛÁ'œœiÏ(&´)IÚÿ?_œŸ½~nן]]?4¥qÿ°QùØÓư/ä endstream endobj 2734 0 obj << /Type /Page /Contents 2735 0 R /Resources 2733 0 R /MediaBox [0 0 595.276 841.89] /Parent 2728 0 R /Annots [ 2718 0 R 2719 0 R 2720 0 R 2729 0 R 2730 0 R 2731 0 R ] >> endobj 2718 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 719.912 188.241 730.816] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2719 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 672.092 350.388 682.996] /Subtype /Link /A << /S /GoTo /D (structlinprm_2975830d4214bb6b35cb1ca922875057) >> >> endobj 2720 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.642 672.092 476.803 682.996] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2729 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.308 466.99 206.871 477.894] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2730 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [327.146 423.154 372.306 434.058] /Subtype /Link /A << /S /GoTo /D (structlinprm_2975830d4214bb6b35cb1ca922875057) >> >> endobj 2731 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [432.559 423.154 498.721 434.058] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2736 0 obj << /D [2734 0 R /XYZ 90 757.935 null] >> endobj 2628 0 obj << /D [2734 0 R /XYZ 90 663.125 null] >> endobj 2737 0 obj << /D [2734 0 R /XYZ 90 648.555 null] >> endobj 2629 0 obj << /D [2734 0 R /XYZ 90 414.188 null] >> endobj 2738 0 obj << /D [2734 0 R /XYZ 90 399.617 null] >> endobj 282 0 obj << /D [2734 0 R /XYZ 90 170.739 null] >> endobj 868 0 obj << /D [2734 0 R /XYZ 90 148.427 null] >> endobj 2739 0 obj << /D [2734 0 R /XYZ 90 148.427 null] >> endobj 1034 0 obj << /D [2734 0 R /XYZ 374.54 113.298 null] >> endobj 2733 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F11 1076 0 R /F14 1078 0 R /F46 2400 0 R /F8 1123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2752 0 obj << /Length 1591 /Filter /FlateDecode >> stream xÚÅXmoÛ6þî_¡k$õfe臦IºY»%n; -U¢ma–äRRã`Øß²e[Nƒ¶À¾Ø|9ïîyîHŠYs‹Y/GgÓÑ/—"¶b7EhMgV̬(än ¸5ͬ[;tgÌcö²š;<°Ý…3³/ó¥¤ÖµœIåð‰-ˆ<EÂ}çÓôõèb:ú2â°³¸ÖDnäVZŒn?1+ƒñ×s½xbÝk©Âò…ÿKëfôçˆíÙɹè žËÂà; óö|gÖXø®çǤñ¢l ©’&¯ÊZ;ÓYËXo]ß›ÀZá†5…vÖX·ãl“ ÓŒcDÔÜ„æZK ‘`ýTª¨áo+¼Q‚"ÿÓ0qý0¶Æ#rxGU±¡ˆv*?8œÙo¯¯ÎQíÓß¿”CÂÅ,²Æžpyl¼ºlËô§²./›o’n-ê!>²€eUû¹Ë¡T}uD`'Ëê£jÝ(×û#õá쓚Áü3Ã}ýë[Èâ0²?Îáj=n¦·ª›¤é–‚Í|Ç—m}I‡¡!ÄÐùÐ |ïÔ [aýHÊzV©‚Ô7Ugâ=OTÞ,Š<í\©”ãEv–—I#kwpï#0Ž;# –ÅüÇa¬ÅúÇ`ìA4ˆÛ!¼GÜ 5 æúBòûÜO]/v$ ï¹<0{¾wbaƒêÜüiÙÛ‹oºHUî÷´ÜÅ3zóŽðdÏŠÈõ#Ñ-Û']S'Æ­Œ-çUª‹TÒùû§¼Öµ¹.èÇö·_àcæÆ1\mDà<ØýPP©Óc×£°ç’à.^U'.Ã/ßx¥o6|…}Ž?¾ì Ù´óîž<»»ÿý/8!Üóøä©pº7¡Gpߥï6AìÝù¥,e_”¿wK4U~¦NHœúü4ˆ¨'¦ ¢lGd8¯^™¸ËÙ.Ï«õÃ\–;ƒ§ÿÓ!ר endstream endobj 2751 0 obj << /Type /Page /Contents 2752 0 R /Resources 2750 0 R /MediaBox [0 0 595.276 841.89] /Parent 2728 0 R /Annots [ 2732 0 R 2740 0 R 2741 0 R 2742 0 R 2743 0 R 2744 0 R 2745 0 R 2746 0 R 2747 0 R 2748 0 R 2749 0 R ] >> endobj 2732 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 672.898 213.028 683.802] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36) >> >> endobj 2740 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 657.675 203.922 667.862] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c361f9859b85143e5ddc55744beff6d433c) >> >> endobj 2741 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.258 657.675 344.685 667.862] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36a1df3b688a38178c3bb75225c8921259) >> >> endobj 2742 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.021 657.675 505.344 667.862] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36fd604876bd42694c1a04cdae2be719e6) >> >> endobj 2743 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 645.72 203.554 655.907] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c3685932a7f3c52c3090c1a1c5e82ed1c22) >> >> endobj 2744 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 629.436 222.821 639.966] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c3605b7fdbe8fcf799db114f90f04083273) >> >> endobj 2745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 574.203 155.484 585.107] /Subtype /Link /A << /S /GoTo /D (log_8h_239e115e583af4e67e60de4a4f95f09e) >> >> endobj 2746 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 535.349 155.484 546.253] /Subtype /Link /A << /S /GoTo /D (log_8h_c80fd753e48873cdbd9a332609de150a) >> >> endobj 2747 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 454.586 211.912 465.49] /Subtype /Link /A << /S /GoTo /D (log_8h_8b8e0a071c9539f4be52eaf789f385ea) >> >> endobj 2748 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 330.605 124.201 341.509] /Subtype /Link /A << /S /GoTo /D (log_8h_239e115e583af4e67e60de4a4f95f09e) >> >> endobj 2749 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 330.605 176.774 341.509] /Subtype /Link /A << /S /GoTo /D (log_8h_c80fd753e48873cdbd9a332609de150a) >> >> endobj 2753 0 obj << /D [2751 0 R /XYZ 90 757.935 null] >> endobj 286 0 obj << /D [2751 0 R /XYZ 90 733.028 null] >> endobj 2754 0 obj << /D [2751 0 R /XYZ 90 691.872 null] >> endobj 2755 0 obj << /D [2751 0 R /XYZ 90 593.177 null] >> endobj 2756 0 obj << /D [2751 0 R /XYZ 90 473.56 null] >> endobj 290 0 obj << /D [2751 0 R /XYZ 90 417.266 null] >> endobj 294 0 obj << /D [2751 0 R /XYZ 90 210.668 null] >> endobj 2757 0 obj << /D [2751 0 R /XYZ 90 186.453 null] >> endobj 2758 0 obj << /D [2751 0 R /XYZ 90 186.453 null] >> endobj 2759 0 obj << /D [2751 0 R /XYZ 107.713 127.284 null] >> endobj 2760 0 obj << /D [2751 0 R /XYZ 107.713 111.344 null] >> endobj 2761 0 obj << /D [2751 0 R /XYZ 107.713 95.404 null] >> endobj 2750 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2769 0 obj << /Length 1260 /Filter /FlateDecode >> stream xÚíY]o›H}÷¯`¥}©žÎ7LÞ6M¥Ê*»v´])UcÉ-à6ý÷{‡‚1ì¼l£¾°ïÜ9÷Ì3'[+ [W“ó»ÉûKª,…”¤Òº[Z [®$HPbÝ-¬{["áL ÆØ^'+‡=9S*°}­Cs7 —aêÏã>bØu©-…óp÷iòñnòï„À\Ø"Ená"— +ØLî°µ€Ï?Y1åYߊ¨Å)ƒëÚšOþœà'nâå²—Œ(æ–KÂRÐ7·Wg³/çöo_þ. ´sÁŸ)áH¹c>ëZog7;c[dM©™|Êr…ªC¬äìry”ƨ‹$ØnÂ8÷‹ ¯†@9b¼9‘rpç0xæŸifîÿÁ/’í# öÈàˆxšî"]~õ×&l6 æ.«¢Þ9SÎU1Û~F…v¨BãçŽl°‚ŽOVEf]¹<ä ÷„\ÀPÐU(A˜‘V¾ ‰³’Ø^"%Eº´Ø…ç…è{X1éÚÅ Òr‰(­Gõ€&."Bö¤î!C!,j¸4XW^h4µ—ú‰­8å„ æ¹Ð‘ ¯†¨;Ï$ÃÍ¡Uë…Ò=Yä)ºyM“JwLª¢z®Œ>›û“*Áˆ¸G›T‰EŸýë/êC/î3ƒIÅOH8Ú]ŽNØg}e+YeU;`U¢.ã)E‡§Ô³ôÛU¯áì1ÁýD@'އ°ñ¯q¬å÷S¨N‚‹©Ðmø*ÇÚå;ÇzÖcÜîVþ4°?€´ Ш/ÿµžäa9·ñ#Å7a¯ÿÞo´q}öûí[ØÂêm”ìprÈêµ L–õQŒ4Ì÷$? óXÃ|ôô¼œþ6®Vªì±M’¶Ö.joÆ=l5˜’p¿ÊÅA’¦ÐÂåvõë—q‹(€áe½ß[S»­½àÞ-¶ýV_zHoìKýêG l°›„[Xz¸«0ÓÕëóß«›K]uøh¤¹|ÆÉ™pÍ…£¬ÜÝ:¶âøó‡ùÍõ¹¹çˆà].’çï«0nWú3[È endstream endobj 2768 0 obj << /Type /Page /Contents 2769 0 R /Resources 2767 0 R /MediaBox [0 0 595.276 841.89] /Parent 2728 0 R >> endobj 2770 0 obj << /D [2768 0 R /XYZ 90 757.935 null] >> endobj 2762 0 obj << /D [2768 0 R /XYZ 107.713 723.065 null] >> endobj 2763 0 obj << /D [2768 0 R /XYZ 107.713 708.095 null] >> endobj 298 0 obj << /D [2768 0 R /XYZ 90 692.745 null] >> endobj 2764 0 obj << /D [2768 0 R /XYZ 90 669.492 null] >> endobj 2771 0 obj << /D [2768 0 R /XYZ 90 669.492 null] >> endobj 2765 0 obj << /D [2768 0 R /XYZ 90 396.991 null] >> endobj 2772 0 obj << /D [2768 0 R /XYZ 90 382.857 null] >> endobj 2767 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F20 595 0 R /F14 1078 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2798 0 obj << /Length 863 /Filter /FlateDecode >> stream xÚíWßoÓ0~ï_aÁKúÏvl'á Ø:1‚µ¤mBYêvAM2‡müõœcÖª6&Á$ªØîýøî»³Ï&h‰Ú=›v&,G9Î%“h¶@9A©¤X0ŠfstI,Ç1%„Dçú>ÇLhR­”ª…ÒcšEª)a)!)a‘”ã“ÙÁho6ú<¢à‡ :Ø)NÊzttBÐÖÁIž¡‹AªFœ%ð]¡éèíˆü#K0‘"`˜{”ïÆ9‹ ]§ân[öµjLaª¶±ÀÀjÌ8Nx~MSo l›Î8Íò¬ÐVagBù5÷Y‚3.ÀÊ }LHâ„Ö0¦˜§,ȬÚåG¥uÝ-À‹L£¯A®iÄ9Å MQLS,wš{Z·Ú¡©U×KÕ¹™iýjaJŸsæ#î ÖÞË}3«Þÿ¥•éu£æn¶ÐmíFªV}SZ¦ð÷ (ŹÌbæ *KïPƒ¹$»ñFWM¹êç ,Á⣋²ÎðÙ£-ìZ ÓÜÀna çrjt_Bˆƒ×n(ÃPGtS‰9 ‰Ã2Ò1cbMÅ‚XB­Uÿ­f½ôe}8ÈXÏÀÀ¹®×´7¿;NP$·¬gÎ ßçÜçûsµŸÔÓ9T!…$ÖÊX:Þêfƒ£8É1y‚©ðæw”+kî™Çsoñçä¼y÷zSÛ.'ä†@~ÉÓÌnóÖ+GQÓ×§Êï“váiû*o`&PàôÉéý0sxðM?>=ÜŸþiíL ØÓÐw~V>ö¹*Wp06Ë0ÝFPØýkšÖ\«ª)ûð¨z€D½Üۺᎉ ]õUµ‹at·cmhz‚îü0T5Æ®Øß]7ôŒ­ï_ÛÎnÍ7À!°ÓÐk È3L“ï-à;™5”ÐöRDú¦2·Ì+…Å¡SºÄÞOf!䪩ü]bÍÍ*Ûåo¢]{b$i¤Ê¨ùß.ò!ûæ?.®N=x*î‹KÖý/ _ìòP±ùP”`šf¿ûN ïC‰ó®­î}(r,Â¥w_5J[¾¿øžý* &ö‰¤NÝDº%O8}"R7c„2ßö­l¸7¼>}ùâ™눸ÑéUxw^^-U³9Dú å"¦þ endstream endobj 2797 0 obj << /Type /Page /Contents 2798 0 R /Resources 2796 0 R /MediaBox [0 0 595.276 841.89] /Parent 2728 0 R /Annots [ 2773 0 R 2774 0 R 2775 0 R 2776 0 R 2777 0 R 2778 0 R 2779 0 R 2780 0 R 2781 0 R 2782 0 R 2783 0 R 2784 0 R 2785 0 R 2786 0 R 2787 0 R 2788 0 R 2789 0 R ] >> endobj 2773 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 564.543 167.648 575.447] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2774 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 485.838 167.649 494.684] /Subtype /Link /A << /S /GoTo /D (prj_8h_c8dfb42cf72db0c4bc690d030f75c662) >> >> endobj 2775 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 445.902 213.048 455.83] /Subtype /Link /A << /S /GoTo /D (prj_8h_37ad31c5d2926862d211db0d14f401f0) >> >> endobj 2776 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 407.048 213.048 416.976] /Subtype /Link /A << /S /GoTo /D (prj_8h_acc46318c778bd844e30d6997394cc8a) >> >> endobj 2777 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 367.217 183.15 378.121] /Subtype /Link /A << /S /GoTo /D (prj_8h_2cdabd9dfe78fe18b9e6597881d8ed92) >> >> endobj 2778 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.701 367.217 267.812 378.121] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2779 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 352.597 194.086 362.502] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2780 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 328.363 201.959 339.267] /Subtype /Link /A << /S /GoTo /D (prj_8h_7f080405538ea2ddd2882c991e25bd2f) >> >> endobj 2781 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.457 328.363 248.165 339.267] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 2782 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 289.509 202.507 300.413] /Subtype /Link /A << /S /GoTo /D (prj_8h_f862254dceec64a987fdaabc40e4963d) >> >> endobj 2783 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.005 289.509 248.713 300.413] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 2784 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 250.655 202.507 261.558] /Subtype /Link /A << /S /GoTo /D (prj_8h_94f59295c312536ce66482b3d9bebec4) >> >> endobj 2785 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.005 250.655 248.713 261.558] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 2786 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 211.8 205.277 222.704] /Subtype /Link /A << /S /GoTo /D (prj_8h_3672afec3db0f850d67404814ebdbc64) >> >> endobj 2787 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.775 211.8 251.483 222.704] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 2788 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 172.946 205.277 183.85] /Subtype /Link /A << /S /GoTo /D (prj_8h_df9cca0265038851129d1966017cd525) >> >> endobj 2789 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.775 172.946 251.483 183.85] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 2799 0 obj << /D [2797 0 R /XYZ 90 757.935 null] >> endobj 302 0 obj << /D [2797 0 R /XYZ 90 733.028 null] >> endobj 2766 0 obj << /D [2797 0 R /XYZ 90 716.221 null] >> endobj 2800 0 obj << /D [2797 0 R /XYZ 90 716.221 null] >> endobj 1035 0 obj << /D [2797 0 R /XYZ 374.54 681.092 null] >> endobj 306 0 obj << /D [2797 0 R /XYZ 90 664.365 null] >> endobj 2801 0 obj << /D [2797 0 R /XYZ 90 583.517 null] >> endobj 2802 0 obj << /D [2797 0 R /XYZ 90 502.754 null] >> endobj 2796 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F20 595 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2838 0 obj << /Length 1078 /Filter /FlateDecode >> stream xÚÝY]sÚ8}çWèÑžYT}ËêLHB2ɤiÓifÓã‘ÐÃÚ¦›fgÿûÊ–M€‚M˜¼ HÇ÷žsu¯„¸œÕŽÚµw§D• ´{@! †œ`о·Ž€Â­c„3Ž~À·N8rNûm¯Zº§#{Ž»æEGH÷[û¢Öl×þ¬aóp†Ë%””ƒî°vû ;óü H•þÊz #Ô´à×~¯¡µ6 ‘àÖÆf8ê(Hú£0ξ\ 5ãÐÌ8, £¨E1ö+!|n ¸­sã­6˜ùóÔüè>÷£•õH]7|tt ãûÎLç)HÚåïUdB:æP1kÇuë¢ÙjuüÏÇÇMß_“9ܬA¿­6Ë㸺ú|yÙ¹þt~Õn¶V¢a¯ECÚ‘K¹Ó8é\»Š8VããH²1TœÏ¹<Å>¿YÆáht-êx,@¿¸9ŸZ—'k ™mþI»,DZ0¨uJ V¹Ý§“°[j¬õÃäÅPë‡ýe.|EÅI4龌0ކ c6k0¢cb^Y[¢9!³n:¼ij¾çPŸÑ2a®„`‘‡Œ#•A`¹V'ºL‰¥¿kÍEöA¯¸Hôÿv.cáR W—)ÆŒ¥&Ã(¼»p½H몕ó ’låð6Ê)¦‹Ê V%ˆ5Ž’UZeñéÎXº³lDB쑪dÃHeUÜêFóì¥,dF.ãÎh’ôCý¶4ŒuR}¦¢²D)æ§Ú™uÔïæ‘§“ÉøõÛ]¾G¯’ÏÔöâw­3S: ãV2zD‰ŽûAXOFõxü¾ öÝ[–è¬à¿*/1y\ËOnÊåeJEÊË”$7·¦$Vv¥%xïa¶›•\eYÚó äj^_ç)º˜êÁnÓyyzÈVºÏ–¤nšíCáÓûÉC0x<õ‡“ô*—^Gñ8Õ=]WÿLòì“naͪw–àYØÆ×˾- žY¾Xê˜âùÌð( ”&òJ™—&«ÏWëRTb6ßÜ ÂØÈ;ÌvÀ›©-¸‰»jÄ&/‹MÕ¾Ô¦CQžØÕ'aMÞÝZl%¯6µ7RÛ+GmÃ(%U—x/Õ…COVY^ƇW^âAPìCŠpÜ2‘™ßrš*ü¨/œ@Ne9)'~õå «M1†ŒŠÒÔ~ fÿrï±Â`bô.kÿ’ª«¯0 Êþ®Ø®ÂHhjØáU˜ûp4…ÅnvE€1“ª§¡Ón\½zxaE!ãåd\[֎Ń;a<ÅÞ¦çvÅy€J¶íyWóÙÿ‚DßYmŠ$ó±¸8u wôw{#lƒÑ{†ßsiïÂ$Š´o_ŽýËó£üPÇ„¥½úþ˶'£Ç_÷:\ôô_+Ôæš endstream endobj 2837 0 obj << /Type /Page /Contents 2838 0 R /Resources 2836 0 R /MediaBox [0 0 595.276 841.89] /Parent 2728 0 R /Annots [ 2790 0 R 2791 0 R 2792 0 R 2793 0 R 2794 0 R 2795 0 R 2807 0 R 2808 0 R 2809 0 R 2810 0 R 2811 0 R 2812 0 R 2813 0 R 2814 0 R 2815 0 R 2816 0 R 2817 0 R 2818 0 R 2819 0 R 2820 0 R 2821 0 R 2822 0 R 2823 0 R 2824 0 R 2825 0 R 2826 0 R 2827 0 R 2828 0 R 2829 0 R 2830 0 R 2831 0 R 2832 0 R 2833 0 R 2834 0 R ] >> endobj 2790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 697.247 211.364 708.151] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d0574305) >> >> endobj 2791 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 682.024 199.509 692.211] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d05743056f3a73d3c0a7dc7d15ceb00e00714bea) >> >> endobj 2792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.632 682.024 349.646 692.211] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d057430560d6a804ddfa2f2d0f25f397d653695b) >> >> endobj 2793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.77 682.024 486.355 692.211] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d05743056a0f63e2f52f594637a12db14e5814e6) >> >> endobj 2794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 670.069 198.034 680.256] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d0574305d33460ba0b865ff7580e6d2cebd92c74) >> >> endobj 2795 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 653.785 218.408 664.316] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d05743050d15cd17822bea2f7fc0209a180cc998) >> >> endobj 2807 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 598.552 150.503 609.456] /Subtype /Link /A << /S /GoTo /D (prj_8h_d994cb23871c51b20754973bef180f8a) >> >> endobj 2808 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.945 598.552 208.056 609.456] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2809 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 583.931 253.613 593.837] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2810 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 559.698 155.464 570.602] /Subtype /Link /A << /S /GoTo /D (prj_8h_50db1538981df162709b81be0b2961ab) >> >> endobj 2811 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.907 559.698 213.017 570.602] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2812 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 545.077 221.98 554.982] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 520.843 151.051 531.747] /Subtype /Link /A << /S /GoTo /D (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) >> >> endobj 2814 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.015 520.843 232.125 531.747] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2815 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 506.223 229.306 516.128] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2816 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 481.989 151.05 492.893] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 2817 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.493 481.989 208.604 492.893] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2818 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [234.02 467.368 260.921 477.274] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2819 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 443.135 153.82 454.039] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 2820 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 404.281 153.82 415.184] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 2821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 365.426 153.81 376.33] /Subtype /Link /A << /S /GoTo /D (prj_8h_bf6696d3455c684cb44d06da7885ce94) >> >> endobj 2822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.253 365.426 211.364 376.33] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 350.806 186.115 360.809] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 326.572 156.58 337.476] /Subtype /Link /A << /S /GoTo /D (prj_8h_8ebb4c79b635cef463b4e7242ff23c25) >> >> endobj 2825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 287.718 156.58 298.622] /Subtype /Link /A << /S /GoTo /D (prj_8h_bc26dfb2d0b0bee71f6e4541977d237f) >> >> endobj 2826 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 248.863 153.262 259.767] /Subtype /Link /A << /S /GoTo /D (prj_8h_faafab5c440384667d7af444b7aca750) >> >> endobj 2827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.705 248.863 210.816 259.767] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 234.243 186.115 244.247] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 210.009 156.032 220.913] /Subtype /Link /A << /S /GoTo /D (prj_8h_2fe67a5ecf17729881efa24c83482611) >> >> endobj 2830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 171.155 156.032 182.059] /Subtype /Link /A << /S /GoTo /D (prj_8h_70b750ec65eb4a277057200c7fbb251f) >> >> endobj 2831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 132.3 152.156 143.204] /Subtype /Link /A << /S /GoTo /D (prj_8h_34d303d7ae44a6aca43c1a81bfaac10f) >> >> endobj 2832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.599 132.3 209.71 143.204] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 117.68 186.115 127.684] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 93.82 154.926 104.35] /Subtype /Link /A << /S /GoTo /D (prj_8h_cd4f54c072b6219242daeb6d4b9a74cb) >> >> endobj 2839 0 obj << /D [2837 0 R /XYZ 90 757.935 null] >> endobj 2840 0 obj << /D [2837 0 R /XYZ 90 716.221 null] >> endobj 2841 0 obj << /D [2837 0 R /XYZ 90 617.526 null] >> endobj 2836 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2890 0 obj << /Length 959 /Filter /FlateDecode >> stream xÚíšßOÛHÇßóWìcòaïš7ÊTtwj“HWT•Lb”Ø©mtÀ_ß±×’¶›¤X÷´kkw=3Ÿñ|3‘)™JN;oFƒÍ5]‘€£(ÎÈè’œw5è^ŸQJ»‹ì¦½>W´{Ï"7DWQÖc¶%c¼%¨¡¼«mïÓè¬óvÔùÚaøJXu®2`„"ãyçü%—xÿŒP%ÿU«æDr㌠;:´¶ñéXÙ,)±h³–¥ÍŒ@-1\ÕÊÙ}fE”ÇaÒ/Ò~¾˜FY<gÎè-VÝ0ɯÒlqš¸ûxY/˜F¥Uh=F+0 m¨0IÒyšÄc·ã‚*ê¶ûh‹ä ‚fÇèèïïž L6KðæÖ¬8¨€sÓ¬Yd=©ºéu4.-‡*ÔÏÅ ŸEÁES9àD@P¾à\­BÎû yÇIQß.ùe“ä ZPE #ÈoŸnm¢ñ~p6ä? N‡Wß1oÅMÎAKNúLB ¥³nØ +9.¡þ"G F¾vAJ? ób’GÅs ó"»¯9kÃ"›¯œpp‚Ñx°˜Q œÙ‡øPQÇð±_Þ²‡ø\oš9}«A)ó$uЧʺ›…Ãvb *%Õ`ÕÒ‡¼¨Ëc:ÉÂÅtM–aj™ÃÑéÞÓŒZ¤fê4óg·<¡`|äÃ_.[/ü¯©6À˜öW9Z ?Ô®G*‚ ˜Z?L-2垘ÆÉÿj°5H³bÚ¤ØA~—à¦<Î_L¶€ƒ¤z™lïöÿËC àZû’„8Ù¢$ˆIB¸ ʽòǵ Âð³`Íz°©ƒ'²| ~˜w"Fé­‰ƒ¨ßOî£$.¦áì ¼ç7åÌm޾ÞÄ—qŽÝvñbâ1ÎPõ–©{48Þ»T|˜ò–y-hü@Öë!ï°¼‚IOÂQ˜ÇïÅÙúáÌ‘³Ÿ—ù~±‹CC`¶×c ózdd‘Îî’t7×›%Þ¿ï÷ÿûÅ«Œ`æµXFöÙúS_íGY_Z¬"¾1ï®Éô©!Q¸ Q`5ßš†Xà”½ªV¤™†îÓðåd¶zmš|{´1Ñ(ê/Ûݓ쑶Uáä’¶ŠÓîÞd;¼·&/O¿0Ñx&³›~`Ò|üR¶ è˜ûøEayP5ŠÓ(‰²°ˆ.]šhÿÕLNz\u£/îB»ÑCÉ•qWXÝy¨\Û`úçxøç»7n.Q7ûrçÆ?ÒÛ»I”¬xŽž~‹Õ©÷ endstream endobj 2889 0 obj << /Type /Page /Contents 2890 0 R /Resources 2888 0 R /MediaBox [0 0 595.276 841.89] /Parent 2892 0 R /Annots [ 2835 0 R 2860 0 R 2861 0 R 2862 0 R 2863 0 R 2864 0 R 2865 0 R 2866 0 R 2867 0 R 2868 0 R 2869 0 R 2870 0 R 2871 0 R 2872 0 R 2873 0 R 2874 0 R 2875 0 R 2876 0 R 2877 0 R 2878 0 R 2879 0 R 2880 0 R 2881 0 R 2882 0 R 2883 0 R 2884 0 R ] >> endobj 2835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 696.376 154.926 706.906] /Subtype /Link /A << /S /GoTo /D (prj_8h_9d3358bed907342e3309e54bd2ab89da) >> >> endobj 2860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 657.148 151.608 668.052] /Subtype /Link /A << /S /GoTo /D (prj_8h_66b51f10624b6c17a84b5b54058dd72b) >> >> endobj 2861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.051 657.148 209.162 668.052] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 642.527 186.115 652.531] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 618.293 154.378 629.197] /Subtype /Link /A << /S /GoTo /D (prj_8h_88c15d0b6f789cbbd7c5d323ef131360) >> >> endobj 2864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 579.439 154.378 590.343] /Subtype /Link /A << /S /GoTo /D (prj_8h_b46a0a668f28939626287d048153863f) >> >> endobj 2865 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 540.585 151.608 551.489] /Subtype /Link /A << /S /GoTo /D (prj_8h_b6ce2bb75a87b1679d05f251227d2f1b) >> >> endobj 2866 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.051 540.585 209.162 551.489] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2867 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 525.964 186.115 535.968] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2868 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 502.104 154.378 512.634] /Subtype /Link /A << /S /GoTo /D (prj_8h_eb7881cd5d7b4b5e26281a512b8f62ac) >> >> endobj 2869 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 463.25 154.378 473.78] /Subtype /Link /A << /S /GoTo /D (prj_8h_bdf8c6c3ef615a01ebf8822e013d6a63) >> >> endobj 2870 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 424.022 152.146 434.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_c038f2474d5d58de157554cee74a9735) >> >> endobj 2871 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.589 424.022 209.7 434.926] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 409.401 186.115 419.405] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 385.541 154.916 396.071] /Subtype /Link /A << /S /GoTo /D (prj_8h_666322bfe8c4b8e73f00afeb47283f97) >> >> endobj 2874 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 346.687 154.916 357.217] /Subtype /Link /A << /S /GoTo /D (prj_8h_aba5ce89ae711728d8ba8105ac5fd599) >> >> endobj 2875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 307.459 154.368 318.363] /Subtype /Link /A << /S /GoTo /D (prj_8h_c983c5a393c5b3f1041f07b2eb95a3a5) >> >> endobj 2876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.811 307.459 211.921 318.363] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 292.838 186.115 302.842] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 268.605 157.138 279.509] /Subtype /Link /A << /S /GoTo /D (prj_8h_574e44daea81568a6d5e324a6f339d6f) >> >> endobj 2879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 229.75 157.138 240.654] /Subtype /Link /A << /S /GoTo /D (prj_8h_7b60d7992bf9c671cb4191f0ec2e0c90) >> >> endobj 2880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 190.896 153.252 201.8] /Subtype /Link /A << /S /GoTo /D (prj_8h_3229533df20718c0d5671cc9eb5316fe) >> >> endobj 2881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.695 190.896 210.806 201.8] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 176.275 186.115 186.279] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 152.415 156.022 162.946] /Subtype /Link /A << /S /GoTo /D (prj_8h_849a1bbd679d0c193e8be96a8b9ed534) >> >> endobj 2884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 113.561 156.022 124.091] /Subtype /Link /A << /S /GoTo /D (prj_8h_dc4da028cde2d970e9e5e22adca22f37) >> >> endobj 2891 0 obj << /D [2889 0 R /XYZ 90 757.935 null] >> endobj 2888 0 obj << /Font << /F29 635 0 R /F40 846 0 R /F38 780 0 R /F20 595 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2938 0 obj << /Length 1032 /Filter /FlateDecode >> stream xÚÝZ]sÚ:}çWè­öƒ·ú¶Õ·47dšifZ`æ¶“tî¸DI耡¶Ó†ר@`RBƒì@^lKëÝ=«=ZdJn%§­÷½ÖÛ67Ä€Ñ\“Þ51”„šâŒô®È…§Aû£”z“ôÜúWÔk†¶ìuìµM}y6éã-ACÊ=müo½³ÖI¯õ³Åð=”°™\B(éZß(¹Âûg„‚0ù=5"’ l‡¤ÛúÜ¢•ŽtEWú@WF5H‘  Z• _r®f¯ŸÏ#BõI^Ý.ÔIo*½:³…)ñ Íl¾>µxrIÍòô®ÿ„ôÐ$­HxÛfrEcŒr|TêJ©(†¯Ù%ÁD‹1(ßÏV¤.¥KJ"œ§e1/ˆHÉIÀ$DJ”ó»hÓL»»IÙÆmDõ¤rÁ¬=N+ÅÍŒ­Ä\ó£A:}ã‹ÐËü…ËIˆÙr 4f1éCçÁLúqáµÒkÖ+à<\zÍ—Êÿ°ý|0NàQï-½¸âý€i +ÍH€a…8ìU÷<ûST}êœ}áÝÿŽ:§ÝmAæô:ÆÇqšÛl'A>²É­MýxXz=Ç婼8ɲQ\xc‚LqPŠ:„ˆí ÁŒßo@°Ë¿ìŒ`wZàÎç!(@ÉðÆO˜-ŒÜ¨A(Gö ÿM' dwÊš-²;{Vv7ÀtÔTv/CïÖ> …jaC:$WRÎĦ٤@ÝgÔûUüØÁgæ[5wüõÓ.áç&H‚K§áW# ÈÝh`ÔZA¨öi'‰FP†¢*¤™q”iêã ¹_l„ZC(µ[¬åÓX7¶)”GˆÝ,j7À' "Íkã“8eÀ'öçݼ—Åf¼1ò ÃÔ2Ëœ½üvF w3å,ôö·¤x>—Ô…rsE‡‰€2é.¿ìmÕ±‹¼èZv³J]ÑHÜÄŸN×®FB FíL†q^íPÐËé¥Pló†EQ£e¨íAŒ›S-•³P{%Hm¨6Gš‚’Î*Ž8} ÕÆË.VG¸2PÂ/Œl¼€û•HÖÅ †Bqœ³'‡çå1U?ÎÇéÿ‡Ê×è"‡ŸŸ¼<°E1gÑuÀ‡5AÙH Œ:L‡{:qøP*„ÒQÉ—¸¬Ï±|ѵAKHë{W t1BÇIÐÆ£,·öjcœ…h¾^H·ýqÎÃXè0Ð^A-P ¦ÎrÇúç/e°hÛ¯_æ_æh0!ÚQ~™£ ò`åÝS›Ø7Í•ÕsžÏ;mŸ+Ï~//tÙ0úN²w*,¯°ºä•׋±sÏÿ{Üýøá}Ù/ˆªì}Ÿ–í?ãûéMÖ-ýr…©9 endstream endobj 2937 0 obj << /Type /Page /Contents 2938 0 R /Resources 2936 0 R /MediaBox [0 0 595.276 841.89] /Parent 2892 0 R /Annots [ 2885 0 R 2886 0 R 2887 0 R 2909 0 R 2910 0 R 2911 0 R 2912 0 R 2913 0 R 2914 0 R 2915 0 R 2916 0 R 2917 0 R 2918 0 R 2919 0 R 2920 0 R 2921 0 R 2922 0 R 2923 0 R 2924 0 R 2925 0 R 2926 0 R 2927 0 R 2928 0 R 2929 0 R 2930 0 R 2931 0 R 2932 0 R 2933 0 R 2934 0 R ] >> endobj 2885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 719.912 150.492 730.816] /Subtype /Link /A << /S /GoTo /D (prj_8h_025adf8a63b5d4a8d2a4de804e0707be) >> >> endobj 2886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.935 719.912 208.046 730.816] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 705.382 186.115 715.386] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 681.613 153.262 692.143] /Subtype /Link /A << /S /GoTo /D (prj_8h_2c87fbf68277f03051d3eaae3db785e9) >> >> endobj 2910 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 642.94 153.262 653.47] /Subtype /Link /A << /S /GoTo /D (prj_8h_75b6b1cb0a748e9b5d3a4cd31129ace6) >> >> endobj 2911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 603.893 154.219 614.797] /Subtype /Link /A << /S /GoTo /D (prj_8h_36cf447dee9f2e90e42d43d7adc5a0a1) >> >> endobj 2912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.662 603.893 211.772 614.797] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2913 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 589.363 186.115 599.367] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2914 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 565.22 156.989 576.124] /Subtype /Link /A << /S /GoTo /D (prj_8h_ffdbf993ce959fce2c148c07cd0f2c0c) >> >> endobj 2915 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 526.546 156.989 537.45] /Subtype /Link /A << /S /GoTo /D (prj_8h_13e0f81e1fd4bdc46847ab4c634ad346) >> >> endobj 2916 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 487.873 153.252 498.777] /Subtype /Link /A << /S /GoTo /D (prj_8h_68ce41ad199c3385bed7e7d4ded2bd8a) >> >> endobj 2917 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.695 487.873 210.806 498.777] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2918 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 473.343 186.115 483.347] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2919 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 449.574 156.022 460.104] /Subtype /Link /A << /S /GoTo /D (prj_8h_ff09e87b2246bdec83f6a7bb1bc0f471) >> >> endobj 2920 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 410.901 156.022 421.431] /Subtype /Link /A << /S /GoTo /D (prj_8h_28ddb923a52cb597ca9c7dd03ceeb4fe) >> >> endobj 2921 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 371.854 152.146 382.758] /Subtype /Link /A << /S /GoTo /D (prj_8h_36ccae7b426311614a4e80432a2b62c3) >> >> endobj 2922 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.589 371.854 209.7 382.758] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2923 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 357.324 186.115 367.664] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2924 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 333.554 154.916 344.085] /Subtype /Link /A << /S /GoTo /D (prj_8h_f363383621fb2b72243c1d6b894874d5) >> >> endobj 2925 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 294.881 154.916 305.411] /Subtype /Link /A << /S /GoTo /D (prj_8h_b4325a957786611772b90e7a080327f3) >> >> endobj 2926 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 255.834 155.474 266.738] /Subtype /Link /A << /S /GoTo /D (prj_8h_cf989261fd56f1e8b4eb8941ec2c754f) >> >> endobj 2927 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.917 255.834 213.027 266.738] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2928 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 241.304 186.115 251.308] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2929 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 217.535 158.244 228.065] /Subtype /Link /A << /S /GoTo /D (prj_8h_5380727f9aeff5aa57f8545d6b54a8f8) >> >> endobj 2930 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 178.862 158.244 189.392] /Subtype /Link /A << /S /GoTo /D (prj_8h_d9a80b98c04b0e06d08fd84bacc58b27) >> >> endobj 2931 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 139.815 149.397 150.719] /Subtype /Link /A << /S /GoTo /D (prj_8h_7c719c0387d23c53b0ceb3ee161de66a) >> >> endobj 2932 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.839 139.815 206.95 150.719] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2933 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 125.285 186.115 135.289] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2934 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 101.515 152.166 112.046] /Subtype /Link /A << /S /GoTo /D (prj_8h_310444979f8f0e62db2bcbe39b0e3d35) >> >> endobj 2939 0 obj << /D [2937 0 R /XYZ 90 757.935 null] >> endobj 2936 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2988 0 obj << /Length 1025 /Filter /FlateDecode >> stream xÚÝZ[SÛ8~ϯÐ[í Ý/}£´¡eè”M2³NÇ$ ˜Ib×6[úï÷8ŽÈB`ǤyA¶Ñåœó}úޤˆ +DÐqçÝ sÐeYlSh0F– ­(–Œ¢Á{ +? „/Ioðµ0I¼n4qåSÏ]êSã¹Ù>q¢ ó4ñ¿ N: ãDçýJ5—h8íœ#hßOÁÜôs^kŠãPNP¿óW‡,l|ª,m'÷l§DaÁ Ò”`*DéÀcrnNÕ܉fùâsa^zµ°³7¯P¸–]Â3v·Ú¸øß‘ä¬wÒg_¿öŽûðJT«Êƒ® È€J2†•`( [º°¯Ÿ\»4†“ ƒ£0Í]…³2º9„Vzá,Çé4Ì£xñ^®]1îÃå0T)¬… Ê ƒxt'á4Ëùµ e[ˆØ²­Ó”©›vOíSn«:•ó+¾J̘®ê$©/¤߸aá~4V˘=5`Fb t ÇÆlj¦™ËŸ‚4ËÓÛás=¤7I:}ÐÃAÀ¼OC‰9|©ãCø"ˆ÷ý‚8ºŒÏÍK9•ä+$ŸæÖÝ&eþo'*Ö—!xÍ`º¹ô!LÃËx ×òK€¶Ø:6g‡½'ø%Ú¢µ )£×ËÖ(ÆWÖßX1j‘(#«äcCÅ€9&Iù<’-*…¤˜S£)¥Øžøó¶Äÿ°4Í`É0v%ÝÌi×^¶–\0+UuË/§¯N.j 6Z7#À­ÝÕüG" Kn¤Ü% ™€-…V¹»ËýÇ€äX ½M [[„1aÇ†Öøa”· öÅ,Û{#°Uòέñ?†Ó)ì÷`Áa”ÇãñZš)ü¯ùqøiðúzA%–D7Ƴ=XìoÒö”C ,ˆjN9öàÀç‡T¤ %ƒaœ´ ¶ÚlíÀÇbNõî%ƒa<«¶•‰K³¤ÀÚ§Äû§øãÖŸ2,yM–£/g¯Î9F1·º1ÎíAbØ^ó<¼m"̬jNSö Mì Àͬì ìi,k `×JÒlk9öSÒîtÎp?n+½ ËŸÃõë9»Ç¹;°›0˜Ùšâ\1©·˜8xû‰c0Ö£:‡.„e~Tháwf<úS¶«×3—š—ÞΨnަÀåÍiç‡bó!ÝÌ¥a^]7¨ˆö¹zèúLzî²|QeAÉ[AßJ]¾1BÙ‚EÝŠ¡õO?½+Ÿ¦¤|ºüU–ïã»_Wn¶êé¿Þ¼SK endstream endobj 2987 0 obj << /Type /Page /Contents 2988 0 R /Resources 2986 0 R /MediaBox [0 0 595.276 841.89] /Parent 2892 0 R /Annots [ 2935 0 R 2957 0 R 2958 0 R 2959 0 R 2960 0 R 2961 0 R 2962 0 R 2963 0 R 2964 0 R 2965 0 R 2966 0 R 2967 0 R 2968 0 R 2969 0 R 2970 0 R 2971 0 R 2972 0 R 2973 0 R 2974 0 R 2975 0 R 2976 0 R 2977 0 R 2978 0 R 2979 0 R 2980 0 R 2981 0 R 2982 0 R 2983 0 R ] >> endobj 2935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 707.365 152.166 717.895] /Subtype /Link /A << /S /GoTo /D (prj_8h_5517fccc15882e298ac9433f44d1ae4c) >> >> endobj 2957 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 668.197 152.704 679.101] /Subtype /Link /A << /S /GoTo /D (prj_8h_d2a2b56c0900516dd24eebf430bcb29c) >> >> endobj 2958 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.147 668.197 210.258 679.101] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2959 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 653.607 186.115 663.61] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2960 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 629.403 155.474 640.307] /Subtype /Link /A << /S /GoTo /D (prj_8h_17be11269d86b3308fd925949877718e) >> >> endobj 2961 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 590.609 155.474 601.513] /Subtype /Link /A << /S /GoTo /D (prj_8h_eb5951ec54b929d16ab464939a37d74f) >> >> endobj 2962 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 551.815 155.484 562.719] /Subtype /Link /A << /S /GoTo /D (prj_8h_151140d870ed4f490317938bd6260a6a) >> >> endobj 2963 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.927 551.815 213.037 562.719] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2964 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 537.225 186.115 547.229] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2965 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 513.395 158.254 523.925] /Subtype /Link /A << /S /GoTo /D (prj_8h_853c1df5e8327d83e9cfdde9455355f5) >> >> endobj 2966 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 474.601 158.254 485.131] /Subtype /Link /A << /S /GoTo /D (prj_8h_6f3cbaaf367984579aad5ec7eb00f397) >> >> endobj 2967 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 435.434 149.944 446.338] /Subtype /Link /A << /S /GoTo /D (prj_8h_33f92621800eb880b75611c439526d19) >> >> endobj 2968 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.387 435.434 207.498 446.338] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2969 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 420.843 186.115 430.847] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 397.013 152.714 407.544] /Subtype /Link /A << /S /GoTo /D (prj_8h_2da3bbd3c42c6ad324117cc5f249a834) >> >> endobj 2971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 358.219 152.714 368.75] /Subtype /Link /A << /S /GoTo /D (prj_8h_8cca776751549082521a72a743d6b937) >> >> endobj 2972 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 319.052 154.368 329.956] /Subtype /Link /A << /S /GoTo /D (prj_8h_c2f3bc42ac6e7d458364ebcf2b35814f) >> >> endobj 2973 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.811 319.052 211.921 329.956] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2974 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 304.461 186.115 314.465] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2975 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 280.258 157.138 291.162] /Subtype /Link /A << /S /GoTo /D (prj_8h_588e9a86fc4dcd1195f867f718ce5429) >> >> endobj 2976 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 241.464 157.138 252.368] /Subtype /Link /A << /S /GoTo /D (prj_8h_77283589634cc9a054f3a7c7fc91d38d) >> >> endobj 2977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 202.67 153.81 213.574] /Subtype /Link /A << /S /GoTo /D (prj_8h_b1264f0201113c1a8e931ad9a7630e2f) >> >> endobj 2978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.253 202.67 211.364 213.574] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2979 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 188.08 186.115 198.083] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 164.25 156.431 174.78] /Subtype /Link /A << /S /GoTo /D (prj_8h_d70968320728202aa12048162248d368) >> >> endobj 2981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 125.456 156.58 135.986] /Subtype /Link /A << /S /GoTo /D (prj_8h_fa8d27e481bbfffacd3e671e6715d5cb) >> >> endobj 2982 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 86.288 154.368 97.192] /Subtype /Link /A << /S /GoTo /D (prj_8h_fbf5f05496f1e018425e02d60a4e0b74) >> >> endobj 2983 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.811 86.288 211.921 97.192] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2989 0 obj << /D [2987 0 R /XYZ 90 757.935 null] >> endobj 2986 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3035 0 obj << /Length 994 /Filter /FlateDecode >> stream xÚíšKoÛ8€ïú¼­|0Ë7ÅÞÖn4ØÝ´±- Efb±äJ šüûŽL)q¼Î«¡×艴D“3ó g†„:Cíƒqðfd°QL¡ñ)2iE±d'è8TXõú”΋s<íõ™$á^za]ïÈžÚ¢G£Ðf <âDjÚû:>Þƒo…u¢‹y¥ÆšK”Ì‚ã¯Màù"˜›}_Œš!Á8´h| H#ãj»YÌJÔ2Sf0‰f%Ü#[9 /ç®29aгFª£ý/^ƒvóbÖŒq 5oʪ¸LšÉNóÂuª©­Ç.Œ·$Q8’µÊ ’> endobj 2984 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 720.235 186.115 730.239] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2985 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 696.376 157.138 706.906] /Subtype /Link /A << /S /GoTo /D (prj_8h_105e2bf177120eb34f41e6af768f855d) >> >> endobj 3007 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 657.521 157.138 668.052] /Subtype /Link /A << /S /GoTo /D (prj_8h_fedc43dc512008174ec9b87753519031) >> >> endobj 3008 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 618.293 154.368 629.197] /Subtype /Link /A << /S /GoTo /D (prj_8h_344308a1d96a93f9bc682141f3df1a14) >> >> endobj 3009 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.811 618.293 211.921 629.197] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3010 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 603.673 186.115 613.677] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3011 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 579.813 157.138 590.343] /Subtype /Link /A << /S /GoTo /D (prj_8h_2f42dcec4ea56bbb25b563859228b02e) >> >> endobj 3012 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 540.958 157.138 551.489] /Subtype /Link /A << /S /GoTo /D (prj_8h_ed0317c8ffef248346da897568df266c) >> >> endobj 3013 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 501.73 154.926 512.634] /Subtype /Link /A << /S /GoTo /D (prj_8h_aec02a8e47d68e126983e9bb07a0c0aa) >> >> endobj 3014 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.369 501.73 212.479 512.634] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3015 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 487.11 186.115 497.114] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3016 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 463.25 157.696 473.78] /Subtype /Link /A << /S /GoTo /D (prj_8h_53315ef8d3bd4002d1e98142fcf62566) >> >> endobj 3017 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 424.395 157.696 434.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_3b4cda48838c613460bff00c76fceb44) >> >> endobj 3018 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 385.168 154.368 396.071] /Subtype /Link /A << /S /GoTo /D (prj_8h_abdc7abc8b7c80187770cfd12c63f700) >> >> endobj 3019 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.811 385.168 211.921 396.071] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3020 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 370.547 186.115 380.551] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3021 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 346.313 157.138 357.217] /Subtype /Link /A << /S /GoTo /D (prj_8h_28b623c88d38ab711fc61f36a97d0b27) >> >> endobj 3022 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 307.459 157.138 318.363] /Subtype /Link /A << /S /GoTo /D (prj_8h_1f1714691f99f11640dccdc74eadfb49) >> >> endobj 3023 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 268.605 151.05 279.509] /Subtype /Link /A << /S /GoTo /D (prj_8h_ad75dcd0cd2fd0b6a162b5587cba9c2d) >> >> endobj 3024 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.493 268.605 208.604 279.509] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3025 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 253.984 186.115 263.988] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3026 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 230.124 153.82 240.654] /Subtype /Link /A << /S /GoTo /D (prj_8h_bbfbf3cba73850d7608765725993dfe3) >> >> endobj 3027 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 191.27 153.82 201.8] /Subtype /Link /A << /S /GoTo /D (prj_8h_167a49d730bca43483aef311f7114ae4) >> >> endobj 3028 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 152.042 152.704 162.946] /Subtype /Link /A << /S /GoTo /D (prj_8h_8bc552f12260f944e0b8f9b714804983) >> >> endobj 3029 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.147 152.042 210.258 162.946] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3030 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 137.421 186.115 147.425] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3031 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 113.561 155.474 124.091] /Subtype /Link /A << /S /GoTo /D (prj_8h_fcefcb885b7d1c33e0458345cdc9f4a4) >> >> endobj 3036 0 obj << /D [3034 0 R /XYZ 90 757.935 null] >> endobj 3033 0 obj << /Font << /F29 635 0 R /F40 846 0 R /F38 780 0 R /F20 595 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3075 0 obj << /Length 1042 /Filter /FlateDecode >> stream xÚÝY]sÚ:}çWèÑ~@‘dK²û–HÈpiÓ¦™ŽcpÆØD6½$¿þÊØæÃC mL.“$™EÚ={vWk.*gƒÊIƒØÀ†6# gR‚Á`î4™^Å!m*ŸàX¯Š´†ç‹tÖBêØÒDàªGâˆhœè÷ƒ«J}Py®`ux±/帓ÊÝ=Cõü hØøw!5&1Ôèƒ~庂2ц®hMWŒ4 pb@ÄhªðwBèâøüwà®J•ú^guä(Ó«·HLq#7"óâO“o¾#Šº½«>¹ýqÚ»è«%ÞËÇ“†‰€¥Ôcf¢!™T± mÓLµëOÇBz®ãWã°Zsd,"Ï R,c$Õœ z åĉ½0{®–™ÀX$ç.<¶:3¹I•‹j³z*åg¥Kwö9-±'ÝH·ÚÈâÐ&ærŸ~mëav.“#Q0œBBx.3•ºIµðI¸‰Ep+p+7ü[%¶çjb@¿Ñ¿ÏÊ¿"þ•£XÎÜ;¨˜ÊÉÆ' ln0’B‹“>ÈÈ@\·KñÁÂ+|žö%TÕ² Á¸À(eÓB»Ù4?6"û&ƒ`/ΩȳèÒ†ç™3”žïÄB:¾÷*†G@L,Èْ׿d ùnä6d*&Ê"àœD¿I0·¤ÿæ³Ì)I‚)8௠…œ~x_†¥Êž‘ùºŒlóªI©Þ¦»½½Wm±Êq· )¶Ë íñtþµ…Cj°ƒÕ[U.z|µå²~ÚêzóßÒËT÷?{Yu/»·ÿ;»°­XEIiìú…£LG¾ß€’KË &µ# í¬ºÁ!H,uƒSašaôY·‰æHÏyðETȹ›fÚ`V w5˜nDY†sÇŽLÙÈàÃdVHà[øRЂCsÕS¨ûCH9‰FÛˆt§šuƵû½R¾¡¬£¬@ŸØ‰gQj†Ô ®‰x&3šLD9:FÚ(ùцRFÖ="i ÊAUë´›µŠì šæP±§> endobj 3032 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 720.286 155.474 730.816] /Subtype /Link /A << /S /GoTo /D (prj_8h_c9a7ed6b032cfdaba0e8caba17c6c149) >> >> endobj 3053 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 681.058 153.262 691.962] /Subtype /Link /A << /S /GoTo /D (prj_8h_6d1f0504f9b864d4aed4a59d60bab819) >> >> endobj 3054 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.705 681.058 210.816 691.962] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 666.437 186.115 676.441] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3056 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 642.204 156.032 653.108] /Subtype /Link /A << /S /GoTo /D (prj_8h_fc5276e759c799deea36271d9cafc5e9) >> >> endobj 3057 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 603.349 156.032 614.253] /Subtype /Link /A << /S /GoTo /D (prj_8h_847b7c3f5b7361596912d3d876b4f4fe) >> >> endobj 3058 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 564.495 154.926 575.399] /Subtype /Link /A << /S /GoTo /D (prj_8h_a2167e62576d36eae341c2583cb5d678) >> >> endobj 3059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.369 564.495 212.479 575.399] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 549.874 186.115 559.878] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 525.641 157.696 536.545] /Subtype /Link /A << /S /GoTo /D (prj_8h_4ff298fcdc6e7e23dfb4971fbd26ebe7) >> >> endobj 3062 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 486.786 157.696 497.69] /Subtype /Link /A << /S /GoTo /D (prj_8h_f44375ad9036898dd6d12d2cc58bf53b) >> >> endobj 3063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 406.024 210.248 416.928] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 369.227 183.429 378.074] /Subtype /Link /A << /S /GoTo /D (prj_8h_dc97181f64d72234b8c6903b22b33df9) >> >> endobj 3065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 330.373 230.662 339.219] /Subtype /Link /A << /S /GoTo /D (prj_8h_c940da0fb0552876fb40a92f82c9625f) >> >> endobj 3066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 291.518 219.952 300.365] /Subtype /Link /A << /S /GoTo /D (prj_8h_86e25219d2169702c7db6508750097cf) >> >> endobj 3067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 252.664 208.445 261.511] /Subtype /Link /A << /S /GoTo /D (prj_8h_afd25a96ccc5966c04d7732ca482c0c1) >> >> endobj 3068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 213.81 258.696 222.656] /Subtype /Link /A << /S /GoTo /D (prj_8h_5a2f80bed69a84464e5654f91ed4fb63) >> >> endobj 3069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 173.272 207.279 183.802] /Subtype /Link /A << /S /GoTo /D (prj_8h_749605599f1bf2b883c5c88b6cc9c06b) >> >> endobj 3070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 136.101 201.681 144.948] /Subtype /Link /A << /S /GoTo /D (prj_8h_4b25d630b7590f31fa0aa6d5861c9bfd) >> >> endobj 3071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 97.247 195.045 106.094] /Subtype /Link /A << /S /GoTo /D (prj_8h_6e2db45f219ba5732ddca43a9fc17408) >> >> endobj 3076 0 obj << /D [3074 0 R /XYZ 90 757.935 null] >> endobj 3077 0 obj << /D [3074 0 R /XYZ 90 424.998 null] >> endobj 3073 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3151 0 obj << /Length 2158 /Filter /FlateDecode >> stream xÚÍZ[oã¶~ϯúR]s)êž—Eº·¦h‹=I€›ŒÄØÜZ’+ʹýú3Ë,;²“Ø=E QÉ~ü曑`êM=ê}>úñâèí'–yÉb{7^F½$öIÄ|ï¢ð.G1‰ÇŸR:Z4ßÈln^µÏ!õRð9ÑgŸe„¦^ÂBãÈø}Zˆª•PÊÀ?íêMmíÌ:ÿÓÇ“_¾È{s³hÆa4ª¿‰¼•uEô¶¹˜ÑfÆH2¸$³¸ýÁX´¶†w9‰Å¼®Tk,æ3ÞØ!ˆP3µPéÁƧoÿÍy+Æ~4šÖjsIu™]]ìjÐã ¤œ£~H²04ž~YÛ¸u †Ôý'ÀUû<U^âgžÝï…;þjY^;rÔ7æÚŒƒd$òzìÃæ+ù( ÇóDLæ¢mݬÅtàâ!ˆýíüAiÃ’«ËpoÚœý¿PÚ¤I ƒ{Ä‚N”ˆoeéƒh9È‘õàƒPy#Ú,¾4ŒC„YÇ…¢¥£¦^¶² ô,sQ‚€àmbûÕb&™ó¹¹-ùÂ4Û] ¨<z… \?˜în¡O§ç¦õû{ÛPcÔòªàMAÆ“85Q!ðí\Þhæã|Ÿd‘Õ¹k®ôÞ6ÒØ¾¶²0h±hÊ'œ€'ªm–yk–»›É|fVÒȸ9|ÀçsÓhjÉí©Â¸JˆÂycäFn¡‘×åbÙr“?"˜.B޶;ƒýÇfǪ.EFG¥ÀVæ¦ñÖv/•m]ÛJ¸Ž7ŸøÙh©€¥ toà6«Â ¨aÄÓ•ñ Œ pÅ“uqkv”#•]\;Î"–·CG9—b@Yuâæòþ‡lÄ̹R¦y=†Å—Vîdk³rU›+¤b¾PË9ï™¶”˜¹Ø5Žmg‰ŸeÈYA(üü'lГàY#Qo¥9|xÒÖæ ,ÐJ>…°ý³çQ¦:zà(³glâ1ãËyk,Ü"Â|¾DÔ·Õ–n!ví¯º,í.ye£õêæaè [ðJþ`3Žv‹Óíá^ a…‚©ÆlëÔž¡jëÆÁŽMã*˜R(ŧâP<›M»u§zðÙ²Kº!h Z§Ýæ¹h— ~,‰{ÚÉ’ÄÆ=t ®åºVòhžXÊB«â¥›§30t¹€j‹Õð~>`ADb‚?ÚwïÞAt÷÷¶¡ùä,vò4€5ó¬ðqAª5’QQëx­&¹UYýX3ÑLXœ’t#ˆmâ ÂpmßxIµ N­ ÓØ‹¦…ä®gÅb7¯Ñîø1&‡âŸ¸øÁöMS—ÖEÞÀ´Fëz†$f#g“Ûiwb8©åb1— 4ÔZÈÒÈ¢Zc£?ô+øéÊ# )ÂøNÇòƒ2Ï1›Ø¦ ví¦Šv‹±æß£MÕ×l…‘š­cÌUvÉNLÑŽ ^kÜ ¨êAµ¾®TžwÕ‡Î×÷€E.Û¹ þ‰-,õ‹ÒZŒwï!n¯øªB‚xx>¨Ëãc(4>Ý8ñÑ`Ì~Ô¤¾­\Ræà< K¡ £ÇtENrÐq+¹i(´Ñ\…ñ7˪+}ࡎl˜‹Ã{UÓÊ$Ìx3ÞA“(õûáÍîw…wDB?é…wè‡N¡h¤pbÙFˆb· QH’´/0÷L½Øü$£„Q=ëž`±Üõ³@+vÄp7ù¡1}«ÒaG‹ê×'Áó“7v¶>YÚ™\ÐStaý„VéUÊlž›}NE…Ü07ZM>Ç Øe ‰ÀI£·¹~­·sz;¤½Ô„¥’­hmìÙl®_>±¼E%¨û5˜f¼¶Zû¦&m=éñ½ËÔE·N·ú ‚w(Q$´ÜæSkK-Ë’C)b÷fCWô‡™5¸ùVs¼fyƒÏ~LÂB†%ˆÉ–·ÑÁEæ+Ñ®ª|8u5aOìì9 |¨9ÆÕ#Döé|Õ¦ž) Îúp¯«ªßVöT ãäNÅxnò¡8Æ÷1:úìôgl c)jŽøµpðÇÅþpÀäýá@Ë»àx*> ‰ù@jÒÉ×/Ùˆ1ÈF‘ƒË? ¸Ÿ¿å²\b˲ôlÒ¹Âø©'?ŒIŠr°ÝÔ!øªCðU{àËH’d»óa|)IbÖÇWAÝf£ÜAý:€…þ¾·¼Ú`˜¼?Àhù•Ãø«í.Æü6LbÌs=§U]Ö•Ìd„¦ñÞ m§0´ÀP°üZ’®jÍó‹Ï[€Åk …ÒEÔÓ†/f[„j5 öÕP%  L>AYˆàéý / =ë¦9ߪ‡ ¿óI5e“ ôwO2ò&? 5ùé,ïÍAÍ'gï‡Èš¼$‰¿–² D¥Ý&’to‘|\ÀP˜¼?¬hùµY(öuñûõËoÛ²|ü¢,_Ï@;¡à„5%‘Ïö†Uð`üXÁòÉ=ì’û×'ðfIðBºº&oÄ6" c{¦²9@ ds€€å×*¦]”Ÿœžm©›¢µºéD6O,lþg NANÓ—þeÀý!ÆcLíߢŒD‘ý£_/V_ÛÝë篮ñ K5qmnbsñéqèG‰¹cÔgö5ǺWÕßߟÿrú£i‡Ä§ö3¿ý¾ð¡¾˜Šjs§ÿ™?Kn endstream endobj 3150 0 obj << /Type /Page /Contents 3151 0 R /Resources 3149 0 R /MediaBox [0 0 595.276 841.89] /Parent 2892 0 R /Annots [ 3072 0 R 3093 0 R 3094 0 R 3095 0 R 3096 0 R 3097 0 R 3098 0 R 3099 0 R 3100 0 R 3101 0 R 3102 0 R 3103 0 R 3104 0 R 3105 0 R 3106 0 R 3107 0 R 3108 0 R 3109 0 R 3110 0 R 3111 0 R 3112 0 R 3113 0 R 3114 0 R 3115 0 R 3116 0 R 3117 0 R 3118 0 R 3119 0 R 3120 0 R 3121 0 R 3122 0 R 3123 0 R 3124 0 R 3125 0 R 3126 0 R 3127 0 R 3128 0 R 3129 0 R 3130 0 R 3131 0 R 3132 0 R 3133 0 R 3134 0 R 3135 0 R 3136 0 R 3137 0 R 3138 0 R 3139 0 R ] >> endobj 3072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.068 696.002 215.349 706.906] /Subtype /Link /A << /S /GoTo /D (prj_8h_9bceed17f625eb88a0826871dc8296b5) >> >> endobj 3093 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 657.148 192.276 668.052] /Subtype /Link /A << /S /GoTo /D (prj_8h_2d30db5685dd1faa18680a0e69bc5854) >> >> endobj 3094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.068 618.293 197.795 629.197] /Subtype /Link /A << /S /GoTo /D (prj_8h_4089618a84e11369bf9e5fd7c11c7368) >> >> endobj 3095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.751 523.892 169.862 534.795] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.542 482.357 152.759 493.261] /Subtype /Link /A << /S /GoTo /D (prj_8h_d994cb23871c51b20754973bef180f8a) >> >> endobj 3097 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [259.395 482.357 288.506 493.261] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3098 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.662 482.357 426.84 493.261] /Subtype /Link /A << /S /GoTo /D (prj_8h_50db1538981df162709b81be0b2961ab) >> >> endobj 3099 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.244 470.402 359.008 481.306] /Subtype /Link /A << /S /GoTo /D (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) >> >> endobj 3100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.084 440.822 357.194 451.726] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [278.78 416.912 328.373 427.816] /Subtype /Link /A << /S /GoTo /D (structprjprm_d304d66b3f3aa64fe9c7251d3c420d02) >> >> endobj 3102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.309 369.708 214.073 380.612] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [216.614 369.708 250.148 380.612] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.004 369.708 302.538 380.612] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3105 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.308 357.753 380.418 368.657] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 312.541 144.127 323.445] /Subtype /Link /A << /S /GoTo /D (prj_8h_d994cb23871c51b20754973bef180f8a) >> >> endobj 3107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.52 312.541 286.63 323.445] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3108 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 292.616 144.675 303.52] /Subtype /Link /A << /S /GoTo /D (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) >> >> endobj 3109 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.431 292.616 254.541 303.52] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3110 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 272.691 144.674 283.595] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3111 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.663 272.691 181.197 283.595] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3112 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.186 272.691 217.72 283.595] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 252.765 147.434 263.779] /Subtype /Link /A << /S /GoTo /D (prj_8h_bf6696d3455c684cb44d06da7885ce94) >> >> endobj 3114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.423 252.765 186.717 263.779] /Subtype /Link /A << /S /GoTo /D (prj_8h_8ebb4c79b635cef463b4e7242ff23c25) >> >> endobj 3115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.705 252.765 225.999 263.779] /Subtype /Link /A << /S /GoTo /D (prj_8h_bc26dfb2d0b0bee71f6e4541977d237f) >> >> endobj 3116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 232.84 146.886 243.854] /Subtype /Link /A << /S /GoTo /D (prj_8h_faafab5c440384667d7af444b7aca750) >> >> endobj 3117 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.875 232.84 185.621 243.854] /Subtype /Link /A << /S /GoTo /D (prj_8h_2fe67a5ecf17729881efa24c83482611) >> >> endobj 3118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.609 232.84 224.355 243.854] /Subtype /Link /A << /S /GoTo /D (prj_8h_70b750ec65eb4a277057200c7fbb251f) >> >> endobj 3119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 212.915 145.78 223.928] /Subtype /Link /A << /S /GoTo /D (prj_8h_34d303d7ae44a6aca43c1a81bfaac10f) >> >> endobj 3120 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.769 212.915 183.409 223.928] /Subtype /Link /A << /S /GoTo /D (prj_8h_cd4f54c072b6219242daeb6d4b9a74cb) >> >> endobj 3121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.398 212.915 221.037 223.928] /Subtype /Link /A << /S /GoTo /D (prj_8h_9d3358bed907342e3309e54bd2ab89da) >> >> endobj 3122 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 192.99 145.232 204.003] /Subtype /Link /A << /S /GoTo /D (prj_8h_66b51f10624b6c17a84b5b54058dd72b) >> >> endobj 3123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.221 192.99 182.313 204.003] /Subtype /Link /A << /S /GoTo /D (prj_8h_88c15d0b6f789cbbd7c5d323ef131360) >> >> endobj 3124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.302 192.99 219.393 204.003] /Subtype /Link /A << /S /GoTo /D (prj_8h_b46a0a668f28939626287d048153863f) >> >> endobj 3125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 173.064 145.232 184.078] /Subtype /Link /A << /S /GoTo /D (prj_8h_b6ce2bb75a87b1679d05f251227d2f1b) >> >> endobj 3126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.221 173.064 182.313 184.078] /Subtype /Link /A << /S /GoTo /D (prj_8h_eb7881cd5d7b4b5e26281a512b8f62ac) >> >> endobj 3127 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.302 173.064 219.393 184.078] /Subtype /Link /A << /S /GoTo /D (prj_8h_bdf8c6c3ef615a01ebf8822e013d6a63) >> >> endobj 3128 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 153.139 145.77 164.153] /Subtype /Link /A << /S /GoTo /D (prj_8h_c038f2474d5d58de157554cee74a9735) >> >> endobj 3129 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.759 153.139 183.389 164.153] /Subtype /Link /A << /S /GoTo /D (prj_8h_666322bfe8c4b8e73f00afeb47283f97) >> >> endobj 3130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.378 153.139 221.007 164.153] /Subtype /Link /A << /S /GoTo /D (prj_8h_aba5ce89ae711728d8ba8105ac5fd599) >> >> endobj 3131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 133.214 147.992 144.227] /Subtype /Link /A << /S /GoTo /D (prj_8h_c983c5a393c5b3f1041f07b2eb95a3a5) >> >> endobj 3132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 133.214 187.832 144.227] /Subtype /Link /A << /S /GoTo /D (prj_8h_574e44daea81568a6d5e324a6f339d6f) >> >> endobj 3133 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.821 133.214 227.673 144.227] /Subtype /Link /A << /S /GoTo /D (prj_8h_7b60d7992bf9c671cb4191f0ec2e0c90) >> >> endobj 3134 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 113.289 146.876 124.302] /Subtype /Link /A << /S /GoTo /D (prj_8h_3229533df20718c0d5671cc9eb5316fe) >> >> endobj 3135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.865 113.289 185.601 124.302] /Subtype /Link /A << /S /GoTo /D (prj_8h_849a1bbd679d0c193e8be96a8b9ed534) >> >> endobj 3136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.589 113.289 224.325 124.302] /Subtype /Link /A << /S /GoTo /D (prj_8h_dc4da028cde2d970e9e5e22adca22f37) >> >> endobj 3137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 93.363 144.116 104.377] /Subtype /Link /A << /S /GoTo /D (prj_8h_025adf8a63b5d4a8d2a4de804e0707be) >> >> endobj 3138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.105 93.363 180.081 104.377] /Subtype /Link /A << /S /GoTo /D (prj_8h_2c87fbf68277f03051d3eaae3db785e9) >> >> endobj 3139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.07 93.363 216.046 104.377] /Subtype /Link /A << /S /GoTo /D (prj_8h_75b6b1cb0a748e9b5d3a4cd31129ace6) >> >> endobj 3152 0 obj << /D [3150 0 R /XYZ 90 757.935 null] >> endobj 310 0 obj << /D [3150 0 R /XYZ 90 580.973 null] >> endobj 3149 0 obj << /Font << /F29 635 0 R /F40 846 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3204 0 obj << /Length 2864 /Filter /FlateDecode >> stream xÚÍ[[sÛ6~÷¯Ð£4Ssq!xqŸ×iÚi7ñLw›ö&a‹]ŠPHª¶ûë÷¤HŠ$2Ý©g< ààùS"³‡™}öêöì_¯Y<‹½8`Áìö~“YPO0:»ÍfŸæ,Î)!d¾®þð–‹s&Èüu^HÓú ïeµ Ñ\–) q6ýÅï·?ž]ßž}>£À‡Ì¨¦+B/äb–®Î>ýNfŒÿ8#£Ù£žµšùŒÃ³˜}<ûùŒØ=’Á^Io¯”žÏ£YȸGa6ücB³ß®GþÕƒÝȇïÏfŸÎ(]P1^ײùÿt°h}cðð–À«§¨ÙÓ>8°sE” /ð#˜¢|õŸ;© cÐôÛ9HÞ0+ò2«ò4)Ìý­eU¯eÚä &æâ ùrçÔ¼€2hv:Ð2™²L& œO—y¡wà^_ºÀåZA+?oÚfRÉÄ là±p4®I5פš€+p>W8¢Ï;Ì®.?¸põ=öa½)’ÆZ`ùÔ-žp„Ž…q%'À‹ÇÈœOO€‘vzýöÚ £;Ëû8¾•Uš4ªr'„GýVƒSÁƒ£>>½|<€†û©’H=±ž¯rAH¼0`}?&e­Êó×E²ª)3”œz±ï•Ãõu^OQçõéêÌD"Z€n¡?w«4óè40KîT‘§{4™óÑŽf¥Š š¬Š š œGh²ßiéÛ÷N1÷Äð­*Š%óG™gr:c5R“¼ , r>U‘™AÓ¢sùí[‘ÄAo’ØÝ#óó˼Q÷ùÜ;µ¢J>Ú7«)¥šTªÓÊÀ#qäÕû›}1Ï@SUæéiad ad4R9R‰Ûš«<V‚;¾…õzOÈíAõ˜ø1ò¸˜ ¤ÙD³)hfS…ô;7šûœy–×MR6Nà .Ÿùc gªÔ(Õ(ÕT(ß»ƒH{ TU³T+U­—n7.¨Ç¢ÑnüN•㱄Åã±DΧbzaß¼zÿî¥ÊRîÁ-£ãÇt‚Ââ ñc:Qo®ÞårÖªxÖbxлœ¬ÀMŽGG9Ÿù³užåöã• =¥` v`ùdÙä­S©×KÙ+W¤›;§PòÈ#ttvNÁ5‚kz:®Ã¬æÊ+ƒ \ôq½zÿêú$D±^1Ú:~žèç)€~(ëØ áÏûÃAˆqOVåXû©’"ÿKf§¡ Ðxx—ë§ñðÂâñð"ç)ÎçÍÍ¿2¢o®/ºÉŸZ&;4Ïi€eúÙ9ÐQhs« sÎ‡Í Ì‡)Óÿæåƒéi۬ߨ?0 P¥7C›&/%¢B/$À2„°ÍÞÔí ~<„4r‰¤ØÈÚô!SÓ‹Ám p#aÏÈñÀÁ!‚$ºC))30¨¡ß‹vsÐ =>Tü¦Ýk™ôS3V¨ò!o6™í"_3sqXãoV«j•ųý<·+òÒ<-—`^¡ý6ûŠ7x,èøÉÏïOñ¾+ ä%¸ôí;Ù”ÏÐNi|]Þâàf[÷Jhà@ÓÉ™÷æ}û’Ÿïùl¿èKì~w\„³[~÷ªr Öáa^Ì;Aù.Æ'[™êïêÜ')ñ¦^,Ä—o'<|;ÝK‰ØÎå+qä݈ãîf/7ææ}‰™ûf˜8t3>øåð€z‚´ˆÎx‹s&ëBµ|”[å¬paߨ¬ºh_ƒU;vËÚ,Ó{ÌÛyIšÊµµ€I©ßù˜Ng¬l~ä²UŒs1~ÐXùl`¬v¶Pª¦m Õïhºyã!5@›±8²VÕïYUÎùज³ÞIñÓL™§f‚ S4Yyš7h p‰6ýæãf™4®“beîÐuUÞÚ$0zv y³Ìíæšv×{,_@ˆË¿‚á‹Ç ûߤZü+©ÖÀ²€JiQ0‚Û¿qs©F€„ï…Z€Ðn[½Ñ¢[±ÇNOì±ë{'üˆt­=ÝÕR¥ ‚´f›T‹†a­Ÿ ~§ry†ƒlžèX£ QpZ£ìs);j[Ù‡>Ö×°gÉ£G—ÞÀäþ¼I¦ã›>©Ìxù¼F¬Pxþ®¿C£‹ù_²Rèå‘¢/ldãkýžµ‰ƒ­†z@&Ý]^þêªÑÚˆ·sN/Éàn»7_n —!;–Æí"&óËwîÂ;åÇïå ˆÊ‚måä_oÞ‰F¼sØb˜¬ˆÃeð8ì^c'E­ìÊfSÙû”U…Ú‚Mfù½Ãx¿ á¤Cy8ØQ¿ï1¾]`€ÞS£h $¡öS~ê8Á¹P¶#³©ª*Y¯U™¡ú±yýÔR …zo}h‘¬×:+ƒqÜù=¦IeCZ¬ó¬]v?  ¥>¸ÃW1›Æt, Ðêíïa»K“zÀPßóv/`á1Dîqx ÔOçg7ȃoÖ¸@³ŽÙ•$â~»Ìð š× ä¶°½Ss0ÞË´ ·Jžíi*Y$OúV23XÛø›|eçßÙõä6HuJà]ý±®Vv?ÔÔV†1ÔÛ*ûª,ß%mœ@)@•…&£AHÈ‹­dØÀ«”mêßE=w6Ü©d^æXÊÂò€çPæ´ò˜ 6“SsXm][ÀhŸ ô4Mf]6ì‘õ1q¶RˆvÒÈÚ!xàkøðíÆß-Ƙ]w&J *l²ÈWy·c}ÿúDZî Uá{–j÷ó¤NeÕ$¹àq)­€ò'f¬VŦé+#Ä |:”ŽæuSc|OÈü ‚PÂ!o©è^¦´[…V·ÔtKež6˜Å¦>EÓ¶‹Æí¡hkèÐÜÐxO Bpæ‡}JƒƒU „C'Ê»{Twˆ±vgJ ÐhƒêÞQ"T;ä € ´l|õÄõ`šÿ•ãëÓùý?’×ãÊ bOYËú[Ž_£Øó)'ð`9\øËJiìùq¼ãhÒtS%éónâfj<šè ô±y6#ùÌ¡i>ô ‹¥2¹4Lf$Maòm“3ÄÈËΪí¼^¶pã¬õ¸Í<µC5UkÜÙs•?,³üpžJëÊ}†¹X#m4†K6µ¬j—o_m´å…)5ä\õ½ŽB„9 3LWµ,Ì9kó!Œåöc0ɬ¥]DÓ­Öž!hz+& ‚$kS­U-ÑOþ¥:†X…ª7Ú =eYZ:•LM¾§Gu8 æî±{JHëÆ©³þ¶JíR¶ˆŽQ· ·¾þ“öÏåÞ…þ†Së:P\ï×­±«KPzÜÖ­Mo™ 1™K²¸æ`r˜´‹Œ¨B£y^›77Ø$âØOªd%ÝoÇmœ¸ãž°êÃÃay‚~ÓÕãÊð+4½‰™*icæiót£ôØ”†_Týa¬_õÇ`\ð`ͽ6L6rµ¾ÙYÖ'[+%¾ê Û#ô’»G´#™=裮t oƒô æ`Bb¶€€”‹¡Bdy_ã°@#mE«³æ×#æ%¸²Ï¥ ðÈ=¨—n=a7ÊÚQˆ’W½Ö†m¦^«VëA¥¶1 ¾NT÷5½Òä6»¿\ "/†¼úÈ®´?ªé¹72±'„µûßËR‚Dµ¹M›h¼m¯3yg:yPráÓ š#”™–þú¢² þrõñ§^™6º8›2Ù“§žžd¹{Òÿî)tP endstream endobj 3203 0 obj << /Type /Page /Contents 3204 0 R /Resources 3202 0 R /MediaBox [0 0 595.276 841.89] /Parent 3206 0 R /Annots [ 3140 0 R 3141 0 R 3142 0 R 3143 0 R 3144 0 R 3145 0 R 3146 0 R 3147 0 R 3148 0 R 3156 0 R 3157 0 R 3158 0 R 3159 0 R 3160 0 R 3161 0 R 3162 0 R 3163 0 R 3164 0 R 3165 0 R 3166 0 R 3167 0 R 3168 0 R 3169 0 R 3170 0 R 3171 0 R 3172 0 R 3173 0 R 3174 0 R 3175 0 R 3176 0 R 3177 0 R 3178 0 R 3179 0 R 3180 0 R 3181 0 R 3182 0 R 3183 0 R 3184 0 R 3185 0 R 3186 0 R 3187 0 R 3188 0 R 3189 0 R 3190 0 R 3191 0 R 3192 0 R 3193 0 R 3194 0 R 3195 0 R 3196 0 R 3197 0 R 3198 0 R 3199 0 R 3200 0 R 3201 0 R ] >> endobj 3140 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 719.912 147.843 730.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_36cf447dee9f2e90e42d43d7adc5a0a1) >> >> endobj 3141 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.832 719.912 187.534 730.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_ffdbf993ce959fce2c148c07cd0f2c0c) >> >> endobj 3142 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.523 719.912 227.225 730.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_13e0f81e1fd4bdc46847ab4c634ad346) >> >> endobj 3143 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 699.987 146.876 711.001] /Subtype /Link /A << /S /GoTo /D (prj_8h_68ce41ad199c3385bed7e7d4ded2bd8a) >> >> endobj 3144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.865 699.987 185.601 711.001] /Subtype /Link /A << /S /GoTo /D (prj_8h_ff09e87b2246bdec83f6a7bb1bc0f471) >> >> endobj 3145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.589 699.987 224.325 711.001] /Subtype /Link /A << /S /GoTo /D (prj_8h_28ddb923a52cb597ca9c7dd03ceeb4fe) >> >> endobj 3146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 680.435 145.77 691.075] /Subtype /Link /A << /S /GoTo /D (prj_8h_36ccae7b426311614a4e80432a2b62c3) >> >> endobj 3147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.759 680.435 183.389 691.075] /Subtype /Link /A << /S /GoTo /D (prj_8h_f363383621fb2b72243c1d6b894874d5) >> >> endobj 3148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.378 680.435 221.007 691.075] /Subtype /Link /A << /S /GoTo /D (prj_8h_b4325a957786611772b90e7a080327f3) >> >> endobj 3156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 660.51 149.098 671.15] /Subtype /Link /A << /S /GoTo /D (prj_8h_cf989261fd56f1e8b4eb8941ec2c754f) >> >> endobj 3157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.087 660.51 190.044 671.15] /Subtype /Link /A << /S /GoTo /D (prj_8h_5380727f9aeff5aa57f8545d6b54a8f8) >> >> endobj 3158 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.033 660.51 230.99 671.15] /Subtype /Link /A << /S /GoTo /D (prj_8h_d9a80b98c04b0e06d08fd84bacc58b27) >> >> endobj 3159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 640.585 143.021 651.225] /Subtype /Link /A << /S /GoTo /D (prj_8h_7c719c0387d23c53b0ceb3ee161de66a) >> >> endobj 3160 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.009 640.585 177.89 651.225] /Subtype /Link /A << /S /GoTo /D (prj_8h_310444979f8f0e62db2bcbe39b0e3d35) >> >> endobj 3161 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.878 640.585 212.758 651.225] /Subtype /Link /A << /S /GoTo /D (prj_8h_5517fccc15882e298ac9433f44d1ae4c) >> >> endobj 3162 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 620.286 146.328 631.299] /Subtype /Link /A << /S /GoTo /D (prj_8h_d2a2b56c0900516dd24eebf430bcb29c) >> >> endobj 3163 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.317 620.286 184.505 631.299] /Subtype /Link /A << /S /GoTo /D (prj_8h_17be11269d86b3308fd925949877718e) >> >> endobj 3164 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.494 620.286 222.681 631.299] /Subtype /Link /A << /S /GoTo /D (prj_8h_eb5951ec54b929d16ab464939a37d74f) >> >> endobj 3165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 600.734 149.108 611.374] /Subtype /Link /A << /S /GoTo /D (prj_8h_151140d870ed4f490317938bd6260a6a) >> >> endobj 3166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.097 600.734 190.064 611.374] /Subtype /Link /A << /S /GoTo /D (prj_8h_853c1df5e8327d83e9cfdde9455355f5) >> >> endobj 3167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.053 600.734 231.02 611.374] /Subtype /Link /A << /S /GoTo /D (prj_8h_6f3cbaaf367984579aad5ec7eb00f397) >> >> endobj 3168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 580.809 143.568 591.449] /Subtype /Link /A << /S /GoTo /D (prj_8h_33f92621800eb880b75611c439526d19) >> >> endobj 3169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.557 580.809 178.985 591.449] /Subtype /Link /A << /S /GoTo /D (prj_8h_2da3bbd3c42c6ad324117cc5f249a834) >> >> endobj 3170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.974 580.809 214.402 591.449] /Subtype /Link /A << /S /GoTo /D (prj_8h_8cca776751549082521a72a743d6b937) >> >> endobj 3171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 560.51 147.992 571.524] /Subtype /Link /A << /S /GoTo /D (prj_8h_c2f3bc42ac6e7d458364ebcf2b35814f) >> >> endobj 3172 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 560.51 187.832 571.524] /Subtype /Link /A << /S /GoTo /D (prj_8h_588e9a86fc4dcd1195f867f718ce5429) >> >> endobj 3173 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.821 560.51 227.673 571.524] /Subtype /Link /A << /S /GoTo /D (prj_8h_77283589634cc9a054f3a7c7fc91d38d) >> >> endobj 3174 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 540.585 147.434 551.598] /Subtype /Link /A << /S /GoTo /D (prj_8h_b1264f0201113c1a8e931ad9a7630e2f) >> >> endobj 3175 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.423 540.585 186.567 551.598] /Subtype /Link /A << /S /GoTo /D (prj_8h_d70968320728202aa12048162248d368) >> >> endobj 3176 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.556 540.585 225.85 551.598] /Subtype /Link /A << /S /GoTo /D (prj_8h_fa8d27e481bbfffacd3e671e6715d5cb) >> >> endobj 3177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 520.659 147.992 531.673] /Subtype /Link /A << /S /GoTo /D (prj_8h_fbf5f05496f1e018425e02d60a4e0b74) >> >> endobj 3178 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 520.659 187.832 531.673] /Subtype /Link /A << /S /GoTo /D (prj_8h_105e2bf177120eb34f41e6af768f855d) >> >> endobj 3179 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.821 520.659 227.673 531.673] /Subtype /Link /A << /S /GoTo /D (prj_8h_fedc43dc512008174ec9b87753519031) >> >> endobj 3180 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 500.734 147.992 511.748] /Subtype /Link /A << /S /GoTo /D (prj_8h_344308a1d96a93f9bc682141f3df1a14) >> >> endobj 3181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 500.734 187.832 511.748] /Subtype /Link /A << /S /GoTo /D (prj_8h_2f42dcec4ea56bbb25b563859228b02e) >> >> endobj 3182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.821 500.734 227.673 511.748] /Subtype /Link /A << /S /GoTo /D (prj_8h_ed0317c8ffef248346da897568df266c) >> >> endobj 3183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 481.183 148.55 491.822] /Subtype /Link /A << /S /GoTo /D (prj_8h_aec02a8e47d68e126983e9bb07a0c0aa) >> >> endobj 3184 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.539 481.183 188.948 491.822] /Subtype /Link /A << /S /GoTo /D (prj_8h_53315ef8d3bd4002d1e98142fcf62566) >> >> endobj 3185 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.937 481.183 229.347 491.822] /Subtype /Link /A << /S /GoTo /D (prj_8h_3b4cda48838c613460bff00c76fceb44) >> >> endobj 3186 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 460.884 147.992 471.897] /Subtype /Link /A << /S /GoTo /D (prj_8h_abdc7abc8b7c80187770cfd12c63f700) >> >> endobj 3187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 460.884 187.832 471.897] /Subtype /Link /A << /S /GoTo /D (prj_8h_28b623c88d38ab711fc61f36a97d0b27) >> >> endobj 3188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.821 460.884 227.673 471.897] /Subtype /Link /A << /S /GoTo /D (prj_8h_1f1714691f99f11640dccdc74eadfb49) >> >> endobj 3189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 440.958 144.674 451.972] /Subtype /Link /A << /S /GoTo /D (prj_8h_ad75dcd0cd2fd0b6a162b5587cba9c2d) >> >> endobj 3190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.663 440.958 181.197 451.972] /Subtype /Link /A << /S /GoTo /D (prj_8h_bbfbf3cba73850d7608765725993dfe3) >> >> endobj 3191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.186 440.958 217.719 451.972] /Subtype /Link /A << /S /GoTo /D (prj_8h_167a49d730bca43483aef311f7114ae4) >> >> endobj 3192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 421.033 146.328 432.047] /Subtype /Link /A << /S /GoTo /D (prj_8h_8bc552f12260f944e0b8f9b714804983) >> >> endobj 3193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.317 421.033 184.505 432.047] /Subtype /Link /A << /S /GoTo /D (prj_8h_fcefcb885b7d1c33e0458345cdc9f4a4) >> >> endobj 3194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.493 421.033 222.681 432.047] /Subtype /Link /A << /S /GoTo /D (prj_8h_c9a7ed6b032cfdaba0e8caba17c6c149) >> >> endobj 3195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 401.108 146.886 412.121] /Subtype /Link /A << /S /GoTo /D (prj_8h_6d1f0504f9b864d4aed4a59d60bab819) >> >> endobj 3196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.875 401.108 185.621 412.121] /Subtype /Link /A << /S /GoTo /D (prj_8h_fc5276e759c799deea36271d9cafc5e9) >> >> endobj 3197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.609 401.108 224.355 412.121] /Subtype /Link /A << /S /GoTo /D (prj_8h_847b7c3f5b7361596912d3d876b4f4fe) >> >> endobj 3198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 381.183 148.55 392.196] /Subtype /Link /A << /S /GoTo /D (prj_8h_a2167e62576d36eae341c2583cb5d678) >> >> endobj 3199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.539 381.183 188.948 392.196] /Subtype /Link /A << /S /GoTo /D (prj_8h_4ff298fcdc6e7e23dfb4971fbd26ebe7) >> >> endobj 3200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.937 381.183 229.347 392.196] /Subtype /Link /A << /S /GoTo /D (prj_8h_f44375ad9036898dd6d12d2cc58bf53b) >> >> endobj 3201 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.796 258.571 418.227 269.475] /Subtype /Link /A << /S /GoTo /D (structprjprm_b8dd3d8b1e462a2b261fc9e304885943) >> >> endobj 3205 0 obj << /D [3203 0 R /XYZ 90 757.935 null] >> endobj 3202 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F8 1123 0 R /F14 1078 0 R /F13 1145 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3220 0 obj << /Length 950 /Filter /FlateDecode >> stream xÚíWßoÛ6~×_A`/ÒP1$%RbÞÚ¥ ´C]'(d‰N”Ù’FɈ½¿~'‘rd[n‹!ëÃÐAÇ#ï¿û¨£ºG]9o¦ÎÙ%“Hb)˜@Ó’E‚bÎ(šfhæ ,<ŸBÜJ?âÏgœ¸—ùRéF-”öhìª"U@"Â܈{wÓkçíÔùË¡‡ Úù厎ҕ3»#(ý5"81zêV­PÈx/ÑÄùÝ!_Ì‘˜¾Ë3›å…º%„6½‹2]¯TÑ$M^mRàÑg!B90ÅÔÿ”íYøø›ÒÚBdx¢,4ž¦Öª)›diÄb½š<\.Ì»Òå£J»|Ì8ÑÉJ5J×C•™é}Ú†0°€b´w ´ÙgÉ£°_ãS<âB@Å G>xd‡Ð°ÐÜ\b“ϯo®&=¬C0>z’¹Ér­Î;&ô¥ìßg—AŒ",#B-’ŒAš¶œu£×iãù®ҫ.„XBÙ` ´a~î&BÅ Ô`ôʘç…õSlŽ4ÛCM½9VUUÝÒ ì¢ù`¨û‡ÂLË¢¶Y¹ž·‡£•7³;k}bÁv·`¨­òQ}ó šd7óœ#°{v7NP ºìOÉ­€{©ªëÒRr•¤º4âºî·èg3•.÷ýð¹‹u1ä±.ùÛJÕc#cÜ NrkÂ>½0·ÂoæçÿÞÜâ_äÖ$'–ìóeœ˜ãlüÞÜzqf…'™õî­ý¦ßNêüoU.:ÉòÂÄkyZzö¼ i5íóõ^0³ý¯>Ô²µm†úÞvÅ›+ÍA÷mg†©å… ƒS"1âþßï8C`*û%ë"oêW‡Õ™oŸs5mÞ£Ü-u£[‰'TtªÑ&BáœE"+/ì9/òÏJëU½cÂc?Þ?ÜG°ùK)ºÓKf¢] »ËHš4°«ñÏÃ>,1ŽH{ðAÅ…ñò:ËŽ;OÒ?ŸÜ­hàK¸í/N‚_éæ%À^|þ¿?: ~­~€ÿƒŸÃêàÿðwf‡?w"Æ’Æßúo×ÿÓÁµ+‚ëšù§ãÐÆ¸í WªPºCÓ´QÛ€Þ÷Âe›Ÿš›0/JÎCzÎ#3b„2‹f»¶Gô_&ï~}cäS²ßú.ÊÍö^‡;ý;Ù% endstream endobj 3219 0 obj << /Type /Page /Contents 3220 0 R /Resources 3218 0 R /MediaBox [0 0 595.276 841.89] /Parent 3206 0 R /Annots [ 3207 0 R 3208 0 R 3209 0 R 3210 0 R 3211 0 R 3212 0 R 3213 0 R 3214 0 R 3215 0 R ] >> endobj 3207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 416.09 163.215 426.994] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 361.609 138.508 372.488] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000014) >> >> endobj 3209 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 341.519 313.819 372.488] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 279.698 138.508 290.577] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000015) >> >> endobj 3211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 259.608 313.819 290.577] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 197.787 138.508 208.666] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000016) >> >> endobj 3213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 177.697 313.819 208.666] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 115.875 138.508 126.755] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000017) >> >> endobj 3215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 95.786 313.819 126.755] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3221 0 obj << /D [3219 0 R /XYZ 90 757.935 null] >> endobj 314 0 obj << /D [3219 0 R /XYZ 90 733.028 null] >> endobj 2803 0 obj << /D [3219 0 R /XYZ 90 716.221 null] >> endobj 3222 0 obj << /D [3219 0 R /XYZ 90 716.221 null] >> endobj 2804 0 obj << /D [3219 0 R /XYZ 355.382 681.092 null] >> endobj 3223 0 obj << /D [3219 0 R /XYZ 90 664.837 null] >> endobj 2805 0 obj << /D [3219 0 R /XYZ 381.384 574.841 null] >> endobj 3224 0 obj << /D [3219 0 R /XYZ 90 558.586 null] >> endobj 2806 0 obj << /D [3219 0 R /XYZ 371.98 468.59 null] >> endobj 3225 0 obj << /D [3219 0 R /XYZ 90 452.335 null] >> endobj 875 0 obj << /D [3219 0 R /XYZ 358.759 419.243 null] >> endobj 3226 0 obj << /D [3219 0 R /XYZ 90 402.988 null] >> endobj 877 0 obj << /D [3219 0 R /XYZ 90 335.175 null] >> endobj 3227 0 obj << /D [3219 0 R /XYZ 90 321.077 null] >> endobj 878 0 obj << /D [3219 0 R /XYZ 90 253.264 null] >> endobj 3228 0 obj << /D [3219 0 R /XYZ 90 239.165 null] >> endobj 879 0 obj << /D [3219 0 R /XYZ 90 171.353 null] >> endobj 3229 0 obj << /D [3219 0 R /XYZ 90 157.254 null] >> endobj 940 0 obj << /D [3219 0 R /XYZ 90 89.441 null] >> endobj 3218 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3239 0 obj << /Length 1084 /Filter /FlateDecode >> stream xÚåW[o¤6}Ÿ_áª/ ×66—¼å®DÙl:3«­”¬"<¶L¹lvö×÷d2M¢VªÔ'_ŽÏw;6­Aç“£ùä×3æ#ûsÐ|‰|‚\‡bÁ(šGèÖp°cZ”blò¯øÁ´˜ ÆY¼–ª7•K™›Ô3dÂM\ ×1¿Ì/'§óÉŸ çD\áb×(L&·_Š`ülûzlV%ˆ3Ú5šM~›½™‰#:Ž˜a_óü9’w„°T3Úû~/ó<)VÝPû]ólRDó•f<=Ÿ ‹`ßwì‚ruÚ‰Ü(‹Ã ”ÑAµÀ—ôøR»ÄG…!¡9Flnè,³\uAøÇ£I‰äQ¡†Â,Ùe¼ˆ×q¹5aü¢Æ«Bꓟq¾Ýg£žâ\†åz«ÀÒÌdÂxTqZ”2ˆp½mäw‹B©,›aê÷œokן¦U"sà›¥ lnºÜØnt(N²æÓR-| d1Žmî÷°0ÕhÐÆ»o b¤IµD²üà…q§g£˜u&‚)€›éåétz?ût||:›íĨÉS}>ØqýéêêþæãÅõütºì;ªCpxrczÐN?¼áÌnïÅïïØõÙ¤Âø8½:쇞Ìz®ƒuV¥áSÜ_iÞE:NË.Ðq«þ¤(ó*|šÛä‰JK¨Å^yñZ Ñ@CñÛjÕ Æ.æn·°vä7¥¸îu8‚6Ô-ê€ÑN“þãBÍTô‹½¶Rx=ÒYÌgF!ËBõ‚õZu™,d®G³¥žÝSÛ0ýä‰A]×´þ‚~™©6’ËFSªµžøV>XW²À¦ÅmǸÐÅCV­#Õ_HÕ‚ÐDC<0»ŒƒuüC¯5Ü·:‰d¾};qK;Ìïwê¨ìÀ{3²-{ ¿­Z%žA"KðéK¥?LžV›{ÅÿÓŽô¡ sÁGùó¢àCz·]|“g_e¯86ÃýrP[·Ñµö¢›Ê²ÊkO§#ã^ºpzFÍ +}«ä5ŽfÓeÃQ èÆcbœtª—ÀÅŽŸUa(‹‘Q#íy ƒjŒë ãï.¶]É_Ïd #2o\@æî¼Ål Õ ·‡ª†ÄëéÛ¡GKuÙË7‹’/›U”`³ÿL”:º;”ÉÇŽ·K™ê7H.¥NŽ ­3L? @ž²\÷ˇ@[zè!0Ñůß0RêĉËÔIíÎT[À¥,»“š®öö ”@+Ù>EÚƒå{sâ5Bbð W…ÖÞOÿ’ÜNþsbÒÚø.5±ÿïjÒ­ÿÞ8ö©÷Ú¿›ö¯ÆÁ¾k{ú¯FøXmÛ¹Lël[>m¼?´³ÚÓr¡>ÕPrÀépÕ#”éê®×¶%öùxvuq¤úð#ºn·íËíûv%Ó±¥0×p´ endstream endobj 3238 0 obj << /Type /Page /Contents 3239 0 R /Resources 3237 0 R /MediaBox [0 0 595.276 841.89] /Parent 3206 0 R /Annots [ 3216 0 R 3217 0 R 3230 0 R 3231 0 R 3232 0 R 3233 0 R 3234 0 R ] >> endobj 3216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 694.532 138.508 705.411] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000018) >> >> endobj 3217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 674.442 313.819 705.411] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.603 436.403 240.713 447.416] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [484.886 436.403 513.996 447.416] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 307.222 188.789 318.125] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.868 247.44 475.979 258.453] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 128.157 188.789 139.061] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3240 0 obj << /D [3238 0 R /XYZ 90 757.935 null] >> endobj 3241 0 obj << /D [3238 0 R /XYZ 90 733.028 null] >> endobj 318 0 obj << /D [3238 0 R /XYZ 90 660.868 null] >> endobj 2842 0 obj << /D [3238 0 R /XYZ 90 636.654 null] >> endobj 3242 0 obj << /D [3238 0 R /XYZ 90 636.654 null] >> endobj 2843 0 obj << /D [3238 0 R /XYZ 107.713 577.485 null] >> endobj 2844 0 obj << /D [3238 0 R /XYZ 107.713 561.545 null] >> endobj 2845 0 obj << /D [3238 0 R /XYZ 107.713 545.604 null] >> endobj 2846 0 obj << /D [3238 0 R /XYZ 107.713 529.664 null] >> endobj 2847 0 obj << /D [3238 0 R /XYZ 107.713 513.724 null] >> endobj 322 0 obj << /D [3238 0 R /XYZ 90 497.938 null] >> endobj 1134 0 obj << /D [3238 0 R /XYZ 90 474.685 null] >> endobj 3243 0 obj << /D [3238 0 R /XYZ 90 474.685 null] >> endobj 2848 0 obj << /D [3238 0 R /XYZ 90 298.255 null] >> endobj 3244 0 obj << /D [3238 0 R /XYZ 90 283.685 null] >> endobj 2849 0 obj << /D [3238 0 R /XYZ 90 119.19 null] >> endobj 3237 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F46 2400 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3259 0 obj << /Length 1758 /Filter /FlateDecode >> stream xÚÕYmoÛ6þî_¡û  Ë7½eÀ€µ]Šm×%Á6 ) Vbv²äJrï×ï(’²¤(vtëöÅ¢¤ãñî¹»‡G{ {/fOÏfOŽiâ%( iè]z ö¢ €ï,óÎý…óC‚1öWÕ't5?¤öU.ÍèD^ÊjNb_)£Ãß¾éC¶®U±Ø­è:­[«.;K‡:}ÙB°ÿF¨"ßµJœÉÌÜ]–•dJ,вnTj½]W«²–5¨a~H#^0…<1¨½›ÃŠ¢KÙȪ>Ìßê&AŒ"¬C#P>Ç™@(â¥Bß>Þöñ¬³‡7@b]KãžÉr=Çì¤Ök«ž³Þa#FÃpô Ãưéi«®møäøÕ¶æ\g m££ÍIR»;%Œ’ä+wƒÌ¨ùþ?× :ÿϽ ùvÍàCSjmyé¶~ ʦ“|NXàpÇ:dîðc°¯mIzQã!b¬££'‹`D»$$ƒÝ:“PB¹+!YUnÁ%ÄD,ìRÕ]è:´û }t § Wö* ñ?pÚåÞÃ$(ü`fÝ} œhä#ûPbù¨ßÈ<é¶‘wòêzúá§“§n¹¾£.æ¹£-£ã™¨Y+a›”¸71&°“ÐþN2_†â¨‹Þ 4ž$ŒüÍme9,äãCÀÈTÈ8!Z™´l›oÑ8BuMu÷í`•‹B?ŒÙõì Fé”ÿ¢³ÖΩW@É úgÇ×Ûõn™O!D!Æf¡ÅãS: ‰÷@2Pi‹‘ãÚˆÑÁé¬Ceê>¹÷]Émq®°vuýýzi{º©„þ774ú7´e‡4A8$£íà>_^Š›ƒb³Ë>µM‰ÿmNñÁBÇ€¹,ÍÕë8F¼®·?ÜǸúf3g‘P¯š]&2Š0¨¿ËDè ¡-Þg"‡Œ=ÜÄ›ƒÍžèÆQ8Š®Ë÷^©ï.ÚöÝþ´»R@QØe‡“ï‚ûº,ªYëØM‹ ƒX«}|‹;Šþt"ʺSkKº`¦!d¬z0³Ð´.æMËÝp½ÅÃð¬ÏÃp;ä}Ps€ôâýîX‘ˆ ÎÈ£U7bgŠÈ€¨zo¿9ú(,Ezå$´ÃÛÚ¹\‰qHãÿ"Â%’{þáþ‚Q±Øþ$(,/d!+ÑU£º7np¬½ÍMh.qrDæŽbB­‹ZÖ9óû³Ó×/Ÿš1Gw»J{}^Þl²{ú7õ hñ endstream endobj 3258 0 obj << /Type /Page /Contents 3259 0 R /Resources 3257 0 R /MediaBox [0 0 595.276 841.89] /Parent 3206 0 R /Annots [ 3235 0 R 3236 0 R 3245 0 R 3246 0 R 3247 0 R 3248 0 R 3249 0 R 3250 0 R 3251 0 R 3252 0 R 3253 0 R 3254 0 R 3255 0 R 3256 0 R ] >> endobj 3235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.939 702.288 247.049 713.301] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [296.254 702.288 342.51 713.301] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 3245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 583.005 188.789 593.909] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.827 523.223 188.938 534.237] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.208 505.599 411.742 516.503] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.172 505.599 463.706 516.503] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.56 464.064 299.671 475.077] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.455 452.109 302.566 463.122] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [332.478 452.109 366.012 463.122] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [385.428 452.109 418.962 463.122] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 320.87 188.789 331.774] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 288.99 350.936 299.894] /Subtype /Link /A << /S /GoTo /D (structprjprm_30e78bb110dc7a8ad0303370ce20762c) >> >> endobj 3255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.19 288.99 477.351 299.894] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.805 211.584 280.264 222.488] /Subtype /Link /A << /S /GoTo /D (structprjprm_4f3c364f16d0b6498d7e11e6bb67239c) >> >> endobj 3260 0 obj << /D [3258 0 R /XYZ 90 757.935 null] >> endobj 3261 0 obj << /D [3258 0 R /XYZ 90 733.028 null] >> endobj 1406 0 obj << /D [3258 0 R /XYZ 90 574.038 null] >> endobj 3262 0 obj << /D [3258 0 R /XYZ 90 559.468 null] >> endobj 2850 0 obj << /D [3258 0 R /XYZ 90 280.024 null] >> endobj 3263 0 obj << /D [3258 0 R /XYZ 90 265.453 null] >> endobj 3257 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R /F8 1123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3276 0 obj << /Length 1540 /Filter /FlateDecode >> stream xÚíY[oÛ6~÷¯Ð€=Ø@ÌòN)´ÝR4è¶,¶bIQ¨2c«°eO’Û¤¿~G")K²|k;cúbQuøñœïÜ(ìM<ì½è=»é=¹  @RéÝÜ{ö”$HPâÝŒ½Û¾Dr0$ãþ2}¦ƒ!¸Ï´]ë{ˆß×I1¬0í+ðææ²÷óMïïu°GJ¹B!Å„Í{·o°7†ÿ/=ŒXà{ËYsS×™7êýÞÃ#n`Å5¬„HÌS”!,…|G©(—wïy·Cðñ9À#¸?ZE‘Î2Ôœƒ½!aHút·b…¼L÷? ¨è‡³xltaoWV5‹ûB“ ¿†Øg(ðH4«`ÍBj“òws~õKÕÜFb’ׄ3§¡£†°æ¦[–°ïKoH9’Â7¯\ë|ý$;o¿Ý°…@ˆ°°Zåa¾ÊŒ6ÒBNÒRTS"ØqQà@R}±5âä0cþºšÍìó‚©éÄRöºœYê/Óy[Fùd'9x€¹ ³L? ÝE¬eºx¯£<^$n4œkXöóöÍìZ¿%Ž©ÿ|‘®¹[^ó©Þä] Äì‹CIÌöXœJX´X¤ã8 sm©õQ;ØqS{gæß0sOÇq¯Y­¾{\ï±d@WGP @,²ÉÏ‹b¦ÓŸáxÖ¡ ;`ÒíàÇŽ-Œhå§Ä!7—±ÎCˆ¸·NÓÊ`@ýpâ6o·™é¼ÒƬ>?]ÔŽ-t¾ƒÅÏœt½[êÇ(oÍ[9œMkòJÛñGqD}!#Qݥ<â}F̸XãêúrD_¿}zýb´…B…koAÇ¥Ü+ãRFp).8cÌn÷¹œêè23·uÒmr˜s„©LX¿ÃLZ§¸Ã”vûññ‹|a >S@‡É¦PÙVžÚqåVÇ“–.gaÒŠ@ëØgÝr¬9­ÞTZ¡Ò9E>u¾-ußaLkqà 7‰cÝÉã­ £ 0é”QËç«Þ*|7óßZ áÛ2«ó½Ñ5—õy²gE0@½3]ƒcaå&_˜`ZȆ4€º‹4“æx/¸d9Ï0{î)h©8ûÒBˆÊ%Ê™N&ùtDÉ‘RêxˆÙ2?ËwÁcOù[áeyõx9|F‡W(p¯þ8œRùò«E2‰óÕ¸ð¦úa26ƒD¿òïÍD\“ä”a²Êìe ˜&HÀÀºxé¾Lš Ì<)ã \7â9üWçpÛŒE æ³'ovÛ‹(‚8kRþ»½Öz8{Ü㌾’-gtᩆt¯3‚ÖŽV–<»LU1`o=onïè0šnTæÉLÏu’·êÿ¢ *aÿ§ÍÜaî¡héÄ-·ú‚ŽŽ}ëèþÃ?yG÷u˜¼¿¯;;UcG¾õu§ïëT»¯ ?-«mk@ µŠÖ=ŸuÙv ­„aÖ‘ø⊶ªãRBP1jqˆE$“´ÙAZ¨›§‰F“U r&´Æ\->3LÕ5S%ܰkS” âWÚù¤“š¡Ù“ðS<_#«]ˆ=Ë"$ ʇâG¯Í`IJ†3pð€8±OÿºêZ[¡€Ñ=A@ ÒLe˜V»Ç°)ŽíÞhY‹óoai[gÖ³(—ë\˜åàéÕË.zC„f`ò±ýb?Ьq`ñšŽí# ûJÁ 1û´ƒa¾€mX fæ~Ça@Àb§<Š–H‘-Ñ–Å;\¾aà`XÚ®ü‘@ìäw!­“ßð`+¿%ZÓò è=äPDµè4mž[–-¾ÒQ”úq~úžmó;CQ9Hã]hÿï¸n%©ýiJú(€-øeÊ}5“(P@óÕLÀ^…uÝ:Ñéº q¸~qƒ‹ÂÄú¹‘æBð9'çB™;Š µÁ½˜ëvüçóÑ«—Ï̘#‚›ÏO‹‡Ç‰NÚ;ý¤Áú endstream endobj 3275 0 obj << /Type /Page /Contents 3276 0 R /Resources 3274 0 R /MediaBox [0 0 595.276 841.89] /Parent 3206 0 R /Annots [ 3264 0 R 3265 0 R 3266 0 R 3267 0 R 3268 0 R 3269 0 R 3270 0 R 3271 0 R 3272 0 R 3273 0 R ] >> endobj 3264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 632.435 188.789 643.339] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 585.94 350.936 596.844] /Subtype /Link /A << /S /GoTo /D (structprjprm_30e78bb110dc7a8ad0303370ce20762c) >> >> endobj 3266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.19 585.94 477.351 596.844] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.805 510.098 280.264 521.002] /Subtype /Link /A << /S /GoTo /D (structprjprm_4f3c364f16d0b6498d7e11e6bb67239c) >> >> endobj 3268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 287.785 188.789 298.689] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 241.29 350.936 252.194] /Subtype /Link /A << /S /GoTo /D (structprjprm_30e78bb110dc7a8ad0303370ce20762c) >> >> endobj 3270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.19 241.29 477.351 252.194] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 183.073 190.602 194.086] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3272 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 165.448 136.644 176.352] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 86.288 139.414 97.192] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3277 0 obj << /D [3275 0 R /XYZ 90 757.935 null] >> endobj 2851 0 obj << /D [3275 0 R /XYZ 90 578.299 null] >> endobj 3278 0 obj << /D [3275 0 R /XYZ 90 563.967 null] >> endobj 2852 0 obj << /D [3275 0 R /XYZ 90 233.649 null] >> endobj 3279 0 obj << /D [3275 0 R /XYZ 90 219.318 null] >> endobj 2853 0 obj << /D [3275 0 R /XYZ 252.409 168.601 null] >> endobj 3280 0 obj << /D [3275 0 R /XYZ 90 152.113 null] >> endobj 2854 0 obj << /D [3275 0 R /XYZ 255.179 89.441 null] >> endobj 3274 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F14 1078 0 R /F46 2400 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3295 0 obj << /Length 1459 /Filter /FlateDecode >> stream xÚÕYKsÛ6¾ëWð(ŒàýHONZ{âi;®¥™fêf:ŠLËôؤJÑ­í_ßÅC)AÏÆŠ}@‚ÀîâÛÝKœŒœœv> :ïN¨I 2’Êdpœ(I $\%—]‰dïˆ`Œ»“òÝôލÀÝ“ì.õ½‹ô:-{DwÓ|V˜v•é}œu~tþîØ'Ä­+RL$£ûÎåœ\Áó³#ftò¯›uŸpÊ ½Kúß:x­Œ”!,E-#âÈ9³¼ò² Ÿ'SúèûbÏ/Îúôó_ǧ}+#lpD’”û•Â'ð¶Ä-©FJS˜î¦ÙÕÜGœ0Lq›Žª)Œ(îæÃ*ëQÑý§GD7õ3¦“›´ÌFÃ;?Ey•ÁÄtê·ÒˆU°jnå'Ò˜ÅV|>‡É@{© KidMÑ%IDE°¨5¬ /êÇa RfÃ|yQÁÜiî çcò).¡ä»HØ4¢5ËýT7Áê“»aºÅµ7 «6Ñ %È H°mÀÔsšgÕÍðîÝð9»°=¤IZN'pÚY`{Ƹ›ÎæWg-ÅhfÈLêã?Î#" £´Hãú æ²"GÇGDD pJôÓÔy¢wÁr|ñâ´“\zmÊ[À{ g?×»]˜q]”Á›|s•NGe6±;ûÖ´¶uf·ãóO(¢#x£ˆÞôY‚v ˜Vs“N«òaÆ í¤¼(ãMûq«¼™3?‹ËÆ,…¸¢sÞÆ‚€ñÔâA€Q¥F”é¶uƒ¨‘`!|9X8ýR(lïa23ì¦# J/MÓ4cŠhE "ºh ~>›¡|OlŠŒªC@5¶ÙÿÂ6Õ 10h+To…í´:(¶[ùˆ¶é´•>ÓþÚ„>‰` &)IH’ƒ”ã5AÜ„Õ6ÉFlÄÙÆ ÎŽqÕqh}‡Î,ˆC×qhãWH›„ÛÉs„»Õb·/V"Ü ¦Èß½mB(D+ËÌ¡€Vøv‘D8ôÌI„n €@ÎO"ZKÎR“6Hì‘™øß13ÑXfÚ–N62DœN®ð^*iƒNRI–‘3šH€áz$éÆBìâáÛ!Am@Q·è¤uÄH~H:Ù’°‰¬¨6Ùðè±çâ#‘í:dAD°·šG8ŠœpLÁTœgî— F“OÀ„×çt|`rÙNÀlÑ…«aþêÉe°nõÍ‘Ëq^Üy6Z [®£µµÇ¿¾o„5ÞçNt`ÞØÎ<<Û­y£¨á³odÜ´x£¯ãI¦É2‚D£µÕFkÛ:‹ÛNˆÖ¶kOö«Ð‹ ]F¯ý`z5bsÔ­A/ݘ€”aËè š¾] ØŒ3døBÅb~¨% {%ôÃ{ˆ¯;'—CóÃvr±ä²c¹1|²Ã펪V¹Q[xôH·]q„ÇÍŠ#|³á²G‡é÷¨8ÚŠU³â¢®¯8jÃ[qlHؾ¬‚¨¾â¨Âe¬>»¬Â3_qT«+Ž"^Ë_SæT|oª˜(—®lÕx¾g¹œüF|OÆøžDBñ…«¢5 €z›×F÷ê¬>­ÂïŸb\'7Ð+í/ƒú¶28}!ÚÐàpXo¬\¨"èݹ\è?‰ H6iNFœµhŸ¯£}`Ù6_þ’NŠ_ÒATwI‡Ö[œ×åBûÌ´ñK:GržJb(†/W£XÊm`¼ùŽâ$ÆÿœJ…oãüOº¢ÎËó¿o\Z浓-þ-†K±±åÏâÙOb‰Œ‚Ãò?‰…ABÏ8Mó´c\W .ûˬsbmœ~õé‚ßsò^(?¢ØÖ] °sgÁà÷ýŸ?}ð}ÿCËö¾>ùöÇâñiœæ‹šþI™´ endstream endobj 3294 0 obj << /Type /Page /Contents 3295 0 R /Resources 3293 0 R /MediaBox [0 0 595.276 841.89] /Parent 3206 0 R /Annots [ 3281 0 R 3282 0 R 3283 0 R 3284 0 R 3285 0 R 3286 0 R 3287 0 R 3288 0 R 3289 0 R 3290 0 R 3291 0 R ] >> endobj 3281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 672.708 139.414 683.612] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.385 622.889 189.496 633.903] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 605.265 136.644 616.169] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3284 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 525.866 139.414 536.77] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 446.468 139.414 457.372] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.385 396.649 189.496 407.662] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 379.024 136.644 389.928] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 299.626 139.414 310.53] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 220.227 139.414 231.131] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.721 170.408 187.832 181.422] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3291 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 152.784 136.644 163.688] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3296 0 obj << /D [3294 0 R /XYZ 90 757.935 null] >> endobj 3297 0 obj << /D [3294 0 R /XYZ 90 733.028 null] >> endobj 2855 0 obj << /D [3294 0 R /XYZ 255.179 675.861 null] >> endobj 3298 0 obj << /D [3294 0 R /XYZ 90 659.134 null] >> endobj 2856 0 obj << /D [3294 0 R /XYZ 252.409 608.418 null] >> endobj 3299 0 obj << /D [3294 0 R /XYZ 90 591.691 null] >> endobj 2857 0 obj << /D [3294 0 R /XYZ 255.179 529.019 null] >> endobj 3300 0 obj << /D [3294 0 R /XYZ 90 512.292 null] >> endobj 2858 0 obj << /D [3294 0 R /XYZ 255.179 449.621 null] >> endobj 3301 0 obj << /D [3294 0 R /XYZ 90 432.894 null] >> endobj 2859 0 obj << /D [3294 0 R /XYZ 252.409 382.177 null] >> endobj 3302 0 obj << /D [3294 0 R /XYZ 90 365.45 null] >> endobj 2893 0 obj << /D [3294 0 R /XYZ 255.179 302.779 null] >> endobj 3303 0 obj << /D [3294 0 R /XYZ 90 286.052 null] >> endobj 2894 0 obj << /D [3294 0 R /XYZ 255.179 223.38 null] >> endobj 3304 0 obj << /D [3294 0 R /XYZ 90 206.653 null] >> endobj 2895 0 obj << /D [3294 0 R /XYZ 252.409 155.937 null] >> endobj 3305 0 obj << /D [3294 0 R /XYZ 90 139.21 null] >> endobj 3293 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F38 780 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3319 0 obj << /Length 1342 /Filter /FlateDecode >> stream xÚíYßoÛ6~÷_¡GûÁ,‹ìžÒl lEX±¬T[‰8’+)]’¿~G‘¶%›¶•´±`)úDÞ¿»ûHáà&ÀÁiçðóî„ê@#-© †×ÆA( ”ÃqpÕ•HöúcÜå·hÒëS»'É4¶½Ëø:Î{DuãtC ‡˜vî}žw~v¾v¬ƒRÍ+B2Œî:WŸq0†ñó#¦UðO%upÊ ƒÎïÜЯèHÂRXq\-hWÊoÜ’—§àªÒT Å_X`ø'kgw×Yn Šl3Ž‹QžÌÊ$Kí@vmÛrâ,?º8Cf¦ÿá Ï("š/܇8"Êù0IKûvQÞôÁö^—çúéï£ËÓÁ\E3 ‘¤ÎJ÷Š]²î*&Ä+±…•}Î4XžÝÆ£²°OiT&=*ºßzDtÁÎA“Ù$ΓQ4µ"£,ËÇ Æ…]JÕV"R ¥e})+DHMŠ!Š¥ “?õ2„.¥ž9b$¬MI<&*D3–™Õô8ÊAÉ$J×çàrFZ¨Éç2NÇG¿‚’?CÁº +M“Ô¶vŒÏgÓ(í˜Á•i#– œ0‚D>‚ÈÎKD&õ!. oÞ"R½ƒ>jºßKDÂ7°Gên©KDÕ¶8öc{¤o âZ4ã}÷;©¤Pð?{cW‹T¬ÆìÓì%W‹WÆ¿"¼rvªzsiäÝ·Á!gÙô1Íî’ùs;Dÿyññµ($¸‹ÿÐ=ãb¦Õ/vpÊаá-?ØÍ?&J¤Cð¬ýP' â ¬Ó8sHhc§Óë·yçÄ”•ø‹}¶!ø='ïEhŸ(&ÔÃÈÎ-þãxðëÙÛöˆmïË£mÎoâtÕÒh"b endstream endobj 3318 0 obj << /Type /Page /Contents 3319 0 R /Resources 3317 0 R /MediaBox [0 0 595.276 841.89] /Parent 3329 0 R /Annots [ 3292 0 R 3306 0 R 3307 0 R 3308 0 R 3309 0 R 3310 0 R 3311 0 R 3312 0 R 3313 0 R 3314 0 R 3315 0 R 3316 0 R ] >> endobj 3292 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 719.912 139.414 730.816] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 640.514 139.414 651.418] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.721 590.695 187.832 601.708] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3308 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 573.07 136.644 583.974] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3309 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 493.672 139.414 504.576] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3310 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 414.273 139.414 425.177] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3311 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.196 364.454 189.306 375.468] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 346.83 136.644 357.734] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3313 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 267.431 139.414 278.335] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 188.033 139.414 198.937] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3315 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.049 138.214 191.159 149.227] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3316 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 120.589 136.644 131.493] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3320 0 obj << /D [3318 0 R /XYZ 90 757.935 null] >> endobj 2896 0 obj << /D [3318 0 R /XYZ 255.179 723.065 null] >> endobj 3321 0 obj << /D [3318 0 R /XYZ 90 706.338 null] >> endobj 2897 0 obj << /D [3318 0 R /XYZ 255.179 643.667 null] >> endobj 3322 0 obj << /D [3318 0 R /XYZ 90 626.94 null] >> endobj 2898 0 obj << /D [3318 0 R /XYZ 252.409 576.223 null] >> endobj 3323 0 obj << /D [3318 0 R /XYZ 90 559.496 null] >> endobj 2899 0 obj << /D [3318 0 R /XYZ 255.179 496.825 null] >> endobj 3324 0 obj << /D [3318 0 R /XYZ 90 480.098 null] >> endobj 2900 0 obj << /D [3318 0 R /XYZ 255.179 417.426 null] >> endobj 3325 0 obj << /D [3318 0 R /XYZ 90 400.699 null] >> endobj 2901 0 obj << /D [3318 0 R /XYZ 252.409 349.983 null] >> endobj 3326 0 obj << /D [3318 0 R /XYZ 90 333.256 null] >> endobj 2902 0 obj << /D [3318 0 R /XYZ 255.179 270.584 null] >> endobj 3327 0 obj << /D [3318 0 R /XYZ 90 253.857 null] >> endobj 2903 0 obj << /D [3318 0 R /XYZ 255.179 191.186 null] >> endobj 3328 0 obj << /D [3318 0 R /XYZ 90 174.459 null] >> endobj 2904 0 obj << /D [3318 0 R /XYZ 252.409 123.742 null] >> endobj 3317 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F38 780 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3344 0 obj << /Length 1476 /Filter /FlateDecode >> stream xÚíY[Sã6~ϯðcò­î—íK¦íPÂL· ;obÀLp¼Nh ¿¾G–âØ‰r£egú$É–å£s¾óÏ2Žn"·>\´ÞQd$•ÑÅudp¤$A‚’èb]¶%’.Á·óâÝvºTàöQ:L\ï<¹NŠÑí$ëÃ%†¦mM:_.N[/ZßZÞƒ#R®+RLDýûÖå àúi„3:ú§œuqÊ F½Öï-¼ÖFÊ–¢²qDg†¦ÙÄ÷”gtìúWXà³óÓO´÷×Áùq†¥‘ð†.QHRî–òÀx'®½“Ä8Ì.gÙÅʺT³ö É‹Ñ]ÒŸŒÝø0.&É83·Œ®[ÎT¬¾Œ›CHmCZU¯zü v%U{º¼ˆÉºM$`7øÆˆÙœþhT Ò,óœ©iæÚÉ­§æí|wH;ó£Ñµ»û…ëA à6¬Élé§$K'·ñð]ü”Þ?Øž{4 §Ùè>ç{f½0­<óùì·Ð+2ŒmØp—ƒ¤fW‚ŒðñJG™ƒÃdäZðEÚ¡¢ýw‡ˆ¶Çô8¿MŠ´_Z úӖc zœïÑ+̤ê¦4W¢7l³±$*¡Ü%Ú A< ýÆ{IR&£ËÂâÆ§ãùq+º,·i ˆ¯íæºÌó3®G…óDìšA2îi>wf ëÔ[ïÁƒ³ˆä£ˆÞH[HÛ1}l¤m~ §­¨ÒÖ>²uÚrˆöóë¦ù=/F¦î™Z”»¢Í×ÖUx4ùö0ëÆN€ÅM¦UÞþx° Ùt d›•È.³~ç"¾þŽEȽµv¬¸'^¡a’”ËcÄ4Ä#Týµâ*Ì^µ#<®ƒÄm-·Äm-.n/xâ¶×l0쥰p4%±¬¸]¼\¥¸­¸Ý;Ûàÿ+Èí$» ²Q–•¥md­>„äŠäåTÕ%$ÕËfÔ%$ 7 †åË#a³„$sÖ/%$˜º^BjÃw‘º›˜ˆíbaSB‚©¥„¤ž‰Ê¸x ÝRB½’ !Ìvòy—¿!mÒ’ )žQq÷¬%—‘ŤÓâ9ZÒ EùšbR"¡ôŒ75@ )ó´d“‘9{¤Åt-fA “yÖœœ¿d |þ@DvÿüÙ³Hlր쮌þ‘tdý3¹†Bš'Œ0^'шܧJÈ(>aSËFhÇ¡ã¹ÙvËh@†.xMÍ姇.Ì^]PÇZ½tAÿ-C×ocäÚ%Õ׿µÞ i$DäÚúÏ5¼Y¿ !¨âšÿ`G‰Œ…jÊŽG‰þ‘”×… -ƒ7„ ®‚BÙÐý#^ËD]ZS× AŒöü3£f_“j¸“¶uØá• ´ÝWЮ ‚Ö4¨¦ÌޤðB¯àV÷ïú¡ÿ©rÂ×ú;7d|1/ûÓüZàF¹xM­gÿ,œÊzSƒ| ä›=7ìO‡i6¨BäI1Î-–:[f³ÊUŸ/Øz©BâáŸg¯q`Xmwñg±ÔÈ@>mù¯xöX‚]¸ÄÂÀÇâq’%PÅÀÃÙÃú×YçÈòuòÕ ¤k~ÏÉ{¡Üˆùû0ع³PüqØûåäƒësD°ë}õ2ûçÑãô&Éwú/°3µü endstream endobj 3343 0 obj << /Type /Page /Contents 3344 0 R /Resources 3342 0 R /MediaBox [0 0 595.276 841.89] /Parent 3329 0 R /Annots [ 3330 0 R 3331 0 R 3332 0 R 3333 0 R 3334 0 R 3335 0 R 3336 0 R 3337 0 R 3338 0 R 3339 0 R 3340 0 R ] >> endobj 3330 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 672.708 139.414 683.612] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3331 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 593.31 139.414 604.214] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3332 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.375 543.491 189.486 554.504] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3333 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 525.866 136.644 536.77] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 446.468 139.414 457.372] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3335 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 367.069 139.414 377.973] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3336 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.721 317.25 187.832 328.264] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3337 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 299.626 136.644 310.53] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3338 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 220.227 139.414 231.131] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3339 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 140.829 139.414 151.733] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3340 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 91.01 190.602 102.023] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3345 0 obj << /D [3343 0 R /XYZ 90 757.935 null] >> endobj 3346 0 obj << /D [3343 0 R /XYZ 90 733.028 null] >> endobj 2905 0 obj << /D [3343 0 R /XYZ 255.179 675.861 null] >> endobj 3347 0 obj << /D [3343 0 R /XYZ 90 659.134 null] >> endobj 2906 0 obj << /D [3343 0 R /XYZ 255.179 596.463 null] >> endobj 3348 0 obj << /D [3343 0 R /XYZ 90 579.736 null] >> endobj 2907 0 obj << /D [3343 0 R /XYZ 252.409 529.019 null] >> endobj 3349 0 obj << /D [3343 0 R /XYZ 90 512.292 null] >> endobj 2908 0 obj << /D [3343 0 R /XYZ 255.179 449.621 null] >> endobj 3350 0 obj << /D [3343 0 R /XYZ 90 432.894 null] >> endobj 2940 0 obj << /D [3343 0 R /XYZ 255.179 370.222 null] >> endobj 3351 0 obj << /D [3343 0 R /XYZ 90 353.495 null] >> endobj 2941 0 obj << /D [3343 0 R /XYZ 252.409 302.779 null] >> endobj 3352 0 obj << /D [3343 0 R /XYZ 90 286.052 null] >> endobj 2942 0 obj << /D [3343 0 R /XYZ 255.179 223.38 null] >> endobj 3353 0 obj << /D [3343 0 R /XYZ 90 206.653 null] >> endobj 2943 0 obj << /D [3343 0 R /XYZ 255.179 143.982 null] >> endobj 3354 0 obj << /D [3343 0 R /XYZ 90 127.255 null] >> endobj 3342 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F38 780 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3367 0 obj << /Length 1392 /Filter /FlateDecode >> stream xÚíYKS#7¾ûWÌÑ> H­÷æÄ’…Z*©"˜ªl ¶R^{S`{Ç&ŸÖH3ÙÂ`M¨Ê¤K=ýøºûÓ Í®2šµ>žµ~:›Yb¨ìì2³4ÓŠ ,;dçmETgQJÛ“â†\wö@Òöáð6÷³Óü2/:Ì´óQoqª)´ t¾ž·>µ¾·>‡f¬”+5Ñ\fý»ÖùWš ðþqF ·&û§\u— à8ÞfÝÖï-éHtN¨’^Çnž—ôO*®Â#OZÙy©%ª>ÍgTRüca­—V\Ž oPσ|Ú/†“Ùp<ò7Æ—~œ]Ë÷O>'iÁ4Ûã@˜µûˆ \G3¿»ÿ8y€©Ÿ;½NN¿@÷¯ýÓ£n¥¢Å4Q¬ [ü#›îC´\^.«­ÜhǤßäýÙÔ_ôŠY>öF^Žiz£.xSŒ_ÃXc'FËjÍÃÏh–ÒíÇeaL®DCK(.‰5µ°þx\ †£ªçUŽüè=Ž“Émo¦e4pì%"Àµ!ýÇÛáhP û½Û &/¦ôȰÃhûo÷/›Ì#S(%FÙJÞÁŸ'©‡jb9¬µW@-'ÄÅÌ{ ŠÆœ+CÌgct˰Ò©+Û€ÓÉu^™åÕðßr80]¤”Û÷‚râ{AÒ!fzÉ‘Hâ-e³  [lžÃÿæ°ŒrX%rx QwáK:‡EÃnËæ9,˜mÏ3XÀ2ÜŠÜåj((A,Õ@Al³ †PY[è€íT]Q$/»Åz¾´EFõÈ©êê‘ @‰ž2.¾¹©C–û-U°)ºŒ6qfÇeÉá;Y–´’e‰!®Ì«”%CÍrYª²œëLÜ‹6ê¸ðð†Ùª—²5ï!˜»t:+îûáµw^¢é?a kôDÊý"¡‹4æþ»Iö$âf q@Ÿ*CÌB‘ðš&Š6!Þuƒ|èÄý¤ò뺛#ÓôL#J «€fDºÓâžüû}5íy’Ø[ i‹ ¨jO|Ú ¢í“ˆtºàlûþ³k#Ú$½1‡œCë ‰‹”J@K˜˜Câõ* Íšô’¯ µ"\˜4‡DUK‰£÷¸¨k¶»WFÇ4‡Ä&iYÙ¸§B¶Û>G6Ê_ìy]l¾Ùú¹À å{a6Õ“¶e~Ëæ,@G Ò,3H\Ñdx¹†Abܨz}©×ò3Æc‰ª®fÆŠ]V£HØA¢ªžA†jTÆ%0HœzižfRÚ5 òYí–½JQZM þþŒãÞ›HA—’µW<“@Îý/dzSéU}w óa–×Þ..¸d«ACÕ8íŸþ(ì»úg ·dŒ‚% ¼5cô[¶`Œ†ÅŒÑ¬~ëÈËN¾ÃS>:gΡbƈª—ŒÑToñFÅMx눷ҌQ«Í"’q—Cr‡µ+0›'_4JMèœa½Ì K$Xb©|IQ‰à¤,ûÌ6,Ñ(Œßý»¥HdÕw(þÎí;{Í( Õw¶%‰~ËI+Mƒ$º«å󂉑`ÖDé  vt¢PM’èT]E)‘ W<²64Œ GVYY]\B’áÈ*íHix\€ÊDîý£ªØ£ª!²AE|Ú9Óÿaý±¢„þ1ÄZÒâ7Ld[!¸á'Ìêóªk èWÿéRZäòÁÈ£|”¨AÐ'èõ[59t)˜óÊŒ~ìƒÔþ (ƒ@´ÜÚÊâ?º¿~þèç‚0êgßýøËøáñ*-Zú/ä¿WV endstream endobj 3366 0 obj << /Type /Page /Contents 3367 0 R /Resources 3365 0 R /MediaBox [0 0 595.276 841.89] /Parent 3329 0 R /Annots [ 3341 0 R 3355 0 R 3356 0 R 3357 0 R 3358 0 R 3359 0 R 3360 0 R 3361 0 R 3362 0 R 3363 0 R 3364 0 R ] >> endobj 3341 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 719.912 136.644 730.816] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3355 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 640.514 139.414 651.418] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3356 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 561.115 139.414 572.019] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3357 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.375 511.296 189.486 522.31] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3358 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 493.672 136.644 504.576] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3359 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 414.273 139.414 425.177] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3360 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 334.875 139.414 345.778] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3361 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.375 285.056 189.486 296.443] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3362 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 267.431 136.644 278.335] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3363 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 188.033 139.414 198.937] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3364 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 108.634 139.414 119.538] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3368 0 obj << /D [3366 0 R /XYZ 90 757.935 null] >> endobj 2944 0 obj << /D [3366 0 R /XYZ 252.409 723.065 null] >> endobj 3369 0 obj << /D [3366 0 R /XYZ 90 706.338 null] >> endobj 2945 0 obj << /D [3366 0 R /XYZ 255.179 643.667 null] >> endobj 3370 0 obj << /D [3366 0 R /XYZ 90 626.94 null] >> endobj 2946 0 obj << /D [3366 0 R /XYZ 255.179 564.268 null] >> endobj 3371 0 obj << /D [3366 0 R /XYZ 90 547.541 null] >> endobj 2947 0 obj << /D [3366 0 R /XYZ 252.409 496.825 null] >> endobj 3372 0 obj << /D [3366 0 R /XYZ 90 480.098 null] >> endobj 2948 0 obj << /D [3366 0 R /XYZ 255.179 417.426 null] >> endobj 3373 0 obj << /D [3366 0 R /XYZ 90 400.699 null] >> endobj 2949 0 obj << /D [3366 0 R /XYZ 255.179 338.028 null] >> endobj 3374 0 obj << /D [3366 0 R /XYZ 90 321.301 null] >> endobj 2950 0 obj << /D [3366 0 R /XYZ 252.409 270.584 null] >> endobj 3375 0 obj << /D [3366 0 R /XYZ 90 253.857 null] >> endobj 2951 0 obj << /D [3366 0 R /XYZ 255.179 191.186 null] >> endobj 3376 0 obj << /D [3366 0 R /XYZ 90 174.459 null] >> endobj 2952 0 obj << /D [3366 0 R /XYZ 255.179 111.787 null] >> endobj 3365 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F38 780 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3391 0 obj << /Length 1425 /Filter /FlateDecode >> stream xÚÕYKoÛF¾ëWðH4Ù÷#=9idĈ×2ÐvPÐ2m+E•RZûßw–Kñ%J¢„XuN»$w‡³3ßÌ|’à! ÁiïÃUïÝÙÀ‚ULW÷%V$£ÁÕ]p*Pý%„„óô;<öL’p8™Æ~vßÇiŸš0žñ'š°Ððþ·«³Þ§«Þß=Šï!ÍäJ šË`üÔ»þF‚;¼àÖÿf«žÁ8ŽÓ`Ôû£G¶êÈ8% A€à¹¢“ÙÒ+÷§‹8ŸßIËôÇ8¿ÆÓÌÓ'§ç»!áT2Bã«3Ù7„p¿J¨Ê* B³Õ”å—Ô´¤ܬ#©[ ¨Fó é&¸@øÇ¹ª^ ©Ha´b)$“”w,üìÇÜQfxoñô!7ýåi/¸nº°nþ¤jšû$­HkžŠQ F¬:÷ÞGËÕ&§¢ßÇMeŸP@HaÕóO—m²5XΛkD‚!¦´|ò=/'É ¼qµ ¬¨wÇ;í‚¶,ŒÛbŸŠM²á.^ŒÓÉܽÙßHîý¸|Ì#ãäâ3´œ‘΀Ú:tE tŸÙ¢´èÅåÙW6úëäòtT ‰¬AÈmY·'`K•â\â9r.ܵ?Fé2^L¢™—Sõ •À(­ŠÉ£‡VßF¯zþ ¥tø².ŒJàJìpµVºzœ$éÝd¡z^õÉÌ«œYÜݘO£Y>uÞpÏÚL€JÓŽ`·y3‚¤Ìv }^Ê)ì_¾L¼æxÐIŸÉðŸ>•aìÁÍ…†2ÀÔb¥òóÇ8Œ£©KÕLkV7xÍ;¸P–k¸Ê½xCkw$Õ;N\CE©”àsn÷Tùÿ©²­È°çZ¤ŽØ×]‘ê¶tTAD”> }¨º „d÷*`„oU(;>4[ˆtpwŠoÉ;’ƒØKÍ]i‡ï£`-í8M]Úq¶Íà“9ƧwÏAËÝjK;Èh!òè•o³~*‹:š®ròÉž”¢”ª” GÛà~˜`5U¯Èý"•Šº} e[ØÂé›e£h¶Hfƒá4zZ,ãøn+‚ f †_­ŸÁv3˜ä¿Ô­Þ—›Z Ä3³¬³@ªë,¯·±@ʨã²@R&µ: DU3ˆ£g8Y±@œf,ÇV$ã‡-á:’ÝÆÍH¶Jv@2ßÉ…V­LÐ(ÉY~/*Ëêu£Yü3ÄìÁ)åXªÅ>~ìVýÍ!T+àc3ÁzÑ1íE§+¬%ÿV6¸)baa¯ yÇpE x¹ R±öø\S¹¥U.èTÝ’}0·‹Nœõ§eŸš†µìãTuÙ‡­È`æŸ}Ü4C>kÏ> }KÙ'wƒŒéz¼w+±hÉÄOHLÛI¢F`*y@…=2I¬WXÛŒ×ytP{ò5)¢.ü%Wµ%G(êÍòCT;ºM¦“ñ®OV’î‹“Wk jЄðmsdbX+3h±uØv¦…²ðÃRh@›–î2¶N ñz{kPqsÜot.ÛÓ²S5#…8zRˆ“)ÄiF qÜ_RÖ— |ÝŽMðumJÖ¾»û‚ÚòV6莒ø±½/ˆ„4ûj¯TŒWé ƒ þ’}A4ëÕeϾ`¾¥{˜ j+LP0²ÞÄÕ¦ ^îl Z¢D²ZWÚ]A÷/ñˆL°¦a½-H}ÊqðmAZ¤7ÍÚ‚Œlj º mï*œE5ç*ÝÚñoîê/®«ñþ/®D¾*sðŸÆ³8E{æ w•ç«ÉÐÁ:¾õÊ”¼ô½ÔþŠaêÎ9Š[»Š÷??޾|þàç¿ùýìöÅ¿'Ï/ñ¬yÒÿkM’y endstream endobj 3390 0 obj << /Type /Page /Contents 3391 0 R /Resources 3389 0 R /MediaBox [0 0 595.276 841.89] /Parent 3329 0 R /Annots [ 3377 0 R 3378 0 R 3379 0 R 3380 0 R 3381 0 R 3382 0 R 3383 0 R 3384 0 R 3385 0 R 3386 0 R 3387 0 R ] >> endobj 3377 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.693 702.288 192.803 713.301] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3378 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 684.664 136.644 695.567] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3379 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 605.265 139.414 616.169] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3380 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 525.866 139.414 536.77] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3381 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.962 476.047 185.072 487.061] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3382 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 458.423 136.644 469.327] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3383 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 379.024 139.414 389.928] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3384 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 299.626 139.414 310.53] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3385 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 249.807 190.602 260.82] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3386 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 232.182 136.644 243.086] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3387 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 152.784 139.414 163.688] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3392 0 obj << /D [3390 0 R /XYZ 90 757.935 null] >> endobj 3393 0 obj << /D [3390 0 R /XYZ 90 733.028 null] >> endobj 2953 0 obj << /D [3390 0 R /XYZ 252.409 687.817 null] >> endobj 3394 0 obj << /D [3390 0 R /XYZ 90 671.089 null] >> endobj 2954 0 obj << /D [3390 0 R /XYZ 255.179 608.418 null] >> endobj 3395 0 obj << /D [3390 0 R /XYZ 90 591.691 null] >> endobj 2955 0 obj << /D [3390 0 R /XYZ 255.179 529.019 null] >> endobj 3396 0 obj << /D [3390 0 R /XYZ 90 512.292 null] >> endobj 2956 0 obj << /D [3390 0 R /XYZ 252.409 461.576 null] >> endobj 3397 0 obj << /D [3390 0 R /XYZ 90 444.849 null] >> endobj 2990 0 obj << /D [3390 0 R /XYZ 255.179 382.177 null] >> endobj 3398 0 obj << /D [3390 0 R /XYZ 90 365.45 null] >> endobj 2991 0 obj << /D [3390 0 R /XYZ 255.179 302.779 null] >> endobj 3399 0 obj << /D [3390 0 R /XYZ 90 286.052 null] >> endobj 2992 0 obj << /D [3390 0 R /XYZ 252.409 235.336 null] >> endobj 3400 0 obj << /D [3390 0 R /XYZ 90 218.608 null] >> endobj 2993 0 obj << /D [3390 0 R /XYZ 255.179 155.937 null] >> endobj 3401 0 obj << /D [3390 0 R /XYZ 90 139.21 null] >> endobj 3389 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F38 780 0 R /F8 1123 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3415 0 obj << /Length 1336 /Filter /FlateDecode >> stream xÚÕYÝSã6Ï_áGçU«o]Ÿ8Z(Ì1GIfz3pÓÉ%ø&Äi’ëÁß•¥$¶QBÂ>0’Œ´Þß®~ÞÐä&¡ÉIë}·õË1³‰%V1•t‡‰¥‰V@$ƒ¤;H®RETû(¥édú•ܶ˜¤éq>Êüì2fÓ6˜4÷ñ§š²ÔˆöçîYë÷nëŸà{h¥\©‰æ2éßµ®>Ód€ÏÏJ¸5É÷r×]"Çq”tZ¶hMGÚБqB•ô:v²¬|¡Óô&¼òò¤•\•Z¢ê3vM%Å?{½ô°cXL½A=? ²YšOæy1öŠ¡ç·ÁòËSâ$5üG“ÎX±tèÍàÃ|<÷§ïŠÑ, s§×l>ýÖkÔv2½ó²ATdƒÂ¥óh)ûšRîw UÙ¥‰Ðl±eE” n¶”ã}’€¦Dë&¸!x7¨ê¥TÃÀp“ªJñÞ-mÀ3?û6Y8ö©£›¡©º¦¦ˆU ±Pè¼¾gù [yÙâ¦rHRBÍÒ]ç?Äkb9kº«á I 5+·_³¾CñžeŒ…añž;à6›ï·²†[Áí=›­¼<é,aDëV†#üXbŒyŒí.œ¹µHzÓyÖ†t–÷Æ^T5ˆUÕ¼*)dT6qbô÷¿¢eJ§…$\‰'¢­ˆEW…=ý¢˜òqožÍ¼öùØk]:Ý=˜Œzã0uqcÁ`Ð%A°;±ÁøO@0FœÛÇö/ŸÞ$´2o3™þÛ™fÜ\¢¤+@¬ šMn³iÞïzär£06;ÅïšrBxM‹GÌ×D†LŠÿç¸M¦"È_ñ†±†Ý×2µÃ>Å3µRéñÈö™*ÒUž `Mx”;*Hp[6"ÚlÿPÀY!ÐÝi^VxÉ‘KŽÞgÉ©iX+9NUWrœwKô”qñ%Ç=sÈrb%)CRÁëÉû w§]{wjt#ãϸ:÷LùêW§l&d/Ÿ?ƒò E¸~AƧ$ÊÔ4Ô$1F¾YÆ÷Gïî¿F¸Nóy1nD¯b–ùtxÚ}ð2n‘Rï~›ì›÷ÕoïÖ¼O.Q´†÷ biä»l÷¹õ† l)±öY%ÑÖD+°SÕU`7–w“PÝÔEÃqÒ‡¹¹"“»“ëAÌÔÏA1#¥I…ãäO*ÅÈŸÜíÆ×?LþÄÛ%õ»FÇîšmÉ_¥èÇÉßštBWÉ®‘?|V%¸|‚ü)Â,ì †pfkäUÝDþaÆî³ôÔ4¬“?Tµ$8zòçâÈNKò'Ì:òG=ä}™k”ÿPÿÄJÔžq¾*4ͼì“ç´ý(gù’$Ð. ;¨© ùÁ›å€ýbœ÷ƒC³élâPÔêjM7ÎhL²Ue9úxñ2Pf¿¦Õÿ­h#PÞµŽD eˆ6,Ò ¤¦Þ Äõ&F(ˆ€}·‹·QÕ² ˆ£oâdÑÄiÙ¤fmP*h@ºƒ´ûÇ:H["ùˆ~º5ÈWß}µÖ 3¯L¯m„&'(s{vÀño¤7È#ÞPkp)©ù[›2Ä¢‰[þÔ¶øP¹“ ?±IÄŽ ™{’³)hô z/&Ç.ÄÙ¿P~úNÀ;ÇMÝŠQ`¡š»½ ‹ÿ:ê|8}ïç‚õ³/~ü­¸¸ÉÆMKÿ¦ÿ endstream endobj 3414 0 obj << /Type /Page /Contents 3415 0 R /Resources 3413 0 R /MediaBox [0 0 595.276 841.89] /Parent 3329 0 R /Annots [ 3388 0 R 3402 0 R 3403 0 R 3404 0 R 3405 0 R 3406 0 R 3407 0 R 3408 0 R 3409 0 R 3410 0 R 3411 0 R 3412 0 R ] >> endobj 3388 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 719.912 139.414 730.816] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3402 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.597 670.093 191.707 681.107] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3403 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 652.469 136.644 663.373] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3404 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 573.07 139.414 583.974] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3405 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 493.672 139.414 504.576] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3406 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.616 443.853 186.726 454.866] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3407 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 426.228 136.644 437.132] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3408 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 346.83 139.414 357.734] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3409 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 267.431 139.414 278.335] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3410 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 217.612 190.602 228.626] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3411 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 199.988 136.644 210.892] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3412 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 120.589 139.414 131.493] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3416 0 obj << /D [3414 0 R /XYZ 90 757.935 null] >> endobj 2994 0 obj << /D [3414 0 R /XYZ 255.179 723.065 null] >> endobj 3417 0 obj << /D [3414 0 R /XYZ 90 706.338 null] >> endobj 2995 0 obj << /D [3414 0 R /XYZ 252.409 655.622 null] >> endobj 3418 0 obj << /D [3414 0 R /XYZ 90 638.895 null] >> endobj 2996 0 obj << /D [3414 0 R /XYZ 255.179 576.223 null] >> endobj 3419 0 obj << /D [3414 0 R /XYZ 90 559.496 null] >> endobj 2997 0 obj << /D [3414 0 R /XYZ 255.179 496.825 null] >> endobj 3420 0 obj << /D [3414 0 R /XYZ 90 480.098 null] >> endobj 2998 0 obj << /D [3414 0 R /XYZ 252.409 429.381 null] >> endobj 3421 0 obj << /D [3414 0 R /XYZ 90 412.654 null] >> endobj 2999 0 obj << /D [3414 0 R /XYZ 255.179 349.983 null] >> endobj 3422 0 obj << /D [3414 0 R /XYZ 90 333.256 null] >> endobj 3000 0 obj << /D [3414 0 R /XYZ 255.179 270.584 null] >> endobj 3423 0 obj << /D [3414 0 R /XYZ 90 253.857 null] >> endobj 3001 0 obj << /D [3414 0 R /XYZ 252.409 203.141 null] >> endobj 3424 0 obj << /D [3414 0 R /XYZ 90 186.414 null] >> endobj 3002 0 obj << /D [3414 0 R /XYZ 255.179 123.742 null] >> endobj 3413 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R /F38 780 0 R /F8 1123 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3439 0 obj << /Length 1365 /Filter /FlateDecode >> stream xÚíYMsÛ6½ëWð(„bñÍä”8±'žvìZžifœLG‘h››THºµÿ}%’¨­ÄmO¡%ð°x»ûÑà* ÁQïýyï—C! SÁùeÒ@+ ’Ap> .úЍÁ(¥ýYvC®C&iÿ0¾\ï,ºŒ²˜~”LpˆSMYßÈÁ×óãÞÇóÞ÷à:4€r^©‰æ2˜Üõ.¾Ò`ŠãÇ%<4ÁߥÕ] Çö6õ~ïѵ'TÉF"ˆ¢Ð8)¸I:Ëك롒žžØç?ßð,H\aš(&ÜTÕ+ø ®Ik2C´ah^šÙÙÊ)†LpôLzMŠÜ=%ã"0Ùÿk²oÝ$D?Ÿ]GY<ß:“IšfÓ £Ü-e+TÐM¥œ@Ê£6\½ÅÝ+]Æ|sº1%x¶¨ã¨lŠÔA=gˆ2'«“JJövÀùP|ô#T|„M'–PãĵÅuåõÙí8‰ÜXzéÚq5k“NHžPÔó&ñ¤äÆPPJ ¢PVl›EY>ÃãŽ@í!Ó~TSÌMÏ[nâD‹ꃓSMBÎ6ì^CùMŹ8MˆÃª5&¬Ø\AEQ‰.³«*ÏŽzÁE cé¾`³³uaWY\¦™ÛÝØ5Ó(ŸdñÌ.ìJÏb뼎w§Ÿˆg‹hœE+fa5f£<*j‡æEv?©ží,»«H&šî!Öþ£ÜY Õ°BiVûïÆKtÞJœ S•A®›¶w+¨ž\!‰“+pøFîz÷³¹c7Qµéå£iº¦qLž]1 `–^ZGßïËœd_ti|¼–ËZ49xpò±‹Ë| .›N.3! hÓNÍ[‘9*öJævb2?°¼U€>³Ñ†T¾â!)µJ*Î%î£.Aœ«uI;”„q±EÒÛ&m±á¨5a ¼IÛB·IÛB.=nª¤mÇìiØ!?§±úP¾Äik]qÚNPsÚþÐÅi›€gà4²@z8íÇzZR›kW4l—”É`£»!J*­“ À±¾ïtªÛI³aË­)«à®7»"¤ý,DÜWˆ¶‚à±Ë$4Å#®´Êh36‹GIõ\ó–xD¨ëÅ#×b¿â±°-jœ´Ø ñˆ]Ç,èXª¶ÖŽ»Ö[ôxñz«9 {B¹Ý³vl—[±²Ó'hGû#ä3iGåÓŽ!á‚/—ùi‡vÄøU¯D:ÆÓ8/ÆI±^2B…ª)üá¥$cH$‡'|ÿìY2¶ËŽôpxkɸ(;ÓÉØqgÁ¶%#,Rõ³œO5 ü¸äûÍÖ¡êP@jDÔN5âÀ\5‚;Ûú³5º„²eÕKt¶SwÑ9Äla¶ 3Û¸AáûšwhšjQ«ÿŠX?¯XlWå«<;ß4Nÿ¿i|î›Ægûhý)n·-±’á‹—XüPõÚ.õj¨¦O»`TF¿ì£6j¹°§"‘RöTbš×é¾kkôõ|´ƒÇ%œ5O^榜)Šj^Ûí¢ñ0y÷ÛÅ´S*2滲æ¬%íóºÛE„Íõ~u‹xÍDPËD­ó8¯¿êq¬< l»5­)4'´}k•Ð8ÚMèf^>yz^n$¦V,÷¶ÐŠŒHÁþµbqnËÿ+cê q¾-ÿVžÿŒËý,]æ);Š’(CoL« ­‚÷·yçÐú3úæ”k€¾ðFj÷Ä(°*kZÛyZøã`ôë§÷®/P×ûöèÚéÃãU”,ïôì$¸x endstream endobj 3438 0 obj << /Type /Page /Contents 3439 0 R /Resources 3437 0 R /MediaBox [0 0 595.276 841.89] /Parent 3329 0 R /Annots [ 3425 0 R 3426 0 R 3427 0 R 3428 0 R 3429 0 R 3430 0 R 3431 0 R 3432 0 R 3433 0 R 3434 0 R 3435 0 R ] >> endobj 3425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 672.708 139.414 683.612] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.375 622.889 189.486 633.903] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 605.265 136.644 616.169] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3428 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 525.866 139.414 536.77] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3429 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 446.468 139.414 457.372] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3430 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 396.649 190.602 407.662] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3431 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 379.024 136.644 389.928] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3432 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 299.626 139.414 310.53] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3433 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 220.227 139.414 231.131] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.933 170.408 190.044 181.422] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 152.784 136.644 163.688] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3440 0 obj << /D [3438 0 R /XYZ 90 757.935 null] >> endobj 3441 0 obj << /D [3438 0 R /XYZ 90 733.028 null] >> endobj 3003 0 obj << /D [3438 0 R /XYZ 255.179 675.861 null] >> endobj 3442 0 obj << /D [3438 0 R /XYZ 90 659.134 null] >> endobj 3004 0 obj << /D [3438 0 R /XYZ 252.409 608.418 null] >> endobj 3443 0 obj << /D [3438 0 R /XYZ 90 591.691 null] >> endobj 3005 0 obj << /D [3438 0 R /XYZ 255.179 529.019 null] >> endobj 3444 0 obj << /D [3438 0 R /XYZ 90 512.292 null] >> endobj 3006 0 obj << /D [3438 0 R /XYZ 255.179 449.621 null] >> endobj 3445 0 obj << /D [3438 0 R /XYZ 90 432.894 null] >> endobj 3037 0 obj << /D [3438 0 R /XYZ 252.409 382.177 null] >> endobj 3446 0 obj << /D [3438 0 R /XYZ 90 365.45 null] >> endobj 3038 0 obj << /D [3438 0 R /XYZ 255.179 302.779 null] >> endobj 3447 0 obj << /D [3438 0 R /XYZ 90 286.052 null] >> endobj 3039 0 obj << /D [3438 0 R /XYZ 255.179 223.38 null] >> endobj 3448 0 obj << /D [3438 0 R /XYZ 90 206.653 null] >> endobj 3040 0 obj << /D [3438 0 R /XYZ 252.409 155.937 null] >> endobj 3449 0 obj << /D [3438 0 R /XYZ 90 139.21 null] >> endobj 3437 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F38 780 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3463 0 obj << /Length 1342 /Filter /FlateDecode >> stream xÚÕYKS#7¾ûWÌÑ>XÑû±9-$PK%`We«ÈVÊ  3ÎxØÀ¿Ok$Ï ù ^öà’4[_wÒàè*ÂÑá`o:øé€šÈ #©Œ¦—‘Á‘’ J¢éEt6”HŽÆc<œ7èz4¦ÒÛÄõN“ˤ=L²1¬0j9ú2=ü:ü; °ŽH5¯PH1Åwƒ³/8º€çGFÌèè¿Jê.â”A{MpGGÜÓ‘2„¥p:N’¤ZЭT\ù%OÑY¥%¨þ@cáG¼¬›ÝK\æ…3hæš‹dé¼LóÌ=È/][^{Ë?ž|Bv¦žÿp4fÃk÷!ޤñ>L³Ò½çù‚>¸¾ÕëäôhB?ÿóñôp²TÑNE’Ô[é_qK¶ÝA5¢”ƒx%V[9¦\åùM— 7Êfe:¢bøuDÄ0qÏóë¤HãÙ­Â*ÅE ‚ÉÂ-¥[+!£¤½”"¤%ÅV¢‘aòg°^*èRš1¢ZS’€‰°,«§,s§êþ¬-ÓYötR°ÂÛèY»íÁ+ùÖPòçhØvb¥jš¹Ö¡ÇîËí,óÝ YÐÎh"„#Óx'γ4®°1æ#-@„ #­¯alƒéi¬—2p7È)ª5’Ry(óí°¾Ó€í€U¸°çy¶HÊÆ¡‹²¸ý´wa¼ƒÐiá3'ÅeKJ!®hã¿› löªÎàTŒ¸0]ïzU‰„” $ °ÞX¸Þý|éØM[äîoMÛ5­m XE "ºŽ¬½<Ë’µ…2¬6`ïø·,Å ¦ºéw+Ì&å÷+2Š0 e¯Sd>ÓÉÚ"ã_ `Ç môSìp&ÁŽ¦ÌØñšÄl Vq±ËÄl‹c0/[Mm^¶måpÛñy™3——í£0r%L+zȵҫ ûcÈ+ öªI( r½¹k{u¾5ãQps§`´‹¿c%«‹¿–°-l÷µ¿ƒ¡ÃÿÌ<¿ªìšv« U•mi`+»‡iàŠ¥ÀÈ[4³§4$ÚH€áÈ6f÷P€´ÝQEAÕ5Ù†Ä Ýe¶éhØ¥ jEazì¾xÝ Yð_˜Bì ÒM7.ª ¬ì¡Õ«rxXo‘‚è·O…°Ð/¨ß•ï±~dÎãü%|wËÛ«ó=i㬛¼ªŒ ‘x¿tožß>ºÍ:ÊǡВڈ“ý7:¥P˜Caò‚cÊŽ)_¶<Û­)_Ÿ”O#¥éSü0n:”ÏŽ×Q>$ÓÏ)›’ðfŽÄD8 [Um¶måqÛñIØvínØv|qSMZðµo¬‚¯BÜ·€/Ýx¿  ñ¾Ê”ܵaÞÇáz¼?¯Øëoæ}âGá}"T]žÉûü+Û‡)'¦Åû8ÅOxŸ•h!Á×ó>{e„Õî¡ RÐ6ﳪ®»þcÕEóNO™- »ÇLâRŽÝwÌ$uʱÝê˜IÃs̰ Ú^ð¾«Â „ĈîzOö²\Ä/ {àcÓïëÓ= %Gv½ëU $†(£ïï5×ö³ì*ÉÊtYtú5èþ|ýåŸ=aU{{:Ù#*¨Ä3ùŽnÿê™ú_Ô¤®ð·åµåÇ>­Ϻi !<²“,) k]x}¼^¿/;¶x$çn ]CðN>åF’G†•]Zü×þä·O{®ÏÁþòãѵ¿ä€Œ¾¥ÿÓuø´ endstream endobj 3462 0 obj << /Type /Page /Contents 3463 0 R /Resources 3461 0 R /MediaBox [0 0 595.276 841.89] /Parent 3473 0 R /Annots [ 3436 0 R 3450 0 R 3451 0 R 3452 0 R 3453 0 R 3454 0 R 3455 0 R 3456 0 R 3457 0 R 3458 0 R 3459 0 R 3460 0 R ] >> endobj 3436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 719.912 139.414 730.816] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3450 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 640.514 139.414 651.418] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3451 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.607 590.695 191.717 601.708] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3452 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 573.07 136.644 583.974] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3453 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 493.672 139.414 504.576] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3454 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 414.273 139.414 425.177] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3455 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 364.454 190.602 375.468] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3456 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 346.83 136.644 357.734] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3457 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 267.431 139.414 278.335] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3458 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 188.033 139.414 198.937] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3459 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.163 138.214 187.274 149.227] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3460 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 120.589 136.644 131.493] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3464 0 obj << /D [3462 0 R /XYZ 90 757.935 null] >> endobj 3041 0 obj << /D [3462 0 R /XYZ 255.179 723.065 null] >> endobj 3465 0 obj << /D [3462 0 R /XYZ 90 706.338 null] >> endobj 3042 0 obj << /D [3462 0 R /XYZ 255.179 643.667 null] >> endobj 3466 0 obj << /D [3462 0 R /XYZ 90 626.94 null] >> endobj 3043 0 obj << /D [3462 0 R /XYZ 252.409 576.223 null] >> endobj 3467 0 obj << /D [3462 0 R /XYZ 90 559.496 null] >> endobj 3044 0 obj << /D [3462 0 R /XYZ 255.179 496.825 null] >> endobj 3468 0 obj << /D [3462 0 R /XYZ 90 480.098 null] >> endobj 3045 0 obj << /D [3462 0 R /XYZ 255.179 417.426 null] >> endobj 3469 0 obj << /D [3462 0 R /XYZ 90 400.699 null] >> endobj 3046 0 obj << /D [3462 0 R /XYZ 252.409 349.983 null] >> endobj 3470 0 obj << /D [3462 0 R /XYZ 90 333.256 null] >> endobj 3047 0 obj << /D [3462 0 R /XYZ 255.179 270.584 null] >> endobj 3471 0 obj << /D [3462 0 R /XYZ 90 253.857 null] >> endobj 3048 0 obj << /D [3462 0 R /XYZ 255.179 191.186 null] >> endobj 3472 0 obj << /D [3462 0 R /XYZ 90 174.459 null] >> endobj 3049 0 obj << /D [3462 0 R /XYZ 252.409 123.742 null] >> endobj 3461 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F38 780 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3488 0 obj << /Length 1430 /Filter /FlateDecode >> stream xÚíY[Sã6~ϯðcòU÷Ëö (°»³ÉL™aw:!1`&8Á ÛÐ_ßcK¾(عÂvÚ'YŠ"óï|’qpàà´uØoýtBM`‘Tý›Àà@I‚%A\µ%’.Á·§É=ºët©Àí“hÚ§‹ð&L:D·ÃxC +LÛZu¾õ?·Žû­Ç÷à€dë …Áð¡uõ #ÿ`ÄŒþÌf=œ2hÇA¯uÞÂ+m¤ a) GJ9C£xn›Ï† :³Ï_±ÀgŸ/iÓtIj$¼¡K’”Û¥Ü_àx'®¼“ ćéÙ´tµl‰.׺= §Éä>Îg¶4Hæá,Äv]5Ý eTu;‡Ê$†´ùœÅϰ-©ÚÏ/#1É*‹‘Ã5ø¼xáp2IFQ<ó¬©QlÛù]h¦ãAì'7¶¸U«! Ô #nÝù ¾ ãy4ۿ̦wa óîðéÚ­Yî˜y;!Sì¹ß;ª{§B†Ñ5ÛírXJj a%ȇŸh;dLl žˆ:T´¿wˆh;HWlO»U—½Œ€äq¾A<+s˜t!ýŠ)­*Ñk¶é-‰2$w‰6H‡g·ñ^f¹h“0¹uÙxqÚ ®²íAVà <Û¹6ñÜŒ›Ib=1°Í(œ “hZ:3ÅIæÔ;çÁƒ³O¨&~jŒB˜¹—µº&kgtáem^Ög­(²6ýËYËY»’³Ð[FDÕC1LY‹läþ‘ ÕeN¬©+HpDÉ~ ¨ä ŸÀÐŒ µü>ÏùÆ2þ¶Ž Ò`¤¤ñÓ¼JCu©œÑPŽ«Z¢+½ ­Û´@ë”ì“g*ƒß‰ñKÏ&© (ßkªúÖ,§êò.œ—.Í“§¡ëƒµÓäÁ‹WýÇ5´â@Ìì,.+³⊖¼¯ ç©å@)X¡Ô÷®3µ†"8bL¿¤ˆ ?áÜɇ§iîØu!r›^MÕ5•0ÕUV‚ˆ.Hâè·ÃãÝÀl`÷¦póÑ[a™ñ!·/;àÜ÷+;×`yc±( L5ˆE‰„¬ƒ”ñ´bÚ_¥)2i‹W£jðŒ`µ\šŶu/´b:fƒaê ï–eÂçˆ6>¢Mh½Ñ)Õ¿ ¢ËR]ц ™¦Hâ%ùj‚Î-¢ÜÃ&AÝL&¨]#‡d dû2´oÅè•!MêÊÐ¦Š±RêcCêUŒ¼/3ªH€îj$€ÓïqtÊ<Á˜šº‚†8Y±yMâÛXèÓ˜šÑqGÖ,.ކà1i8²†÷ «MxÚFJ?á·­¶i”úÍ«­ÁY0¶/¶{Ž~±¥Ëû¸›p4ˆ0óJÂQÖ G8«0å{÷±Q86œ-áøø4%Ñò&Œ£¿ÂÑŽG"ÎàHT8ôü­€Í ;¹Ø¡í[FúµˆÕ {Û;ÇÇF “T]1bÔבŒ¬Ñ‘Ä»7[[hþ9Më LÏL¶‡œÀa,‹ 5¸1fÀáŸU€Ã‚àðC#À)¥:=ÿÿêñ¿rõ¨y]YÚòêñ±QH6$/§U%Éiª$; þí#õïÐé:1)!r˜¾Çí#aÄ»}¤+Ť Û'yú÷ÔŠÉ´µ÷´üþA­˜LÛ†ûGæçúÞk.Ý æšækH MØ¿ìR‹å´½›.vP“‚zȪI…AÑ,]ò:S·¨õ?†šüx|ðå,Z¬„-WH|ññìò-„b±ŸåË Ý °Õ†ß–óoÊphS°ûMY@ .N§a 9<Ï38î¯ùÃIÊÖáµíHÛü“BÙÅ„:?§ss_ÿ~ÔûòéÐ>sD°}º~¶í/“Åóm/ïôoÄÂM endstream endobj 3487 0 obj << /Type /Page /Contents 3488 0 R /Resources 3486 0 R /MediaBox [0 0 595.276 841.89] /Parent 3473 0 R /Annots [ 3474 0 R 3475 0 R 3476 0 R 3477 0 R 3478 0 R 3479 0 R 3480 0 R 3481 0 R 3482 0 R 3483 0 R 3484 0 R ] >> endobj 3474 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 672.708 139.414 683.612] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3475 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 593.31 139.414 604.214] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3476 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.269 543.491 188.38 554.504] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3477 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 525.866 136.644 536.77] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3478 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 446.468 139.414 457.372] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3479 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 367.069 139.414 377.973] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3480 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.385 317.25 189.496 328.264] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3481 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 299.626 136.644 310.53] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3482 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 220.227 139.414 231.131] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3483 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 140.829 139.414 151.733] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3484 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.607 91.01 191.717 102.023] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3489 0 obj << /D [3487 0 R /XYZ 90 757.935 null] >> endobj 3490 0 obj << /D [3487 0 R /XYZ 90 733.028 null] >> endobj 3050 0 obj << /D [3487 0 R /XYZ 255.179 675.861 null] >> endobj 3491 0 obj << /D [3487 0 R /XYZ 90 659.134 null] >> endobj 3051 0 obj << /D [3487 0 R /XYZ 255.179 596.463 null] >> endobj 3492 0 obj << /D [3487 0 R /XYZ 90 579.736 null] >> endobj 3052 0 obj << /D [3487 0 R /XYZ 252.409 529.019 null] >> endobj 3493 0 obj << /D [3487 0 R /XYZ 90 512.292 null] >> endobj 3078 0 obj << /D [3487 0 R /XYZ 255.179 449.621 null] >> endobj 3494 0 obj << /D [3487 0 R /XYZ 90 432.894 null] >> endobj 3079 0 obj << /D [3487 0 R /XYZ 255.179 370.222 null] >> endobj 3495 0 obj << /D [3487 0 R /XYZ 90 353.495 null] >> endobj 3080 0 obj << /D [3487 0 R /XYZ 252.409 302.779 null] >> endobj 3496 0 obj << /D [3487 0 R /XYZ 90 286.052 null] >> endobj 3081 0 obj << /D [3487 0 R /XYZ 255.179 223.38 null] >> endobj 3497 0 obj << /D [3487 0 R /XYZ 90 206.653 null] >> endobj 3082 0 obj << /D [3487 0 R /XYZ 255.179 143.982 null] >> endobj 3498 0 obj << /D [3487 0 R /XYZ 90 127.255 null] >> endobj 3486 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F38 780 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3511 0 obj << /Length 1130 /Filter /FlateDecode >> stream xÚÍXQoâ8~çWä1‘®^Û±¤÷ÔRÚ¥âÚ.нîµÕ* ²‚„u`öן;!ЈRQ]û€ì„Éx¾o¾™Œ­‘­‹Æi¿ñéV†™ÕZ´<†ÅÈê¬{›æ!¡=?ÀØ9ÂÚçñ„ë]—¹poó$’·\èAlû¾óØ¿l´úŸ $ÏÊýRx.µ¢iãþZyÿÒ‚À |ëßÜjjìÊubõ_p#F¸#vdTÇØãqsWçÕû ¨L¼±1Äç Êq¤z•cSû—ƒ¨ WJ†à*Ž@@M³٘‹8 'Z&U‚žñí3™÷5É{€.3ù{€×§y/ V.KÄ@ƒAPþïF½dÿ•òþ_k”nÔ¨WS£^nÔhßÕ×()kT=²„ìu…„·å‘[T” .w*1(ô÷yü«9ðʲSbW¡îè7ÔÔc¯‰ó¥~C^áF¿Q¡ª~£«'Ï‹î7j«”¥þ«ë7ò¥‡KÙfñ–}§PO]ßñ€ï¿AÛ¡À_'|ÝvL9zHêm¾Közcâå{U#5¥øÕ $ç"ŸŠyã,SžÌÃüSX5Ï ò8@ÆA”&™©æh #0RmœRa¤Ò¡[¢ÈZ8’šï\ˆi6º×r|¬IÉQ€òî¹ÑZB¤My–…#n&U-ùÝp·XË$Ö…±û¥C8Y˜¿Ÿ/DÂúj(Ò©Þñ°ð2\$k)ìÁ;Àω+ûaóúªÝ¬ÁºÕÛ™ŸX2‰¹[JEz#Ǭiö‡º‡&gbz|ÉšUÍq”ŠÕ–2í½º»~m]õÛ×W–²íŠÙ!дóD.^èïMÙEÁ·Nûê¬ÛnŠ^E¹šÄÉ 2ɼ7pºøÍuG5o‡‹}–NVHðlè^ëöìú­r>Ëøb~ÈÌ{;Høâ hß:LVüYóö´u?á Z<ñÛßûŸÖU»ÿùÀ”ÿæI<‡“OáïxºP»<Ø<ŸÐÚwá.ßÒãÞõ›ƒ.ol\a>䈾緕⻓±Iõ7J æ žp!ƒ1³E1ÓýUlÎÕ$ŸôÓ ‚ÇSO_aˆ°aKÙŒýÝìuÚ§zO‚z÷´*Æ»åjÄ“m¤ÿnb§Õ endstream endobj 3510 0 obj << /Type /Page /Contents 3511 0 R /Resources 3509 0 R /MediaBox [0 0 595.276 841.89] /Parent 3473 0 R /Annots [ 3485 0 R 3499 0 R 3500 0 R 3501 0 R 3502 0 R 3503 0 R 3504 0 R 3505 0 R 3506 0 R 3507 0 R 3508 0 R ] >> endobj 3485 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 719.912 136.644 730.816] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3499 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 640.514 139.414 651.418] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3500 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 561.115 139.414 572.019] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3501 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.661 437.128 299.462 448.032] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3502 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [260.001 387.309 328.802 398.213] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3503 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.542 337.49 320.343 348.394] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3504 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [248.374 287.671 317.176 298.575] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3505 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [279.766 237.852 348.567 248.756] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3506 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [247.259 188.033 316.06 198.937] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3507 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [282.685 138.214 351.486 149.118] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3508 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [259.722 88.395 328.523 99.299] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3512 0 obj << /D [3510 0 R /XYZ 90 757.935 null] >> endobj 3083 0 obj << /D [3510 0 R /XYZ 252.409 723.065 null] >> endobj 3513 0 obj << /D [3510 0 R /XYZ 90 706.338 null] >> endobj 3084 0 obj << /D [3510 0 R /XYZ 255.179 643.667 null] >> endobj 3514 0 obj << /D [3510 0 R /XYZ 90 626.94 null] >> endobj 326 0 obj << /D [3510 0 R /XYZ 90 547.541 null] >> endobj 876 0 obj << /D [3510 0 R /XYZ 90 525.229 null] >> endobj 3515 0 obj << /D [3510 0 R /XYZ 90 525.229 null] >> endobj 3085 0 obj << /D [3510 0 R /XYZ 371.451 490.1 null] >> endobj 3516 0 obj << /D [3510 0 R /XYZ 90 473.373 null] >> endobj 3086 0 obj << /D [3510 0 R /XYZ 304.045 440.281 null] >> endobj 3517 0 obj << /D [3510 0 R /XYZ 90 423.554 null] >> endobj 3087 0 obj << /D [3510 0 R /XYZ 333.385 390.462 null] >> endobj 3518 0 obj << /D [3510 0 R /XYZ 90 373.735 null] >> endobj 3088 0 obj << /D [3510 0 R /XYZ 324.926 340.643 null] >> endobj 3519 0 obj << /D [3510 0 R /XYZ 90 323.916 null] >> endobj 3089 0 obj << /D [3510 0 R /XYZ 321.758 290.824 null] >> endobj 3520 0 obj << /D [3510 0 R /XYZ 90 274.097 null] >> endobj 3090 0 obj << /D [3510 0 R /XYZ 353.15 241.005 null] >> endobj 3521 0 obj << /D [3510 0 R /XYZ 90 224.278 null] >> endobj 3091 0 obj << /D [3510 0 R /XYZ 320.643 191.186 null] >> endobj 3522 0 obj << /D [3510 0 R /XYZ 90 174.459 null] >> endobj 3092 0 obj << /D [3510 0 R /XYZ 356.069 141.367 null] >> endobj 3523 0 obj << /D [3510 0 R /XYZ 90 124.64 null] >> endobj 3153 0 obj << /D [3510 0 R /XYZ 333.106 91.548 null] >> endobj 3509 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3548 0 obj << /Length 948 /Filter /FlateDecode >> stream xÚíWÛnÛ8}×Wé‹ T /¢$ö­m.Û"dkûà…"Ó¶ ™òRòÆÙ¯ß‘HÕ±bçRd[` RôððÌ™JCÐtî}yÇgL"‰eÄ"4š!IPQ,E£)ûŽ%„øÕ*ËAÀñÏòBÙÙ5Sf@_é –8‰ÂÈOä`2ú쎼?< çD[\㘠”-½ñ„ )¬Fs™ ÛÖj‰BÆa,ÐÐûÍ#rd“Ht#,0%ŽhVꪶô²Ejìle¾}ÍÒZÍK“«j,'cÎ& MÀ&÷° hŒ#ZèËt©*‹PÎìX/TY~SY—Úð*|{Ä[»˜…äΪ(Lø· #~¥•Ck·n2µrÔg¥c~ôËéû‹«|s„º}‚W¦l6þ™OÕ´·1×0]¦[‚¥.î‘ð5]º£ÖU·÷æî M¹®s­*줓»Òq†©Ü }•\×۠謜ª§1êéõòF™Ý••sÿÕ¹Q/ŒRA¡êZ™±‚C]\¯‰ ÙÚ¥ë¹ÏbX¤N¦Jµô<›Çfîú˹‡ÆÛÔjñ¬™M[àü|‘Ø“©ÛàY<‡ÏÈÚ‹¼Céúž†ÿ¨T ÏÏ<¹ÇŽÅ3àØr~ºÜã°—œw6o÷€„X&´3½ˆåTgÛ8PŠ¥¬1†0LÂ&!¦Iò×ÝC’bJ‹ö&×Y±†ô"@<ªV¼8ÚWÅ=ÃÛ¬RÆ8ÛÇè$­SËmX›uV¯-½Ý\ìëáhŒá¨»C¯½ü D#C‹úx€T+³ÜÙÝÏB‚`…mFÀÉ! ª¡Ó`¸‚¬3Íe–º\uOºêÝc«Ôþ±TMÒR €÷ÞS.àp;ä˜ îäSׄ0ýzz½™:ÄÇ%^}¼8½ìt5VA}–³vöcò7¡,·@pç6+Íï€VOÀ¾ _NÍþcë^]1oHÙ–‡+ææ•ÑÚì°„rŽ¿ß k×á@\Ê9–q‘…‘ÒW‰,¸œëü+Ôﲚ÷ØÞ²ßþÅ!:Q+3౯šo‘éËÄèðZ-^KŠ•©ÿ—ÂúU©Ÿ^ŠWÓbê[ þ_Õ¢b›Ÿ /úÍ\Ð4yn/×õp\·ð&µ=œXGå\ie]§bÇ_»ÉYÓ4©ûÙ’w!}'b÷!Jš¯è¶jl»&è÷ËOì> endobj 3524 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [386.406 634.844 427.132 645.748] /Subtype /Link /A << /S /GoTo /D (prj_8h_4089618a84e11369bf9e5fd7c11c7368) >> >> endobj 3525 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 454.005 169.86 463.783] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3526 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 373.243 184.814 384.147] /Subtype /Link /A << /S /GoTo /D (spc_8h_4e195ae6c61da3608692a3c7f2395599) >> >> endobj 3527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [240.365 373.243 271.687 384.147] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3528 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 358.622 195.575 368.527] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3529 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 334.388 204.171 345.292] /Subtype /Link /A << /S /GoTo /D (spc_8h_4d66edc63bfc8a39adc6bac9e88c8e81) >> >> endobj 3530 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.669 334.388 252.589 345.292] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3531 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 295.534 204.719 306.438] /Subtype /Link /A << /S /GoTo /D (spc_8h_c39694faccdd56850677999d714cd14a) >> >> endobj 3532 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.217 295.534 253.137 306.438] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3533 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 256.68 204.719 267.584] /Subtype /Link /A << /S /GoTo /D (spc_8h_49807752ce4e223d4095cf6ad13bac0a) >> >> endobj 3534 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.217 256.68 253.137 267.584] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3535 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 217.825 207.489 228.729] /Subtype /Link /A << /S /GoTo /D (spc_8h_ab517aed3ee9f8d5a5ca1f990d310b61) >> >> endobj 3536 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.987 217.825 255.907 228.729] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3537 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 178.971 207.489 189.875] /Subtype /Link /A << /S /GoTo /D (spc_8h_f0e4274b242fd41625b6ad4f4376b8da) >> >> endobj 3538 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.987 178.971 255.907 189.875] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3549 0 obj << /D [3547 0 R /XYZ 90 757.935 null] >> endobj 3550 0 obj << /D [3547 0 R /XYZ 90 733.028 null] >> endobj 3154 0 obj << /D [3547 0 R /XYZ 357.664 687.817 null] >> endobj 3551 0 obj << /D [3547 0 R /XYZ 90 671.089 null] >> endobj 3155 0 obj << /D [3547 0 R /XYZ 431.715 637.998 null] >> endobj 3552 0 obj << /D [3547 0 R /XYZ 90 621.27 null] >> endobj 1036 0 obj << /D [3547 0 R /XYZ 435.312 588.179 null] >> endobj 330 0 obj << /D [3547 0 R /XYZ 90 571.451 null] >> endobj 3553 0 obj << /D [3547 0 R /XYZ 90 472.979 null] >> endobj 3554 0 obj << /D [3547 0 R /XYZ 90 392.216 null] >> endobj 3546 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3586 0 obj << /Length 1626 /Filter /FlateDecode >> stream xÚåZßoÛ6~÷_¡G °9þ¦X ©ët-Ú4‹\,CZ®­¤ÆÅ•äÆÁ°ÿ}G‰²%ÙrlÇYƒíI2<ï¾ïx¤…k;oZ¯ú­_Ž©v4Ò’J§åhì(I Äéœ W"åuÆØM¦CôÍëPÝãñ$ÌßΫ0öˆï†Ñš–\º{_úïZ½~ë{‹À<Ø!™^¡bÂÞ´.¾`gíö»¬×Ã)ƒçÄ Z¿µðF)CXŠÜÆ^4» ãA:¾’læb(ŒÃ¥qD"Î|§C)’ÅØÏ”ŠÊç¢#`µ!è´íÆüøÚ®ã,ëa–þ¸ ãø&¹¾,u^(1]þjÒà#.µÓ!ižÛœv{gg—'/»¿¼éÕÕIÊÝ—^öèv³eЍBWð©ÛíÁMx£"aÔ§÷ï/O?¾=é÷Î6hk6 ÃR ÒBTÖúÊcÂ=z}œöº—§ž¦îÑÙч`#_æh£gXqf1Áù•¬½9ÊklÝ ç¿M—h;”#•Óam=q<‹†…í8JDí8¯[Âg,p’ƳáæñMÍ`ÂËc…“ ÊmŘY‡”—îðIÑ”Âü¤¢u©c`Œ–’gŽô5ò•€€ƒn#þ:¼Ì&iîþ!84[Èmœ7\/é·pçÅ’L#ZkaCಈq O†4y|à®â0|âÈЏVO9Í‘¸¨EîÆêÁšÆiS¬2|z%K6FÄb‹°Ñ}ÂFø„Œc¹‚ÓØx!30ö¸pogé8 ÿ[1LÂô©3¥°ÏŸŒo™ŠªÂ· LgÓç·Ç„ùƲ9MV,cz»°åL“P¶ú»¦É6ø–7§ ÌÍë-IÞ‚‹í&É4ÚÆ"m@óèvö5+ÁaÐü t)Ý/V[YfFgbµ/'Ki!ÛQ)ZËà}OÀî JB7C·6Å i.žû3àŒ)w4Ži˜ü¬0Ÿd§óúP#Ù+̧[aEÅÉîXá„çÁ2öD•ÆdmãܶX¸+ Häk¶Ècz.Å´‚¦B/˜k6Š„f¶’—ÖÒ=0Ð!Šm¡g *´‰Qz?]SŽéê¯Ýá·Alß̈2%)I“f©W oGa™é’–ÇFƒ›fé,§É:i†Ã Z™’]¶K%15v·s0Åàd+«Ç½†©ˆFr·CÂ<Ÿ)‚ PM'LjÀ©këcS~†ßÛÛ—cwPÄñ&Êû)QÙ,1o _ƒÒí+2A­Ÿ‚2[ŠèrÔˆZ/ÖÝíÿqÚË{ÁÙ²ÔËìl‹¨Œy—*Âx¡èO`7ôvïï,7s_¢Áä>ïÈQ =Dz§"KïÓ¹qÈ O¸ÄSF¹å‹d< JTdœ-“¤éÿð¨qsÐÎÊBƒ¨«øûšaFrgÜ5ð(vxR¸Y/ÞÈF!!b6fs7hí0A‘¯ýj*ÿ— HÖкkU±„ŽÞIñ"Hç[èæ|'Ý£óQpØ”Aàà)Sl"ˆ±M)#3õÀt>XµF²Zk>MV© ¢2•I±õeoqWØLÕ’–¦O(¦¡,,±¹6¬ÍÔßÄfÁå^l†¹›Ù ùXèêžû<¶ÓÍlö÷bsðn¡‘Ò;åÌQ0:ÿyl¦{±YøH‚wöesrÁÿçÑðl*è8Z³3«êά;³²;3©lͲ´ÇªNH&UUé(œ¤VRWÞµÕŠd…ç¦Ú-þÄ)m¢EÍ­¥´\Ïo­æHR²!èƒlãH©n+r?ÑÃ’ÂG‚=iUL!J_Uï)w EZœ@'Ù‰{Pƒîîq0ž&[\ ×wTÜâŽöGVOâðª½:6ÉÚÙ³ÒÁÓûd׃~á‘Æƒ>¸Ù^<½= :°*ƒ¥ad¼ßt°&zÉ#"õ˜@ù¾½X‰HÊqò· XÞØÓ¸öKÒ•[€ªtq PHÕBºæ 2vy PÓÜt @ÿw·+È® ÝÄßö †âËp¦‚Cvþå”'BX6¼ #óÝBhóOúÅ˱Éðá×ü‡Ì¿àä…PöqL¨½»7}‹ûûß»Áû·¯ìÒˆàüíë}þ|};¿¿£úJÿZ&€ endstream endobj 3585 0 obj << /Type /Page /Contents 3586 0 R /Resources 3584 0 R /MediaBox [0 0 595.276 841.89] /Parent 3473 0 R /Annots [ 3539 0 R 3540 0 R 3541 0 R 3542 0 R 3543 0 R 3544 0 R 3545 0 R 3556 0 R 3557 0 R 3558 0 R 3559 0 R 3560 0 R 3561 0 R 3562 0 R 3563 0 R 3564 0 R 3565 0 R 3566 0 R 3567 0 R 3568 0 R 3569 0 R 3570 0 R 3571 0 R 3572 0 R 3573 0 R 3574 0 R 3575 0 R 3576 0 R 3577 0 R 3578 0 R 3579 0 R 3580 0 R 3581 0 R ] >> endobj 3539 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 697.247 213.576 708.151] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b) >> >> endobj 3540 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 682.024 218.856 692.211] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3be000828492cbedc0502f757d8b892606) >> >> endobj 3541 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.854 682.024 340.116 692.211] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b0b84f38d1e903eacda3122ce55bff741) >> >> endobj 3542 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [370.795 682.024 488.473 692.211] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b7c5e0d09fac9f441e39f3cf28801961f) >> >> endobj 3543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 670.069 252.49 680.256] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b0653e60411a641a326492c65d257daa8) >> >> endobj 3544 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 653.785 190.841 664.316] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b3ba9183c7c3dace15eef0606980fd615) >> >> endobj 3545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [209.412 653.785 302.96 664.316] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b7e218c5bd52bd6a45d8ad66573653007) >> >> endobj 3556 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 598.552 152.714 609.456] /Subtype /Link /A << /S /GoTo /D (spc_8h_30c95d776068ef3cc959a50af9995fa9) >> >> endobj 3557 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.157 598.552 212.479 609.456] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3558 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 583.931 255.102 593.837] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 559.698 157.676 570.602] /Subtype /Link /A << /S /GoTo /D (spc_8h_2e04fc3ccd8aceebb4bfef56c5399a7d) >> >> endobj 3560 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.119 559.698 217.441 570.602] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3561 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 545.077 223.469 554.982] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3562 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 520.843 153.262 531.747] /Subtype /Link /A << /S /GoTo /D (spc_8h_7304d0d00bcf9d2bad1f56ba6d8322ea) >> >> endobj 3563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.227 520.843 236.549 531.747] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 506.223 230.794 516.128] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3565 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 481.989 153.262 492.893] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 3566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.705 481.989 213.027 492.893] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3567 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.893 467.368 232.283 477.274] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3568 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.805 443.135 155.915 454.039] /Subtype /Link /A << /S /GoTo /D (spc_8h_e7fe86ae85a1a3bd19c2d78c3dba58f6) >> >> endobj 3569 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.125 443.135 215.447 454.039] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3570 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.228 404.281 157.339 415.184] /Subtype /Link /A << /S /GoTo /D (spc_8h_e6e89217a5eca87a2101ae195da74347) >> >> endobj 3571 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.396 404.281 219.718 415.184] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3572 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.012 353.471 159.44 364.375] /Subtype /Link /A << /S /GoTo /D (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a) >> >> endobj 3573 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [240.355 341.516 268.897 352.42] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 3574 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.667 302.662 161.051 313.566] /Subtype /Link /A << /S /GoTo /D (spc_8h_300fdb21c6e53aca6749db3455e531b2) >> >> endobj 3575 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.415 290.706 377.958 301.61] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 3576 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.538 251.852 161.072 262.756] /Subtype /Link /A << /S /GoTo /D (spc_8h_99689938e16d737f26bf6504f2e1599a) >> >> endobj 3577 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.761 239.897 376.304 250.801] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 3578 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.689 201.043 158.454 211.947] /Subtype /Link /A << /S /GoTo /D (spc_8h_cc0b7b9e5bc5495f24129492e4ff5218) >> >> endobj 3579 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [342.767 189.088 371.309 199.991] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 3580 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 150.233 158.243 161.137] /Subtype /Link /A << /S /GoTo /D (spc_8h_615d3ef3a505a8be7da1578d9338d218) >> >> endobj 3581 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.302 111.379 155.307 122.283] /Subtype /Link /A << /S /GoTo /D (spc_8h_6f88e6f1a549bffa0d0ab2b9523d2000) >> >> endobj 3587 0 obj << /D [3585 0 R /XYZ 90 757.935 null] >> endobj 3588 0 obj << /D [3585 0 R /XYZ 90 716.221 null] >> endobj 3589 0 obj << /D [3585 0 R /XYZ 90 617.526 null] >> endobj 3584 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3628 0 obj << /Length 2878 /Filter /FlateDecode >> stream xÚåZQsÛ8~ϯðÛʳ5KQ¤då­Û&îìítãLÛ›nçF±˜X³²äJršÜ¯?€ eI–œäöÞîÅ¢H™Ïîf|öþì—ë³×—"žÅ,E8»¾Å|…>SŸ]§³¯^È¢ùÂçœ{õnÍ6ó…PÜ»ÌrM­+}««¹¿ôt±†®€‡2ôbþíú׳‹ë³ïg>¬Ãg¾á«"j¶Þž}ýÆg)ôÿ:ã,ˆ—³†j;“"€g>[ýqÆ­Œ¼'+ïÈêóÉ`9‹DÀx¨Hà?…Pfy7oöu¡@ü¬hl7ŠSÝY¹® A î¯Þ= §*ôþ䊯ˢnæ†p½Iª¹X7;½ú CïÛ+è\ /-÷7¨CPÝÏ…ò’|õŠæv+]7·Õw3Í?ù1÷¹—Ì÷îç¡ò,s³6ˆøúÒ—MÀ$ƹ¡IœDÕÓ—dñÒw4;”ý4WE0凳…ï³X©ç3°Ì"VñÞ’3€÷Q)•þn¹Zu3ð†€¨§ GÓéË3xKù"¡Ó/é àã÷aµðc2‚'èwþàJ‰À}ØÕGÀ•A¸@h àF\x¶DÒ®NpFw°ÜÞ´` ¸@u¸¾ò_b®¸Ó\ pÃPþ¿wõo³(V/î*ý2 \θñ¹‚‡ˆÜ¦*†SºÈEBB®iäúè ÿàV E«l4Õy32uP=œ3Žj¤rø›-™ c 7«’Tt%=e¢Õ/ÿ;ó‹'±%Y…/bnô$YÂÂqÃÀ‡“æ³¥ ½Ÿæ±ð’*K@ˆ¾?nŠÛ !XpB°¹‰³®à؈£­`n CÄdÔî€ø/]UÛú²3aoì°5ÉÁü1ºãz`o ˆd*ЉýªIš}MÛ¨æAäéf¸7ï[]× ‚ëtÍ&Véë?ˆJÁ–Bµ™óm®öN7 äh)-ñN×ë*Û5YYŒ˜ƒ$ ¤•õz£k“ÉÁ‰(÷MV€)áméeÛ]®·ºhh°ÙXª]R5DQÞ†.?\¯hèóÛuÕMR¤I•:ÊÄÎMu’×Ôù#k6–x§ÁA$9‘¬Ë²J³"iPI y È:‡SøhŽ ï{ûTDGx©@ËͦLkziJ|†ÞÜ×FSк-+j¬Ëí7G”ApÐø‚²ÊSGÛÊe¹Tå–ZàuµÕiƒÄéÄÜ‘M LRz9XÂ8Ahƒ(E ²ncSÓ‡ÊÇg¶Mî45wÙªGçôÚY 5úŒ8ðÀ4|Ÿ­í¼{3«ªT³ßQ³M*Kv“X½ÁâV´ü´Ç_š\eWmŽ4Õ~ÝŒ)áÇ&[ãÅ# а‹šÞ’<§FVt•…Ö©‘ ÚdShX4®!G$pD®Ý˜cdµºÜZš­ÞÞ€z×Ä’o÷u_~ ÌdìÕÚz²›Gê  ¬æ’{Ö“I ¿ ³Ž!Nìt2tmA8P[rÃ:ÂØåŽ°ålö1ã1‚<ûËøzKèñö短Ï͓ڮƒ±oogÑEŠ¢3Ü“]½ÏŽYK«–DqE‚M£ErhÉŠ Áq*BH'yàíª!zŸ³ãrCQdM–äÙ¿µíß<½èDq‡ ¤" `+Õ·&7ØçvÈFå=j}z%inÔ·•ÖÓûÄLmk✓î0YV­ýT¶‰íÚØÔ¶¡Ö6Á1*×àl´0Þ±Ò”•v€¤'„Hs˜\غÓÄNŸ{ÅI©ÍÔN‘bW˜mŒÌ\O Dœº!»å7@#|¶¶¼JËÛMÕvž1 -:­œpÊ$Ä¡u?@ž5l«´C7vWk@µ4Ñët°ÎšÜn1¦©ÊT³z§€Ô„Ø·L’ÂÅè„ û4ì·ç瘖&ÃÜÒcS“¾/ø¢žÔŽ\>qþ€,N±è¤wBF.6ÙÌX´9ì&côÞOILXå±÷¡ Qòëæ•%>$(|eyl²» µr¥îmö2SÓ*;PX“ÒU|»užªµ`^šÐçÈûkXsµ[4Χ³Ed4̺ŽÖLM¢}ã(^‘»¾½þçÇ "!;•«¤ U–ŒÜ¬à ð¶¢2¢ ’… ²Ù˜’¥YóHC” X‚ÀcM½ýtFSÝ=Ž-…Î6,ㄊ)máÇÌåé;øê`Z!&¶!„ƒQÝ Å§b¡p%wzÒ~@ÖÅžç£,”¢Íð^_ú~Ç"ÌoñeÄ\p¥ÚÙA5·Rv÷O«º"ë’Š@ \#ŒÂ¾«°»ÚjDœ…‡zGñ#БØ?4³ˆÙÒ^jeñq+ã@ëèõéŒK e+ÔúDÊ¥Ú”kî{Ú0÷§ F,:ª¦T T‡ÒT‡]æðac|±xÉ"?x 5ao-ºÉC2Bªñ\lh)W?DC=ñ!ë}種ŒSÃ/XtÁ´µ¥zNYºb“¿‡Ž‰pyÞÔsjåʸ§Ì‹T‘Òýš +]TÆ HUézW)Å™Ã>T{°ºÕUu8UmÌΰÔã¢î ×¾ —áÿ³“$–äÈ»JÎD|\-಄E‹ŒCŽr*Öáw¨ ~–FäS±NÊV#6®²eÔÖO¿]]\ŽÕ¡[ÆñHØ<8|6V“€?E?‘Xõò’{“‡’°I9°¦¹sÓ\±CgO9›W#Žp@v`нP]_ÀT †Þ(žŠaç#Ê]ø òJ_ç—˜3Sqˆ^ZÑ^u¦ïA‰«z…W‰¨ õݽ®;ßÃ4»ë”lârTL4G‹ö ðx [Ä&¤¦R»{A¥]}£®Ëuv(L XŸ˜e¬?/"S ›jåA·Äj GMàÓVC±Ù+¶~òå­ƒºøýâêÙÚmJLèÐMà«.èÏBw'V‹㪕ûóÜÞæ¾TÞ§ßÇ·sÑ[vÖýZkJž„?—þ¹ŠèMp_Øc‚´®ªòùíê·¿P[2Ÿw¾làÇòáñNÃþcÉÆP endstream endobj 3627 0 obj << /Type /Page /Contents 3628 0 R /Resources 3626 0 R /MediaBox [0 0 595.276 841.89] /Parent 3473 0 R /Annots [ 3582 0 R 3583 0 R 3607 0 R 3608 0 R 3609 0 R 3610 0 R 3611 0 R 3612 0 R 3613 0 R 3614 0 R 3615 0 R 3616 0 R 3617 0 R 3618 0 R 3619 0 R 3620 0 R 3621 0 R 3622 0 R 3623 0 R 3624 0 R 3625 0 R ] >> endobj 3582 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.972 719.912 157.082 730.816] /Subtype /Link /A << /S /GoTo /D (spc_8h_b9fc42d8e1d281839a0a42ac00bcd180) >> >> endobj 3583 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.854 695.371 156.964 706.275] /Subtype /Link /A << /S /GoTo /D (spc_8h_49f16254df0e3498ae2c1eb641f5232c) >> >> endobj 3607 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.486 670.83 152.827 681.734] /Subtype /Link /A << /S /GoTo /D (spc_8h_96e8686daa13255e36506c3bfc213e46) >> >> endobj 3608 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 604.709 212.46 615.613] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.708 499.046 489.03 509.95] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.562 445.556 156.99 456.46] /Subtype /Link /A << /S /GoTo /D (spc_8h_30c95d776068ef3cc959a50af9995fa9) >> >> endobj 3611 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [275.747 445.556 307.069 456.46] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3612 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [420.603 445.556 457.992 456.46] /Subtype /Link /A << /S /GoTo /D (spc_8h_2e04fc3ccd8aceebb4bfef56c5399a7d) >> >> endobj 3613 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.94 433.601 396.916 444.505] /Subtype /Link /A << /S /GoTo /D (spc_8h_7304d0d00bcf9d2bad1f56ba6d8322ea) >> >> endobj 3614 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.604 415.976 187.58 426.88] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 3615 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.464 415.976 365.786 426.88] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [335.695 404.021 368.671 414.925] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 3617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [194.816 392.066 246.621 402.97] /Subtype /Link /A << /S /GoTo /D (structspcprm_feeb5f4056f271fd37291a712a7b6791) >> >> endobj 3618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 374.442 124.749 385.346] /Subtype /Link /A << /S /GoTo /D (spc_8h_e7fe86ae85a1a3bd19c2d78c3dba58f6) >> >> endobj 3619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.082 374.442 177.827 385.346] /Subtype /Link /A << /S /GoTo /D (spc_8h_e6e89217a5eca87a2101ae195da74347) >> >> endobj 3620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [449.299 362.486 472.601 373.39] /Subtype /Link /A << /S /GoTo /D (spx_8h) >> >> endobj 3621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 319.101 152.973 330.115] /Subtype /Link /A << /S /GoTo /D (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a) >> >> endobj 3622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.229 299.907 290.248 310.864] /Subtype /Link /A << /S /GoTo /D (spc_8h_300fdb21c6e53aca6749db3455e531b2) >> >> endobj 3623 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [267.597 268.757 307.766 279.714] /Subtype /Link /A << /S /GoTo /D (spc_8h_99689938e16d737f26bf6504f2e1599a) >> >> endobj 3624 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.582 237.607 370.981 248.511] /Subtype /Link /A << /S /GoTo /D (spc_8h_cc0b7b9e5bc5495f24129492e4ff5218) >> >> endobj 3625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 206.457 151.867 217.47] /Subtype /Link /A << /S /GoTo /D (spc_8h_615d3ef3a505a8be7da1578d9338d218) >> >> endobj 3629 0 obj << /D [3627 0 R /XYZ 90 757.935 null] >> endobj 3630 0 obj << /D [3627 0 R /XYZ 90 623.317 null] >> endobj 334 0 obj << /D [3627 0 R /XYZ 90 568.083 null] >> endobj 3626 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R /F38 780 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3639 0 obj << /Length 3091 /Filter /FlateDecode >> stream xÚ½Z[sÛº~÷¯Ðœ>˜š‰pxA2yr;Í™4''öÄm“3š„$N$R!¨8î¯ï.àMTbµ™>‘ìb÷ÃÞ@w¶š¹³WgÏoÎ~½ò“YÂá‹ÙÍr–¸³Hx,ô½ÙM>ûè͞뺎Úel=_ø¡ë\IoïåRÖs/vd™AWà .œÄŸÿyóÛÙåÍÙ—3è¸3O¯F, ÂY¶=ûø§;Ë¡ÿ·™Ë‚$žÝëQÛ÷xnf×gœ¹Ý~À\·ó ržC÷sÏuÒ¹ï:_ç^èÈ,Wa»(éùuî‡Nší+jž#·#1x®Çâ0 V¼˜{\šñ}–ü˜!·ÃÏÁÌÕ0a1lʬòaÔ~w3E.b¾ÉU»¦ÈÒݤ¦XeEópœb²„·|ÿó(5ïZ-sµ.– N˜-4‰Ù‹˜ð9 ½8A)iQg3,‰Ëè!p‡:™æZ¸Ñ)*é³¢7åyœ…ÉpOæ·`{œŒyÂxÔÊøÃå›ß§äüPÆ›´)®_ Ê=…lâ2´Z{~y3OP\¤öGúN6)½-µ ³¦²²J@VQl„eNæÍZAÏ뮈%~«™ë –ºÍÃÍ çβª· _C§Y›¾O®ëת¡Þeµ¯©;[§5°'kEíjÙÍ›8ï°—X’/nþñÎsa7,X$ZÆŠt‚u€LЮó…$Q]dt6{ùùNZæSv ƒïç!‚Û BçâÍ4?a7üÇüLõ‹}¯%úòòÍ<ñ›izÜ O WKB÷\h<–„Z0ßvµTJæ • vR5—Ðg^äŒXîË>-›¢)¤¢¶B“΢Y§ õ P=ÔÚÕ¶¾¹Y ¥‡ÁØ¢ªsY›/;ü­ØÂ!©J³jÕ­y¸ ?Š™èìÀ)Û ìÔEz·±|5v#FÀçÌz×èÉ3ã‘ÝUEÙ0=Þµ·UcÆÉ3e>­".®ÞÿqÄ’u˜<blj¹ÚoRcâ—µü²¾Hò"tÌ B™Áy^ X­/k*Ëœì{pˆ™“KTR©Ô³å·/®éåKwÒ°ðúõk6¡¤E„8åC+önb—ÊÄMÙäF!‹À œ»T¡Ñ <‘“Ìš7ƒ†ÊÄïŸÜнšÇ.ŠGÜâñ3ïOh ˜YÝþƒ=êº/ÐqaçýºÈÖÔy{‚³(§boš]Ô~I•”6(r» %Í´ 8 B¦%Ì×^´‡ÌôŽšöd¸¥IX^áçÊh¬¬ÊŪ.ÔÖ`䛞«žtÐ8Üw‚–­Ýö£ô8D"€´Ê-¦R5‚¡,Vk<´þÆÄbË)C èâ?ÇË ,ÛM"#²ˆ ü÷‰µæâË~`°ìŠËnÔÇ2|zX†ñ-–áÛ…éÓX†¶Å2¼.©/j¡ }†ü˜fúMúé)k¥Ó‰(„v&f9™l³G5j@Ò~pl¡K1ΦÂ}Ýÿ¿pù8¥œLU|; —`âŸËpK"Ä<âð•ÖâŒÔ@³µÒ£Öº¨ca×[ÂDL`ry‚wE¨Aì%¸jï$»aX¾CŽ÷ qkœAd1ëÌzcÌvf&¡çÒsJ˜`£ïB¢öØÍ=OžYÁ’¦p¢XÄC˜ë¥ñÑ-èXEÎ/ÃøaÙJÀÌ/ 4ÅÇâx3žÄ?‚q8ö*†ôq3Òm >NsqKk=.F–£;ô¢Ýh/ÓïOí<ˆ·Ã GMš;Ê}(Õjƒîuöƒ„Ž#<»ãÔtžßŸÓ‹6Ø‘šŠaz™CÆÞH7¦fÙ´4Ï~ „óê´T˜µQgÇÆTEmy°2Æíª›Öšõö‹CƒÐHžËºÚÒá74²¥¾˜š<„OðÐ{j…VºYU5(pK‹ „ KªÕ™­ #ëÔvÑħЧ%]”+j¢ÍÙh?Íž=±^Ÿ0y,HÆ$©‹ó_½=µ0œÎ.妵Р”¨ÈEjËý’‡åz$'Ó|È¢:—2ANEçñ^ì³$ò‡fû5å¾M¾ý¾Š± Φ(õ9 º1è ¹£ÉcC_•e{ÊÔ}¬1ÜKÙ£4aŸ—…]½í±–Gs\æß[9„4ªÅc#FXn’<3žOxLþè¸Y'} ª¯è½O[X#tä“¢d"f˜öqAÂb~zV=}µ™Û+Td{0}F÷Ú\´DÈb—cªÛµVy”Q ‡í{ᩊ‰’#»ç‰ŸŒXn¼yðŽXåh9×= L$ƒXؾÄQà­[ó¨ÓA¾f¡ö”`_I}GYð_ÔÐF0ü—&2BHÂ#pU|‰ 8M™­^ªïÅ— èPÄ?§ºÆ¹è——èØlÒò3ÃàÈgdÁ˜¥æT•²óå†ïuºÛÉÒîÆtN„ñ=ÈFÑ(ˆ½P¿’·æ<6©FºÝé "#py5ÕQÑ_áÐ:Í‹ŠF“¯¬´/µ NÛÕU¾Ç 0þ•.à-½¼fAWZ fÑß`O¹ŽLð;¹Ë±ƒ”cž¡©ð•ˆ®È­ÐQYª1¯Ú`ÁµÇt {Ì bq¿¥N­ŠDô}…  E ˆJº$¡ÓVJ ¥å¤˜×ÁûCTœ´VS˾Úo +wSµâEƒýâ£sr®/O Ù]\ù·ç„ Ôô’A,ácåFj Ûl_r©´0O}g:LN>ô°¦Ö<'ã@vD«aô`‚¡ƒÞÔ1“¾0É©¼Ç{)3©X.„¶ÞÌmé‹âÊÔ¡|æ&£ ij-Ú4Ï8»‰ïåéçW½HkpкÈîîa”¾—i³·¦Mß[ô?¥Âó%M)w NplᡪQ8+=Éšm™}«ôtbK£b÷r²r§[>ˆóyÔXEmmŽpXU¢ª°KÓÓ—!9uP ÀÅÁd²jøÖ;‹8Ò²ý¦±¬Ðó“ë^SyŽÎ K¹éÕ”~äã+…¹Šëb;a!«iŠLW¨MJ&è6Кο~6ˆÙvÜM}·æˆ „_¦‘hGiÙàËÆT™dŽäUqzCâþ=_KeUËTsºÆ(i(ejΕ¤áƒ çx§¬Y¶®ÒúvˆW†¸ˆÉ‘wì".ŒÁ[›š™ {¨š©j‘~ç:–IêúÆ„!Íà·˜V nhÕuãµ)ö n½®z .©‹ *¸.¼¤H‹.°®K3"ÐÔŒRf\]íÁåk• k%—Ò®VVͪröP£fhJYu]ü–b=|#K“ö”½BqOhw»×R÷9¨´)ÔR[ÊÐèÐ×D·Jn¾Ú*›éÓwïxsPUÚjÊ烙4†XÑκwûzW)‰€r=ç¯Òýp‹Î“€ÑÙTŠìL”K´<(´±ŠháÇtÌ’Wû;ûÊ®–Y¡Ú ¤oD¥³õº¶&´÷EÛ -)Ý_ Ìp‹\£GÓ?À˜kpS¥ÖPβj»KËB¶EX{†Tµl èäHƒƒ‰xû§ óÍ¿6/Íe­ó²Ê´é¦<ÑÃç,àIo*óÌä¿äƒÙ×ï^¼¹|Û9!Uü[VKý‡öK5[ãáî(Žºš5Úü‰Ø.€«ußû²hlY~¯´n­›)îcvn”]c®P«Iwë’øP‘­*GÚ€-eñ/@åV­Ú.ÛîKbBj —%‰Ýû@3"j/åŽ~ÀÊ4’‡+Ðó°ö¹x—è;$2§y{™ÐÚû»4ûlà›ÛŒ ¡ÞwÅ=é.nAœ?ÔôÔÍ×âݬÙ<Ø mDºhG¦9LÿY&b–xñc,³?½ –D-Ðea¢ JT?“¥ìÙkWþf_®?yG AÏ}ʽ§aD-ßõ|û›Œß]ݾ¸~óú9½sæ¹C¾¬¾=¬¨öÓßél£Ž endstream endobj 3638 0 obj << /Type /Page /Contents 3639 0 R /Resources 3637 0 R /MediaBox [0 0 595.276 841.89] /Parent 3643 0 R /Annots [ 3634 0 R 3635 0 R 3636 0 R ] >> endobj 3634 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 160.971 165.426 171.875] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3635 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 106.378 138.508 117.257] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000019) >> >> endobj 3636 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 86.288 316.03 117.257] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3640 0 obj << /D [3638 0 R /XYZ 90 757.935 null] >> endobj 338 0 obj << /D [3638 0 R /XYZ 90 221.565 null] >> endobj 3555 0 obj << /D [3638 0 R /XYZ 90 199.254 null] >> endobj 3641 0 obj << /D [3638 0 R /XYZ 90 199.254 null] >> endobj 941 0 obj << /D [3638 0 R /XYZ 360.971 164.124 null] >> endobj 3642 0 obj << /D [3638 0 R /XYZ 90 147.852 null] >> endobj 3637 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3657 0 obj << /Length 1002 /Filter /FlateDecode >> stream xÚíW]s£6}÷¯ÐL÷fŠ* $ o‰ã¤ÙÉz½Æ;íL²ãÁ d™vùØÄýõ½ á`j»ÍÎö-O}{tu$ôˆº],F¿\1ùØL Åò rÅœQ´ˆÑ!°kZ”b”›5-Ɖq•¤R•æòA&õ ™GPeá÷Í/‹÷£ÉbôçˆÂ<Ñ—»Øµ9вÑÝ‚b¨¶}=µ½2ä0¾) FŸFä$Gfc"øŽ#fØÖ<Šå=!,× ö¦¨–²(²òqWÕý7<»‰ÑâQ3ž_E°ï d1‚…'Ôl—r£"ŽÂJÆõ¾¤Ç—zØ%>²(TqÍù<ŽapKça]¨Â*Œþx2)1Â".UU´Î6a•¬’4©¶¦àÆÏª¾.¥žùœïNŨ[ã¤Q•nX¾67žÔO’—• cÜ ènQX@j#ËØ}í£Ú—ò‡hï¾iL{~TûgV¾iÿ¿j/Žç={~Óþ‡jO±Íz†ßÙý$¯3Yßu®À¦ëÛ^ŠËuíy¥:>P²˜ƒí>¦LØp½–må^@‡Ž…ŽÇº8;²>:/q1Šça™fãÉ|¾œ~\Ž=Ÿ^O¢4쩃 ,mPðy<žÁk†L?ßÞ.go¦‹Éü5ã.šu;¿\³Éx93=ø™Ÿ¾â÷ïwoÜ0a`QqtÂôvkwF]Õyô’-GóÃñ{Cw ’äÕ.?’€u`WP³ §-s‹ ûv»gsv Q…ÑwÒ§¢BZ ‹ ×€S»T¥0MU!“ÙJºvý [OB³bÏ š–N.(WkõåCkDuª¾5K¦µ,1\-5ntCùu]§±*¯¤ú‚;Åûxv•„iò—î!¸o&å†,¶¯'niÁ,J_,UÅO&¤6‹Æ‘…^”™rÜ0“hzÌ0ös§3ôže¼;=ncܤωS‚ Úu6`ÐE˜ª,†R^Â9‘õ¼u³ã|:dÇÇ$`³½î%1—U]4ê烀\M ¶fû³ÖÇSÑàh>» ÙGlö‡Ã[ñ]-ù=c|˜‰v49ƒÜ‚Õê(’å ®¡¡dZÃvù·3òЖh´]ƒ¹È¢º„|Þ'3|O òÑû¯Ï©î%@ÛÓÏ(îcε@×2oίî†Ð-ù‡®pÕh-WêG¨%g=ã®úc„2}½húvWŒßÆÁíÍ…*ƒÿ}ñØvü¼}”ù0Ò¿`Ó™— endstream endobj 3656 0 obj << /Type /Page /Contents 3657 0 R /Resources 3655 0 R /MediaBox [0 0 595.276 841.89] /Parent 3643 0 R /Annots [ 3644 0 R 3645 0 R 3646 0 R 3647 0 R 3648 0 R 3649 0 R 3650 0 R 3651 0 R 3652 0 R 3653 0 R 3654 0 R ] >> endobj 3644 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 699.36 138.508 710.239] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000020) >> >> endobj 3645 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 679.271 316.03 710.239] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3646 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 622.258 138.508 633.137] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000021) >> >> endobj 3647 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 602.169 316.03 633.137] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3648 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 545.157 138.508 556.036] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000022) >> >> endobj 3649 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 525.067 316.03 556.036] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3650 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 468.055 138.508 478.934] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000023) >> >> endobj 3651 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 447.965 316.03 478.934] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3652 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.666 210.208 241.988 221.221] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3653 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.674 210.208 513.996 221.221] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3654 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 93.58 191 104.484] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3658 0 obj << /D [3656 0 R /XYZ 90 757.935 null] >> endobj 943 0 obj << /D [3656 0 R /XYZ 90 733.028 null] >> endobj 3659 0 obj << /D [3656 0 R /XYZ 90 733.028 null] >> endobj 944 0 obj << /D [3656 0 R /XYZ 90 675.132 null] >> endobj 3660 0 obj << /D [3656 0 R /XYZ 90 661.431 null] >> endobj 945 0 obj << /D [3656 0 R /XYZ 90 598.031 null] >> endobj 3661 0 obj << /D [3656 0 R /XYZ 90 584.329 null] >> endobj 946 0 obj << /D [3656 0 R /XYZ 90 520.929 null] >> endobj 3662 0 obj << /D [3656 0 R /XYZ 90 507.227 null] >> endobj 342 0 obj << /D [3656 0 R /XYZ 90 435.26 null] >> endobj 3590 0 obj << /D [3656 0 R /XYZ 90 411.045 null] >> endobj 3663 0 obj << /D [3656 0 R /XYZ 90 411.045 null] >> endobj 3591 0 obj << /D [3656 0 R /XYZ 107.713 356.705 null] >> endobj 3592 0 obj << /D [3656 0 R /XYZ 107.713 342.696 null] >> endobj 3593 0 obj << /D [3656 0 R /XYZ 107.713 328.687 null] >> endobj 3594 0 obj << /D [3656 0 R /XYZ 107.713 314.678 null] >> endobj 3595 0 obj << /D [3656 0 R /XYZ 107.713 300.669 null] >> endobj 3596 0 obj << /D [3656 0 R /XYZ 107.713 286.66 null] >> endobj 346 0 obj << /D [3656 0 R /XYZ 90 271.743 null] >> endobj 3597 0 obj << /D [3656 0 R /XYZ 90 248.49 null] >> endobj 3664 0 obj << /D [3656 0 R /XYZ 90 248.49 null] >> endobj 3598 0 obj << /D [3656 0 R /XYZ 90 89.441 null] >> endobj 3655 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F46 2400 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3679 0 obj << /Length 1161 /Filter /FlateDecode >> stream xÚíXMoÛ6¾ûWè°ƒ 4,I‘”ä;t[‚k±%vHŠA‘hG˜,i”Ô$ÿ¾/¿Évœ¬[/ë.%¾|ø~>~Ilœ-Þ\.^ŸÒ4HQ*¨.×AŠƒXÄ) .‹à*(^žŒqص9º]žPŽÃÓ²’vt.×R-IÊ:‡OL„)[~¼|·øùrñׂÀ>8 —Ç(ŽxoWqPÀ÷wFQšwFj0Á³ .¿-ðQi„°à£Žˆ!êô,ëÞê ¯­nNÙkÌq׫!hÕVëúú”°É„¥ˆã¶7ø×GVЉ‰lS/XVd¦)‰Àp¢e‚cðD‚²`ÔÖá P `óG$lÐŒk%eg‡Y½$<|°/[¹m”÷·™3z›¹O·Ù’âð“^àüs#eípªªÉ³^nuãÖ7JŽ;™§TªQ~¿®Ë6n¾¬ýÆÆœ…͵qép~¶®v‚0FÜϘP¡ÙÔŽO"~¡È#ÁRë_—ôSÙVöRu«ÙúGœyÀã’ Ì©w2âN(bœí„}ªžãRA¼ðE+ó^e•óŒÊênݨmÖ—óV;ª}ÜlÈO‰cÌvEp.ûAé`Ö;&ï«´gêEŸõƒK!¥qœ:Ÿ–”C. rŽ¨Óšq€à(uÙ{M)ß!‡bÄ+ ÇÅçs«àç%Äa|ªêKs©m€¤ò^î:Y õªó‰ˆLáÉ”^¢ôÒªþ‘Yò¦îüÔ‹H&&ãøë‘LJPÌÓ=–ÑJï !É‚aqØ*0º³c]Ïfæörüܬí3; ˜~"@zÆ» ÆCWÖ›ã@wyg´ZšÎ1C¤ÿŒÒð}VÖÕƒ…ÕP†Óàmmh E™mê¦ëËÜY;¨¶éä3Hðû¦‰Ç›ýEÌýÏ"hMÐ Ÿ&ó¼Ÿ.#†Ö5ÿ¬…p yÞ¨B3ˬ§)ëR膶­JßúÜ•ý­ïeJÛŒ˜ì×ÚϘõCÓkf$Ì÷ZfTvv¤š¡/k#u" :|®'yãÖæÐyùÉ¢TP¶ÕÃ÷ðJìnWß•U5_ú1S28lþÔänŽ8æÁq÷´{‚BDVÇ ¸‰0½?Q®ŸU¢·ZéŒÌ6ûeJPÊ]:•ó6WGÆE³ÿ%5¶º¾‹uE§d!Ö>¨ÛlcØ~J4Çy£4ÿ.Û;üî?Oõß|“¹¯ 9® uʼõ…­Tžá§Þ‰&àï¹íTÌÒ¬ç;÷A&1cEÑøÿðÃÒ&úêÈ«Y‘²ÏÊÊØ“§Ân¤øñ˜øg¯VxÈãåÚíWg7°ù+þÌ™ºGüîzºƒœ~ؽÌ J¡_~á]†¿Ã(£ÄÝaðqîbt&k©ܾVßûÁ©Îyc_„}¼bdÅcûF1¡î>@Ëz÷ÿþãÅ/oߨ1C»“¾»ø©¹ØÈz×ÒÏ‚Ÿoá endstream endobj 3678 0 obj << /Type /Page /Contents 3679 0 R /Resources 3677 0 R /MediaBox [0 0 595.276 841.89] /Parent 3643 0 R /Annots [ 3665 0 R 3666 0 R 3667 0 R 3668 0 R 3669 0 R 3670 0 R 3671 0 R 3672 0 R 3673 0 R 3674 0 R 3675 0 R 3676 0 R ] >> endobj 3665 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.426 702.288 478.748 713.301] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3666 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 583.005 191 593.909] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3667 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.318 523.223 249.64 534.127] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3668 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [298.755 523.223 345.011 534.127] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 3669 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 403.94 191 414.844] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3670 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.385 344.158 191.707 355.062] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3671 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.677 326.534 401.423 337.438] /Subtype /Link /A << /S /GoTo /D (spc_8h_e7fe86ae85a1a3bd19c2d78c3dba58f6) >> >> endobj 3672 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [418.084 326.534 453.829 337.438] /Subtype /Link /A << /S /GoTo /D (spc_8h_e6e89217a5eca87a2101ae195da74347) >> >> endobj 3673 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [462.191 326.534 513.996 337.438] /Subtype /Link /A << /S /GoTo /D (structspcprm_feeb5f4056f271fd37291a712a7b6791) >> >> endobj 3674 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 195.295 191 206.199] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3675 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 163.415 353.148 174.319] /Subtype /Link /A << /S /GoTo /D (structspcprm_6d4124d4db8f7addcbfee99a8634522e) >> >> endobj 3676 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.401 163.415 479.563 174.319] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3680 0 obj << /D [3678 0 R /XYZ 90 757.935 null] >> endobj 3681 0 obj << /D [3678 0 R /XYZ 90 733.028 null] >> endobj 3599 0 obj << /D [3678 0 R /XYZ 90 574.038 null] >> endobj 3682 0 obj << /D [3678 0 R /XYZ 90 559.468 null] >> endobj 1522 0 obj << /D [3678 0 R /XYZ 90 394.973 null] >> endobj 3683 0 obj << /D [3678 0 R /XYZ 90 380.403 null] >> endobj 3600 0 obj << /D [3678 0 R /XYZ 90 154.449 null] >> endobj 3677 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3692 0 obj << /Length 1336 /Filter /FlateDecode >> stream xÚíYMoã6½ûWhl`Íå·ÄzضYdÑÏ8hÙ Pl&1`K©$7Þß¡HÊ–,Ù²“Ev/¡$†Ã7Ãyî|¼¿¼;§*PHI*ƒ«»@á ” J‚«Yp=”( Æx˜?NÑÃhLžÏÚ^]ê;H4ÔÉ1,¹*1º¹ú8øájð×€À<8 ¥_¢‰`º\ßà`Ï?1O¥Õ2à”Á¸&ƒßx/FÊ–¢Âˆ8ç<)[È à5Í͵~ÂçE¶šn~{Ì–æ»s·|"…Ì\ºþ„1³V\nYÁBà-g¾¬I $aˆFÞäíh,$)¡í:£q&½i²ns†aGNp–·9‹P$ÂþΪXäù£n[)º„ªápš&¹‹õ,]Ý_vÝKŽxHü‹mP9RQep ,ÃáM9îv ;©MÚAØBÌw]ƒe0æ„" <&)áXÖ"Â!U4ó".Ú&ãÀrÙœ 8Iì|4B‚0˜.D’òŠU†½ÖÞ7…rCPKGe:Yœäwi¶Ìí=`ÖÙRÏæqáöiDð0Í3{;MÓl6Oàg÷F‘ÚÑ„ ¼-vÌP™Û>9 5+‘!…8Œ-!þj¦Œ³x©L~V{ã§ž…쎂€D{7ß´E*š‰¸ ×RY±iR[`¸¸˜§‰}öXan®¹†ŠT`a—1ñÛÂñA¼6Õ;á $p•ô¿!C€œfÝB'÷ÅÃ~d@%ä ÈòýÈŠXÔ‰ êì|¦ “ˆ*êÑcù|îž…|6¦.“ÿبí Zyå-/ŽÈË·>•í8¹°ã*™ˆiÊ7ilÿ›Yt ÀɈ·§Ñ‹Àf ×±°]éí$­B,¬ õ¬W®äeºXeæß#*†ñb¥=]6fwžC:ž>xk"¶Ù¥z©“¢^â Å¡\5èD©¨]ô.ø z( Âd5ê¼'ø3†Ô#Pq÷:!ÎÉE2âÕŠæ³Ö¦wv\ï/ëJ\dÖ W4a3H5}·ìîÔòƒáo„–ÍM…fÐg‡°Ç>øþ¼Z,Ü黎Íî]7{YZÚsÒ7’Û>Êã#-O_–乞†îÛÏú9Ýudõй©~IOeÕkp_…uŒ6;Bt‘—]ìÕŠ®ƒý- ÞTý“tǰ!Ñ)ºë¬nþ[Mx²>ŠEüÛŠEÕÕì›/E.~9º+zyÝe¨ÛOzmÿGí«ôz}Ò‹Ÿ ½ÊÂ÷U}½õU=h~;“ ’HÔ÷Ó™ÿd&A6Á¡l?™ ÄýïæƒNt¶Ùuß|ýä/Î [ô­½‘v øŒ“3Ú;Š uõÙØúðÿñÝäÇ‹÷öš#‚ë¬ú>]¾×Is¥ÿ5•çÎ endstream endobj 3691 0 obj << /Type /Page /Contents 3692 0 R /Resources 3690 0 R /MediaBox [0 0 595.276 841.89] /Parent 3643 0 R /Annots [ 3684 0 R 3685 0 R 3686 0 R 3687 0 R 3688 0 R 3689 0 R ] >> endobj 3684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 470.524 191 481.428] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3685 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 426.801 353.148 437.705] /Subtype /Link /A << /S /GoTo /D (structspcprm_6d4124d4db8f7addcbfee99a8634522e) >> >> endobj 3686 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.401 426.801 479.563 437.705] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 138.033 191 148.937] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3688 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 94.31 353.148 105.214] /Subtype /Link /A << /S /GoTo /D (structspcprm_6d4124d4db8f7addcbfee99a8634522e) >> >> endobj 3689 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.401 94.31 479.563 105.214] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3693 0 obj << /D [3691 0 R /XYZ 90 757.935 null] >> endobj 3694 0 obj << /D [3691 0 R /XYZ 90 733.028 null] >> endobj 3601 0 obj << /D [3691 0 R /XYZ 90 421.932 null] >> endobj 3695 0 obj << /D [3691 0 R /XYZ 90 408.099 null] >> endobj 3602 0 obj << /D [3691 0 R /XYZ 90 89.441 null] >> endobj 3690 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3699 0 obj << /Length 2893 /Filter /FlateDecode >> stream xÚ½ZYsÛ8~÷¯Ðñ…7‰7'?ÓÉú™P"Â`r«gm&’ ø]O.NþuB÷êȡʫu$²Ö3Í*PD0T¸ºß¢V‚Ï>QÆyVÚ±ø&*PɟϤjIf"$ŒIXW 6ïëi8#”37ë#,¬üÙçÓù§bL´¤D‚ÂörL2ÌòÅWH®u.ã|9(™xߤsm%+âùߢò.K«rÄá€1`æd!'\µ`Œ„žEB³Œtüxô‰R1 `ÈçnÎvÜóžºYð‘ nlÕqÌ¢wû z‹"Ì¿Ô Âc-’²*’/CË„sÙ[&ïâÊÿm\&ÅЗ+QÄÚZŒh>”^m£ZXG ˜Ã|¯æ1t"˜øDž£ÛvÌÒ–Á [–ñ¨b$80‰ÿ(Mûö&©n€ÓôC4 O”Õxãùåß¾4³DÐ^N_Õ_–F1Id Ü”?æŒÎ’9óf÷ι7‹Ö»Ä(‘–NýcGÓ¥y,·I\ÑÚιs³ õé¾ÌNM¯í+¹ù-’jWdv~š]çÅ&ªÒ<3öeŠ4íØ2)R\ÿOT4Y\ùÆ´R‹Œ"Yƒ¤ležªÜþÞØ]#*Ë70Xtqà¨r¼zïvä³N²•C·)ƒ†,8(îØ2  L¥:@³ |{‘$5J°§q!>EëU^ö7æQ¯-Y{{sûjÛ“øl<©ß³žWÍÎóÕ\䦱u'íí/‘Ónì5éÂùo¯à ‡5&ëpj2Ur“ˉ@]a|ìÖQaFFWS$à5c_ÎC:{úlˆhB89 -‰&+Í¢&q@5Ö˜Cb ö¬|•¥%K°œî ÎqŠy¥4vÖÆ½¿ÃoÒ’û.°Ñ ~…µ¬2Úóc.ÂÝñy áÎn^ÍZ/’2.ÒmÕ2èú–y¨Œæ¡?‚aH$õŽ%A”×Ê[a•6 ̬˜ö1EV£†¶à©¡-˜¡i :û>4°´úÖÆÝpèÄÓ^'~Œ!ƾ¿“ëRƾýί§_¼F¸ö5ÝDU%Gœª<â·^¤SQn‹AzÏ©4‹#óÓ8ç×NšԪú p}aœŠoØÅyÚÚ½A@¤ò»Þýž> Žp){¬O·H½zgzî/ÐÈì†Ã}ßü`,\9ákSyrÑê·‹«tSxd‡N{d‡ôΆ‰Dû`fßѶ…ÁéÙôÔôL?Ô­§sÆØÌ<ú¸wZ¢ö W½È¾Ÿþ€ »ûj‡¨°vˆ;Ï©pÜ!ôà±_õâÚ¡}‡Àø€Cê *èâKç v´Á–uí8‡•†|À!@ºÀ®‰ÜNMŸ©Ac¹}¦…Fy„ ›|Wš>]×ÁÙºï³Z%Óm U‘–ûrš™_cŸx—÷TˆRûœÑ -“­ïçÊ#õaºõ}IÕ­9MÏçbL-eØdzz9íé×Ýœ®>Q eTLÀ!¸áØ#28Wd2¶3¸}ë)N¼P~e§—¼Óf+„¢b„ñðXvlÕGÉq‰¼Ù­3í  B…®&D+Ó¶Uh¥Ù2ŲHi›ò,<àÚ¦u *ì’,v…èÒ®¥rv«khj‹·_ ðÒ ú²K §ˆÆ^^ä›í®²‰(‡³:X¥ƒ¶ƒ¾_ºv3%ʉjöóo)µì”n…O›p>šýĹ×+ é?}¤û5¯k¹Æ6]ôèÀ -Ø/ŽYqï wíbwýØE:e]½JªÛ$ÉëÄLÿñ¹ÐÞ"oçvì`Á)ºUÃMÈŠ xW‘UÔ ýô÷ßÞ^"-Îø‡éÀ ž|ݹèè™ I$cÖòþ~Ëóÿ—åZëñ†\uýhË?{iXsñ¿´|@gû-/€óÃÇa^€å½@´,•imy,XW®L?dyœ°Çò¾íc0¯ þc’úÇa^Ï™-CìU5PD47éÀÈELÅJ{M,X¬ËÚfÛÅ;Îíå4Æ¿ÐNƒãlÎùاHyÙ‘Ÿb"ÜÍ€¿Ý®S7”géÖu>x… ¼¯šÒÂôý»§/ïùÙ`,(6·’§Ò@Vs·6}?‡³£c¶÷#Ì|AYë&¹c ný_H ºöÏ¿^AЇõH“;ÿs(ó£à‡:ž…t—…¢õ ·@úî‡ã18«¢Ôj™Ÿe]k)À|ªÓ}“”e´ÂB‘€´ø®½ {S ¿¿þûüܕ︮Rtðš^×צæ¢Û öjÁÝ+Žúút™”Ï>_HJº×…ïкhü¬wWØ7]@|f¯¹ Ã]é2_ë$¯å¤^j ù€ôºôr(³¾ØÅ1|÷@>}8;wIÝk›9´þ Òÿ¿A}çÚJ—jÓF½7öŒƒS|÷£ÉÃìªÿ?AØo10ù7A÷÷@…Úöï…=kÊWI–M Ñ¥·o\ã ˜\™e~}"ÙÏ·•bʸ͞q®ï‡ç篟¹ FmÚliïE~w¿2,ÝþÒÿam8ü endstream endobj 3698 0 obj << /Type /Page /Contents 3699 0 R /Resources 3697 0 R /MediaBox [0 0 595.276 841.89] /Parent 3643 0 R /Annots [ 3696 0 R ] >> endobj 3696 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 631.174 266.686 642.078] /Subtype /Link /A << /S /GoTo /D (spc_8h_6f88e6f1a549bffa0d0ab2b9523d2000) >> >> endobj 3700 0 obj << /D [3698 0 R /XYZ 90 757.935 null] >> endobj 3701 0 obj << /D [3698 0 R /XYZ 90 733.028 null] >> endobj 3603 0 obj << /D [3698 0 R /XYZ 90 108.902 null] >> endobj 3697 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F14 1078 0 R /F20 595 0 R /F38 780 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3707 0 obj << /Length 3141 /Filter /FlateDecode >> stream xÚíZësܶÿ®¿âúéx3>O>Üi;‰c¹Î8‰c©Ž[Çè;Jâ䎼@ؽ™­N¾{ˆö<òÄëwëQS5ÔÁ`ZÎ~U‘÷¹^•I1¶Ó¾ Ë. lÉ´it¢!ÖcC 5tÖcš-•±´4`>ìŠýX»"Âûªï› C„[BK#}/ÎâÍm™”øxÕBxWcZçÃöG¢&ñìüŸ¯ŸÓ(v'R,ð›¥ñ/À±ˆõ³õØ¢#XU3æÙ›…1ÞÛ…PÆûòÕø¬¦UÍéY%:}y~F«/wɪ*â“ÅMZRëgt9ÉBïÖzŸ¼X“€>-¤ñâÍ>)kñ­©Q$Õ¾ÈJÚ Ú#}Ñ÷"iv‘Û¸JóŒ4(þ˜ï2UW.¦Åe™¯Ò¸Jœ\„è®B!ÙFµÞ,4b\5Ñai]ˆ¥Û.ßhEƒ1bY€7— "R)Çò—4|ìŠde™²ï¸jå5ÿ(9ûmŸ­p‰Ol¦ø[\º@üæÅÉì½ã•µQEK1—Ì mâÕÏå@@“f'µ±²µ»¾2ôìnñ6©I€–±'µ„ù#¦¹†††ìÓÿ¯mtr4ʧ=-¡«cŽ1b‘5¿šOùˆPÐå±gêàòuc§gÍ®+!zc É€Œ• ½”,5ÄùjÔð…ààøýǰ|cQ“Ò±°Æ¦K¨IzyU³Pã —Þ¯ÓêŠZÙ~ã–_·ifm õ©ÖéP0¡fxŠsæh“T^–gËË"-·ôßàǤDýFHé ¿aÁ½ækûA¢%PW#¼¾Á† –°ÙŽ×#RXíèuìÞºöJ§Y;/±¾¹Ì ̶Ϣ²Ò´›L"‰@AÏäT¸1.+u‡³»k&K¿«@,Ôæ1tCôm£κo©ñ±öcIí1szÎÿ6Gà´Î:6§ç鲼ꄓTŽLYèR ©‡('à ޱÑ\OÚ(gQÔÈ›VýIé¬K•Ñ„Fih¶ u6"J@¹º£QaO£¢;zqÕSú$é¥VøÇ.‰†¡¤sŠ« §!9Â…ã¸9¬ ¼PtóJyg/@Rð‡ ú¶¿ÏÒª<¼ñ€™#~ƾ»üçÉ c™R߀~5ûô&±É¡ÞÀï=HÝ.ŽºÞÿý×Ô²h…ÞÐNµÔÑwm’ìÒúG…NŸ$£Õ>wô¶˜/ªÀ÷òlsKdò,¡¨~ø¼¾JWŽL–™-79BÃRQà]¦8 1Ñ©a·­.áÇZ6A¯òýfMÝôoHVhÕøü5)rаÀ(ï»$­@cÝ(¥´Hô‚z›ù@ѳrã°–QÒˆIu$™]ï/d(ÉeãÓ²JW›91<(MAûjšöÅ퀸êv hz’,Ïhî=g—ÌÒó»k@yQ“Ÿ%¾F24&súæù#F©“4¡{î #ä€:`9âjSmÞõ×1hÈ@569ÿ×÷¯Ï‘ô–§òÇù71¸édTÖ-£¼kÜ8ëVnŽÌœ'œ¿}þê{˜ùíèÌ!‹Te÷µö8ŠL CÍŸîõ7MQbÊÃô EÏ:Ñ\‹@‹ 4ÆãM±J `€\'Üh1 7г‹hÆÚ1Sä[Ç EºOèÅ:'Û¸ çütî>ͤ–ôæ_Ú@Z A-7,äƒ80;?> Ü¿%7Ÿ½%ªAlª•JMo‰‰ü£“@Õ•0Í`OàûÝ=N·'ðC»'ÐM{‚ úêözÜž`«³'0¤ÝŸ2Ù“¥ #lÊÿˆ€Àõœúlä“¡öæq݃¡å- x.·ù¾¤QÂ7`eø¿c‰ºIÔаI€ûÙbëÐtÃfDœºŸ £D;2ÛÜþy,´&$˜òÎeù™sm¶ød[_Ë$©Áê&Ç®[$ÜBÚUžµ x ƒAUÊä·ÐéNEpÏ*&yãì¾Ýoj‰8d†kåÊfäñ%µ«+ 7¡•fëK %½^_%íñ…P¶¨»ìÎq= €,ñ²&ÔÄœ<§ç*ßîöUâJ6¤èATœ.š”mdjëcQCBÖž =©‹E½y°Ú‚¶;Un¹' 8SG‡§¶ž;©6’ñ¶ØKƒz•¥1h8k6åÍQu0'ÒaA®›Ák“AR û|@V!8d#Ç_]›žŒ'3d}Ï-Ï¡ßñ㸼®z2"K_‚3îL¹0Þ_Öc™%ä­²­-YíCÖ1uW"¬CßÉ1 zr„þFŽ@ÂÊúœ—lÙz‘Ýô-ý?‘hJÄN}}ýü¢²óqÓüpŽ )‘`6®ç»ÇrMç¥o‡ÅÏÚ_&C5Ú¥TZÚÔj¯Òì’^Ò쪋ЇvðŸ}Wy^¬±HvoœX$6xW•RU¬À·¬-©¶dLoTH§v§Ú>"€‚vÞí¼í¢]o—êç¨&¾Êãk§Žƒ˜ëº6‰8.µæ}›”e|YWC¾µå*åªMðüî¯^9Ì#%åþ‰ÀE \ùÍÑ5 ]§ å ?Z'%†³ÃÕj >R®XÔu.Ê>Tª‡’©PŸUqµ/k¯è6Ét6©Oq&ÀâŒÕ¢ >¢úIJ3>ö\?¥ÞÙ~µ‚…÷×eÁT·3AD:"/³…n¸J×c¦ÐÔüiª¡ä”` J0 ¢î9Ô?ç—YoveB/½s~q蜟‡ÁçôƒŽ:è—íÙÆÃU}Àµ‡úuôYýФµ§’Çô+~à ßÜ{Ô>8è÷ÿ[úÇôG ƒþ]>yìƒþ³õ»?âAé¾¾sÔo½ÎCúm䫳]%,Q½* ¼Ñ¡àj4"…uI ~®Ý#Ò…Eðº+rŒ0ŸÒ5ý"ûóÞ äÒ˜nÑúÃ+Cþ‡ A0´]»°¹‡;ØT‰ö¤C)„Òëý*)é•—EÔ]1¾ÚšyóÐ+]0À®l{ ŸêCØhôŽÁ˜9ª®G”ˆ‰ö¢)?ñ¦ÌëœN$F¶ä…†Áq«­o@Bñn\YM»4wâ€9=ûqC8 :ö%%﮲ÏNò~Ç’xhõHIA?ñÆ Ud¼³Äñ$]'™Ø.RvnÕA‡Ýâ›Ý&Îê»ÐiÓ[\Î8æ×Òùðc¾±¼P|kT÷VnÑEÕ^Èé[¨fÊk ÖÞ4‡=–ƒòëº kÊg¿×5p¤ÿ¿†òÛ^C9'¿¨z'\Ýr´’ºvŒx§ÁÝNMÍFñ©Û)¾hú°Û)÷;ÅàÞÛ)ä×·SºWCóîv Þ-ÁÛ)®¶é …þ¥‹á•À´a›«¨w;EE²{;EËÚKG²{Sÿ¢ƒl]Ô„&⮤¦Åë<ÜAz‹† øÝ<·ó‚ì> Ân÷ÊŠ­O¬“¶î®þù·SD Yäÿ/ÜNÞfLˆ¥ü^f¯/±û,s—ØÁ‡ãàä‹$KŠÖ¯Ö÷¿­§¸ÁÉGzñé!øS-žš€Þ$ wçxql]ÅøñÙÙ«—_Q[3Áûu³¯ó›ÛK:‹ï®ôß•ñÝB endstream endobj 3706 0 obj << /Type /Page /Contents 3707 0 R /Resources 3705 0 R /MediaBox [0 0 595.276 841.89] /Parent 3643 0 R /Annots [ 3702 0 R 3703 0 R 3704 0 R ] >> endobj 3702 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 660.753 267.792 671.657] /Subtype /Link /A << /S /GoTo /D (spc_8h_b9fc42d8e1d281839a0a42ac00bcd180) >> >> endobj 3703 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.904 421.047 345.968 432.061] /Subtype /Link /A << /S /GoTo /D (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a) >> >> endobj 3704 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 152.817 267.792 163.721] /Subtype /Link /A << /S /GoTo /D (spc_8h_49f16254df0e3498ae2c1eb641f5232c) >> >> endobj 3708 0 obj << /D [3706 0 R /XYZ 90 757.935 null] >> endobj 3709 0 obj << /D [3706 0 R /XYZ 90 733.028 null] >> endobj 3604 0 obj << /D [3706 0 R /XYZ 90 268.883 null] >> endobj 3710 0 obj << /D [3706 0 R /XYZ 90 254.507 null] >> endobj 3705 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F14 1078 0 R /F20 595 0 R /F38 780 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3715 0 obj << /Length 3089 /Filter /FlateDecode >> stream xÚíZmoÜ6þî_±°ZÀËòEÔKw‡4ÛišÆ¾$wi>ÈZz-tWÚJÚ:õjíÚ.ÒCè'‘”8Î gžŠÏÖ3>ûúäË‹“/Îd<‹YÈ`vq5‹ù, ÓRÌ.V³^ÀÂÅRpνj—²ëÅRjîeC­7æÊ” y&OaHñÀ¼8Z|¼øöäùÅÉÏ'Öá3aéê…JÏÒíɇ|¶‚ñogœ©8šÝد¶3_*xnfç'?œpÇ#ïó*ü¯‚A¡f¡TŒšþ‘û—ÿâÌúßJækÙÒò—dóÞrÙ9ðÞ÷J2ÇÍ÷oB/Ùìq¡ïWøÔ^}mh-!zsµÏ”¯›¹ïé‹õ˜q4,ëÛ£[íLZ—Ɇ¨ÿ²ÚKÊ,¹Ü¸÷IMO\×6J”¿“=ÌØYî>ù‘kþŠ}ɨ÷êû…Ͻ‹×ÍK-X¶"zöf¡5n\iïéKú^E} )°’öó,™Ø&¬&˜:[ Ábí4ôÓBpÏ,„öni‡ VàVœ’I¿ ç>ÏêŠt4ÐÿRUu œ‹Gè¿4U}Uþ|ŠÏd'ùå˜1šù‘j&¿I H-¼«Òü¼éÛ½ÐЇo~ýH­$_aCzp><7Ez´ÚBrÐ.Ì2“¯ëkš‘åô$©¤û‘Ü~ýV­(;­`‹?iE±@Æ@¸ 7°ÞµXn¬Z,‡Z°C1&Ù˜¤Ûz×¶Z8]Ä ðàPv³J¢N@Œ:O7UqJÁi~3DZ&â—I3bŒT·9øzŒ›Ûb_ÑKMðëwwæ;®h˜¤ 5xémõ7 Ž 1¡‰÷ƒÉ`›+³©ß¡íñD0I‹¨nÉ!öym*ó{XÂð™Gñ§b’·Þ÷»ý¦vzv€ O W€v¸JÖÔ®¯b+ËWYšÔ¦¢î͵¡ŒÒBlÐ YçÂýƒ(ůB­ÓÇÅ z¦Åv·¯ YàòÐOÏÑh>°èª Nü°Ô”k—&;œzñï×ϧái¨£ðÔ±5ŒpI5ˆb'”¾”k—ǼùúdöÁ~ùž.ÄÙˆ^ʼ7ˆˆñX»±iËùQ³ÿ«©´E"j¼¢ç´…³ –ÍÜó ,è`p<€^_§r<`ÄÚ¥[×6zi v]Ú‚MgÆ :v’Ý®,v@³žN]1DÁÿ{êr¿¬ÎWG³V@B¶áý‚¤×ÈsÝ‹§v@êénI áý}5µÀÚ´û(@ñôüèkE< DJ£¡ DdŽÉ1läžÛ'¸Ãü‡¨X7­ËÛÝ]ö‰|VÁ ÁØ %i–¯I[˜v9w?u*B)u_ìÖwNyº´(ÊU–£‚ÌÚÔ£å‡ÞÎëöT>ûêùK²ÓVíóãV-|æûí9™²æ{¬6‹³}¨Õš²ÀêAèa¡H«À[{ ¾w©û!¤3jˆ'&©p„¥¦ªbp±mرx{’ªŒYE¿ª+ÙMQÿ1ˆBG©.U0Œªb£Bà]iD±ß_}@°GÕåz¤?ù(ýí>÷ úë‚ÿ ÀC9T±|Š-¬àØwýA+[32Þó¸p oÒÊÅŒAª}.pb qh•L„½-†ñá8+,ð„à&ý1t§y ¦:èܦKÇmmóì'ô°5Tl (ÇçÙ‹‹s÷ªuIöûO™›Ù‹×ÖVP¸7àt · l¤E F½+ D 3XÒ¦Xƒ¯qÉ d)1 x ‘ÐþG†ø²Èlœ‘‹í¢·v¬~J¶»i’+zÌ'Óº€ÉP<²DJT[N¶6Êje‘µFø«ë &‡( <¼^C&Ô~n+ 6Þe©i"BвJ˜ ‡ó£bgSN‚O›½+MÚñØ"Š«^&Lï :½?7-óC©©SÆ&Iª:ìyüäI_òÓÓGo†eÏ& bJv•H ù% é,ymr”‡8âJB(»ì‚íÁü:€Ì±Ë‘;ìêÆ ñ‚ è #á¹\6:të†w˜Z‹ÏQÍð!}?ŠíKh&[_×Äl{m☿Él¥Zù~ã¶o·˜»€å¡A9£Þ»Žkç¤Xš/m‘Žº efx!#e“²ÁxÚ«vc—ªÝRºZTr3d Œ]îz=Ô½QŶ ß­K¬oÖE ’ÙYT]Á‚DCX×KÛÓe¥îîÐû{¦£~×8€XÔ]$¶JŦIYµÙ¨KOçÿœ“g·ûlâ3eDý¼£!1ÇÔ­®õ#1„ï¾¹¿çŒBZÑÅõA Ì]ÝËðEßJ=¾, VY¼·õæêúõoëaÜ: qèªdDòqõ.}¯÷ããÞá#ðÎB ýo-|=Fñ]VqPñ>‹º„áEž–fkòzK§ôD wÿñµO~¤žíÀI= ±ƒºïôþ¸ú! ”à„»møl?>a®÷çÏŸý燅ðnùcüüüùóÃï¿×‡üü0ŒÛ} °–ÖoZ™úq?´ú° ‚Ù8NN[=H‹Ÿô!-¾&H‹-‚´øÍH»\EtgB$¹,«š:WÅÞýœ ±.{Ë)Ù\rK98$îzF­#þÀ Ñ+ò›}¹é>*éݶX¹T%¼µ<ãˆwI–Û|_Yô \ñÅ#«\²oWi±lß³ÍMø ¿e"Šì¥î0ë„£kÞVzvgп¼]ÚkfånÔÞµÛùvÇ0‚ÕOp-6&cõâf5¹—w$ #­6°ÓjƒÑCD×øtæ‡>šk̺qSôÜÔ«\1W‹xè]l]º*qÓæ%ùsÕ\,„Q';Ì$†»¦+ÎÊ ÿ:ÿ+ xQÒ•m~ã ø‚ï ßxakíªW_›Ü”]…¡põùïšÆnÙ\R' ‡àO|ñD‡Ô“\HçáðÛ¦ÄóîÙùË_R›ŠàÖQº¬â«âÓíšX§ÿÉ5 endstream endobj 3714 0 obj << /Type /Page /Contents 3715 0 R /Resources 3713 0 R /MediaBox [0 0 595.276 841.89] /Parent 3718 0 R /Annots [ 3711 0 R 3712 0 R ] >> endobj 3711 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.904 560.788 345.968 571.802] /Subtype /Link /A << /S /GoTo /D (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a) >> >> endobj 3712 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 300.895 265.022 311.799] /Subtype /Link /A << /S /GoTo /D (spc_8h_96e8686daa13255e36506c3bfc213e46) >> >> endobj 3716 0 obj << /D [3714 0 R /XYZ 90 757.935 null] >> endobj 3605 0 obj << /D [3714 0 R /XYZ 90 393.214 null] >> endobj 3717 0 obj << /D [3714 0 R /XYZ 90 378.675 null] >> endobj 3713 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3721 0 obj << /Length 2723 /Filter /FlateDecode >> stream xÚµZ[wÛ¸~÷¯Pýbêl„¯9'ÍÉÅÎzëm²¶›¶'ÉMAŠTH*Žúë;ƒx‘)Çɦ/ €ƒÁ̇™o óÉrÂ'¯^\=>sãIÌâÀ &׋IÌ'a ˜ïŠÉõ|òÞ X8 ιSoR¶šÎ\Ÿ;gY®èéR-T5‘£Šº$¼À‰ãéÇëߎN¯> X‡O„–ë‡,”þ$]½ÿÈ'sèÿm™Œ£É­žµžx®„6Ÿ\ýqÄ:òžŽÂY Å$t%ãOŠÞ¨¼œº¾sûû‚¡*Òù•zþý2¾ºzÜyºK×Éк¡Ó¬p3nä|àÜ-’ÜöVJÑcºJª$mTUÓ¼¤2õF¥~¥æf¤¦ãgÏž›eÊŠÆìrÿÙÖ õ˜…CGeËU³¢Îv1´!`&‹}³É åGroáÈ¥…aàäÙ . #†Ò²ªTÚÐx’/Ë*kVk;6W4p›å9=ݘïêíMÝdͶ¡5$˜ÇçÉf“gª¦ ½5YVY½6 |Õv®‡jÝ*>²=0*Êb¦…ó=ÖýÏ„×óýÌ…ÏEb|IÒ¿àϼ`æùˆÐ3ÒêK’_¹{’¨’>‹ÃöƒwS!˜k«­;å‚ZcÖØ)4ªnie!z‚BÁ8œ)#èŠf – Xµ+ÍšÝÆÈD·6•F ¼}Á’*Knr3ž4}%bîTxüèèaÿ¦ÌŠFû?v2¦àx-¾÷UœzWJ¡UéååÔ÷ÑÒwž_Ð|õm%!B´;È’‘=Î$ØÁß þi*¸£";ÚøaàêœÚm‘5õÿs•7ßÀ€Ç¢ uÝy‘Vj­ °ºGØj{zñ}ˆCLò[{@áðm\3iJD}à«…€pÁÁ—íôØaX¾:ìå«Ó‹iì:×ã(ð¸/ „Ç

      ü Ø {µMSØøp_:§õ xHˆk„œÈAŒVÙœ”ìE~xÛX+$Ìx§§«1Õsœ*#v×¢Û)¾º”² Û¥Æ ž´÷¡%+iÔø†éÞºYTŸé…üM·xz“©‹ÊëNâAð`ïîñ\t¥ +áóAñ¨/¸[5Åx%ÆH‚ÅMq &+¾Zå‹YVÀ©¨³ºQ”ÿ ß~µ2#+1è„5ÁP:l6{æ¿{ŒÂ1¶©ñ_#ç8†cì§óy½É“ûgÀõ#ÁóÌ ¿¥ÜÌcBÞuJ¦I¶1G2†{6cÈÇB „XÙ…5mÁçcù?„ôßná=¬„ÎGL#F»¢!YD‰!ûæŒFÙã]²3Rh b¥è;&–8 îÁ¶è¶–@‡×»zL6ì«s·•¼”Ž¢”s=Ì’(гâÈ5w±!AUÞn½¦Ei§âŠ:Oe|úüüíÕ œJñ Z˜¼s¢•…/Yä¹-{»þ÷ÛÓñtv¤äé:)æc«` vλӋËÓ³QžË¢8¾/ó×÷ç7†]Ç â­ŽA6:#ú¾0È®õƒÇ¿ÍÛÓrHG þ »GÌ—á}ƚ΂@»«ëì&ßá·L +–4Šyûâ'u™ߨÄšº%˜‡>óàÌR 6Æïê`c ¥æ{©ÿÆÄ¾b›ç3˜ºÎ øüÇ꺹iz1¼´ß²Ð]´C#\ùhG«2“훆Ì!§j enn,´5‘*íö¥ªö¸ËÔ‰¯QÄ<0_¸ÎÅÕ%(b?e…Z'M–‚áhA®Ì–à§%!K«ì‹¯u¶ÞØ!Ü¶Ç 오ÝfͪÜ6æSH™åËR“æV)ó‚›GxE ûÙlu²œÓ k¾+’µí+}G“¡ø}6³B!lÄòa\ìERíRð}¥MA´¡3…¡²ÖZ-ãÅã_O/Ž-NŠÖƒ+•g¥‘8B šDÕxWÚlÊžzÞÐS®çÔƒa­t¿yquLz0¾TV Þ 7B×áËmòŽ&j±'ü€ïšNOKX#È!:ñÌýò‹©$å_­ÕèHs0Ê‘ãéÇï<~-7Lòº´AZ.‹ì¿j>v‚8~ØIò nôIê¡óÇ\íi¯ÕŸƒL`Ë“r[¥ÊnØRÃfËZ“âþ¾‹9àšÝÚºY"^ðЮÐñÔs2âa`À²»-¿ñ/Do(í¤’›|ÍjÀtŒò«dž•48–þpŠÉeš5;š‰‰ïÝåóWÄËpÖ³ØÎ¤5ñ¨ìÌ®æs}œ°ÏõêÅî, ˜ÈáQ9 aÎ<õH²C êa8šµ¢]‹ÇP?m Têz:‡›Âa½)4À›·×†pÂ<]¨ÃhVÌác:ØÐ“Í­ÖÔK):ôojn!ñf¹¤ cÞ”¸×î"ñìòô1wuî(ä‰!Ö‚&Fj¿PŒ®dUŠÖbgBþŽzÈAiö’ÚþTzΕj “¡èS ý®w -§†”rÉýØ‘®Ê²Ö,>ì%<=µu.«s<œ¢ŒžëÀÏ;ê´UÛJCOgúÓuöbׯõ„šW%¸JsxÑç^§ÐÙT%®ó"¼ æÍJ_&wßêé&ø×Ôª‰ÌÜfj‰3z9_P X1+Ñ£ä±ùu ý‚žŸŽø£@êûöaQáQí•GGKûW]6E°Lî}§ £E¾±¸÷†!÷©¬I¨0ŠB:NÕÜ\ø#[Ñ^5¿lÝ]:æºäùÙuaV Ù˜%?-µíphóñbKv f•B‡\h›ùÝ‹@‘ fPÍÈLO©9A·Ì€‹X\ÅÀNLQþÅœàÞ|1öC…p!hÿàŲYŒ€RßÔÓÈ |ø]©0…Ñw<&¹Ã˜dXtWéãÝ„¹ÞjZzD+÷øÛÉýµ”…ñw_‘·×-‹¨€Ãíôë©ô{…1vSàùÌíPógàÅèýw È"ú­Uú:¦IIÀçî¨ïC±µ8™é+Jj핌)_ð—ÁMÑ8UAT[S]è¼™† A@ãûaúv•¥Æ©iR«ö6Uo¯€²¼=@7yR|ªm-ØÃÞóÃñlÔÌÆ³CX~×w‹îýŸäƒHÝüEÞþ·@ç\Hÿ-àÇÌ÷͉{­ U^ÑÉláwûp†îR7ôP#øO<ñCzs¹0¼úŽÖ^âþóåÕÅù zö˜àÆ;n¾î–ªØßéÿ €3ƒ endstream endobj 3720 0 obj << /Type /Page /Contents 3721 0 R /Resources 3719 0 R /MediaBox [0 0 595.276 841.89] /Parent 3718 0 R >> endobj 3722 0 obj << /D [3720 0 R /XYZ 90 757.935 null] >> endobj 2148 0 obj << /D [3720 0 R /XYZ 90 500.965 null] >> endobj 3723 0 obj << /D [3720 0 R /XYZ 90 486.444 null] >> endobj 3719 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R /F11 1076 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3732 0 obj << /Length 2015 /Filter /FlateDecode >> stream xÚíY[s¤¶~÷¯ Oaª2Š®¶ê<œ8vjS›Ëñ¸’My·NáASa€ãµÿ}ZHb€YÏz·NÎBHÝR÷ןšö6ö~8ûîúìÛKyŠx×w^„=$(ñ®ïÆP¸XŒ±_—÷è~±¤û—i¦LëJÝ©jAB_åkèb3îÃðÅûëÏ.®Ïþ:# {¤,$’LxëíÙÍ{ì%Ðÿ£‡‹BïC;jëqÊà™y«³ÿœa»HÜ_,á½Å  ó$e¬ø+­ûÛKôRÄ)툺Tëú©n×脃poã(‘›ð}Q–ìs)8÷+½e³]ýzWÅÛ¶)ü4OÒuÜ,ˆ¯Ósûd301 °o·šß.Þ\]\Úqý5pB*ݰªWYm5O aºIç×üzaF±°¿=†dÀܨ4žÐN$b²Óþ!mîÖ‡~œí”žã- Q„¹·$Eº`]T•ªËì‘o<ô›B?#¿¹W¦cõëÅùê•yùsA°¯DøO{ùí—4Í»|}m'ý~nuçI\%h± °ðŠŸLÿ­2s+Õìª\û¤íÍâüÏvñx¸êôÎ`:W°Yímý¢±’¾Ã˜ªÚtÄæÑAB¿´øÆ´ÚÀ:ìgÝ<•êߦ÷_æñõ„Ç(М¥//Þü2á*¡_¿¶kÉÓxЦS@“ŠÀj´*1㼯|I%@‚} !¸i¥_i{i‰yýêXIC„5sWMÜ쬩ŒÝÝ ­[‡= 2A„@"¶ñŽR1t³@@KòÊöçÂÈlª8¯³¸I‹Ü)ük—VÊå8/g*랪**øB†fi±À ìø°]Âj·^«ºžB ¡VÈë|Á;ˤÉÈP浸›€LÈP>ƒ@0â¸#14!ì.Äq„(çŽó%â7Küi6dâ¬ÔÖí¨5îºÈkûi}WS¼ bï`ÛFÄT„)q£n@o ý÷PA$æDÃæ˜è¢¦ž“ &ìE’×E2)™¢ /’œë“cB2ò%‚wyÚÔ3ƈ&ŒÑ9‡3’’1‘wêç.ø+WÙÄšC’º1å¼ç…ì ›Ôñ1§5BŒ¢ôñ˜Òp¤T£|r§"ŒNQ _<4¥6Dtìk2–oó –gI1A6AH( ëòÑ´û!Èg¡AR’A®fPL N2é'Åî6SÂ!Û`A·õuõg3²1¡=ƒžÊÁæ{˜j{ÞU“ö„#‘ôÝ(Yè'}Áñ@ü4fäSHe_þ~Ä:Fá~-VÇ >0ÿ@!Îà´$Ñ0Îþyá=?<Â/Vm$CcCî!ø)š[t¾}Ž>³âäm²š>@—‡t@%dÔ™¢> i:x,kÝtŸŽÐ á§Ó%Gé€prºÁ)ÒÇüSè€Ò£RC.N >’`!lŸíN¦ƒ+×q©À0ûÔm¨¬™” q†á§I=bŽJ]²P 9Žò©fëù:Öi4ôóðßQˆs ?õ§‡s1û‚AÝ€~½ð ±è0åv¡õÛ"¢~\¥ñ­+t~_¬w[•7¦Ú`«G”CE½éˆX.üÄ,SÃ?|ïÚos°þÁ6!Ìÿ«ªj[oœ'þù—AŒHÀœDµ?ôºèaV³Uuo\1«±•”mܬmm·-´µ•¯^%gT”ØÔLõ«ØÚâJì¤Üíòµ¶Ô¾è`b€ê5b]6D’³O(1Úhä‡K«ùhy—ˆ³&ýJr¼Zc½3SÆ®6¶ž}Õ "Ы~¤õxªþÒ'b!äÛOj—݈÷mÍPZ&‡Þ¼¼OúÀ#M<î­Ë¦í ý~tºÞǧE |ûeF5èè‘€–Ú zaé޼li®]Ê`2î‰Æ~–lÓ_ãÆÍu¡xPä‡8ÇžN€nÒUpkËjÜÆéUÑôJ~i>‚m™>ªlÙËE•Y„&iµ€ßXµ‡äÞ h„@žº<ÊIð¤0*5Rjú8žªëgƒrZ— ·í)ŒKW‹“~¦>ì‹›q_e]¥5£ÑyÑøxzà Ö9=OÀ!op}9€´¸Ði‘òy"_B%¬HRÆTbÿîLðð¼½ÈmDÞ3"k}‡§ºãÆu»`ß×uÜÄ¾çŽ ºx¤(IëfXYœ@ÉŸÃåçŶÜ5Ê•ú7»,®œgõíÐZ.LÊ¢N÷Y{ûô?âÊu_ÆÉë9í¹† \Ïö–„OëGÝÎõ¬ó(§ƒCŸ G’ÁÈ2éŸ÷|pèùÏs \oã| V«»kÈ îjÕ¸œeÁ…ïò{§·ITÞ›{ ãÛí– ?ϼÜv7ïŠ$d"ææ]DH›³ý rUÅK²TrK’©[óbïü~ÅÉ+!ÍÅú §Ý­ë2ÀßÏWo^gÚ`NlZ·O.Ï}|Ú¨|°sØéßÓÍÚÉ endstream endobj 3731 0 obj << /Type /Page /Contents 3732 0 R /Resources 3730 0 R /MediaBox [0 0 595.276 841.89] /Parent 3718 0 R /Annots [ 3724 0 R 3725 0 R 3726 0 R 3727 0 R ] >> endobj 3724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.979 273.118 156.648 284.021] /Subtype /Link /A << /S /GoTo /D (sph_8h_bcdbd119e57482315882d849f2b04e91) >> >> endobj 3725 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.692 223.296 157.36 234.2] /Subtype /Link /A << /S /GoTo /D (sph_8h_5c0783d56189d48d9f52af05b64a4df6) >> >> endobj 3726 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.795 173.474 157.011 184.378] /Subtype /Link /A << /S /GoTo /D (sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) >> >> endobj 3727 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.835 123.652 157.051 134.556] /Subtype /Link /A << /S /GoTo /D (sph_8h_8ee2e117701f434f0bffbbe52f05d118) >> >> endobj 3733 0 obj << /D [3731 0 R /XYZ 90 757.935 null] >> endobj 3606 0 obj << /D [3731 0 R /XYZ 90 604.959 null] >> endobj 3734 0 obj << /D [3731 0 R /XYZ 90 590.833 null] >> endobj 3631 0 obj << /D [3731 0 R /XYZ 90 559.341 null] >> endobj 3735 0 obj << /D [3731 0 R /XYZ 90 545.215 null] >> endobj 3632 0 obj << /D [3731 0 R /XYZ 90 515.636 null] >> endobj 3736 0 obj << /D [3731 0 R /XYZ 90 501.51 null] >> endobj 3633 0 obj << /D [3731 0 R /XYZ 90 471.93 null] >> endobj 3737 0 obj << /D [3731 0 R /XYZ 90 457.804 null] >> endobj 350 0 obj << /D [3731 0 R /XYZ 90 414.099 null] >> endobj 942 0 obj << /D [3731 0 R /XYZ 90 391.663 null] >> endobj 3738 0 obj << /D [3731 0 R /XYZ 90 391.663 null] >> endobj 1037 0 obj << /D [3731 0 R /XYZ 374.54 356.534 null] >> endobj 354 0 obj << /D [3731 0 R /XYZ 90 340.251 null] >> endobj 3739 0 obj << /D [3731 0 R /XYZ 90 291.598 null] >> endobj 3730 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3748 0 obj << /Length 1722 /Filter /FlateDecode >> stream xÚíYKs£F¾ëW›TeMæ ø–}x+[›T²Ve^°4’H@»ö¿O3< òVIíÁŒ†oúùu·ÁÎÎÁλ٫ÕìÇê;>ò%•ÎjëøØq%A‚gµqîæy‹%ÁÏótö‹%x~FÊÜ}T[•-ˆ7Wñ–ÆŒÏ &‹ûÕûÙÛÕìCJ`á"— g}˜ÝÝcgëï9_Ë]‡S×ȹý>Ã'…¤ a)j!±b¾QEâmŒ|oT¾Î´“X‹8¸…ƒ%åˆqßÀ¬ö gbþéõ­¾áZg•…ë 2ëë$É6av_‘q¾M²C ÈÍ;Af i¤*.´0záKXX•Y²=Æëòý«ÒjÆ\ÙÎÚíã»™s·äÑÂ<Òü3þˆÝkL¤wRoÆ @UB/¬Å+§#Xó+c<ÐÌÜ{ëî®Âf-´W¬mxlÂL•! \í"I¹9ú'Ø$ùüX„QX<éV›à„¨tµÔ›48%5lZ'‡ôX¨ÜcD‡› Þ£ 3çm¼ bóê·YO“<´š™W¢jË6KfO`vá‚‚KD@웥4 ãÂlª ôñ• ÚæÿK¿§•gr^$æªÁ‰ññð 2³”lípìRyHŽÆ ŰІJƒÍX¨h˜MRj¦ƒ¸´,iÙ€ 2+Z’ª¬r5<.›ÖÂÝ÷«ìÈkéÛºK£»QÀD ì#nsU˜ç‡§^Àõ­ K#ËPkYþfó¾åHóJTm±ŽÔ«£GTŽÔÆ=‰*×I1G–Rü.¥0ŠˆßÐ'¢–™nl[fJÖÇÒÖ7õÙ¨|µ¦µR †=ËúÞŸk¯8ìO›äø)#—-¡\Âá„Y£É r¦Õž;qù$¹,O~É¢¼Þ§ûpÒC«öœ„6—TÔp`í"¤aJ§#ÊjkžCò‘öžKàŸ†à¢^mŠ{$h…Iõâˆ)Û¯ALw_Ò¥³äà: îíPŒ=¸L’±ƒ…@~}î¨Í1⛣—Ÿ€æ.¼8ŠwÓu:\J ºCÿÒÇ­ˆ¬äC6`j«RSuZ=輻\¿F«)µ[-·÷µÈĬuYÑp^›~Ò,ùSµx¡¬ú=”U„ºõèÁ Ÿ÷t_R¹žW$3Bÿ¶ p\T¡²üºózÔÉ\û`"¬M+Ý9"ЏèsK[¼¶5Áä.©ƒéí1RÙEŸé;º8ô¹$ÌÌjü™Rѯz:ªð5¤"ãu׸QïÂâ¸Q]ÕÇù5MªøÞƒõÝ}×1eÝcÈçgd"Ã2­î—e›·Ê†Ã1y»|Óuå§u¥V×_„:ç„K&vm‚švœú@5—¯“!fp´‰bÿŽÜ?︖Œ!B¼iâðóâäáÐ0C8 O/Õ—R îöògJªë¢Ք걔1Z§ü BȯŠÏHÅ»bÿŒÔz"r井Œ—ÐÔý+[¬Çäƒv¹Þ¨|y‘…uF>è¯Ó86ž¾h©‚è¨úå6~ä´ò~{\ÃH˜Ígð;˜Ú³íQ‹¶G-Ê}ûOsßµôã‰Q ìÍå„Q‹uG-î{c£T·œx¤—†Q«i¦OâQ‚„d Þp 3‰x ^ iì#NÄKЦÍmnŠw )XãœË¦’æŒrŠ`ä*¡Ý=¸KV'ÆòmƒÖEÃãƒÖeÃakÖ’Àz®x6ké¼ú¶Yk|>êÎQ à¹áìûÐõߺø÷¡ëûÐÕ ]ì3téÎ8>ÓCoÃä·M\&šò_Š— õÿÊVí1ñ€æ¡—M\ýo‰Òò¦~J¬>!Jä»Ì³Ÿ…„°qúNÅúKGõÙ°šq~©nntâ¨ó Í…àkN®…kž(&Ô2©Þ[)óéõ퇟_™{Žî~çx“<>íTÜ×ô×ÜX endstream endobj 3747 0 obj << /Type /Page /Contents 3748 0 R /Resources 3746 0 R /MediaBox [0 0 595.276 841.89] /Parent 3718 0 R /Annots [ 3728 0 R 3729 0 R 3744 0 R 3745 0 R ] >> endobj 3728 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.976 695.563 495.279 706.467] /Subtype /Link /A << /S /GoTo /D (sph_8h_bcdbd119e57482315882d849f2b04e91) >> >> endobj 3729 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 683.608 125.307 694.512] /Subtype /Link /A << /S /GoTo /D (sph_8h_5c0783d56189d48d9f52af05b64a4df6) >> >> endobj 3744 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.616 665.984 200.468 676.888] /Subtype /Link /A << /S /GoTo /D (sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) >> >> endobj 3745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.058 654.028 254.91 664.932] /Subtype /Link /A << /S /GoTo /D (sph_8h_8ee2e117701f434f0bffbbe52f05d118) >> >> endobj 3749 0 obj << /D [3747 0 R /XYZ 90 757.935 null] >> endobj 358 0 obj << /D [3747 0 R /XYZ 90 733.028 null] >> endobj 362 0 obj << /D [3747 0 R /XYZ 90 628.503 null] >> endobj 3740 0 obj << /D [3747 0 R /XYZ 90 606.191 null] >> endobj 3750 0 obj << /D [3747 0 R /XYZ 90 606.191 null] >> endobj 3741 0 obj << /D [3747 0 R /XYZ 90 298.368 null] >> endobj 3751 0 obj << /D [3747 0 R /XYZ 90 283.802 null] >> endobj 3746 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F46 2400 0 R /F14 1078 0 R /F11 1076 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3757 0 obj << /Length 2369 /Filter /FlateDecode >> stream xÚÍYQsä¶ ~÷¯Pý¤x’EÉ™>4i.¹LÚiÏžéƒïä]zW­´‘´ñ9¿¾AJ”¬õùîÚ™>‘A Å‚]À‚Ÿ.¾¿½øöȃ<ÊS‘·AΕòH Ünƒ»0²Õš3ÆÂî¸ö«µ,|SVšzïôƒnW< u½O1cqr&Vn¹øñöâ· ‚XÀ c©"Ë`s¸¸ûÀ‚-|ÿ%`QœgÁ£¡:‰ˆ¡­‚›‹^0«$ó•剧,gÀÇqÄRI¿g Cñß¾IRŸVD‰L€‘!ªêÝUUôFMÇ,Á¼1D&Ü‚t¥»¾,*ÚwÕÔ»²?m­Šzk¿½÷ù:\†»ÑLÐdë$³¤ÁšË(“)ÉûÓ'·pÜ—Wý^÷ÅK›H`‰tK~µŽ¥ ­±3j£²¦˜c'k˜^ þŽ›±D›¦i·%ÌØq÷Ôõú@ýæaÂ@„Ƕù·Þôec9{vY§\…·{ÝiÜF°««Œƒ-x”K{¢‡â‰ìÙo3ݾ±íÞÚº+®×7m±s'ÓYCúVá1Kgž3ÑÄtpÂx£¡A[-0‚ðPéÀ‡jÎ'ŽxÎM«»#šb´gõ´Je8÷IP®RJBGFIœ«wº?µÈ¢î®_òžEŠå`Ò,bRÐÚ›¾èO³*ð©©ÿ;êUT'=创72š[ñï…S¢»µœ`×pÈœ…7§ÍFw]dM2Ùœ2Ocð|8e–H‰(¶hSÖ=°‰ÂÎöX`?…Ж 'BƒÉˆ±!6ê÷Œ ]mdT9„õÕj­À·Íé¾Ò |AA´ûè(l%V(þ…,‹~‘¥Œ$›³Ü4uד%ÎrOU$Rùܳó©GÂØ’ÜÁS~02ÒQÆ ;P \ÊŸ{ýD‹F+2LŒ'd päg¥Mqx[v‹âH#éžÐ#Ï…‚ˆð´Xàkzs¶à†œv™.J1´T” »ë°Ï6Âø(èˆÑ:V9˜ýp<õº£g†yewªŠ–¾âÖ J³0"ð†ÎN׺-ªò½¥EǦ+-Öº]e— ÈNÛAÝ€¸Q‡¶9X™ôáÒ€-¦õË™QýÉ¡§€È"Åå8¬O‡{ƒÕÐÇ|€S—6*/é³YÜÑjk¸8‡X¤GXRÌÏ—N}?¬Ñ›ÒÈØ :3M×}õD$¥•SÔœODfd•Èí¸Q6Ý¢ŸèLv1‰n Õ˜õƒä ý¹—“Ñ*}Í‹öiÈx„¶XMµ;[V½3¸k;îÅv`7EæOä—Xzæ”^¬úÿX†-dÕ^·³s¦YJ4¯ªÆ|¸>—Å€l<¬¸uið3è?ƒÖq3r™O`,J³lZ€½¶ŒdWÂ_WƒÝ ÎfÚ¹W7ÝÄPØ qèíç³ÊKFå_¶»Ï+’?{o 'õ啳zmåŒ@zu,>±¯lÑ¿ (,Ø€ÂÕÜÁ°˜ ®`„º–įv%Œ©Ú5d¦²ÅŽ­l‘?Q®²Å©¡²5"–*Û8™Ô"Ë•-à;8|¬¦@÷B…«^Qá~]‹ åÉÿG}›ý÷ê[¡¢XY¿ü;&Üë!Å|UÅ yxêtw>!˜+Ùq߉g‚áa\ Ú¶éíEŽOƒÖ°±Dý¾è]ÏÒzÐd®yM8SvÔΖ(;Ú~OߎMeùÌ.Œ<¬5žÓãùÂc¸nr>–†#w!ŸœΜn¥øT "~ñ¹¡ýC· Ízw}œ0×ã‰0«¬qòu’Ûzi~‰Al áʤH&0„|mI¨ ¡ž¦ŽÙÇ1b(¬ÀÚÀ0­©µh5YÚÖà ®28a2©8ûñr‡Ð3j‡eÛêÊ‚±ypŠ5£”…L±Å»ùõµ˜°Z{{ˆ½4(`?úWú‘ú^÷Z׳%îʼ–"nLNñ2E»Jú@œ[gà"×ÖMoÙµ'MRŸéä§Ý…dࡽ´W©hR7'~ªå,ÇÒOãq2¤q˜0ZB‹KÔÛjL¯µ[Yt´¦w¼½ÅfȤÆ'‘á‡Æ0ã­ÚA™ÐSwS¶ÇaÓÔX0”t-›ï›VçÓº:wUÔ•c!óÁǰoKà\¸*=ç¾,3^æ>Ví£ 378‚‚½½µD{c"XX:éPm–Ϻ \X÷º¦ž}å:¤Ó J»Âê‚4ãðÞÕ²¦3{÷³È-”Ù\™é¯˜?H€Lm¹Û÷–c·ÑuGž'˜»?ºMecÑrz±ÿóL³(çÙkyºÿ±^2`Ì#)­Ëÿd>AÍwú‰J¢« endstream endobj 3756 0 obj << /Type /Page /Contents 3757 0 R /Resources 3755 0 R /MediaBox [0 0 595.276 841.89] /Parent 3718 0 R /Annots [ 3752 0 R 3753 0 R 3754 0 R ] >> endobj 3752 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.987 519.687 249.839 530.701] /Subtype /Link /A << /S /GoTo /D (sph_8h_8ee2e117701f434f0bffbbe52f05d118) >> >> endobj 3753 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.807 312.281 187.11 323.295] /Subtype /Link /A << /S /GoTo /D (sph_8h_5c0783d56189d48d9f52af05b64a4df6) >> >> endobj 3754 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 288.371 125.307 299.275] /Subtype /Link /A << /S /GoTo /D (sph_8h_5c0783d56189d48d9f52af05b64a4df6) >> >> endobj 3758 0 obj << /D [3756 0 R /XYZ 90 757.935 null] >> endobj 3742 0 obj << /D [3756 0 R /XYZ 90 626.012 null] >> endobj 3759 0 obj << /D [3756 0 R /XYZ 90 611.48 null] >> endobj 3755 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F8 1123 0 R /F11 1076 0 R /F7 1124 0 R /F13 1145 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3771 0 obj << /Length 2244 /Filter /FlateDecode >> stream xÚµYK“Û6¾Ï¯àN.Te @³§d»œJRYÏT%U¶Š#±B‘Z>æ‘_¿ 4@%ÏxkO‰V£ßý5Dƒu@ƒ÷?Þ^¼yÇÓ %iÌãàö>Hi bF$gÁí*øÆ$],¥4ìvOd³XrIÃweUàêcq_´ –„EçˆÒ”†ŒF‹/·?_üt{ñŸ Ñ€ÆRÉ ß^|úBƒ|ÿ9 $J“àÑPmÁ#xVÁÍÅ¿/¨'$=’G„Æ…üP÷E›o²z]ÖkL¤a¿±¶ZB”NÏê.>SÊ‹j…D»¦¬û7 Ÿ¢;`³kº²/›ÚqYW–aY#A†¯uS/×Ä .Ç“¡¥|\0 {FòÏTÒ ïŠ<:{†> ìJ/#©´ÚuÃ÷›û=ž©ÅèüÍ ÝnS´ežUö'méd†·ºi·YUYQ -ãS^«Nÿæ]215"’rɈŠ$, 2T”h&H*D‘˜ÅH÷™² =¿ "“`éÑIFŒÎ IDpY2Eb.pÿÖhš¤Só'{óòìð9Ô«B»´.´K“$,ïq£w,¦¸@H¦`α )ZKšÃǼ\u¬›Ö±èË]³Ê*²X ®@Z'ÍÖ¸w³]}‘÷ZÒ(RáÝ3>óM‘ÿe8Š’ð^Ÿ¢?gøX•]Ÿa’ÁxûÈUL¦ÆrÖWsžG%Ì8Jžu”"i”¢§,!Hs| #±L_¯=R§ÈcÙot†iÛœlí£Â¾©ŠVdŒ¡ƒJÆXJDÊœx«]6spÄe‘#Ó‡jŽxÈcYUöð¢Ú]“Õ²Ô3Ð]k#:kïʾÍÚ磲áò—®ltCn‹j^¶ù°E'ws AEœPá sB8¶8—:6£Hh5w™ ¬Èè¢7 +OmCÁ-L9¥k—LJB™…Ìt„W‹¥¢i¸j†»ª˜á+ "ÔH]Õk:ç\ñod™õ³,%‘ôeÞÔµÊIî±" :’ý¡Î±9îzTìˆ>Éc~yÅ)J1ª0¡×vaŸ`ÂL0N8~œ< ™'|â‚9…À©éŒ>"é´#¡râ‡9¾€Ã!_“MFF9a‚û%Þì+òR10úv7ôºõé7SâñsÓB…Èì6E½‘á£+z\¸ï®Ü#—ÌîšÂoÉ ‡ßÛŸQ¬ÔÓ»]‘—&yVö§õz¨²_\Éîl¹@…¼N`»ðœÜ7vعo›-®2Ü\OE;—cs»tìJìV2l,m„2ìþÒ?}^Ä2Ô‹E®ÍЉÄx J'=é„'Ývèì9ó­Î³)s/p 4S‡?FU£\søeïY»ý ,¶'ª¤ /ùáe$êÜ©Û]UlAÖ± ÷¶ˆiÛµ·ß_ŸœÜÐfFvH‹8Ž!Þ‡ÉMu§ÐO¸ *µòÿn@c›m2´Ýµ÷û=¨^}Uš <)¤£ÕOй>Dй60rj6Å;qëh=lïŠÖG¢3ûPO$N êjž¦¯\7š+×NI„‹±€ÝœŠ¯îÖžÂG§.?­ ‚^9¯àÛ8M­vÉ+´ÓIy…]ã”nÌÉË?¸¤…›f´É±ÕI`Ò½J! ÏßYÿx‰§®lï8£Ë¤MýË÷|0~‚'ú)“¨‹åÎÃz¢ 7©c× ^°…pÆÉÈ}ÊÊ&ä ]õM›­íKf‡&áéÍ’É9\A½„ ”[Â1GxO©# A-=FA[èÒ;B+[òÏ• ÖRù%裆¾šC}PÏŸ©;7}ÖË „Ðzý Åʪ¡ð9jd9ªƒ ”Åá\”QƒSè5¸jãÍCtÏfÝqÀ*ðQQ„ü~k v®ÇVõ¿ 'Ø*æ”®S˜>ë!!«šu3t¦ÍÅê|瀜í†CVõ›fXoð€¡+ÜeùÄ»s,Í”©Im˜+ݵÓb‚À.LZݽ¾5Ð5ƒœÆ3,DØem_æ¦ 7€–<ÂÇMañMï‡7”O`‹°ƒ=‰}ojKc2~Êc“`g¸œA*—H_ZÄRêË¢ca¡WÖ9€dk™Ï ™ÓM/w\•í‡å”š°iÙi™M# ’\ìiX„4j2PÇ$RºìÂl+ýAŸy7-"Nƒ Ñ?%ž¸Ã¾Og§wE;qaàµH°TLïtN0oÐfjN.*&FÀÀ=HI°B<–×Ù» JT’¾ÀÜòëæŽ¾ÙÜž<{ïÍ“x— JŒBÏzÄÐÎ;$9ëïÿÎð¢öÊõ#~ªÊmisŵLO–Ò,UǸ]îÁçºqÅôjxþ]´»NL¤­ð‡v»ê¹œ‰#XR1¹,ze+àú²¨×Õƒ»bÊ•‡¾àÑLª”ùlѬídké`à<]àú+=CS@Q«,·±Ã÷QĦ-ר*4›¢æ^È+z§p¼± rw?áâí«þ90ì¢ÄŸã„DÂBËïÊ:¯€pË8^>æ]ѶdsyæžÌþƒñ6ëíøMß¹Á2pjwÊÄD€4` Hiqˆt†ëצ§]»ÞöÞ8ÇÂÌYœÄ檀˜  3HÌ-Y[fwÕºï–nøümû¡8˜¾NN¡)4*À÷òÑÿ­½Z¹Íäy›}ç.ëÏ›íæ÷?ùé·£°¶ŸtåßEsoVßæ[ÑÞìAlë/GÉô'Ù°¿fÇ#äëEÃTÌUTWö¤Þ•ÿþ²wJ)ªFà1Ôe"Üóðo;=¤°ä¥ÿÚ¹¿'-‹2%RÚ(~_ÔE›õî>È ¿ºÅ;=wøãƒÑkÁ®¥Â7NÇ•¹Ÿkl¤ÿñ¯›_>üˆkAÅÕ½¸yÛ<=¯‹ÚÓ4ý/:« endstream endobj 3770 0 obj << /Type /Page /Contents 3771 0 R /Resources 3769 0 R /MediaBox [0 0 595.276 841.89] /Parent 3718 0 R /Annots [ 3760 0 R 3761 0 R 3762 0 R 3763 0 R 3764 0 R 3765 0 R 3766 0 R 3767 0 R ] >> endobj 3760 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.987 563.267 249.839 574.281] /Subtype /Link /A << /S /GoTo /D (sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) >> >> endobj 3761 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [254.55 358.695 291.402 369.709] /Subtype /Link /A << /S /GoTo /D (sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) >> >> endobj 3762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.865 358.695 390.168 369.709] /Subtype /Link /A << /S /GoTo /D (sph_8h_bcdbd119e57482315882d849f2b04e91) >> >> endobj 3763 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [374.556 317.16 411.408 328.174] /Subtype /Link /A << /S /GoTo /D (sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) >> >> endobj 3764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 192.288 170.418 202.066] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 112.02 185.362 122.924] /Subtype /Link /A << /S /GoTo /D (spx_8h_45f0db5bb967998f070cad30e5e68180) >> >> endobj 3766 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [240.913 112.02 272.793 122.924] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3767 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 97.57 195.575 107.476] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3772 0 obj << /D [3770 0 R /XYZ 90 757.935 null] >> endobj 3743 0 obj << /D [3770 0 R /XYZ 278.471 669.575 null] >> endobj 3773 0 obj << /D [3770 0 R /XYZ 90 653.002 null] >> endobj 1038 0 obj << /D [3770 0 R /XYZ 143.23 308.358 null] >> endobj 366 0 obj << /D [3770 0 R /XYZ 90 291.785 null] >> endobj 3774 0 obj << /D [3770 0 R /XYZ 90 211.091 null] >> endobj 3775 0 obj << /D [3770 0 R /XYZ 90 130.823 null] >> endobj 3769 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F13 1145 0 R /F46 2400 0 R /F14 1078 0 R /F40 846 0 R /F11 1076 0 R /F7 1124 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3799 0 obj << /Length 973 /Filter /FlateDecode >> stream xÚÕ˜]oâ8†ïù–ö&‘íÄùi.Z UG¶“0³+µ#”C‘ P'ôC£ýï{ŒŠ¤|I­Xze’8Çïyòúؘ !"è´qÜm|î°…8ô˜‡ºä{sFQ·®-‡v“B¬|ö„ïì&ãÄêŒÆBÿŠÄ@H›–ÈR¸å‹×þÝýÖhw÷ D¹}‡£tÒ¸þMPîC;a€½&Èe´c7~4ˆI*bÉ’XJ<ì:ò™ƒ‰ÇµâÆøbøò=tÝä ÿ¯¾¸!„eÂWž&PH•¼¥dW’h–5–ŽÒ7j Å}ßl§ÊEeWP«”Ö ãδß÷sX{Ÿõ­bªÛ$ÎÊÚ~JÓPŸ¾Ü¹)fŠÝ^¹mƒSB<`nŠ™È„<¿Íî` b¶$ ]ÐqøÞÌÞ M Û»Ù6‘ù F[Zq²C1Ücò`ÖDØeÞ yXÔ–‰íÝq«ÑìÃkïl6µ#‡b¸‡$Ãÿ™Âc‘ ‹»ƒµÝ‚ÝÞ­· Ò)v‰"· òPvt#yØæ«ƒÛÿ¶n¡PúêS÷µá.Óø]üX? ô@( v=,/=úN`/yˆ97‰ª WRˆ¾VVnþ—?:6Ô·úÂÓ %_\ú…ûúŠÊŒyTßò4ïïV|~vlN;à­þukLu2}zŠêV 2ýZìv endstream endobj 3798 0 obj << /Type /Page /Contents 3799 0 R /Resources 3797 0 R /MediaBox [0 0 595.276 841.89] /Parent 3803 0 R /Annots [ 3768 0 R 3777 0 R 3778 0 R 3779 0 R 3780 0 R 3781 0 R 3782 0 R 3783 0 R 3784 0 R 3785 0 R 3786 0 R 3787 0 R 3788 0 R 3789 0 R 3790 0 R 3791 0 R 3792 0 R 3793 0 R 3794 0 R 3795 0 R ] >> endobj 3768 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 720.889 197.546 730.816] /Subtype /Link /A << /S /GoTo /D (spx_8h_777e5c4790da397aefcada61445a1bb3) >> >> endobj 3777 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 639.15 187.016 650.054] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf) >> >> endobj 3778 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 623.927 201.72 634.113] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf45313ec670a74e7effc1bcee16cb0b56) >> >> endobj 3779 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.184 623.927 338.41 634.113] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf7342349cd1dc5b4581ae9c39f31d055e) >> >> endobj 3780 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.873 623.927 496 634.113] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf23753b512249d3752a74ce7497d9c852) >> >> endobj 3781 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 611.972 232.674 622.158] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf6b6639fb6d3683c9d356dbd7cf705de1) >> >> endobj 3782 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 595.688 258.368 606.218] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecafe795e388e346496b34e57864af841ae2) >> >> endobj 3783 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 540.454 151.599 551.358] /Subtype /Link /A << /S /GoTo /D (spx_8h_192c7ea1edb2fc79d391a51bec7442e0) >> >> endobj 3784 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.83 540.454 459.71 551.358] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3785 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 501.6 160.993 512.504] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3786 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 462.746 160.993 473.65] /Subtype /Link /A << /S /GoTo /D (spx_8h_d0a5167b8e52a0cdc3990e35a324ba02) >> >> endobj 3787 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 423.892 162.099 434.796] /Subtype /Link /A << /S /GoTo /D (spx_8h_5c2eb2d8649eaab21e71efcd25d9236c) >> >> endobj 3788 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 385.037 162.099 395.941] /Subtype /Link /A << /S /GoTo /D (spx_8h_89a689b848429cfa5780757a5eee9347) >> >> endobj 3789 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 346.183 166.234 357.087] /Subtype /Link /A << /S /GoTo /D (spx_8h_9eb861d7c7437c5f974ad425da8b5664) >> >> endobj 3790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 307.329 166.234 318.233] /Subtype /Link /A << /S /GoTo /D (spx_8h_5eed4e6f2879b4607e60b4f77e2736bd) >> >> endobj 3791 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 268.474 165.526 279.378] /Subtype /Link /A << /S /GoTo /D (spx_8h_51b714ff0ed788c20f1b273ec551b6f6) >> >> endobj 3792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 229.62 165.526 240.524] /Subtype /Link /A << /S /GoTo /D (spx_8h_6c79d97dcc410e1a7a3e6e26ba3dabe6) >> >> endobj 3793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 190.766 165.526 201.67] /Subtype /Link /A << /S /GoTo /D (spx_8h_3e86c3462619b4fdf0aeeeea9874757e) >> >> endobj 3794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 151.912 165.526 162.815] /Subtype /Link /A << /S /GoTo /D (spx_8h_16bc2fef69c592c5bcdc695633f17df0) >> >> endobj 3795 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 113.431 170.06 123.961] /Subtype /Link /A << /S /GoTo /D (spx_8h_5a497ffd57345f2f0bf1c9abc56842c4) >> >> endobj 3800 0 obj << /D [3798 0 R /XYZ 90 757.935 null] >> endobj 3801 0 obj << /D [3798 0 R /XYZ 90 658.124 null] >> endobj 3802 0 obj << /D [3798 0 R /XYZ 90 559.428 null] >> endobj 3797 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3841 0 obj << /Length 751 /Filter /FlateDecode >> stream xÚÕ˜Qo›0Çßù~„ܳÁú¶vKµj“¶&Ú&¥Uå'EJ š4ýôµ1¬ ¥é¦F>ù ‡ýççã|9@SèÌ8G} õÐp‚@¾G0£ Çhdz8°lf¶xÀ·–M˜ýh&´u!&"µHÏq(o9˜˜u5<7¾ ;ƒÈ…‘bbæcßa(œ£+@cyÿv‚Z^säRGŽ340~PŠ„-±°!–€‡]§‡|ê`ð˜V|I©^¾zl&õGq^ÞVrÒi©ë¢pPïÂ-ÂÌ•E”EÁ\n˜êQŸT=s ?þ\º8H›lùTãQßÔ“ª=W©¦{.E6qqàºZôi[®\H¤¹Ë£T+¾3Oó’}žèqÉÃûûy³Rµaž¤Jnõ,n ©]©“HòN¢šÛ,¹9?(½Ôr|¹0Ï£e”åQX"“RÂ(_oƒlö-$w f¡ˆ>CíÐgH»anƒßÐ÷¤â®šéî^fÍu‹÷ôy+Žý¼Xw…_)w'öä~òq”t:è$°n™CDÚ{©½¨e(;ðA¢dQgŽ•qsýÂãq#èõBdÝLŠg«õâÿ¤ÄP:Ö‹ñVÎé7‹ðUîTëh;§¯âïJ6gUy™,òƒRÝõEW4¥¦(ä³n”š]«™t§ƒ&Ð}çcƒR§ƒqvMònÅâcÛqø;¯Öò³CÙ®ƒ s´š_V@MžFüf&K®ÍIê-8Ý+Ð¿Õ eõW¾JxËSårÔ'îÆlR±² œÀye“j*|ìú´z,[<\‹4gÓ¦ýY6ñ|ójë·z§Ò“{EzÿÚ¨¬º¨|ÉBwQY€+÷öLÄ"å¹(«Ú¤,{¿WF_âF_xz pì’cæë+ „–ÿ2”oRŒ¿Oß¾žhÛÅÊÚºLWŸ“‡õTÖØµ7}™ÌC endstream endobj 3840 0 obj << /Type /Page /Contents 3841 0 R /Resources 3839 0 R /MediaBox [0 0 595.276 841.89] /Parent 3803 0 R /Annots [ 3796 0 R 3822 0 R 3823 0 R 3824 0 R 3825 0 R 3826 0 R 3827 0 R 3828 0 R 3829 0 R 3830 0 R 3831 0 R 3832 0 R 3833 0 R 3834 0 R 3835 0 R 3836 0 R ] >> endobj 3796 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 720.286 170.06 730.816] /Subtype /Link /A << /S /GoTo /D (spx_8h_413fa882d2b67a792a35938738214057) >> >> endobj 3822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 681.432 162.518 691.962] /Subtype /Link /A << /S /GoTo /D (spx_8h_8aba8fe47efe098740991771e97fe756) >> >> endobj 3823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 642.577 162.318 653.108] /Subtype /Link /A << /S /GoTo /D (spx_8h_09b951b08ac818b9da44389a3ddf614a) >> >> endobj 3824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 603.349 161.96 614.253] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 564.495 161.96 575.399] /Subtype /Link /A << /S /GoTo /D (spx_8h_974f799a8ee19dd23114ca01b225a02f) >> >> endobj 3826 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 525.641 162.657 536.545] /Subtype /Link /A << /S /GoTo /D (spx_8h_f4784a764fd0f36c82548ef755c470bd) >> >> endobj 3827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 486.786 162.657 497.69] /Subtype /Link /A << /S /GoTo /D (spx_8h_772a14e27c613ea7b63697efdb765205) >> >> endobj 3828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 448.306 166.244 458.836] /Subtype /Link /A << /S /GoTo /D (spx_8h_0459c65496512f270d3c569c346ce413) >> >> endobj 3829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 409.451 166.244 419.982] /Subtype /Link /A << /S /GoTo /D (spx_8h_cc02a893f538f5f0c0d1d9baae2b0e10) >> >> endobj 3830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 370.597 166.493 381.128] /Subtype /Link /A << /S /GoTo /D (spx_8h_f7a2d05c2db901488d68576343aad873) >> >> endobj 3831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 331.743 166.493 342.273] /Subtype /Link /A << /S /GoTo /D (spx_8h_56a7d77413c654541fb29f58561c16f9) >> >> endobj 3832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 292.515 166.752 303.419] /Subtype /Link /A << /S /GoTo /D (spx_8h_61a1980ff0683231529b784af1c48eaa) >> >> endobj 3833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 253.661 167.001 264.565] /Subtype /Link /A << /S /GoTo /D (spx_8h_b23cb997ad699b59f91f4dfe4e8b28b0) >> >> endobj 3834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 214.806 166.642 225.71] /Subtype /Link /A << /S /GoTo /D (spx_8h_544be13048057701c37a8e9c4f761be2) >> >> endobj 3835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 175.952 166.642 186.856] /Subtype /Link /A << /S /GoTo /D (spx_8h_da5d4cf3e8791d64da68575da692e3f3) >> >> endobj 3836 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 95.19 213.018 106.094] /Subtype /Link /A << /S /GoTo /D (spx_8h_286f473d94247fbd7c2485e515fee67f) >> >> endobj 3842 0 obj << /D [3840 0 R /XYZ 90 757.935 null] >> endobj 3843 0 obj << /D [3840 0 R /XYZ 90 114.163 null] >> endobj 3839 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3888 0 obj << /Length 1440 /Filter /FlateDecode >> stream xÚÅYÝ›F÷_Á#Hõv¿a#¥RÓ4Q¢¤j““úäÃØFÂàÀú.—¿¾³ìr¶‰¿À\ú`yeæ7¿™a±·ð°÷zòâfòë+ª<…”¤Ò»™{ {¡$HPâÝ̼O¾D*˜Œ±_¯¿¡e0¥û¯²<µ£é<­ùi‘À-†±Â>Á2øróvòçÍäë„€"ì‘F°QÈ„—¬&Ÿ¾`o÷ßz1y÷ͬ•Ç)ƒÿÜû8ùg‚O‚¤ a)A"â`¾Lu ðfßË´Nªl­³²h Y,ÕÂúðÚˆÆ;¢±7¥1®¬äz&ß>cáGœ‹Êû4¥*ô³©Èí_Äñ󸲗U¹ÑYa¸‚©zë_€#‚ýEPáßDqöii§EJ]ʽ}g&ÆUßæî¹A“¢ ¦\P^¥_7@¾õ`@: I¹ZotZ[)qžÛ—õÒ)aTÕ‰`Ÿ!€¤„£ö>aq@±C›§ÅB/A H{«L2ýHá»Û©NPÃ×”EÜ_ç£'N9 æ¬j|W³´rtSõ5Í{Ü/çvb'K;ºÏô²Õðe'ê²£ÈZ‰,›­úz“k*®ÒCvW©ÞTEFYaÿàÃadÂA4‹d]­~óDW›Do9‘¤ÜêrÀ(]ÅY‘ kŽ‹žÚ>4@í q&<·$%º¬ìƒ‚œ·Žªjˆy÷ê¼*WŽÊ ى2¸êDÙ#• ¬h8 „ðñí￱ënØ©÷É”ÖÀù¦H´ƒT”Eþ`G³ln4›²Çóý2m´>’Þ ÀoÚŽö¢Þ u³¬}V¤­CoÈz³^çY:küÒÉ2/ýUÓÜWÏöüÛI D"Î"È"!bÂ%ÑÏ”Š½wÆÀÖ°®GÓÏa"¦ÖBv¦BRIx±ó›3v6F”©v†‡d³Y$u¤_é}JŠXoÓ»:Œi§L¿ãQNSˆ†á9Rx;aŸêŽé\!ABgú§ÇFìŽ ÿƒÓã¬úyÞîÚ{ÎÛçÀw3‰Wb7Ó¨)`ÚlD·[æþ•ˆPu±aUš·›kVë, Ü*ÚÙ»–ˆI5ÔÚVò9Ï^€ëĦ(Ääò?½ˆ)R|¬ôÕgA_Ê8C¹8z.tÁS[—…>{Ûð%oz]Ìǰݎ1De4V¸l‹ÞÓ¹aŒ]OO‡ÛÓ?mó>¿6m}¢åº4d$žº>â!¢”µc^-Wìš qIŸ2L¨jR÷°¼Ò î“e¯‹° ê1‹©N»1%’!Z÷Z‡w?£ãˆçÕ×1 À†‹ýTòƒŽn%"ÇtðÊóÎ֗DZœØgB$§´„ CrMi™i5NYI¥ºÜ‹F­ù¸8T?  \áFì9§í¨>jNÄ 3“£øH1 y‹v’A1‚«ư.ØÅÆýPtد"›Õ-ðØq¼(9¡¼)Îyñ$ª;‡Ýt¤ÅG9ìvW-¾»*ž³ø"öØvãYV^ÐÉ…ËÁ‘kl;ÛÅrÂÚ 5RëF)¢jhª9\‹Ãe¹ÖOÛ¶aH=6LÀ“%Í7Ûó%xÈéðÜÚÞ§ü>ít›Æ£§®ºMŸ…cõißBL0ÅúÞ³z™Íõlp|ïéþGÇ3AB>ý'h‚¢Á+Ú°½Muüt„cŸ´gÀXqÒ‰ú8~$ö3&ÜNŠv‹ ¤¶ßCž¬$v«¤»`ʤÿ<9vÊPmµuêùJÐL¢KO|Û“^èÆCèhìI¯PHwóÚT|±nOqJw\ô¾¼2NIoí…´?ãä™íÅ„º"ßÌmOþýãã»7/ì˜#‚Ý)‘säËòÛÃ"-º–þ[Ex= endstream endobj 3887 0 obj << /Type /Page /Contents 3888 0 R /Resources 3886 0 R /MediaBox [0 0 595.276 841.89] /Parent 3803 0 R /Annots [ 3837 0 R 3838 0 R 3860 0 R 3861 0 R 3862 0 R 3863 0 R 3864 0 R 3865 0 R 3866 0 R 3867 0 R 3868 0 R 3869 0 R 3870 0 R 3871 0 R 3872 0 R 3873 0 R 3874 0 R 3875 0 R 3876 0 R 3877 0 R 3878 0 R 3879 0 R 3880 0 R 3881 0 R 3882 0 R 3883 0 R 3884 0 R ] >> endobj 3837 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 695.563 120.316 706.467] /Subtype /Link /A << /S /GoTo /D (spx_8h_192c7ea1edb2fc79d391a51bec7442e0) >> >> endobj 3838 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.596 671.653 181.476 682.557] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 597.098 159.15 608.002] /Subtype /Link /A << /S /GoTo /D (spx_8h_51b714ff0ed788c20f1b273ec551b6f6) >> >> endobj 3861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 577.267 159.15 588.171] /Subtype /Link /A << /S /GoTo /D (spx_8h_6c79d97dcc410e1a7a3e6e26ba3dabe6) >> >> endobj 3862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 557.437 159.15 568.34] /Subtype /Link /A << /S /GoTo /D (spx_8h_3e86c3462619b4fdf0aeeeea9874757e) >> >> endobj 3863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 537.606 159.15 548.51] /Subtype /Link /A << /S /GoTo /D (spx_8h_16bc2fef69c592c5bcdc695633f17df0) >> >> endobj 3864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 517.775 155.584 528.679] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3865 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 497.944 155.584 508.848] /Subtype /Link /A << /S /GoTo /D (spx_8h_974f799a8ee19dd23114ca01b225a02f) >> >> endobj 3866 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 478.113 163.684 489.017] /Subtype /Link /A << /S /GoTo /D (spx_8h_5a497ffd57345f2f0bf1c9abc56842c4) >> >> endobj 3867 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 458.283 163.684 469.187] /Subtype /Link /A << /S /GoTo /D (spx_8h_413fa882d2b67a792a35938738214057) >> >> endobj 3868 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 438.452 159.868 449.356] /Subtype /Link /A << /S /GoTo /D (spx_8h_0459c65496512f270d3c569c346ce413) >> >> endobj 3869 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 418.621 159.868 429.525] /Subtype /Link /A << /S /GoTo /D (spx_8h_cc02a893f538f5f0c0d1d9baae2b0e10) >> >> endobj 3870 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 398.79 160.117 409.694] /Subtype /Link /A << /S /GoTo /D (spx_8h_f7a2d05c2db901488d68576343aad873) >> >> endobj 3871 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 378.959 160.117 389.863] /Subtype /Link /A << /S /GoTo /D (spx_8h_56a7d77413c654541fb29f58561c16f9) >> >> endobj 3872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 324.258 154.617 335.162] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 304.427 154.617 315.331] /Subtype /Link /A << /S /GoTo /D (spx_8h_d0a5167b8e52a0cdc3990e35a324ba02) >> >> endobj 3874 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 284.596 155.723 295.5] /Subtype /Link /A << /S /GoTo /D (spx_8h_5c2eb2d8649eaab21e71efcd25d9236c) >> >> endobj 3875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 264.765 155.723 275.669] /Subtype /Link /A << /S /GoTo /D (spx_8h_89a689b848429cfa5780757a5eee9347) >> >> endobj 3876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 244.935 159.858 255.839] /Subtype /Link /A << /S /GoTo /D (spx_8h_9eb861d7c7437c5f974ad425da8b5664) >> >> endobj 3877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 225.104 159.858 236.008] /Subtype /Link /A << /S /GoTo /D (spx_8h_5eed4e6f2879b4607e60b4f77e2736bd) >> >> endobj 3878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 205.273 156.281 216.177] /Subtype /Link /A << /S /GoTo /D (spx_8h_f4784a764fd0f36c82548ef755c470bd) >> >> endobj 3879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 185.442 156.281 196.346] /Subtype /Link /A << /S /GoTo /D (spx_8h_772a14e27c613ea7b63697efdb765205) >> >> endobj 3880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 165.612 160.376 176.515] /Subtype /Link /A << /S /GoTo /D (spx_8h_61a1980ff0683231529b784af1c48eaa) >> >> endobj 3881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 145.781 160.625 156.685] /Subtype /Link /A << /S /GoTo /D (spx_8h_b23cb997ad699b59f91f4dfe4e8b28b0) >> >> endobj 3882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 125.95 160.266 136.854] /Subtype /Link /A << /S /GoTo /D (spx_8h_544be13048057701c37a8e9c4f761be2) >> >> endobj 3883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 106.119 160.266 117.023] /Subtype /Link /A << /S /GoTo /D (spx_8h_da5d4cf3e8791d64da68575da692e3f3) >> >> endobj 3884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 85.955 156.142 97.91] /Subtype /Link /A << /S /GoTo /D (spx_8h_8aba8fe47efe098740991771e97fe756) >> >> endobj 3889 0 obj << /D [3887 0 R /XYZ 90 757.935 null] >> endobj 370 0 obj << /D [3887 0 R /XYZ 90 733.028 null] >> endobj 3886 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F8 1123 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3893 0 obj << /Length 1908 /Filter /FlateDecode >> stream xÚX[oÛ¸~ϯö¼È@ÍÔÍêÁ.ÐæÒí¢›æÄÙ "Ó¶°²¤RRï¯?3J–Ûîƒa^æÆ™o†CqgãpçÝÉÛÛ“ÓK;1‹C:·k'æN HáÜ®œ;7dñl.8çn]=±íl.î^f¹¢ÑZ+= W),yœÇÜ<š}¾ýåäâöäˉEÜFp±È œtwr÷™;+XÿÅáÌ‹ÎWCµs|éÁî,Oþw­‘|d,+xÈ|oáDÒc< ÈâORFýõë5äæÝ‰s7àDªIf’»3¸*/?ñ€ÃOŒ¸jhÍ©âôRˆ-‘Ç|î Á…OD‹Í‚ÅàlKòã„ÁY ÂŽâº?¦D8>¹Ïü(>h£qó ¡1²—ùÓ”0Î¤× Ó*Ošl&÷1«›,%ÁÒ¬Ù£g.| O8s±`óíVÕ ?tm‘ÛlíÊ×™àn©ÿÚ–º#ÒeÛd…ª_YÒ’–,k[«­¬Km($©Ë “¢†½˜\5C.ܳ²˜ùͺÆ"ß%û¡‚Ð]•…UõCVÐR•'©úÁœ‘Ã)‹‹¬‡=ù"Mò<+64¡ÓÁÀ…&_³f{´ÛUÛ ½™6æP0¯•Ý0re01´a¢¢m ¥O¶½Ñè—M»S…•nUú˜ùz"âsÐG N0ÚpBºƒ}:Éiãñä­ªin‚‹de‘ïiÉèC#0d¸`B†4ÇÌÍ6ihDˆhójU·yÓ™BÿŸ8÷J¤pÑå¸T•Ya©:ò)UUþòú}1½*Ñ€æ6O4bç±[›Øg1o"›ÞÂ]kõ¥…–Ã=8u±¢c÷°v¨bÓl;*ãäy‰2¿ªª ·#’Å0­z-­’Fiš€¯ "5À%ˆŒ²v”ë©“æÙfÛ`*€‘·êd×Aª¶Ó­]Yw8ìawˆ>ÎÀuÀ 6Õ]•!Ä«Úb­óžÆ&‰ñ•I…I_} ¤Ó´ÕIºÿ_•è_ßêÒPš=­ njn.h‰ r. T < œÅwÝÜQÕ–®+\D€w‚6W!Ñ•GRÓ²BËö#C,E hTX¹ÿ;›ûRàU¬L]A(}àî‰èîZãuéCH›¬^£¿á\Ci”îj•Ó9ë~-ÓD—¬ TI)é8‰†L1¥–«VWe­LmîÏÒ_vù$=(:yY·¦ð£Z#Ñ4ð|nµšJ‡’ Rf“ »*ÛÓg€s*­Ò 9MÁûÖURJ°@Ó„@M“•ÚAQ7tA8B.I²U& ž¥VÔ6K·4P”»*)2ò'ðo3«£.×EzÓžd"úvŠIÛPCô¹ìnŒó25ÅÛ\d;¤Ïóy(û`>Çý››wË×þ>‹¥¹_µ©ôz‰-‹#.l@;£qRà=gÊò+›bøx1ƒ4PÕñ*@°üIx¦eu6Œpؘù¡59Å<"²¡™Qv÷ùÕó-”=Üë•Ö€ð»Ïqœwz‡ýäµV•.SU×ݵKR]Ç·¿ÀV*… ¾oÎÆ×Xú¬-´Üm‘6ý ô5e³¯TýùìY\À:9HºEp…Tß“à^Ÿà ¤õY{%nWoÆI4ç,ŽC@X{:Jý¸üpp)˜Ç/¤Mðë?/nnî—¿],—“2 žû#Ž«ß>|¸¿þøþêöâæ;ØÞâÍðæü~y}qv=[ÀäæÍ¯ÿ X¼,âwñ/,xeœ}üxs>b?®žKðÒ#ø‡Øù6r—#8½ö‚ü>ê&Mdä>Ñ‹´M@œ¦[è`é•çË „(rïð$äž­¨Ã€Ã\v$ˆñ „‹q_s!}ƒPv©ý\ Caë«/Z=%ÔLû>‘Ød®õ— ©P'„Xü{©tm?NHö8[Äþ‘äþ¶2Ñéî´£(Dj˜ø‡ Ì}Ì8Ûô]=uLÁ‚£§þDñ´T£‹æÝQà ×ӱÿJ°‡Ã‘y‘Ó‡ €‚X„cï Ð#/¼ÂÉ:6* Ç_·Â‹Žßøq«ûòéÁ}O_Þ‚˜A> endobj 3885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 719.578 155.942 731.534] /Subtype /Link /A << /S /GoTo /D (spx_8h_09b951b08ac818b9da44389a3ddf614a) >> >> endobj 3890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 487.884 165.984 498.788] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3894 0 obj << /D [3892 0 R /XYZ 90 757.935 null] >> endobj 374 0 obj << /D [3892 0 R /XYZ 90 548.478 null] >> endobj 3776 0 obj << /D [3892 0 R /XYZ 90 526.166 null] >> endobj 3895 0 obj << /D [3892 0 R /XYZ 90 526.166 null] >> endobj 3804 0 obj << /D [3892 0 R /XYZ 361.529 491.037 null] >> endobj 3896 0 obj << /D [3892 0 R /XYZ 90 474.31 null] >> endobj 378 0 obj << /D [3892 0 R /XYZ 90 362.343 null] >> endobj 3805 0 obj << /D [3892 0 R /XYZ 90 338.128 null] >> endobj 3897 0 obj << /D [3892 0 R /XYZ 90 338.128 null] >> endobj 3806 0 obj << /D [3892 0 R /XYZ 107.713 278.959 null] >> endobj 3807 0 obj << /D [3892 0 R /XYZ 107.713 263.019 null] >> endobj 3808 0 obj << /D [3892 0 R /XYZ 107.713 247.079 null] >> endobj 3809 0 obj << /D [3892 0 R /XYZ 107.713 231.139 null] >> endobj 3810 0 obj << /D [3892 0 R /XYZ 107.713 215.198 null] >> endobj 382 0 obj << /D [3892 0 R /XYZ 90 199.413 null] >> endobj 1647 0 obj << /D [3892 0 R /XYZ 90 176.159 null] >> endobj 3898 0 obj << /D [3892 0 R /XYZ 90 176.159 null] >> endobj 3891 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F8 1123 0 R /F40 846 0 R /F38 780 0 R /F46 2400 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3919 0 obj << /Length 2019 /Filter /FlateDecode >> stream xÚÅYmoÛ8þž_¡îƒ Ä,I‘zɇÒkÒË¢×v“ {¸¶XÈ2m kK®$ošýõ7#’²¤È/qº{ŸHÓÇ3CrfŠ:s‡:oÏ^ߟ½ºæ‘‘Èç¾s?s"ê>#’3ç~ê|v}ÆŒRê–ëïd1sIÝët©tïVÍT1b¡«²†Œ3¾Ö8“Çíìs­lÇ=,$¤]ÿúöêg#ÕQ2 ~à[¡!A °—×·ƒ(!á\rõþêöåºü2bœº—àé~z?¬UDùÑxŸn/ß £?M««aÿ믺û_·…®^iÄ©1|©²yµÐRh<¶ÚUÉ&7p«¯àùnž-Íy¦4hxX¤‰É”šêÞ¤þÎXú„²ÈÜU©-èxŸ <7[ÇC7¯5¡¸å"ß,§º?QfLUºSåZþUäãffds4 {q¡¶R¸Ï3–à`l 7“57Õ®·=I0£}’J-ÄYm)íÚ8©ä»I¾Zo*5E7‚çk\JØ–UœfSUh±ZQìÔš`§ÊukìAàÞ.éJy/Á_ºµãP=Íì’D‹žÆúí˜xrö“Dz/Ï~”“³ßp^øiPBå#NN`K‚Á8bþó†G k\¥)Âã)uÏ#tB}cpÀœ@ýë!­àVUZä·,ǃó°TÓ¹…šé¶ÁÖñ¥»áNÑWJZ¨Se÷ü¿KÃp£jü´Tƒ¹&å(0Zy÷Pô¢:औgÓ¡»ÊH(Ãcr6Üi¯Yxæâ^@„ßM]?*—{Ó±Ods¢ßÄUlÒqUl’jS˜ì›äYÁ/ÍæÆîåòPÚ.·ª;p<ÓBw!†šð‡âíº¤|NfïÆdc@·@œø"²‰L@à¬GzN¢LwU\mŒâdm—ÕEt˜~7»cØæÎeWèóX÷¤˜¡ÁºM’¨²gW–ZÕÉ f0Þo`+ôÿÈK‹¹!¨·µ¤Þ¢ïëbÕÇÀÖyšUÊlÊ:.K5=Int¹ÉF Ù[¦Ó¡²n¸ìI+yǯÔ>‹6쵶ȤQ<yÑÞåRß)ÆÚñÁ'ž×Ü’ ÜdFÉ6c2ìq‡»³TFKUvÁl~<7W,-m­^5wàˆ}½¸À¡ÍMgf½ =0=·èj?êCRà¯z²¤ =ü&R=ÁGç!Ü$ˆ¹2 ´;0 ÅP<ïB;ß­‘Ç…‹Sâ¤é²^]eª8quœúÂÕ[U|v¢mˆ§¥‚/Ô¨†y¡V1‚´0Ÿ E»EdïTõúÄÒ« °~ôDÃÎ2bç¾°CꦘO êìV­5ÕË,ỈÑbŸù¼Z6]­—#檕Ê ßÌJªš× $V&jãpQ¦9ÄZ»ÌƒRƒ¤¬ïüñÒV©c‰Ì°À–7 &iõØÙfü…•¥žƒÆ¤r,(Űvõ”E\éÓ\dye:5yÆ¿êâ‡tñ½×G)M*Ù¨Y¾~¢©³2m Ò©½­9MeÂ<$YÝ»üxCJTPÁã„E²y'¹ÍÛxš™4Óá½±óM¢ãî>þç×ËÛ·wö4Ô6áãÂÆüÞÌb$Û/iÍѲõfk3ªÒªÓñhmqnËÌùfCr–öì¬=áÝÊñ¯|w¯k¢}å©§ŸâŒøÍ<Ë‹~¥Ög BJûåè1Êdßï:ŸFŒ1{ÉÑ÷úðPŽ?8á.ÍÊJ­Ï c»÷ý xªíTØM:Už ޳w’–\èQE̓ÃM¶ÞTÙÔéOžª^tìøÛA#ÐLJ¬¼ ™ðaSýÉf„Dðð™f”@âö¿ˆxÛO)Ÿ /ö©8YX‰mª«ÿYÖy°G‘#D?Š"zÇÙRϨ|fwwïÕ¦$¨‹|˜òÿË´ÿ|¢ýב[aVú©æƒæ‰yÑÛ¥&Ñ›`c’f^LÓ,®ìÛ˃*±Žò–Ÿ–ößišÄ•e¨“Ç~5·¨Îe?­ö¿û!‰Xxìçqû9*‘À Í·{Aâ3^{‹Ll«dnÉ¿mçSýÃ× £‚]È@ÿâ”qsƒQÖz÷—Þ½»y­û‚0Úu›üûã\e}Kÿ¿¡É§ endstream endobj 3918 0 obj << /Type /Page /Contents 3919 0 R /Resources 3917 0 R /MediaBox [0 0 595.276 841.89] /Parent 3803 0 R /Annots [ 3899 0 R 3900 0 R 3901 0 R 3902 0 R 3903 0 R 3904 0 R 3905 0 R 3906 0 R 3907 0 R 3908 0 R 3909 0 R 3910 0 R 3911 0 R 3912 0 R 3913 0 R 3914 0 R 3915 0 R ] >> endobj 3899 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 521.78 191.558 532.684] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3900 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 473.959 353.706 484.863] /Subtype /Link /A << /S /GoTo /D (structspxprm_b232cb470b7f96330512dea46791644e) >> >> endobj 3901 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.959 473.959 480.121 484.863] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3902 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 446.372 129.711 457.276] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.442 446.372 174.149 457.276] /Subtype /Link /A << /S /GoTo /D (spx_8h_d0a5167b8e52a0cdc3990e35a324ba02) >> >> endobj 3904 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.879 446.372 219.692 457.276] /Subtype /Link /A << /S /GoTo /D (spx_8h_5c2eb2d8649eaab21e71efcd25d9236c) >> >> endobj 3905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.423 446.372 265.236 457.276] /Subtype /Link /A << /S /GoTo /D (spx_8h_89a689b848429cfa5780757a5eee9347) >> >> endobj 3906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.967 446.372 314.914 457.276] /Subtype /Link /A << /S /GoTo /D (spx_8h_9eb861d7c7437c5f974ad425da8b5664) >> >> endobj 3907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [318.645 446.372 364.593 457.276] /Subtype /Link /A << /S /GoTo /D (spx_8h_5eed4e6f2879b4607e60b4f77e2736bd) >> >> endobj 3908 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.323 446.372 413.564 457.276] /Subtype /Link /A << /S /GoTo /D (spx_8h_51b714ff0ed788c20f1b273ec551b6f6) >> >> endobj 3909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [417.294 446.372 462.535 457.276] /Subtype /Link /A << /S /GoTo /D (spx_8h_6c79d97dcc410e1a7a3e6e26ba3dabe6) >> >> endobj 3910 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.265 446.372 511.506 457.276] /Subtype /Link /A << /S /GoTo /D (spx_8h_3e86c3462619b4fdf0aeeeea9874757e) >> >> endobj 3911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 434.417 134.244 445.321] /Subtype /Link /A << /S /GoTo /D (spx_8h_16bc2fef69c592c5bcdc695633f17df0) >> >> endobj 3912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.426 434.417 188.199 445.321] /Subtype /Link /A << /S /GoTo /D (spx_8h_5a497ffd57345f2f0bf1c9abc56842c4) >> >> endobj 3913 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [192.38 434.417 242.154 445.321] /Subtype /Link /A << /S /GoTo /D (spx_8h_413fa882d2b67a792a35938738214057) >> >> endobj 3914 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.335 434.417 288.567 445.321] /Subtype /Link /A << /S /GoTo /D (spx_8h_8aba8fe47efe098740991771e97fe756) >> >> endobj 3915 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.579 434.417 352.611 445.321] /Subtype /Link /A << /S /GoTo /D (spx_8h_09b951b08ac818b9da44389a3ddf614a) >> >> endobj 3920 0 obj << /D [3918 0 R /XYZ 90 757.935 null] >> endobj 3811 0 obj << /D [3918 0 R /XYZ 259.254 413.66 null] >> endobj 3921 0 obj << /D [3918 0 R /XYZ 90 396.933 null] >> endobj 3812 0 obj << /D [3918 0 R /XYZ 90 106.909 null] >> endobj 3917 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3933 0 obj << /Length 713 /Filter /FlateDecode >> stream xÚÕ—]oÚ0†ïó+|™\àù#v’ÞµÛ@­6©¤MbÕÀ|H Úþû9¶“òhReÒreÇøø¿O^#0t¬»¾õ©MÀ€ú àq Á ?›ÃÀia„½]¿À™Ó" ÙíùBè^WLDì`ßÑHQ„dc8OýëkßÚXX&B«…™=ÊÀhi žËñ€ |ð¬f-K¨l gý°ÐÕ" …ˆ³¼HèBj G‰..œ¨Ò6º=ú1Ô{üõç¶ÛéÉ>NK•yZ؃œ¸zÁ³H9GÖ€j  rÄe  HU‹©£Uä¸ÈÞ;˜Ù"N¶¦œhº[„±~˜Äb³“¢¥S^õP²*ú‰3ª[&ãQ¡=!”ÔZãxjÄîv,0È“»ÙäêÙZÙlÎÊêf,¶£x¾Nærj`51Î öÛÇ{h49ä"U¤âà‹{Š%UD".ä(ª‡”Ò*8®XÏVI¶w•Ofž¡ÐÙtìFá¢`§(ÒÍUp‡ÙéQT(.è]·(šã ~ÉÏ¡C˜½ª;#,@"»^Mæxvpª Ébôh´[%8öÆE¥lšC¼S,™¨Õ]rY–«Ú—³Ë–æ¸ÅÇ-©,âÃŽÑÑx|è1·&ÛìÓTáh·[£\ˆhšÌ2J:sÓ0Ü£®þV]¦r,Jêk *Œ.Y*Ìd¯l§<²ð¤s1©ÉJá<.ã!²iÂøìcdýÀ5æ4²0ï¨_úoè Ns>0¹vÂUp;?᮸ǥòµðÿõ WÆV¹Ü§w{îÃ@–XòjŸ]饪õÍ•ž1#w'½„‰hÞ÷¬ÓN÷'†úë£ß0O?”ÂR¯D:7{-~~î}»¿Ó}} ¦½¡9a¾¬^^§":Ýé_¬H;ê endstream endobj 3932 0 obj << /Type /Page /Contents 3933 0 R /Resources 3931 0 R /MediaBox [0 0 595.276 841.89] /Parent 3803 0 R /Annots [ 3916 0 R 3922 0 R 3923 0 R 3924 0 R 3925 0 R 3926 0 R 3927 0 R 3928 0 R 3929 0 R ] >> endobj 3916 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 684.664 146.587 695.567] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3922 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 617.22 146.587 628.124] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3923 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 549.777 146.587 560.681] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3924 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 482.333 146.587 493.237] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3925 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 414.89 146.587 425.794] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3926 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 347.446 146.587 358.35] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3927 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 280.003 146.587 290.907] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3928 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 212.56 146.587 223.464] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3929 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 145.116 146.587 156.02] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3934 0 obj << /D [3932 0 R /XYZ 90 757.935 null] >> endobj 3935 0 obj << /D [3932 0 R /XYZ 90 733.028 null] >> endobj 3813 0 obj << /D [3932 0 R /XYZ 262.352 687.817 null] >> endobj 3936 0 obj << /D [3932 0 R /XYZ 90 671.089 null] >> endobj 3814 0 obj << /D [3932 0 R /XYZ 262.352 620.373 null] >> endobj 3937 0 obj << /D [3932 0 R /XYZ 90 603.646 null] >> endobj 3815 0 obj << /D [3932 0 R /XYZ 262.352 552.93 null] >> endobj 3938 0 obj << /D [3932 0 R /XYZ 90 536.203 null] >> endobj 3816 0 obj << /D [3932 0 R /XYZ 262.352 485.486 null] >> endobj 3939 0 obj << /D [3932 0 R /XYZ 90 468.759 null] >> endobj 3817 0 obj << /D [3932 0 R /XYZ 262.352 418.043 null] >> endobj 3940 0 obj << /D [3932 0 R /XYZ 90 401.316 null] >> endobj 3818 0 obj << /D [3932 0 R /XYZ 262.352 350.6 null] >> endobj 3941 0 obj << /D [3932 0 R /XYZ 90 333.872 null] >> endobj 3819 0 obj << /D [3932 0 R /XYZ 262.352 283.156 null] >> endobj 3942 0 obj << /D [3932 0 R /XYZ 90 266.429 null] >> endobj 3820 0 obj << /D [3932 0 R /XYZ 262.352 215.713 null] >> endobj 3943 0 obj << /D [3932 0 R /XYZ 90 198.986 null] >> endobj 3821 0 obj << /D [3932 0 R /XYZ 262.352 148.269 null] >> endobj 3944 0 obj << /D [3932 0 R /XYZ 90 131.542 null] >> endobj 3931 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3952 0 obj << /Length 1098 /Filter /FlateDecode >> stream xÚÕXßoÛ6~÷_Á½É@Íñ§$æ­Ý–Ìņf¶± È‚A‘éD€-9Õ4ûëGŠ”,ɶb§-¶>´ÞÝwßGÞ…À=@àjôn1úþ’  ð‰+ | 9Á`±7žÅx‚B^±ýÆ‘w™¬¥ý4“+™qèÉ4Ö(By£ñíâýè§Åèq„u på˜0 Ä›ÑÍ-Kýü=@Š· çRVm¤üÞ…œ]ÀMs•ËÇh•?þ…8ÒØí¶þë=YnsŠì²”Eœ'[•d©}­ìª\òo¯§ÐxêQˆÀ„ˆi„ bêhLRå“…:ÊËÍÏÿÜö³í œ0¦åç¦ÎŸ3-¶2‚IBHH³ý÷1ÆØ“±ªn«ï‡ „;\’Jnßd¥2ëJ=Ha_EY¨<Ñ·kf@õ§¯ƒù‰A!h½šnK'¶1Ty´n7ù<‰îÖ²xcŸ%®̧v-ÓD½ˆnÿŒÝD¾{1 ÃòKip(‚ÆàC©¾r!d$<7BEj( , šö?׻˦{¨2OÛ)¬KWx›R-£ø¡]ŽvgL`™ªnUÑC7a¢w/ áývÀuFz¬×j^Ʊ,zÜT™VCý ìœL]É­²H–“ªÛ‹=¿Ãå”#„¢[Ng†/ÃBÚ«¥}ÆÛ5”œÈ{G;³õ- ÁçòؾàGœ!»§}Ût”×…b.Ô‡´ÖŨM–Ë#ƒ€+9®½fù2I#%ŸO2o¶uл«õ—I¬Í\VwϽ ÕMêŸuîï^¿5˜VÅ>¢3ˆÇÆúz¬8}jܳüƒÈ¹Ó}·A·æÄ*ðùcbé?ã£b-_1&«Êº/‰/5#FË$žÛm¸ód}]AOý—6~…þÕ~â;›ú…’V0 ¡{WÃ…ž)W2•ùîv׸~­?\š/ïìß.]0|Áû Lœfoñ?Ì™¾³ŸõÙAÝêñcöéù^¦ýLÿ¢þª endstream endobj 3951 0 obj << /Type /Page /Contents 3952 0 R /Resources 3950 0 R /MediaBox [0 0 595.276 841.89] /Parent 3960 0 R /Annots [ 3930 0 R 3945 0 R 3946 0 R 3947 0 R 3948 0 R 3949 0 R ] >> endobj 3930 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 719.912 146.587 730.816] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3945 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 652.661 146.587 663.565] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3946 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 585.409 146.587 596.313] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3947 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 518.158 146.587 529.062] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3948 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 153.54 147.554 164.444] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3949 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 86.288 147.554 97.192] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3953 0 obj << /D [3951 0 R /XYZ 90 757.935 null] >> endobj 3844 0 obj << /D [3951 0 R /XYZ 262.352 723.065 null] >> endobj 3954 0 obj << /D [3951 0 R /XYZ 90 706.53 null] >> endobj 3845 0 obj << /D [3951 0 R /XYZ 262.352 655.814 null] >> endobj 3955 0 obj << /D [3951 0 R /XYZ 90 639.279 null] >> endobj 3846 0 obj << /D [3951 0 R /XYZ 262.352 588.562 null] >> endobj 3956 0 obj << /D [3951 0 R /XYZ 90 572.027 null] >> endobj 3847 0 obj << /D [3951 0 R /XYZ 262.352 521.311 null] >> endobj 3957 0 obj << /D [3951 0 R /XYZ 90 504.776 null] >> endobj 3848 0 obj << /D [3951 0 R /XYZ 90 221.788 null] >> endobj 3958 0 obj << /D [3951 0 R /XYZ 90 207.409 null] >> endobj 3849 0 obj << /D [3951 0 R /XYZ 263.318 156.693 null] >> endobj 3959 0 obj << /D [3951 0 R /XYZ 90 140.158 null] >> endobj 3850 0 obj << /D [3951 0 R /XYZ 263.318 89.441 null] >> endobj 3950 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3969 0 obj << /Length 1089 /Filter /FlateDecode >> stream xÚÕXÛnÛ8}÷Whßl æòªKÞzÙ.vÑllì. E¦¶äPTÓü}G"©XŠ-ÙE´O’(ræÌ9äÌHØ»ó°w1z·ý~N#/B‘O}o±ò"ì>A‚o±ô®Ç>Š&S‚1Û¯è~2¥ÏÓµ4wWr%Õ„„c™%0Ä0Žð˜2¹Y|ý±=Œ8© ‹LxÉft}ƒ½%Œô0bQè=Ö³6§ ®ko>ú{„{AR†°/ˆ#⦙6辨x¹2ðÌÈÿXàùåŸß^]Ìá¾Æ N¦$@>åÆZk¼çxÇ9 ç,ª'WkCµù$Ï&üNˆK¥ 3 öÒÜ"ªß¬ó$ÕOfDÛ7+%J`±šð4ñÅÕØ¦Ö] á\Êš`캳_]Œ¼ëƘsÕ 4+ §n^®Œ÷Ø\–²HTºÕ)ÄQä+‹òÞ þör†,)»Š…Œ‚-A(î òO¨¨HÀcYÁ3wëüxqZØ#Tˆ NêKe;NÊrcáVÆÁa£›Ìîô}[7%×±NkPi¡ÓdÎN̆ýySRæÁJä¶ôeíZÅ©¥*ÎZ˟;c†„(ÀÕN ÔEͱ¡†û»S)â‚;j¶•Ÿ.À“qÓ¯d¡‡ùI³6§–®ëÍM—‹VSÎÆ¢(â'‘[™ôACDi3ýŸ d©±L´;û6Œü <[šZnß䥮®} !õ?:²Ð*…3Ú2`p\Øw¡ aEÌÍŸeÛÒn„j¡VñzWr•Æ·kY¼io‡ùÌ\Ë,Õqp™/°qØrôÛ`ÉCa€Á Yð©Ô¯Gˆ8mïšá0 ë¾H„XÐ$·9Ì.]µ‘ºT­Ã·.mònÒ½Œ“ûÝDõ¼Ãà od¦Û Š4­kÐÎŽ¢Tt+Š€TÏ  €¬0/“DfêdÎÀFØo„X#3›¤ë ÒåÞ˜\…2»·?Ï Œ‚02yâ±Ù èªHÈ:Y¶Køžì:H{‡Fˆ‹DãΡ8d„öÑØÞêÛ¦ÔpÕï‰[OŸ2§ŠÝN›\É„M7¶çj™f±––ÍG©ši-ðöÆ…{»LXfƒº}ê8©Qw£ [_”á*ùBâäÐɈ ÕÉ­¥ë;H§«îdl…?ha'žÔÉÑ•´º˜ã:×’8¿dKJ»BÆ–ûÓ[Ñ+÷ q~Špqª^¥÷¬U«°ü’ª±CÇÏipÂ×]wåPíÔã6 ò>ÅÄÏ®o)ÆúôË·úø„yÐÂ#bòÚŸ~àŠÏºÿÔ$?Û©k,uÿÑø°çHxì/÷kDXh͈¾m¨2“ê¹>;\¹›óŠvyk|s!øŒ“3˜'Š µÝk5×EüïûùŸ³wæž#‚ÛõÿCþõéNfÝH¿ÓK¡} endstream endobj 3968 0 obj << /Type /Page /Contents 3969 0 R /Resources 3967 0 R /MediaBox [0 0 595.276 841.89] /Parent 3960 0 R /Annots [ 3961 0 R 3962 0 R 3963 0 R 3964 0 R 3965 0 R ] >> endobj 3961 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 684.664 147.554 695.567] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3962 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 312.626 147.554 323.53] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3963 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 245.183 147.554 256.086] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3964 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 177.739 147.554 188.643] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3965 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 110.296 147.554 121.2] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3970 0 obj << /D [3968 0 R /XYZ 90 757.935 null] >> endobj 3971 0 obj << /D [3968 0 R /XYZ 90 733.028 null] >> endobj 3851 0 obj << /D [3968 0 R /XYZ 263.318 687.817 null] >> endobj 3972 0 obj << /D [3968 0 R /XYZ 90 671.089 null] >> endobj 3852 0 obj << /D [3968 0 R /XYZ 90 381.066 null] >> endobj 3973 0 obj << /D [3968 0 R /XYZ 90 366.495 null] >> endobj 3853 0 obj << /D [3968 0 R /XYZ 263.318 315.779 null] >> endobj 3974 0 obj << /D [3968 0 R /XYZ 90 299.052 null] >> endobj 3854 0 obj << /D [3968 0 R /XYZ 263.318 248.336 null] >> endobj 3975 0 obj << /D [3968 0 R /XYZ 90 231.609 null] >> endobj 3855 0 obj << /D [3968 0 R /XYZ 263.318 180.892 null] >> endobj 3976 0 obj << /D [3968 0 R /XYZ 90 164.165 null] >> endobj 3856 0 obj << /D [3968 0 R /XYZ 263.318 113.449 null] >> endobj 3967 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3997 0 obj << /Length 949 /Filter /FlateDecode >> stream xÚíWKoÓ@¾ûW¬àb²Ý§ÜZJ+ h"@*rœMb)q‚íPÚ_ÏìÃNlÒÒ@ qòÚÞ™ùæûfgw š!‚ν“‘wtÆ”à$d!MQBPR,E£ ºôCLI0 „¿NÇ >ž&‰–/”]¨©*ûªÈô§$ŒCŸR\^y/FÞWB4‚¨ñ.#q‰²¥wyEо¿Bó$F×fÖ Æá¹@Cï½GîEÊ8&¡l&X`&Ú¼¨-ºo%þj]_§“öÍáþL$¾ûôåøâ|cªñB°pÈ„õº×沆ÃP‚­±Ñ~?%[š60•¾*ëÊ~—y–.Zˆðo±ÊòúÆ~©W͈šf›ÍÒ¾_k¥µQŬžcƒ|`Atà•AëYúË™ÓáâÜC—Æá´T_›ð-nka‰oæ­J‹ µ‰ª²2‡$ ;›ÐÔ!Ÿ;v߽Ď©]Ù€_Î0Mºª…}Õvù¾²®XG)*[÷«zˆlÓ£«a©&Õ<ŸÖ[•tP‹Yþí2‰ŽLQ_¦ÛÖKùöA‹J$ìyªÿlé ÿÞ*j߇ a~Zæé¸éϧ«l³TEš8N &0ÉŽ9¦ÎP[9³yZÚèTìD)æRl…!|Ä‹¨¯Zÿ¢ÊrYÍ.!JùW­¥Ðµ$Ó&ƒ8Æ1X¸À4Ž~w2žyÜ¥k7ß§y‘-60Áë“ë¬lxþä×DŸ¦µ“nX—›¬ÞبUGì^Ó @3` ‡Ífõ™ÁFÕ+ X*ãõþbÖå²cÝ ‚b@ @Gº¦N„«é‘)“±^›Eêʲ.u§E…ºL·e¹Ní¥ª5Ï€ïß#O/&™ Ž©äŽAõŠǣìéÄy¼Ÿ5È—ûÇ'¯_¼Ý·0õ¢­ò[µššÑï©`›=Ú:‚>©¿üÔÐiÎ~î ‡C3\bfœmËÝ"HLy»#ê6oætP‚Ú)›"¯ï(†;´Pαˆ9¨ËqB飨 )çEîZLÍÝ&ûç,Ñ©Z—|•¥µšFFãÏpñXTdk½FoþÓaó‚ÝYýë\<ë²þ_6¯JýTô/Ì!¸¢ñCïËÍ=Žtì öž,áx']èsU¨RGu›ŠÛáß4ƒ3}XVcûÚ%Ï}&#ûÆ\ííqVÏmŽ´Ÿ_¿<±caÎlz4¾iΠßofªègúv^ñ] endstream endobj 3996 0 obj << /Type /Page /Contents 3997 0 R /Resources 3995 0 R /MediaBox [0 0 595.276 841.89] /Parent 3960 0 R /Annots [ 3966 0 R 3977 0 R 3978 0 R 3979 0 R 3980 0 R 3981 0 R 3982 0 R 3983 0 R 3984 0 R 3985 0 R 3986 0 R 3987 0 R 3988 0 R 3989 0 R 3990 0 R 3991 0 R 3992 0 R ] >> endobj 3966 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 684.664 147.554 695.567] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 617.22 147.554 628.124] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 549.777 147.554 560.681] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3979 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 379.837 168.754 390.741] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 3980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 299.074 186.089 309.978] /Subtype /Link /A << /S /GoTo /D (tab_8h_9c80120944556169d230d4cd051d88cb) >> >> endobj 3981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.64 299.074 271.857 309.978] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 3982 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 284.454 195.082 294.359] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 3983 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 260.22 203.065 271.124] /Subtype /Link /A << /S /GoTo /D (tab_8h_8b57d9bacbabd2b516d77220cdb6167d) >> >> endobj 3984 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.563 260.22 250.377 271.124] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 3985 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 221.366 206.831 232.27] /Subtype /Link /A << /S /GoTo /D (tab_8h_27460f165fb03a075a1c6c6a48f33c62) >> >> endobj 3986 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.329 221.366 254.143 232.27] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 3987 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 182.512 208.026 193.415] /Subtype /Link /A << /S /GoTo /D (tab_8h_bf96fe5488df6796ec2606b974f330fe) >> >> endobj 3988 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [208.525 182.512 255.339 193.415] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 3989 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 143.657 203.613 154.561] /Subtype /Link /A << /S /GoTo /D (tab_8h_e2ee098afabb7a7d225f930276ffb441) >> >> endobj 3990 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.111 143.657 250.925 154.561] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 3991 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 104.803 203.613 115.707] /Subtype /Link /A << /S /GoTo /D (tab_8h_4abf39ca4cfc2ea073bffdbb98caa46d) >> >> endobj 3992 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.111 104.803 250.925 115.707] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 3998 0 obj << /D [3996 0 R /XYZ 90 757.935 null] >> endobj 3999 0 obj << /D [3996 0 R /XYZ 90 733.028 null] >> endobj 3857 0 obj << /D [3996 0 R /XYZ 263.318 687.817 null] >> endobj 4000 0 obj << /D [3996 0 R /XYZ 90 671.089 null] >> endobj 3858 0 obj << /D [3996 0 R /XYZ 263.318 620.373 null] >> endobj 4001 0 obj << /D [3996 0 R /XYZ 90 603.646 null] >> endobj 386 0 obj << /D [3996 0 R /XYZ 90 536.203 null] >> endobj 3859 0 obj << /D [3996 0 R /XYZ 90 513.891 null] >> endobj 4002 0 obj << /D [3996 0 R /XYZ 90 513.891 null] >> endobj 1079 0 obj << /D [3996 0 R /XYZ 90 494.364 null] >> endobj 390 0 obj << /D [3996 0 R /XYZ 90 479.793 null] >> endobj 4003 0 obj << /D [3996 0 R /XYZ 90 398.811 null] >> endobj 4004 0 obj << /D [3996 0 R /XYZ 90 318.048 null] >> endobj 3995 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4041 0 obj << /Length 1119 /Filter /FlateDecode >> stream xÚÝX[oâ8~çWXÚ—Dj<¶c;ÉHóÐ Œf¶v™Îª­PL‹ ã$*ÕhÿûډÒ(ì‚vÔlì“Ïçòã ­“~ë]‡ €'ôG @Àã2‚An,1²Œ²²ðަȂ¶C²:ã‰({]1ÒÆ¾%âHÜçÆ®}×ÿÜj÷[?ZX­†.Й=—hÚº¹C`¨Æ?ÝÀO…ÔPâªvz­?ZÈhº®--@K`Ä!u}àa1¦¥·„°Bê;pã0eÓoCq‹‰…™ÔJÊ£m·Ó*Óç$)§éC gÓ'«åëí»EÀWÊsª•'rJ€ƒ) ¨ÑýL̤íz–ˆÂL á+p5_8qa€÷劔ÌaW4í¸D>p¨ 130í8Ÿ fã$NkM*•L*¼ÈÙf÷ …ùªçŒK -òs‚)”/˜òE©Gß\ëø¤Ýíz_OOÛ½Þ @—Zì¢AGTsýe°/_ÏÏW—Ÿ¾ôÛÝ ˆx{Ä‹öÅe׿ÌúsÙÏÑ’jÚÁÌ„åÄv™u|6¸²bw/z«üû¡,XîÚÅÐ:Wøß7ÀÒ£ÍXwmcd]vÏÏ6À²²ùK‹4ÉMTr O‘œ@Wtò8Ú+µÇqö*³Çñx• ·ˆ!ýyñ'œL’è¨ì//Ì@¤Îs¿ß¨­‡{Ö‘I3™G¯ë2“Ó†éjøÇtB8djBÆj„\ãÚe)Çú¸’Q Ê¼¦ÞÔÊ–C}6 ×(Ì'Ù’©Ú’D–£ª“=Š­33%âÁv‡m80ÓuØOäÔv=•Š\àAÄýzàŽ£ù¸ÜsìJK› +Ÿ„&fÊêD>ÛŒYÿÁù{ð~4Óµäy§,\Jº=Eˆ«¾‡wŒP*£½f¸O‹“ßnJ Ólû§RÄêT9MfÏ¥Ò¦ÌJòl‹7•à#)Ä¡3AâoS›É¿Êp嚥ùMã™ÌÖ…jÿYOu£‡ªËXô<×­‡íJ.*Ú¯™n{ˆa*²§bê¬B8߇Dù¡·žÈòÙÛ.“s’:l~¡ðnakž¼ã(IäðŨ˜ˆéËãÁ0Éï«÷žyãX¾<÷¤!‰œ ¾Yà§Y˜Ußo_·QaK½Œçbâd‰ó¤—3¼‘6fV§ŠIÓâ~ÿ¿!%ó7M„z°Wb~p"\ë+¿ÖB“a¦Y±¶x0ú¦—å8TfííZ½äÔèQÝ&ŠÀÕÂË0Ô½FtW¦¡…©·|>Zõúf8VE`+ï»Ê:Æõ\…1O«‚®ïIY.ãêj”¦¡æÈƒþéædl¾sµ2ö·}(®ž²¹º¨”OÙ,€¬ŠáGë7?aJEbt¼¨:›0KÜ—xÙ`ôžâ÷Ì+ÿ„‰Ù¨´lµY]ŸöÎ?˜' â¹\÷îÍ]à,™??ˆ¸f¹²ôo`I{x endstream endobj 4040 0 obj << /Type /Page /Contents 4041 0 R /Resources 4039 0 R /MediaBox [0 0 595.276 841.89] /Parent 3960 0 R /Annots [ 3993 0 R 3994 0 R 4006 0 R 4007 0 R 4008 0 R 4009 0 R 4010 0 R 4011 0 R 4012 0 R 4044 0 R 4013 0 R 4014 0 R 4015 0 R 4016 0 R 4017 0 R 4018 0 R 4019 0 R 4020 0 R 4021 0 R 4022 0 R 4023 0 R 4024 0 R 4025 0 R 4026 0 R 4027 0 R 4028 0 R 4029 0 R 4030 0 R 4031 0 R 4032 0 R 4033 0 R 4034 0 R 4035 0 R 4036 0 R 4037 0 R ] >> endobj 3993 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 706.961 206.383 717.865] /Subtype /Link /A << /S /GoTo /D (tab_8h_141c3365f0364c01237aeeb93ddb717e) >> >> endobj 3994 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.881 706.961 253.695 717.865] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4006 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 668.107 206.383 679.01] /Subtype /Link /A << /S /GoTo /D (tab_8h_49872082d67e357c5c68a633824133ae) >> >> endobj 4007 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.881 668.107 253.695 679.01] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4008 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 587.344 212.47 598.248] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed) >> >> endobj 4009 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 572.121 202.448 582.308] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed42a664a8df3b0a485f49eb0e7c8108cd) >> >> endobj 4010 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.579 572.121 339.532 582.308] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2eda0705873598b9fa5bf3b9afbc598a6bc) >> >> endobj 4011 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.664 572.121 447.198 582.308] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed1e503c059ddfe8f4aca37d335f7271f8) >> >> endobj 4012 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [465.329 572.121 513.996 582.308] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed09c02b9ffff721d3f2dd64c318d7c38b) >> >> endobj 4044 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 560.166 181.616 570.353] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed09c02b9ffff721d3f2dd64c318d7c38b) >> >> endobj 4013 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 543.882 192.117 554.412] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2edc6f6b4c9eca2bd36b0bf2f89309f9297) >> >> endobj 4014 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.687 543.882 318.124 554.412] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed9d77712eeed3ab7d2bf25e5251c9451b) >> >> endobj 4015 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 488.649 151.608 499.553] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4016 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [301.262 488.649 331.478 499.553] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4017 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 474.028 254.609 483.933] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4018 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 449.794 161.013 460.698] /Subtype /Link /A << /S /GoTo /D (tab_8h_e403ff0b740916989c7386728df001c8) >> >> endobj 4019 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.456 449.794 219.672 460.698] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4020 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 410.94 155.374 421.844] /Subtype /Link /A << /S /GoTo /D (tab_8h_87b3a2a84bab396a528af8382ce9ad04) >> >> endobj 4021 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.698 410.94 274.915 421.844] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4022 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.793 410.94 364.009 421.844] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4023 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.898 396.319 230.794 406.225] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4024 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 372.086 156.57 382.99] /Subtype /Link /A << /S /GoTo /D (tab_8h_0f3501cc592c78e0f2cb9922466589f2) >> >> endobj 4025 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.013 372.086 215.229 382.99] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4026 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 357.465 222.976 367.37] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4027 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 333.232 152.156 344.136] /Subtype /Link /A << /S /GoTo /D (tab_8h_6b3768349e9a5e925aab24effddc584f) >> >> endobj 4028 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.121 333.232 234.337 344.136] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4029 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 318.611 230.301 328.516] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4030 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 294.377 152.156 305.281] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 4031 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.599 294.377 210.816 305.281] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4032 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.893 279.757 231.79 289.662] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4033 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 255.523 154.926 266.427] /Subtype /Link /A << /S /GoTo /D (tab_8h_006d6e8cb373e0dc3e9ccf128adb9411) >> >> endobj 4034 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.369 255.523 213.585 266.427] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4035 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 216.669 154.926 227.573] /Subtype /Link /A << /S /GoTo /D (tab_8h_aded7db92aa2758198b33f35f5f18d6e) >> >> endobj 4036 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.369 216.669 213.585 227.573] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4037 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 135.906 211.354 146.81] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4042 0 obj << /D [4040 0 R /XYZ 90 757.935 null] >> endobj 4043 0 obj << /D [4040 0 R /XYZ 90 606.318 null] >> endobj 4045 0 obj << /D [4040 0 R /XYZ 90 507.623 null] >> endobj 4046 0 obj << /D [4040 0 R /XYZ 90 154.88 null] >> endobj 4039 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4081 0 obj << /Length 1785 /Filter /FlateDecode >> stream xÚíXKÛ6¾ûWèEF²Š¨·¶§$›M¤š5ÐC´DÛDô )ï®ûë;ád­c{Ó ‡¢È‰Ôp8~ó¤|gíøÎëÙ‹ÅìÙu;¹—'Aâ,VNî;i¼8`΢t>¸‰Çüùó}ßíùrù®·™_±ï^ËJÐì½X 5g™+šIy’%.cÑüÓâÍìÕböeÆà4ßaFzœzi;E=ûðÉwJ ¿q|/Ì3çÎpÕN„0VÎÍì÷™VÓ ôü$Þkê1«ë•è9èW’‚WBJv½lÔ ùA¾sD^å$g±n汫Úm/¡ñ+reÝU¢MO‹ýÆru\õÄÑ®–®]ÜÐÒ/oˆ¤{Þ”\•Dî7ÜŠ+¯4Mïd¿±Ëyà»ÛŠ+Z*ÚV•²á½ÐOçQÈ\é /…×`ÌËc Ç„@ð{θ4)ÅGß“Ÿº·’[ª¶ý¼íìn¾¬à 0nŒÍYìîh× „øjÑoÚr8²¥qi·šŽJÜU«hwÑÖ€ê­ 1A<ªóýÙfLÙÖ–­õ¢DHÞj;[òÄ@ØáÙØ8£Â|V #²Š¡·ÀA’£‰dƒº94B­D9•kb^‹WKèjCyJ¹Hã€ÿŽÂ(•üŒNi“)§áå“'4)*®5M).ì.J8kZ!ûòNCÜ ÌÞ)?@íR/ "ÒB6½=ôÀ1›“ÞÄ&TÁßµ9ÃÍE‡ß`N±ñrJ’ÉM+%Ä 1†…RL:Õb,ÝÊ’ŠƒMR0Ö¼¡8FÚ¹8²G‰#\!ž¨Nç7Æ­È߃¥SýYLƒ§·Ð)ÙXï½õŒ!(Y“¨CãÛÏ'41bÒ|8V¼s:†&‹`4ŠþœåÂ!ìMjÙ&ï“1Pn1xµÝsÐxþð$üá>àÜ–‚Дh•ÉÄõô i8ÇÚ”;¡Ä1Œõ¶ë*i|&MMÐãh’If”LâØõ°L3JgÈ0ª<¼Bo7ˆï4­cÚ´ScE”mEšÌ…c:ô4(©‰F}Ò$$aL _ö{ì¬í§*@q†|O‹ÐÛaØÜ…ì+{ý‹cH)Ó ç“`Âe…@¨Ù: D¨£g"·ƾ¼„6#äëCWû‰î>Чs„ÿXž1ŠèàþœˆI‹øàÞ¦û³"&ÍM¶ž—å€Éjˆ%/>[?.Ç& |¾—KYIH¨Iìî}ÔÖÇîhWK áLÅ–Ú|̃ùu/xyþÔKYèg^Æ‚è‡'Ñ/ºÝ¿€~öüÓàG'Á_Zâ¿ãÿÉÿÓñIÀ›ëGöùôÇm‡?z“ÌËYö­ÿy‡ÿ»‰—§afÿïÆ¹Ƕ’¾˜´(C‹óÛ0¹FýÄ’>˜±Ë8¥¯ÀgEyD¡7ûë šGæo÷´^µ÷»µhoú7íu R endstream endobj 4080 0 obj << /Type /Page /Contents 4081 0 R /Resources 4079 0 R /MediaBox [0 0 595.276 841.89] /Parent 3960 0 R /Annots [ 4038 0 R 4058 0 R 4059 0 R 4060 0 R 4061 0 R 4062 0 R 4063 0 R 4064 0 R 4065 0 R 4066 0 R 4067 0 R 4068 0 R 4069 0 R 4070 0 R 4071 0 R 4072 0 R 4073 0 R 4074 0 R 4075 0 R 4076 0 R 4077 0 R 4078 0 R ] >> endobj 4038 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [221.075 659.698 251.292 670.602] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4058 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 618.163 120.326 629.067] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.389 618.163 164.116 629.067] /Subtype /Link /A << /S /GoTo /D (tab_8h_e403ff0b740916989c7386728df001c8) >> >> endobj 4060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.179 618.163 202.267 629.067] /Subtype /Link /A << /S /GoTo /D (tab_8h_87b3a2a84bab396a528af8382ce9ad04) >> >> endobj 4061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.266 618.163 258.55 629.067] /Subtype /Link /A << /S /GoTo /D (tab_8h_0f3501cc592c78e0f2cb9922466589f2) >> >> endobj 4062 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [370.198 618.163 400.415 629.067] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [479.635 618.163 511.506 629.067] /Subtype /Link /A << /S /GoTo /D (tab_8h_6b3768349e9a5e925aab24effddc584f) >> >> endobj 4064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.001 588.583 186.871 599.487] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 4065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.577 588.583 364.794 599.487] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.417 576.628 368.287 587.532] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 4067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [194.816 564.673 245.515 575.577] /Subtype /Link /A << /S /GoTo /D (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) >> >> endobj 4068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 547.049 123.643 557.953] /Subtype /Link /A << /S /GoTo /D (tab_8h_006d6e8cb373e0dc3e9ccf128adb9411) >> >> endobj 4069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.018 547.049 175.658 557.953] /Subtype /Link /A << /S /GoTo /D (tab_8h_aded7db92aa2758198b33f35f5f18d6e) >> >> endobj 4070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 414.232 164.32 425.136] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 360.002 138.508 370.881] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000024) >> >> endobj 4072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 339.913 314.924 370.881] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4073 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 278.556 138.508 289.435] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000025) >> >> endobj 4074 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 258.466 314.924 289.435] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4075 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 197.109 138.508 207.988] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000026) >> >> endobj 4076 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 177.019 314.924 207.988] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4077 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 115.662 138.508 126.541] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000027) >> >> endobj 4078 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 95.573 314.924 126.541] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4082 0 obj << /D [4080 0 R /XYZ 90 757.935 null] >> endobj 394 0 obj << /D [4080 0 R /XYZ 90 733.028 null] >> endobj 398 0 obj << /D [4080 0 R /XYZ 90 474.826 null] >> endobj 4005 0 obj << /D [4080 0 R /XYZ 90 452.514 null] >> endobj 4083 0 obj << /D [4080 0 R /XYZ 90 452.514 null] >> endobj 947 0 obj << /D [4080 0 R /XYZ 359.865 417.385 null] >> endobj 4084 0 obj << /D [4080 0 R /XYZ 90 401.168 null] >> endobj 949 0 obj << /D [4080 0 R /XYZ 90 333.781 null] >> endobj 4085 0 obj << /D [4080 0 R /XYZ 90 319.721 null] >> endobj 950 0 obj << /D [4080 0 R /XYZ 90 252.335 null] >> endobj 4086 0 obj << /D [4080 0 R /XYZ 90 238.275 null] >> endobj 951 0 obj << /D [4080 0 R /XYZ 90 170.888 null] >> endobj 4087 0 obj << /D [4080 0 R /XYZ 90 156.828 null] >> endobj 952 0 obj << /D [4080 0 R /XYZ 90 89.441 null] >> endobj 4079 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4104 0 obj << /Length 1565 /Filter /FlateDecode >> stream xÚíXKoÛ8¾ûWØ‹Ô\>D=rK§H7i²Ž‹î"-Yfl¡¶ä•ä&î¯ïCÉr"gÛb‹ÅžD Éá<¾ù8uæuÞ N&ƒ_ÏxìÄ$xàLî˜:aÀˆä̙̜[7 ŒzCF)uëdêùÔ% oÈ%uϲ¥ÂÑXÝ«Òc‘«òT‹â \Ƥ÷iòv0š þ08:Ìh—! …tÒÕàöuf ëP"âÈy0«VŽÏ<—ÎÍà÷}ÑR. äÎRÂI`­ýe¦>RÊsk#_©úN•媚·¢æ]Úœ„––skòøÍÀRÇ»ˆd>wªÖèsšÔjöD>Á`Ú1˜E$¤±3d ’ÖèãÙ 6sî‹Ó$ýüà1ê&å¬BQZ¬ÖIM³eVo½@º¯P¾©”=ù™Í·/ùhggY©Òz¹Eeyáqé>àK–WµJfDo{ø!ƒ 2á }N˜Œö¢Œþ#¯þ=Ñþ+Ñ÷¢Æ>ü'¢/ÿǾ¾€èÇ~'úÂÆ~”oVªƒ‹µM¼Ðw·k›‹Ó"…ù¼ÆpØ4ä>]„Ym ´=ÍØî¹ÔW"!Eyt C~ÐñŒ3ÂÁ½ˆP)PÁÄ“Ò=>Çw7ï_¿ÝÜôêÑ0Iš`tv½{qqw}uþn2ÿàÖËÑåÕXCìÏÜx¢óx|zwíEð_Þü¤‚?^ÞÇnüà1é^/N÷<Ňz¥~Ž|›ù³Mžî@t6~ÜÝÛâ&Ëë6Yžáø#•TOXï%ŸQÈ~ƒR£,Y.‹´ýºz¹lVAJ{Ôs'µ /{”E$úÚוPzMö©õÂYÐìú­Gm@¿5ñ„î'«¾ªËMº ̺\¡(™‚*Ü÷ À£¢ÇŽø!oÖèÆ¨'Xp ¾Ó#™ÉÛPP›cC%—­ &ÔÒ%NÈq¼sXgÐh‚ÜsL0°&J_¸+µ*Ê-N!¡ê5e™lí‚,·²x¦w‘ÙãLPÐÆO+Ég8€¶Êê{P–LUYáKq³õBÙ -u“3uoX³´_t5%˪zi؆chËçúbt|3ò À¡ûîJ·ª“ÑQOHÀP!š*}Ð]³ ‚w00‚F£k\2ãE±YÎ<³cªP¹­³d™}UÍĶ1aLDU? €¸àÜ]U•Mõµ¦Ï-ÕZé+zi.Nâ ýH¸W9Nš„hct¯PV5“GÀL†'Û]Õ€'䄺ÅgÃAú¢@Dn‘›«F˜g±Sk^jè.ÉÇ «ù~§÷0nÅ¡ôè™q"tW›Æ¤©=lO(ð9dûï»ì5Ìkbc›È¶ì€TVIžÌ•&jÛ¤”J#kîIÝÐ,Ue{ã< Ü*`!ò'Á`µg¦ a”¤õªÓZ9Umeû/ã©^gÅzƒžä¼|—AÛᇦýš 黸d¥j ‚C-Èó¶M¢nBxã‘Oû.,àPé?»¯µŸ:J´Ò¹> B½zÁq R—Ò,ÓˆÝE°íW[z57–U»øûÆ´¨²¹ V"ô¾¯{2ýFÔ1Ç.²å²2ö ßÍj”gÚSUý …õ"±Óë®Udfa³næU¥ì¾Æ/]­H(™*•ã:¬-ÚZ] »@UâÈ@ÿ1Uë—d÷íqzf‹oIiÎ7€Ön}YîÙÙ,´ƒš¼„®œ,] (M´õZØäMKüZjHXŸds<ÃW“C¦¯Pô¬Z1¥›²:ÏqMa mÐI(àCEs/,ƒ ÔY>ïsÚ¢GU'ÀC6æZË^aj Bj VÙa'¥õ_UY¦ç8ToChÒbíuÂßUo—/ÕÀ5Q³t²°vÂ×Rz‡þtãîn–IÙ|ëA8³¼-Ä䃳Ï?O)‘qã;ÿ(5’‡`'þI’1‘Ò†àÊõwSÃM ~Ù ÎtÇ ¦øàƒÑ#ŸÉß8eÜ…^ÛŇ×7ç'8öÍ5ÃÆÛ¦ÅÜÎUþÔÓoL›ë¦ endstream endobj 4103 0 obj << /Type /Page /Contents 4104 0 R /Resources 4102 0 R /MediaBox [0 0 595.276 841.89] /Parent 3960 0 R /Annots [ 4088 0 R 4089 0 R 4090 0 R 4091 0 R 4092 0 R 4093 0 R 4094 0 R 4095 0 R 4096 0 R 4097 0 R ] >> endobj 4088 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 694.532 138.508 705.411] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000028) >> >> endobj 4089 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 674.442 314.924 705.411] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4090 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 606.905 138.508 617.784] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000029) >> >> endobj 4091 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 586.815 314.924 617.784] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4092 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 519.278 138.508 530.157] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000030) >> >> endobj 4093 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 499.188 314.924 530.157] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [253.648 245.208 283.865 256.222] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.829 227.584 220.045 238.597] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.163 215.629 374.379 226.533] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4097 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.723 159.972 403.94 189.038] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4105 0 obj << /D [4103 0 R /XYZ 90 757.935 null] >> endobj 4106 0 obj << /D [4103 0 R /XYZ 90 733.028 null] >> endobj 953 0 obj << /D [4103 0 R /XYZ 90 665.476 null] >> endobj 4107 0 obj << /D [4103 0 R /XYZ 90 650.906 null] >> endobj 954 0 obj << /D [4103 0 R /XYZ 90 577.849 null] >> endobj 4108 0 obj << /D [4103 0 R /XYZ 90 563.279 null] >> endobj 402 0 obj << /D [4103 0 R /XYZ 90 485.614 null] >> endobj 4047 0 obj << /D [4103 0 R /XYZ 90 461.399 null] >> endobj 4109 0 obj << /D [4103 0 R /XYZ 90 461.399 null] >> endobj 4048 0 obj << /D [4103 0 R /XYZ 107.713 402.23 null] >> endobj 4049 0 obj << /D [4103 0 R /XYZ 107.713 386.29 null] >> endobj 4050 0 obj << /D [4103 0 R /XYZ 107.713 370.35 null] >> endobj 4051 0 obj << /D [4103 0 R /XYZ 107.713 354.41 null] >> endobj 4052 0 obj << /D [4103 0 R /XYZ 107.713 338.47 null] >> endobj 4053 0 obj << /D [4103 0 R /XYZ 107.713 322.529 null] >> endobj 406 0 obj << /D [4103 0 R /XYZ 90 306.744 null] >> endobj 1783 0 obj << /D [4103 0 R /XYZ 90 283.49 null] >> endobj 4110 0 obj << /D [4103 0 R /XYZ 90 283.49 null] >> endobj 4102 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F46 2400 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4126 0 obj << /Length 2242 /Filter /FlateDecode >> stream xÚí]ÛÆñý~ôNëÝ%— Ї´=Ãqœ&¾Cû`OZˆðC!©œå_ßùXR¤N’ÏIšEŸ¸;;šï™IïÁ“ÞË«oî®^ÜèÔKEéÈ»[{©ôâH £•w·òÞù‘Pr6WRJ¿Ëîg¡ôÅf6×Fú7yayõÖ®m3S‰o«%‚Ò(‰|¥¢Ù‡»o¯þvwõó•‚Û¤§ˆº‰EoY^½û ½À¿õ¤ÒÄ{$¬Ò uß»½úñJ:Nå˜cŽ8VªÀ‹u dd˜í÷2”xý‹›0ãjšÒkb°§ ŠcT%påPÿ1SJùvÙÕÍljã×kþ¶zè6¼~ßÇMÝZ\F¾-li«®eV’1yŠ Lzúï¥qü*5 DOÙ}q{‘Hã ÁóD„‘öæJ„iÈHê•°Ro„ô5X4ŠO%I:¡¨¿€âb±pD•QÕJ¨tÊç›§*IDc¢ 'ÎÄ2‰Pª×Ic—u³b½w;¶I;6Tt8Í>Δñm;µ#ÃUÞ\kàC%À¬©qᖼÊ: Vó³¦ÉönY­x”ðk³åW©ŸW+‹w}Ì«>û…®&/2Ƴy$Ct› ¡×ï>ô·¸ëv­ug]ͤW¶³M™W„ÃE!”HNE!TÄÀ *£Éë]ëâ#´yp¡úöå•÷Ž!î·M9‰wBjh™±OèÛØuÝØaëÊzWu¼F]á·´%¨Bù{‡[;Ô¢¨—¤lÜ­1æ©tÈÈ¿ÛØ¼ËQìl{J\Ò!&©e½ÍQ‹¸Î+º VÎìg„7òœðpÒvÍnÙ‰áRˆUé÷Š©ÀZþnÑVm›ßSÆ]ßÖ:Ì×øI( äÂ’Ò©N³Õª±­#FºCÃ)ZbeBûøžß¸Íã&G¯Äå&k´YéVvÊ\ƒ‡:ÒíÀg‡N|BÁÎÝ1;x#æ;ÞS@(éüä¼ød›D Sí¿ªÔmPWˆ´Ì0y"¬ªBN²gØc^ ½wX½¯¬LÎÂ-C†(dø!Ý…ðƒbM"¾W2. È ‹¾ƒˆ§}ÚûÎÜ(òeÃûÁbüð9…²êã›ý?£8‘ì—Ûý!Ùç܇»4BE¦W+øT°@Pôȯ­»ìY•$ …Œ£/,$msŠÌ2:âçYLD©Ãô ™XµÝi&‚I)r-0Z$àª\Рšã©[kHT‰>UÐŒ¿ª¹–Eìç°vË€e½ÅàÛ3œ«[ä×ÕEß3gG4ÒžáQÞZÕô*†¾œ;†’ø™—*]ï‡3~=%7ôP™£¾Þx±ô àÂË£BVÙäG±È0?ïòØ!òÿ^{>ઋ¯òj\"ÇOÑÓ÷ۦƤõK¾²«¯(k:^Õë ½‘âH¾<ôú6q@¶CX†#wßy Fæò[Ÿîìïé¥=9p¬²Ýn{Ôß4¶ÌpJㆢ—J±iý'zgýa0¤¥sÕ~š^­ûÞcg¯§­ÞÓ&pWA[åè €´ÿÃú=ª’a¨&˜ÈºN]e-Zâ§ÃÉðµí®¤z§SœðÊU‡D@ç4è¢ßõòhHb«Æ#-†¸ @Ð; ‚öŽÖÆá¸¦V<Ý[ÚmÇ(ùz¸Oö¼ãA0W®«9…xP@œ¶œ"ÈM&ƒƒÝê&’ä‰ Þ4šH¢ i¶Â¬— jˆ±‡ÎßWõis¦”ui" 8µ›"h„ºYµ×<ü¿0e¼ÎEÞHÁm?y!ý1AÈõaââ†ZÎÅZ·™t„O£Ü'Ùáâà/ø‚€;Þ³—Š$‰{üÛqé­‡ÁÿP¡ ¢šºœ¦˜ã?(£„˜}æÿ“ý?¨‡?»€> endobj 4098 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.611 696.002 204.828 706.906] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4099 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.998 684.047 235.214 694.951] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.771 646.332 253.988 657.236] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.179 634.377 218.049 645.281] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 4111 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 606.769 179.334 617.673] /Subtype /Link /A << /S /GoTo /D (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) >> >> endobj 4112 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 520.382 189.895 531.286] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 473.28 352.042 484.184] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.296 473.28 478.457 484.184] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.556 414.346 413.773 425.36] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 296.932 189.895 307.835] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4117 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 265.482 352.042 276.386] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.296 265.482 478.457 276.386] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.684 206.549 255.9 217.562] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4120 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.094 206.549 381.416 217.562] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [437.002 194.593 468.872 205.497] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 4122 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.723 139.655 403.94 168.721] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4127 0 obj << /D [4125 0 R /XYZ 90 757.935 null] >> endobj 4054 0 obj << /D [4125 0 R /XYZ 90 465.032 null] >> endobj 4128 0 obj << /D [4125 0 R /XYZ 90 450.591 null] >> endobj 4055 0 obj << /D [4125 0 R /XYZ 90 257.234 null] >> endobj 4129 0 obj << /D [4125 0 R /XYZ 90 242.794 null] >> endobj 4124 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F8 1123 0 R /F11 1076 0 R /F7 1124 0 R /F10 1521 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4149 0 obj << /Length 1555 /Filter /FlateDecode >> stream xÚíXKÛ6¾ûW¨@2P3$E½\ @“î ’4Íè! Z¦½BdÉ¥lœ_ßáË–lY» 6‡¹X$M ¿y}3ö6öžOž.&O®iê¥(hä-Ö^н8"(¤Ä[¬¼w~„žÎÆØoørʰn§3bÿ:/„½kQOIâ‹2SKi”D>!ñôÃâÅäj1ùgBà4ì-=ŒQ„^¶¼û€½¬¿ð0 ÒĻӻ¶£< ïfòç[¤¸‹˜°b‚A ¼˜G¡ý£:ûÉ5‹º)b!)zh³’†èdƒ)pg?MQ¤nÿMS·Y34ö›Ê<³j7%Øß«Y«ÈŠSªÖ«óÛçïÝ,dD¹«·óù{Œ¾é ;”y[µÅÊ_ ó”¢wjäψ™çk»n4Ñã;…‡K³±¬ìê®SúŸòª•ÅÞ¾]æM΋ü‹X)$ÞŒ¤(‰Cx”†ÖŒïqˆ·b[Õ{ãéBðÒ ·Ü®ÕB¶EcÆ ’~ÚùŽšœ¢Ð(à,‚NýÑ ÍÃ(¢±/¢ˆ¥á[Ñ´{¡_Êù˜3I‚bœ‚v Â!u.åM+ §4ãO &/ZÑ—è‘D„(eÖ>”†§~ !UðŒ ªß´Y&¤ì«?FB¬×mQ\,ØÖ© mó*/HN3áRŠÕ0ãX¨Åòª ¼(ªŒ7yeͶÖÎV0G€Ü3{]+OU NB­É¥ÉTB:Îb:°‰÷‹ÙÐ÷&FaDÜò“"8[É ü•h4 sЍkwà\Á7ÂìÊ¥YÔé¥y9bdøße/<³4ÈS©ö­²œ7î컼¹º—!GUˆÛÓ×]É—Õ* …¸„a´ ÒOÏ»Lš¿@Ðç#k¿^*Ù3F “#Õ#†˜¥{œ©‹®µ¡wË÷ê$ié°~§Ô‚¸ä@¡Š÷x9F,¦ZÀ ÔÁQŽÑR©ÁPÁ¥ô‰(;ˆ8à=# ÇEaë•"¸B…MýëÁغöªÚ¥ã Ö›[12ÁżT"ëšï¥‘·ÜHQÇð%Ðä¨{‡_0ƒ—§Äy_#¨EVÕ+yÔJ¯vM  =8伯þÖ˜½ äåjȃT—¸ãå¯q‘ª(9¡U¥+"¼iÄv炱²lT»pmns9˜,FZ^ð¼yyõëÍ•yñõªßY\ÍÏó`ˆ’BD ¯D½m¥…§k²,…«€ê(9 ÑGÅ :Ì´~V»¯åþ^ŠÞò¡’|@Óí ¼ý½Ç> (‡ë8Á@51…ÜFÍ «æ[åꤔåôÙe ¤ÿð¾o´O0Äh7?« /òÞš±æ¥„üßvÊÞî€úžî% ˆ¾w/нœš6 ˆD®šÅ½jT³]Ý YV•.7VÓbPþÑj¨i)@Oƒ³š¦PŸÓ#É0ëìjÐZ:°! ú6â°\­‘dZ™—›qAбhTëËÌaúLž—Ç;^9b2Õ«œoÊJ6yfµmë]%Å=YH°ûÔó3ü¸ì³˜&l©JC[ðú;ý?)(  sëøO½4K¡Õ¿a/ÁLÏxGAà°ÖGÞa1ë4‰zêúH‡&{Õ¢nCªú£}öÃj ‘Þ:Ú]«ÃNSÿ8ƒjÑÐŽjy ‡=¡Ý™§æÄþ~Û,Ó5c÷TÆ:Vß^§›—'y(ÛÝ®ÈS©Û_^º"æNŒ­y­„וî,‚À5hz¤¯¦0ª«¶ÉK»¡æþئ KûWw®rhæ›bÿ³šº¾=pmsç¥á¾Smëü>¾üLååëDàn£"$ý<&îÇ÷I¸ø) ŸxÉ/Ëí•O6¶øAÔ‡þøÐn»U+¸RcZ:wnùÆ•š¿õyéôSg” jó¿tºo±Jã ±ßbÃ…¡ÍÅ碵½†vî¯ÜàZ¡K3‰Ìƒà9#ó063Š ußj¨ý“¿žÝ¼üý©3ý½×Þôó·êó~#ÊSMÿš¬{ endstream endobj 4148 0 obj << /Type /Page /Contents 4149 0 R /Resources 4147 0 R /MediaBox [0 0 595.276 841.89] /Parent 4130 0 R /Annots [ 4123 0 R 4131 0 R 4132 0 R 4133 0 R 4134 0 R 4135 0 R 4136 0 R 4137 0 R 4138 0 R 4139 0 R 4140 0 R 4141 0 R 4142 0 R 4143 0 R 4144 0 R 4145 0 R 4146 0 R ] >> endobj 4123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.72 719.912 275.419 730.906] /Subtype /Link /A << /S /GoTo /D (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) >> >> endobj 4131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 632.375 189.895 643.279] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.849 600.495 355.663 611.399] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4133 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [106.717 588.913 172.878 599.444] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4134 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.921 528.758 282.137 539.772] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [321.305 528.758 352.627 539.772] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.145 528.758 387.468 539.772] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.51 499.178 335.727 510.192] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.186 499.178 497.508 510.192] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 379.895 189.895 390.799] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4140 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.497 320.114 248.713 331.127] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4141 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.918 320.114 344.174 331.127] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 4142 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 200.83 189.895 211.734] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4143 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [303.209 141.049 333.425 152.062] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.243 111.469 402.883 122.373] /Subtype /Link /A << /S /GoTo /D (tab_8h_006d6e8cb373e0dc3e9ccf128adb9411) >> >> endobj 4145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.92 111.469 454.559 122.373] /Subtype /Link /A << /S /GoTo /D (tab_8h_aded7db92aa2758198b33f35f5f18d6e) >> >> endobj 4146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.297 111.469 513.996 122.373] /Subtype /Link /A << /S /GoTo /D (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) >> >> endobj 4150 0 obj << /D [4148 0 R /XYZ 90 757.935 null] >> endobj 4056 0 obj << /D [4148 0 R /XYZ 90 579.947 null] >> endobj 4151 0 obj << /D [4148 0 R /XYZ 90 565.377 null] >> endobj 4057 0 obj << /D [4148 0 R /XYZ 90 370.929 null] >> endobj 4152 0 obj << /D [4148 0 R /XYZ 90 356.359 null] >> endobj 1782 0 obj << /D [4148 0 R /XYZ 90 191.864 null] >> endobj 4153 0 obj << /D [4148 0 R /XYZ 90 177.294 null] >> endobj 4147 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4162 0 obj << /Length 1232 /Filter /FlateDecode >> stream xÚíYIoÛF¾ëW°@$`g†³:hÚ*p¶‰- Û((j$•H—K$ÿû>’3”HS[š‰áƒÄíñ{ûbkaaëíàÍdp9¦¾å#_PaMæ–-)â”X“™uk D°3$c;¦Ã6zp†”c{-U}v­æ*uˆg«8,oùÂ6!žs?y7øe2ø{@€¶H…Î%’.·ÂÕàö[3¸ÿÎÂÈõ=k]Q­,F]8.­›ÁÇÖ’â½{>˜Y’‚¨‚ÕRp¶ƒ4X©\¥Ù¨¤‹t9&l†xHbßÂsZÃ|_¾x9fb—Ž"Æ T¥MvÁA6¼K º×O¤š:ÛÅ2Hkãåigó$]y”Äõ½ÇFtÔEßÕ|È<äIaÁ;HðšÇµÊ ð·ãŽÚ]ÉzԽɃ¼ÈjÒG‹óɡܖ…j#ZÄSG¾¶û¥¼Ms;ä:xä ]pÉM†*ëh§`ñ[±\êçeH¥ [×eeÒ`ú˜®º•a“(³+g™š}–,®–å*.3BÛ'š9†}ÛÅw‡Ãé<—>KÒ]ãguô²ã6&ë P?ÔmÇbD›ð$5`Pf* kµœ*M Ã8%XètŽtd*×7âSì=`ŸÑ£¹æS`~aÐÕaÔu˜àŸõ[w˜cø‘¾´Zi!¢Ä6£ˆp¹­cˆ!©k„ˆ!Y)û†– K×.™dyZ„Ûg:Žºµ‚Sä b¬|‡±ÛS) ÷±ìŠŽ¨PL¤ÛÔ° ç~%Ûs4 u‡PC‡I’Îz)äµGOGl˜Çj©V}€ ùXtÃ$δ‘fIþé 1ÖH²éd¯1â-xFHû^sØ Ë$Ô¼&À×uÚ,{Má‚ÏÝçøU ‚-§ A>×ųßN„!BGfP$û<É …‰.3²P¢=ÄÁØCè‚ò&&ÊØ{žÃˆ¤Ø†—Žýv¿ÈLrBaY©Yä:×eó«lR]V‘ÅðX¿‘'§ÑY/ºÏêëe’üU<nN ±´nNÌá}¹%òÐÅ0ŠÈv'Á •ºÎê‹&÷‰iÂcò «©émÉü™SuÝUAøÐ¦ùTæ sÓ –*^䚦å°²ÒE¢J¤3•ÝÒ°:3”?¦iðÔ–ùœ¨×Šß\é°Ž£üˆÿªÊ(Ú ú»£ µjÑ>Å +°ÇhvT(>[†w½–‹Ž«c ÝÞò‘+›²xtvÔ]‡lnn’[m;£f9Ôø_hÔtÃ;mÖìïΈ½Ã’cèÕ 4*îÓ×ùý™ßŸ3#‡¹1Íí÷XÇK3v'©jgnŠùfOS^+óJÔ–ÝLúÍX0‹BxMë4}êàWÙÝ-ÿœÛ=Êë‚ò?.(^Ï‚’ÑÍë‚ò_/(Ÿ³Iœ³©œ±}M J{ÿnA9u9g¤;yó ’™ÍÃ}Ý<^ÌæñÂõoe‘úšn$–Á§â¼]'ºŸ2„‡|âú%Ã|¹È—àãú[ ÷çÚ2oU¬ÒíÈfRÿWs2.5RÓúBÔ‚GŒŒ¸¬¯(&T«XÒeþøéæýÕ›úœUßsvGŸ“ÍÓBÅ]Mÿš¼f/ endstream endobj 4161 0 obj << /Type /Page /Contents 4162 0 R /Resources 4160 0 R /MediaBox [0 0 595.276 841.89] /Parent 4130 0 R /Annots [ 4154 0 R 4155 0 R 4156 0 R 4157 0 R 4158 0 R 4159 0 R ] >> endobj 4154 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 629.377 189.895 640.281] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4155 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 597.496 352.042 608.4] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.296 597.496 478.457 608.4] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 314.885 189.895 325.789] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4158 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 267.064 352.042 277.968] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.296 267.064 478.457 277.968] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4163 0 obj << /D [4161 0 R /XYZ 90 757.935 null] >> endobj 1784 0 obj << /D [4161 0 R /XYZ 90 588.53 null] >> endobj 4164 0 obj << /D [4161 0 R /XYZ 90 573.959 null] >> endobj 1785 0 obj << /D [4161 0 R /XYZ 90 258.098 null] >> endobj 4165 0 obj << /D [4161 0 R /XYZ 90 243.527 null] >> endobj 4160 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4180 0 obj << /Length 1232 /Filter /FlateDecode >> stream xÚÅX[OÛH~ϯ°Ú[j†¹ú’‡•J!¥»$í>BŽ3 ŽÍúRàßï±g&‰]Øl´ûù2çúoÎ[K [ŸÇÓÁјV€—ºÖtaØò\‚%Ötn]Ù."ÄŒ±ýèÎRíqœHuw)2wˆoË4ª_ÜÇ6!s3ý28þð„-ÒXò˜°¢Õàê[sxÿň¾õØH­,N\k2øc€u”¸-ÞŠ–°y³<Êv… ùšRѸ7zÖÕP@üxä Áö¤Š"Y¨-ƒ­!a(àÞn#D9KŽíŸv˜ÄsÆ£+YžèÇ(Ëòyœ†¥lûê@v‘çÖ’Uþ/eY®ÂN‹QW¹…€< ºpÅBëNʰ¬ C^ÛIս޶’m‹€"âLHŸü[ k#oƒð¢J½^ó#_j¢\6’uÀe8{ÈW]õÊC§%O=„E!ç{ÅÂv•Ü;ÛU®åáJ‚ßýÚÙ·TožLÛ]e¹y³Ð®ïä+”Òõ}”F5n§ðA½ ³:#PÓvfÏ?pưX'£‚Ânm¶F—"ãZÎd hVÔÂGcB¶Ê]Ę 04J¿)‰6…1¢Ü·ºÌeB¯ÑQË<_Cì —&ud!Ë5o ÖhûØë*È4œóƺÜm$¼UZ×X`ø‘Ž}h·xѺ0Šˆat^Œ„î½?œ€Úa×–U4'YT­d e‹³&Ûš„”#ƃm}dºw”¥…F'º s])¾…ï#Ÿ®+u1ë ÕCÜ£F`¼…ŒWÅò ¼¸ž}ÓSÞaà" ~H<äRÝ£O©¤.a™é·aÝõpÔôµu/ÛæŸáÉ"ÏVº‚¡±²¨Ò¨†jƒ?!(uÏ\ÔÐ1Žˆïísè5ö˜¿•r§ïã4Jª9(»`ñ]§èî)Yƒ ïŒdÒ½‚ÅCô6‹P°· **kٰ橎å$,õf”y5Ç Sì<µ\ı!¥È}íØ.«»wÞÃÏ(Ìç-íîõẖåC.¯#¨=s pèhÜœ›ÀIæÙºÊ‹,_g¿QdpHsfvÀï?Öå߈4ÄZo’¸Çˆ@  ×o{,pÄýµU¨$ZñCCƘ‘ûú”Ãö³Ê R™Ì;Õ¯ t¶*i¬Ö“H@P–âÿ*ˤ¯,q—ýe¡‡.‹ A˜.ËêòXÎÂÎÉ·G]NŸÊfB ›¾Úž_ê9¥É´™UÔ»$Ëõh•˜–¿È“„îØÇgS®ÏOÿJ&Æ‘Z`wøÜ¤O=@hØÒ¨¼ 7àÁxÙ,4#fMhÒà#C3å ¡ÝžÀüiz¸.ü~®-îíÏO“É÷ãÛóoŸÏ¦ßONû¦+ü'+y!³—e*À¯aq¿iꯧôdL²t—ÍáÖŒ–Of^„)ø5 Õlç$·;ÉAÁþèBìénÀik¥ûeîèÄ뇹ùÛÀERhR†~Ÿe*óÍ׆)ÈWs3®§79S®º<âd$<õD1¡ºÌµ¬)5¤|~v¬îa`Ãí¯™“ìéy)Ón¦ÝL ƒ endstream endobj 4179 0 obj << /Type /Page /Contents 4180 0 R /Resources 4178 0 R /MediaBox [0 0 595.276 841.89] /Parent 4130 0 R /Annots [ 4166 0 R 4167 0 R 4168 0 R 4169 0 R 4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R ] >> endobj 4166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 632.44 189.895 643.344] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 584.619 352.042 595.523] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.296 584.619 478.457 595.523] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 326.558 167.638 337.462] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 4170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 287.703 166.532 298.607] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 4171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 250.906 166.532 259.753] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 4172 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 209.995 172.071 219.773] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4173 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 130.209 251.215 140.136] /Subtype /Link /A << /S /GoTo /D (wcs_8h_0653c98b8a1bee5755740ae3f4854094) >> >> endobj 4174 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.463 114.612 307.33 124.517] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4175 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 91.354 241.81 101.282] /Subtype /Link /A << /S /GoTo /D (wcs_8h_5d377c202850ee0eaf44b3e989d0736e) >> >> endobj 4181 0 obj << /D [4179 0 R /XYZ 90 757.935 null] >> endobj 410 0 obj << /D [4179 0 R /XYZ 90 571.045 null] >> endobj 948 0 obj << /D [4179 0 R /XYZ 90 548.734 null] >> endobj 4182 0 obj << /D [4179 0 R /XYZ 90 548.734 null] >> endobj 1080 0 obj << /D [4179 0 R /XYZ 374.54 513.604 null] >> endobj 414 0 obj << /D [4179 0 R /XYZ 90 496.877 null] >> endobj 4183 0 obj << /D [4179 0 R /XYZ 90 345.532 null] >> endobj 4184 0 obj << /D [4179 0 R /XYZ 90 148.206 null] >> endobj 4178 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F14 1078 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4225 0 obj << /Length 770 /Filter /FlateDecode >> stream xÚíX[OÛ0~ϯ°´—DæØ±sá–±Á.$h€PIÝ-Mº$í~ýœ8ÙÚвÁ…©Õ9qãï|çâØ€FÐ¡Ö ´Ýu‘‹]‹Z("mÌ)AÁë&ÄØ! ß†9¾1v(½ÅBi§b(2ƒ8ºHÂrÈeè„‚q¼Ó¼@û¦¹ RYæ6¶MŽÂ±v~ h Çß!À¦ë ÛjÖ1jJ#_û¬A²-+Ô #Q[¬DM¨‹ÁA651X\!?éç_Æaš)EôY!ñr½Qš¨ñt¨dÜ/¢b:¨]ëÏ¢\i×óÊåG6ª:=ÔÐyõ¿d&Ÿ^_ù#õ\…UÁKm)ù‡þw(Å£RšØ­cpA)oÝá2 oâ€&â~t_º¾Ö¹êžu¼ža3}ß` w½¶År*Ìd¤ÙJ¼-Ƙ„a—±Ç0.Ùí™Î‚M‡`Ç.Ó¥²VáÝW8[‹3Ž©ÓÌÛL˜s±íšÿ"NÞ±çGûÇkd?O€*ŠXäEÔ›š›®‰'%ÛÿäuƒÓ{¸vž‘ë|"Âúßø¿lA~Pîß{þ:¾ ¼Œæã ÊÖÒ&“{ã†[)7;ó©[ϱ÷aUPJÈyô]¤ÃJ+²iXüÖÕI6n»Xº½ûËP”åÈ2p_[®ŸâF<š*=åX¥GI#ëiùÆ;–¦ƒ€>_A.ôã8 ß?³-[xäÛF+×¾3¸£-˜yhÀÌzCO'se+3×Ói%¢U²—¦(‰®D–óQ ÌúWVÏpMˆIf˜¶.Â~!›îú*Ó¶T,ïkçãÉfBl“£éiÅ–Šºeˆb["MZÐ|›uZÐÉ– å×8š½*Ú—–4Mœ?½ûkn&-ìÚòœ¦n&¹‹9¯¡ŠDd%Šú P´Ÿ4JÏ \×êÁR‚À#{ÜVO­??˹Í'hy:ê(ay mx•> endobj 4176 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [266.989 720.235 300.857 730.141] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 696.978 244.57 706.906] /Subtype /Link /A << /S /GoTo /D (wcs_8h_22bbac394b025c4cfc7bd73b6d6e3962) >> >> endobj 4188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [282.627 681.381 316.494 691.286] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 658.124 246.801 668.052] /Subtype /Link /A << /S /GoTo /D (wcs_8h_b9885b02031ff7aa7b094f4a1edee2cd) >> >> endobj 4190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.961 642.527 304.829 652.432] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 619.27 243.494 629.197] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4b2dfca2e80fe80ba85dc830cd9c377b) >> >> endobj 4192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.343 603.673 302.211 613.578] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 580.415 231.13 590.343] /Subtype /Link /A << /S /GoTo /D (wcs_8h_6ba6d2640572b12a11e3558fa75a01ed) >> >> endobj 4194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [271.867 564.818 305.735 574.724] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 540.585 188.68 551.489] /Subtype /Link /A << /S /GoTo /D (wcs_8h_6852f6dd2883c82296f1108b897d337e) >> >> endobj 4196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.23 540.585 277.764 551.489] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 525.964 197.072 535.869] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 501.73 182.483 512.634] /Subtype /Link /A << /S /GoTo /D (wcs_8h_c55946dadc53ac592cb686275902ae7b) >> >> endobj 4199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.898 487.11 232.785 497.015] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 462.876 206.383 473.78] /Subtype /Link /A << /S /GoTo /D (wcs_8h_1bcf49cfe1ed1bb2bc4c930f98d808fa) >> >> endobj 4201 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.881 462.876 257.012 473.78] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4202 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 424.022 209.7 434.926] /Subtype /Link /A << /S /GoTo /D (wcs_8h_465ef3c77aaf546324dae0692e6de7fe) >> >> endobj 4203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.198 424.022 260.33 434.926] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 385.168 215.13 396.071] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e1738854472218541bda531653ef2709) >> >> endobj 4205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [215.628 385.168 265.76 396.071] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 346.313 211.344 357.217] /Subtype /Link /A << /S /GoTo /D (wcs_8h_3d64b57cec404114c75bd25a562e8053) >> >> endobj 4207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.842 346.313 261.974 357.217] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 307.459 206.931 318.363] /Subtype /Link /A << /S /GoTo /D (wcs_8h_8f5c31a6983b17abbe2fead61550d55c) >> >> endobj 4209 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.429 307.459 257.56 318.363] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 268.605 206.931 279.509] /Subtype /Link /A << /S /GoTo /D (wcs_8h_84a67c964e212bbf004c264b3ca70fee) >> >> endobj 4211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.429 268.605 257.56 279.509] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 229.75 209.7 240.654] /Subtype /Link /A << /S /GoTo /D (wcs_8h_de3959355dc9d0987e7ccc4070795c38) >> >> endobj 4213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.198 229.75 260.33 240.654] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 190.896 209.7 201.8] /Subtype /Link /A << /S /GoTo /D (wcs_8h_37c4884cf58baf25b2984ec3bccb80a5) >> >> endobj 4215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.198 190.896 260.33 201.8] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 152.042 211.364 162.946] /Subtype /Link /A << /S /GoTo /D (wcs_8h_cfbadc770489b6b5186b95eaa35467f1) >> >> endobj 4217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.862 152.042 261.994 162.946] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4226 0 obj << /D [4224 0 R /XYZ 90 757.935 null] >> endobj 4223 0 obj << /Font << /F29 635 0 R /F40 846 0 R /F20 595 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4274 0 obj << /Length 1516 /Filter /FlateDecode >> stream xÚÝYÛrâF}ç+ô(U-³sÕe«öÁì°…ÁgË»EaÛªA$±f+•O4$qµqâä¤QÏQwŸ£ž 6.+§ÝÊÇ êòljÝÃÆc$(1ºCãδ!V•`ŒÍçA„ž¬*ؼðG2=jËZÄ5e0PCw±I(±¾w¿TjÝÊwÂI…ƒ&ŒÁ¸r÷Cÿb`Ä<×xN¬Æ§ þGF§òkoõ’2„m‘zY fcöcDɳ©0¯Ì#6âÌ5ª”";›ûR‘›cÜU„+S+÷ÃGG;±P±CBz2 ÇÑcoÅx¢LþÜ„à"n{F•äñÔÛ³N­ÝîunÎÎjN Â5?[Éþ°Ù-—Ó ¨yÓhô®[õf·ÖÞˆÆM²dhWµ«VÛ²…ùu ݈…!T‚¹Ú)ƒK~àïd)Iî‡ôxI]îGz0ŠÃÙ`÷½¦á¸P%_­®‹_< ß0f:ý«¸ t_U‰ƒ‘ Ss:—ýÙH‡4€2–DâY¨(9ˆŸäÁÑé+)âa$gjO8>ÉÑìþ ’“D•Z¶Â=Ú(\U]bŸCå‘= Š E÷禌î`c;æ÷ã*šÚˆáƒ|Ðaï-jh§k cgvïCáèQýèš´ šÇ¡Š·?X–ÊÐâœÌb?ïHõ¯ýC(å&Õ‰^èk> endobj 4218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 697.247 215.787 708.151] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f) >> >> endobj 4219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 682.024 205.038 692.211] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f8b87c21d4a2cab41d4eea0a95378fca8) >> >> endobj 4220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.933 682.024 360.476 692.211] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25fc51c733d8a719dd698f9e96e9a4fa83f) >> >> endobj 4221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.371 682.024 486.495 692.211] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f5c58d5530bc7577a70185376c15180af) >> >> endobj 4222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 670.069 239.329 680.256] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f2904278d916c820236347783312a7ce0) >> >> endobj 4233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 654.129 219.065 664.316] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f598db0fcc4961aa3c5e0a296bec2b313) >> >> endobj 4234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.418 654.129 347.532 664.316] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25ffe9ed842ea8f525c7b8fed2f60015dd9) >> >> endobj 4235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.885 654.129 513.996 664.316] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f71cb7eaa633d9e0f560555a016f1f007) >> >> endobj 4236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.982 642.174 272.903 652.36] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25fdfa2a8cf8021827378091315b8e0a020) >> >> endobj 4237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 626.234 203.564 636.42] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f08306533cf0c7555dad662e82e8a4a69) >> >> endobj 4238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.422 626.234 334.448 636.42] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f03824b7b5c22e5f0cc91363eb695a804) >> >> endobj 4239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.306 626.234 505.183 636.42] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f5d662102c172495df1f9bb03cedd701d) >> >> endobj 4240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.854 614.278 245.964 624.465] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f832122bb304560f92df91e391d55948a) >> >> endobj 4241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 597.994 239.14 608.525] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f88e600163f719a759d3569bf1548109e) >> >> endobj 4242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.691 597.994 393.291 608.525] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f37c8aa0aedc12c63df08f39cb7177ff7) >> >> endobj 4243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 542.761 159.35 553.665] /Subtype /Link /A << /S /GoTo /D (wcs_8h_42b2578d76ace7ca6114d82b7ae46a89) >> >> endobj 4244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 503.907 158.244 514.811] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e790c9ce6c9b7a4845cf1c3c97b1e97a) >> >> endobj 4245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 465.053 154.926 475.957] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [259.751 465.053 293.285 475.957] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 450.432 256.599 460.337] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 426.198 158.244 437.102] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [247.567 426.198 281.101 437.102] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.932 426.198 462.466 437.102] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.44 411.578 287.327 421.483] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 387.344 159.887 398.248] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 4253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.33 387.344 221.864 398.248] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 372.723 224.966 382.629] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 348.49 155.474 359.394] /Subtype /Link /A << /S /GoTo /D (wcs_8h_b9aeb8cf1afb1bfb22e989580d90fca8) >> >> endobj 4256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.438 348.49 240.972 359.394] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 333.869 232.291 343.774] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 309.635 160.445 320.539] /Subtype /Link /A << /S /GoTo /D (wcs_8h_8fe5dcd9927240dc0348b850ee662367) >> >> endobj 4259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.41 309.635 245.944 320.539] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.954 295.015 260.84 304.92] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 270.781 155.474 281.685] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4262 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.917 270.781 217.451 281.685] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.893 256.16 233.78 266.066] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.161 231.927 159.483 242.831] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 4265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.405 231.927 223.939 242.831] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.285 181.117 158.607 192.021] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.777 181.117 221.311 192.021] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.507 130.308 159.493 141.212] /Subtype /Link /A << /S /GoTo /D (wcs_8h_f3f00b876c8212d43f32a51feeadaa81) >> >> endobj 4269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.106 130.308 220.64 141.212] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4275 0 obj << /D [4273 0 R /XYZ 90 757.935 null] >> endobj 4276 0 obj << /D [4273 0 R /XYZ 90 716.221 null] >> endobj 4277 0 obj << /D [4273 0 R /XYZ 90 561.735 null] >> endobj 4272 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4333 0 obj << /Length 2611 /Filter /FlateDecode >> stream xÚ•]sÛ6òÝ¿BÓ—PÓŠ ~úíâÄ™tzÓKìkfšfn ’Øò«$eÇÿþv± ‰”(Ù~¡°Ø]ì7Äl3³Woï¯~¾õÓYꦑÍî׳TÌâÈsCߛݯf_Èõ¼ùÂB8Yçnç ?Îm^h}ÖkÝνÄÑU† 4H„ãùþüÛý/Wïï¯þ¹òà$1ó æ0vcβòêë71[ü—™pešÌͪrø¾ÅìîêÓ•`*ňZ1 Ö‘ÈdûÒQH$ÿéû¡9Þî›}]„@^õ FrÚ ÓõÙ,@^€Á®éÛã½8õ§E×·»ìyM[Ž0ü|ëC’½È•‰SD¬—1¸éa ý‰¤Í,¡”Ò ’à=»&g|ÙVµ<êŸý5ýŒz#òlb–º(@t OÆ®—Ä0ÌA@xï½ÐQáUßóŽF ¯ºBõy]¹gNiãB¦®Hf‹@º^(éŒßç©ï¨6WËBwG’+éÆÂ÷Ýè9ÝÈêªë29rè¹8:ò„&Q»A<¼Éÿé¶-»Í”’}C‹bçÛ‹ä/»0:¯ú‹»ËØÑý®­è©»NÍ=álðGw¯—pð®õ ït¯À¬èŒwºËÚ¼ÁëÐ@W¸2H ÏýVwÆc­õ®Ï+”'©“—M¡K]õ4Ùo5Áo?ÞßèËœLÝ+š¸©ëv•WªgtwO]¯KšCÃýrsgÔÚLv½ªVªå­Û<ÛÒÄJÃ¥ú{*JÝoëUÇ4ÔÈr¼§!+ÓÒø@ÏÙu$ÏY×- ²ºl§ ý}D™3ÁfÖÜñ¾¶.i”—jÃh›ü;ZŒ.N6ë#¨ßCžñž³£í”;_HO¢òD³ªåeKµ'™®ê˜5úyG—SŽÎÌ„»IZeÅ …ªTF è çȬ4f*­W†6˜$q€tfI®f9hð"ˆE³hxðø´®.õ—¥.— ,•g¨žFå®ëI|xÃé4O-Ÿìbž»oçpàJ¤ŸÐ• ¼†„Y0› 0GqH ^àí4í²Fa0Çă‚HWäSfÔS Þüø#;µBuì–s_8;vvyÏ!½ªé q\5ÝnठÒ¼_h ·ÕFäCÏ*‹FYò*GS< /€ïùÍÝny~³Y„r¿ ¯±¬ì3h̲Pž¦­ÑhrVD‰öo¾¥ªÈ<vÙDäY‘#M%#Æã+£3¤Lg]¯9¡¿$š$0´Ë0®@å:çv€v‚žÖsМ"éqBg&íNRv¬þÝêõaÅùK„Ó²À+ {ÇbüÆy}o ûÙC…¢ª>Ïòü$ 6@÷LwCÜŠ_63Zv/i¡a «´·§ òöÁYŸ¸Wµqð0R к¡‘E6¦«®.é,8£S0³×)d¯æS‡*eˆË»)‘ÙÐÇa\±§PôiZ ‘AþPs²Xª¬ew±ÞU;oÌñŒs¢LO}@_S“›êžO¾Ï›¹{É"¾ å Ö93—^z°(Zا2[£{^J‰ÒÆxŠŽÒ\‰ó5­íĘj'S§›£Ì[ræ)òNë.¨ ¶]’DµÕ]ppÖ‚¾ÏõÓm©W¹IXñ¨ ìªØVÐ÷òËs!Æ0bÝ*¬¢ì¡j$¶”™ì’FDt ê§Ä£6‰‹„Lh×4En4]rÚ"m:ˆL:b`†åffÛžKCð&%VOÁ0ë㡉:’s/is/ÐŘC/Å¿|%„Á¦@D{> ‚οÉg1$¬z5MD¢±! bN_<‘¦-¸£Pj´±¶ZÉ}““Ȇ@/è.\_cõ©6¯ö‘ÁÁGúÝÙL(JŸ±Á˜œµß\B1,⢔ù†P‹dXÅbPÝð†VUݾ4ÀäDF‰ó±¢ÙµQã"ý84عÊAê[ƱÍ7[Â^˜ÔùË©©Øæ‡pg7¬JñŸÉMÏ#VbXÁø]­l” àžŠz3±GÑoË<3@­îú\¼¨3½ì“ ãåqîÍhg¡ìy#I‘6Ì1I[Ú`žW—u ˆw·¯pÿ>ñ÷ê=Àþ«÷@ 8Ùóâ ÷qzâdEóapùèƒÀѹɜ`,Ù»p…/êj“÷»ÏÖ¼K§´)°#ƒpeQ[Ã@ IfƒàpÆ êÇù¡]à´"ðôëiÙæ+‚>«Në†2ÿ~)5aS·ÀÉÀpØ»uuAŽ´k›îÛ®úÊI,VÙ±1ËÝ+\vbÏúpHÈYÔB‘¦r0q°+Sÿá&ÖÁ÷RV&ÎfeÂV*ØuH¤s‹07.l™¢Ðå™jÝ7×o¸ 6ì©ùiâÞ¾%xûùý§‰f™Òˆ÷íÆ7L:3“@þD  }+ R@DäŠ$ß;dõE ù4Ýôæßþs=ÖÅ­ÿåÍiaêFÉž4nB‰}J ›P§‡-bä,à§Ze»¥¶>(ÔiSYt×ӽġ¾Ü[ÍûçÑÉ|߯Ÿ€HÜXî»ã÷w7Gz©+n^óÓšQ‹ýæ’˜~)’O“H|á‚ ZѦµiÊ2¶PË?nPèVý Ðû µRëï8 !{¦Í"Î×®I¿¼´8NÇר®±R‡ëèÀ™‘ €m]Æ ¥…Ê™Äz×)Ú˜n’%}(¨kµÃÞqẮ‹‚ü‘;ÑæÆG#7…G/¾/~芔ó:A|Òøˆà%pqܹæ Ï‘üõùëñ÷tQMa 'nw±§&vÃ$f/aÞNX~ÒñðüËâðñdüÏâ…‰¦ÑôÂ#J2¥•§„ËYñ¨æ%ìÀ%u/iˆ&cç—Gus© åkö¹Ü¢¯£¶µöö e F 1dh²£Ã÷œI¦ ½î'š›ûù=IHߨ?z{@ Ê2ݶ—VO¥7™L,Á„ûÒ2‰n~{ûþGXƒR_ĤÜÓJ88Á<7D `ƈ2©™œ``âÞsF¨èo½ÚÅ*‡èÛÁa&*&6”íZ>a×™— Úwê’Ž›Êÿ}ûþvž ¨™¡Ò»y?"B÷ð yxÌ«…JÃ>_€}û`r£ë ºQKêÊš½ã׫ãwæLÌK^úÌlÁ#ð` ôA.´/^t…©%Øjÿíà]^ÒŸˆ>ž¸¼ë0¦¾ð|ëýб T¿~|˺ízÌÿ’}ã»úûÓFWÇœþ¾ÁI endstream endobj 4332 0 obj << /Type /Page /Contents 4333 0 R /Resources 4331 0 R /MediaBox [0 0 595.276 841.89] /Parent 4336 0 R /Annots [ 4270 0 R 4271 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R 4307 0 R 4308 0 R 4309 0 R 4310 0 R 4311 0 R 4312 0 R 4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R 4318 0 R 4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R 4325 0 R 4326 0 R 4327 0 R ] >> endobj 4270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 719.912 159.349 730.816] /Subtype /Link /A << /S /GoTo /D (wcs_8h_57975833fe0588eb7c7b6d79f13a7693) >> >> endobj 4271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.792 719.912 221.326 730.816] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 639.15 214.672 650.054] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4297 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [104.111 532.793 137.645 543.697] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4298 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.776 491.258 187.415 502.162] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4299 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.942 491.258 228.899 502.162] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [249.733 491.258 289.334 502.162] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 4301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [403.207 491.258 436.741 502.162] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 479.303 124.191 490.207] /Subtype /Link /A << /S /GoTo /D (wcs_8h_b9aeb8cf1afb1bfb22e989580d90fca8) >> >> endobj 4303 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.158 479.303 382.692 490.207] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4304 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.429 467.348 274.816 478.252] /Subtype /Link /A << /S /GoTo /D (wcs_8h_c55946dadc53ac592cb686275902ae7b) >> >> endobj 4305 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [402.337 467.348 435.871 478.252] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.221 455.393 343.178 466.296] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 437.768 129.163 448.672] /Subtype /Link /A << /S /GoTo /D (wcs_8h_8fe5dcd9927240dc0348b850ee662367) >> >> endobj 4308 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [320.888 437.768 354.422 448.672] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4309 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.486 437.768 445.049 448.672] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 4310 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.893 437.768 478.551 448.672] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 4311 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.395 437.768 511.506 448.672] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 4312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 425.813 120.326 436.717] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 4313 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.191 425.813 170.408 436.717] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.121 408.189 193.308 419.093] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4315 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.077 408.189 380.611 419.093] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4316 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.29 396.233 402.477 407.137] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [240.604 384.278 294.62 395.182] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 4318 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 366.654 126.961 377.558] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 4319 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.722 366.654 182.679 377.558] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4320 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.912 342.744 159.897 353.648] /Subtype /Link /A << /S /GoTo /D (lin_8h) >> >> endobj 4321 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.886 342.744 185.083 353.648] /Subtype /Link /A << /S /GoTo /D (log_8h) >> >> endobj 4322 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.071 342.744 209.152 353.648] /Subtype /Link /A << /S /GoTo /D (cel_8h) >> >> endobj 4323 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.141 342.744 234.885 353.648] /Subtype /Link /A << /S /GoTo /D (spc_8h) >> >> endobj 4324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.26 342.744 273.5 353.648] /Subtype /Link /A << /S /GoTo /D (tab_8h) >> >> endobj 4325 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 313.164 128.625 324.068] /Subtype /Link /A << /S /GoTo /D (wcs_8h_f3f00b876c8212d43f32a51feeadaa81) >> >> endobj 4326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 295.54 128.067 306.553] /Subtype /Link /A << /S /GoTo /D (wcs_8h_57975833fe0588eb7c7b6d79f13a7693) >> >> endobj 4327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [256.524 295.54 290.057 306.553] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4334 0 obj << /D [4332 0 R /XYZ 90 757.935 null] >> endobj 4335 0 obj << /D [4332 0 R /XYZ 90 658.124 null] >> endobj 418 0 obj << /D [4332 0 R /XYZ 90 601.83 null] >> endobj 4331 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4353 0 obj << /Length 1571 /Filter /FlateDecode >> stream xÚíX[s›8~÷¯`f_ðL­ê‚tŸrq2í¦ínìÎ>¤Åf‹Ü$ýõ=BƒÝL¦ÝÉÃ>x$ä#éèûÎMÂÖÒÂÖåèt>zyA}ËG¾ ÂšßZ>¶\A§ÄšGÖ-!ã ÁÛwa‰Vã 娾ˆ©{×òVcâÙ2 ÕïxØ&”?Íߌ¦óÑ¿#;a‹Ô+s¹Œ[áztó [Œ¿±0b¾gÝÕRkË¡ ÚÄšþáž–xGKÊ\k9_ɲVˆÙE¶©âT–ú«ÜäyVTêñYµÒÃkY­²¨ü½ÖR«W,ž×—#뤸:p)«˜cø#«Uª%˜ÉJëívw«84[Äfh!ãt©÷ß”22ƒº­VFë¼€hA0+ôh°Ðƒ°3ì:!ùÜœ8»U"®¨?w8$.òfÔ’gN§cÛ'c8ÓÙÔLèÂÉ9ò i&÷Zw׎S݆ÕC.o>¡Ãp1F\9-ÃʦÑ1ÄÝqš[¢*‚´L‚JjÍ€ûPì"ßýR3SUœ4ª¬&Îì"áôi1„b»ÖÉ“ 5Ýýõ°½I#Y”U–Eú[Þ®•dc Ö~F±=Uáëë˜p[&Zàï³ÙÕëS³Y‘ý#Ãíê? œÀ¦AÌe[_GÔxû¹üˆ1mô>ÏÂͺUÛØ#usüî\ÔĊߢÞtPpöáôóÕûw—¯çΧz߃,`CÙ:`K ¨oƒò‹$3•fá[í*Ø– {°8ºö·€é2®6‘ùlè…¶’¦r³˜Äë` “_4T©ÈÖÛ¶µ6§«-Ã1J·ÆÑ`ÿL#â·&Ô1sYcª×‡>âuô¸†=Äî„QŽ8C$·4 êdìs{¾Ëý/¸ûeTQßEÜ%Ï*ÀÐ…l6D;JÕ^pÛÒå¡ËéÑÅ< ´š.èhº ³G—’nàe^7ñržëõâîÉp¼UÓx ë–¡·Ã²³e¹£ì0ËÄ¡ÈÇþYÆ.?À2¬}”e¥êXfÂR†Ã bô#§sœåéÕt6}rÕ¡×}4½‚iÄ ÕôBGÓ =zES—Çe"ËjLì8HôHp_gžR ªã·ÑUñ$D׃ABåüºnòvLÀ§CY#VÂÛ%\¸-áZý"èýHþ }ÜA÷‹;=òùQògNÏæ×=î½GsÿôH\æPGAò‹"±,¹Ï1{Èd&qœ¦¹RïýÓÙ–(‚-QC1no>k0›Ík…ö•`b\ìV¼?‰]N<Ç‚ˆ!×aƒYÖ=ÈíÕôî«½Êø›Ìnë^UlB£«ºúk¥ÇË­@œª»#i´;^7Í`Z{î.²G€M÷/IÀ\Gµ8âb$”Þ ø é€†„AÈ&«òEkž‡®*ÊNá ·4ƒLä9\où Ô…-È Þ0pè0˾A’d!¨ÄõÛDY[Pg *+“gzÖÒLkFÛiÚgñ^¯³T“ƒ:Þkò0ŽÒF¸ÖP'Ôãv”Õzj„I™ëXMeÉýU[ƒjÓcÖàñCÖK·ÖRµÛª]Ó 8+TɈƇû¤ìoØÞ)¡Îü¢~Û±c³Nl¤ãužHå³µEÀfA{,}GÖè¬-4¹ºg¡,Ë&º­ƒ°hãI°5\(ú¾ª;oöE!¢£È‚–ˆ«ÕŽÁ¦0Å$¸4j2][á¨ûtÞl >kV(eÕ„ßd‘=ú’üƒæ§ñgYërÙ5ßÝ# À0ÁÈ÷ẑÕçTowX×Ïsa 8ꯠÛ]·÷ Åó„øÛBë$Š—oSÒ"¿ÜÕõ\tÂlCñ·ˆ“¸z noÆ©:£ù7Š ¨DkRýÒIYÉ Ž.p¥"*Ø äî iùü`ÿÃÿøÛi»¯¾ÂC>ñûèÛ> endobj 4328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.657 719.912 276.845 730.816] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4329 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.685 707.957 263.643 718.971] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 4330 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [281.158 707.957 319.115 718.971] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4338 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [465.249 622.655 503.206 633.559] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4339 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.498 573.657 495.455 584.561] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4340 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [473.548 524.66 511.506 535.564] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4341 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.592 451.752 212.549 462.655] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4342 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.594 402.754 496.551 413.658] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4343 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.476 353.756 501.433 364.66] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4344 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 304.758 167.638 315.662] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4345 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [234.392 255.761 267.926 266.664] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.001 243.805 257.959 254.709] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4347 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 191.615 138.508 202.494] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000031) >> >> endobj 4348 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 171.525 318.242 202.494] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4349 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 113.935 138.508 124.814] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000032) >> >> endobj 4350 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 93.845 318.242 124.814] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4354 0 obj << /D [4352 0 R /XYZ 90 757.935 null] >> endobj 422 0 obj << /D [4352 0 R /XYZ 90 683.249 null] >> endobj 4185 0 obj << /D [4352 0 R /XYZ 90 660.937 null] >> endobj 4355 0 obj << /D [4352 0 R /XYZ 90 660.937 null] >> endobj 4187 0 obj << /D [4352 0 R /XYZ 507.789 625.808 null] >> endobj 4356 0 obj << /D [4352 0 R /XYZ 90 609.902 null] >> endobj 4227 0 obj << /D [4352 0 R /XYZ 500.038 576.81 null] >> endobj 4357 0 obj << /D [4352 0 R /XYZ 90 560.905 null] >> endobj 4228 0 obj << /D [4352 0 R /XYZ 90 515.858 null] >> endobj 4358 0 obj << /D [4352 0 R /XYZ 90 502.109 null] >> endobj 4229 0 obj << /D [4352 0 R /XYZ 217.132 454.905 null] >> endobj 4359 0 obj << /D [4352 0 R /XYZ 90 438.999 null] >> endobj 4230 0 obj << /D [4352 0 R /XYZ 501.134 405.907 null] >> endobj 4360 0 obj << /D [4352 0 R /XYZ 90 390.001 null] >> endobj 4231 0 obj << /D [4352 0 R /XYZ 506.016 356.909 null] >> endobj 4361 0 obj << /D [4352 0 R /XYZ 90 341.003 null] >> endobj 4232 0 obj << /D [4352 0 R /XYZ 363.183 307.911 null] >> endobj 4362 0 obj << /D [4352 0 R /XYZ 90 292.006 null] >> endobj 955 0 obj << /D [4352 0 R /XYZ 453.872 246.958 null] >> endobj 4363 0 obj << /D [4352 0 R /XYZ 90 231.053 null] >> endobj 957 0 obj << /D [4352 0 R /XYZ 90 167.122 null] >> endobj 4364 0 obj << /D [4352 0 R /XYZ 90 153.373 null] >> endobj 958 0 obj << /D [4352 0 R /XYZ 90 89.441 null] >> endobj 4351 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4381 0 obj << /Length 498 /Filter /FlateDecode >> stream xÚí–ßo›0Çßù+NÚ HÃ;lpßÖu‰Vmk‘öU'C ?Liþû 횉hšišx:ßáó}ý9‡°„¥uY¯L‚$R0Ñ$B (áŒB”ÂÊ„RÇ¥ˆh|u\ÆÑ^d;eV7j£j‡†¶*’.$ýmÊ|ç.º¶ÞFÖw‹êJ´?™$ð8$¹µºCHuüx2„}¿+ŸyÚîàÖúháI•Ì#(ø“Jž¤¾HÕgDV "µò¤¬_T]çÍö16úÔ±–ÑZoÑ7K \$R ÐY„Sß¼R•¹u·*=:ÁX-’LC —êd¿NSÜËÙ”µY¬ãäÛÞ¡hÇuÚ˜PRæUÜfël—µGpû¥‰ÿhÔPùÍ«Swž¦Y­’vw0‡¥Ã¸½7NV4­ŠSÒ¥¡w©î!õÀõ5o>çÏ&ùo .õïô@ü/=ž÷À›ìAU·?Ÿ?øýIüšñŸ?Ÿ~ûY3ã?7~1ýö³jÆîÿo0‰?ÏîçñçOð?¦³"$’†¿;ËŽ3¬ 2ðÂa†å’p> ]ªBÕ=Í^BYûa\,:}jma Å Ÿ^ðÀx »ù«§Ùí‰~zsûþÝ¥Yû„âÀy¸÷UyØªâø¦ø.Å endstream endobj 4380 0 obj << /Type /Page /Contents 4381 0 R /Resources 4379 0 R /MediaBox [0 0 595.276 841.89] /Parent 4336 0 R /Annots [ 4365 0 R 4366 0 R 4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4373 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R ] >> endobj 4365 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 694.532 138.508 705.411] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000033) >> >> endobj 4366 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 674.442 318.242 705.411] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4367 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 606.905 138.508 617.784] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000034) >> >> endobj 4368 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 586.815 318.242 617.784] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4369 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 519.278 138.508 530.157] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000035) >> >> endobj 4370 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 499.188 318.242 530.157] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4371 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 431.651 138.508 442.53] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000036) >> >> endobj 4372 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 411.561 318.242 442.53] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 344.023 138.508 354.903] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000037) >> >> endobj 4374 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 323.934 318.242 354.903] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4375 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 256.396 138.508 267.275] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000038) >> >> endobj 4376 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 236.307 318.242 267.275] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4377 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 168.769 138.508 179.648] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000039) >> >> endobj 4378 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 148.68 318.242 179.648] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4382 0 obj << /D [4380 0 R /XYZ 90 757.935 null] >> endobj 4383 0 obj << /D [4380 0 R /XYZ 90 733.028 null] >> endobj 959 0 obj << /D [4380 0 R /XYZ 90 665.476 null] >> endobj 4384 0 obj << /D [4380 0 R /XYZ 90 650.906 null] >> endobj 960 0 obj << /D [4380 0 R /XYZ 90 577.849 null] >> endobj 4385 0 obj << /D [4380 0 R /XYZ 90 563.279 null] >> endobj 961 0 obj << /D [4380 0 R /XYZ 90 490.222 null] >> endobj 4386 0 obj << /D [4380 0 R /XYZ 90 475.651 null] >> endobj 962 0 obj << /D [4380 0 R /XYZ 90 402.595 null] >> endobj 4387 0 obj << /D [4380 0 R /XYZ 90 388.024 null] >> endobj 963 0 obj << /D [4380 0 R /XYZ 90 314.967 null] >> endobj 4388 0 obj << /D [4380 0 R /XYZ 90 300.397 null] >> endobj 964 0 obj << /D [4380 0 R /XYZ 90 227.34 null] >> endobj 4389 0 obj << /D [4380 0 R /XYZ 90 212.77 null] >> endobj 4379 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4397 0 obj << /Length 1205 /Filter /FlateDecode >> stream xÚÕ—Ks£8Çïþá€Fì^œ„¤<å×ÎÌTvÊElü¨µ!‹ñdòí·AÁ›ÄÞ½Ì !¤¿º[Ý? ¬-5¬Ýv.£Î§êiòljkÑB󰿨qJ´h®Ýë6"Ä0 ÆXšíÐÊ0)ÇúÍz“ˆV,’Ü ®ž¤³²Ëc.Ö åÆ÷èsÇ:w¬„5R)s9×fÛÎýw¬Í¡ÿ³†‘å¹ÚS5j«1jÁs£…?:øM+©…°Í_¬D–´ÓO÷Û$‹u– #Ãaúó£´ø:›Á÷´ÀLXä YÌkŠ!åvrb&`šäùv·œV¥‹ÊFÍÄÈóìJ‰ºŽPR–dùÅÁ`õütÃì†W” ª™ÄE˜S!ðå*ôƒ`N®®ü0lÕ(­'1e½œ2œôûÓñ¨7ŒüàÍyü`ÚÀŒ‚r;¿²XØÞNú]˜}=eÞ¥A¹Þ½ž^E߯þ9dž Ï ;8ÁÅzÑÑ(¸žFAwxR`{×3§ÖV÷ΊÒƒp}ô¯Ïp¶ž+l?)“FÓpÔŸD½Ñð«ÃÉeoÐ5l¬ßú§-;œ†¾ÚàËþáä#˜#Š™fZykÔ1“U|³Og/DøXÍ€uZÔHˆöŸ˜ãòL?*d‚äY D+±T 9°˜#^!Rab!ö›ÄA6•~È5…nh€³œ“† ®”Lj9úl§Ëd'^ŠUÉ>ËÖ”›oö‰èÏâ9ß º_E»”™' ƒ`=Þo Ñi³R¦…¹­ÖRw¹Éâh é|?l¤ú,K‹<ÛìÄÒÒG&>À‘¡ x˶ëQå×øNŒ±Üf„- líúº5Àžã¨S³EÃd„!“2ìÈ㶺[" ì°Tû« NRVÔóSÙÌòùN¤D±Š ™§å‘—/åÙ@šß«Z§ëz¯Ž1b·Êö›¹Ð‹7›lòäÚ=Æ3Ù\d¹Á¹ŽZ7¥±94îûÝÐs‡#ƒÁ¡è_´8ê0亞rTît¹ÞAù¨Þ4+”ßyÏÍ]¼HЛuêpÐçPkY®²­Êµ<Þ&E’ïþí¤$¬¹.lœ'ÏJKå?ÃmµH‰‡¥Ø´î`—1Ü{ÔÈ;ƒ¢j\¬j¥Œ^U+¿É@,Ó,Oäf­e2r°> endobj 4390 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.76 366.481 196.4 377.385] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4391 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.315 195.658 181.954 206.562] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4398 0 obj << /D [4396 0 R /XYZ 90 757.935 null] >> endobj 426 0 obj << /D [4396 0 R /XYZ 90 733.028 null] >> endobj 4278 0 obj << /D [4396 0 R /XYZ 90 714.318 null] >> endobj 4399 0 obj << /D [4396 0 R /XYZ 90 714.318 null] >> endobj 4279 0 obj << /D [4396 0 R /XYZ 107.713 656.377 null] >> endobj 4280 0 obj << /D [4396 0 R /XYZ 107.713 640.928 null] >> endobj 4281 0 obj << /D [4396 0 R /XYZ 107.713 625.478 null] >> endobj 4282 0 obj << /D [4396 0 R /XYZ 107.713 610.029 null] >> endobj 4283 0 obj << /D [4396 0 R /XYZ 107.713 594.58 null] >> endobj 4284 0 obj << /D [4396 0 R /XYZ 107.713 579.131 null] >> endobj 4285 0 obj << /D [4396 0 R /XYZ 107.713 563.681 null] >> endobj 4286 0 obj << /D [4396 0 R /XYZ 107.713 548.232 null] >> endobj 4287 0 obj << /D [4396 0 R /XYZ 107.713 532.783 null] >> endobj 4288 0 obj << /D [4396 0 R /XYZ 107.713 517.334 null] >> endobj 4289 0 obj << /D [4396 0 R /XYZ 107.713 501.884 null] >> endobj 4290 0 obj << /D [4396 0 R /XYZ 107.713 486.435 null] >> endobj 4291 0 obj << /D [4396 0 R /XYZ 107.713 470.986 null] >> endobj 4292 0 obj << /D [4396 0 R /XYZ 107.713 455.537 null] >> endobj 430 0 obj << /D [4396 0 R /XYZ 90 439.972 null] >> endobj 2116 0 obj << /D [4396 0 R /XYZ 90 416.719 null] >> endobj 4400 0 obj << /D [4396 0 R /XYZ 90 416.719 null] >> endobj 2117 0 obj << /D [4396 0 R /XYZ 90 260.265 null] >> endobj 4401 0 obj << /D [4396 0 R /XYZ 90 245.915 null] >> endobj 2037 0 obj << /D [4396 0 R /XYZ 90 89.441 null] >> endobj 4395 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F20 595 0 R /F38 780 0 R /F14 1078 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4422 0 obj << /Length 3130 /Filter /FlateDecode >> stream xÚÕZÝoÛF÷_!÷@Ë]~û€Ú\R¤hÒ\m´¤AA‰k‹‘TI*¶û×wfg–\R¤íèÃ=i¿8;;;¿™•·º]y«ï.¾½¾øúµLW©›F2Z]߬RoG ¥X]ç«Nä ±ÞÏóœ»]ëî×zÎëâ ¨õ“ºQÍZ$Žªv8”‰ç­?^ñêúâ÷ ;y+¡)‡±ûájW^|øè­rÿ~å¹~š¬îôªrH~««‹ÿ\xr)}׋ÂK7p}æ´¨:âX.ª‚Ú¿z¡‡ÀØ×¯ƒÈ¢&<é¦!e‡C½£e£M4ehV½XoBÞꜢ &©YZe÷E;CPJWÀgc‚mלvûǦ¤/E`} Wx=ÿzž?ÃDì±4k€ÔÜ‘7 ‚N(pÑj##Ͼ\mDìF2èI 0‰ŠgŸ#rÃØ"âiB?ñúØu} ¾–mÖ©»Sª²nxê¦nxMÓd-µ‹ŠfZŸH‘š[Ö¨Ÿ¾»X}ÐËAõJÃ3Fœšp•µVumÏ5€“­jx´¾¡uÝ^­m*,<í. Yýº–…ÂÉÕÍZxNv:àŽ¡t>¯e{œTë®7‘œ·æÀ0Y´ô•‘IN]’ÌŸŽ4@Ô¥óîýÏo¿ù˜BÕï¦5~bß´ïÊĬ(fˆ„n÷ ~›¡ª’³ Ìfô@„n0(Â'…Z‹Ðy¸ÃfÝä|`sÀwï¯æ”&nì 繚;p±õ÷hÀ6^Žo{þ`2#¸BÝøåå5ulT«ª.C;%À¬¯÷0Dóeö@-ìöYu‹ª€ÏÅ#z @ï«ãçÞä&ú/ÓHëüÓ$ÚeȨ¤š‘°Ÿ€—H}ËÅ,û‡(=wHœ#HÚ‹Ü8’,鈖îÀ4TîÎlí]Óû^}sõ (ƱóîÇu2~u9ÃI *{ÅRhŸñ"Øä²”âxÁÁà ¸†µpÈecw_Ÿ9µõÂ/H¥+²Cñ‡2s¾¤¤á³¤yæm!xHðSǺm‹-:[Ü”O¡_~: |~*œ+œŒÈ·á*ˆ²isK¤$÷N$ ¾ tý“VdÜ.HÈ¡b£®ôžÐ"²Ð0dugŽÂ²¼á’÷å%†¶ìöLî°¢<â[Þ¼:óPãoìl„ÝO¬{ ¾‰>ºUÙ­*ÁR5gZÁ,4ÚÞo×àÍ›ü Ú–4 ¨÷ ÞÌÜj’€IÿÚ¥2íc¶²]w¢Pн-#°S«Õ Zúœ¸Ž õø”Zl9N…ã†n$À×ÉÀ |¶+Κ¬TÇËÑ÷4è»S ¥9PàÍá.е08ƒ]6‡#Ãöz—ÿ†E‘Y½xäÜ$£jWWy1`ÔV“Øó'»æXÜ31ÕíÐbôù¸d ãtS>3°X‘©CÁÿÐj~üÀ):Ç@/}˜jÛS©/ »}ÆÓÇ@¤Æ¸H_¢ž§ á{= Âá}†FDN‹F¶JU´Ž ‡˜Öž×€Ž4ÔÒz|¿SÇŽ–7ýv:¢Q/kxëêÊ7cÏ>QšfPìö4´Ë{ì1Œ’.ã(j/ŽØàE¨±±^ÒЙéÁµ„Aª­äMEkjm}ă Ép >,¡tEu;wÒ¸^‹¨ÕZf+g™#•‘¡?1î„Ô¨å¦u¥Öú?TS»gQvb?ÈR‘¦…þPŸf,PìŠ^kp ™[uBè‹í˜/Œ±1’á𮉕¶-œÎîI>xB)ea‚~cvJ8¢Ñ+ŒäèBÊ¢b ­aü ªÛnOƒ´{l&ÆÏMQŸÚ¥x¡q@Œov!\‡æbw]m.‡bú‹¬kŠš£fûЬ¬O&Í4aÀv9óÎØö9¥û|=`Gú'•€ó¼%ç°/­k%+ȪX,uˆfUîÝ¿ñ€S"1ö€ïjM"ðµ[Óè Ô^‡`í}pVGâ`‰}+ûÓH¼„Â'1‚?€1hJ J0¼øŒŒáÌ0Ëpê.Šv0ûÎÍ’üàhQª¡aëÈAeŸZ£}<é‚NõN¬WEgQn”ªQYÞUq†næñxx€ŸãQ¸ÿIu§ ¤šÄú©ÍÄø+HqN­9ÐažúxLRXèHcörR†ÓkÄ’ˆwIøê´Ûiÿ?ZãMd‰ˆ`"ï8¢-èÕ¨ê2uìÖa´-''çÌø3#™™·–2°£è ÐDa mp½Ä8Az—e´¤Îe!ìL7r}¿GNÿšKÝ=Wö>D1ƒï´¿Š°èòû©hÐioüË-:ÝŒLeV|UT6Æê÷æ‚ü›¯ñs‘«ü+ú`XG“6gÀI=ì÷ã“-¥Pù?GÎ}—™ê0ñ”gß¾(Bk;#‚1îÖµGh©QeVTC.Rôõ½ÐÊUdØy vm•Æ~ûÐv˜7ÊˆŠø8Ö™ouÆ× µ5ó ±îöÀ] _‡ïÁe¨ªUf,ë&Ô9ki ëfSÐÊdÝ~Hð‚šzsø%òа˜‡3­\•NU ÍU8Ýš|~,(c;PwÌ~p3ùÀdxÔ)j¶:ox#ŽB⤋¨æÅ,z.䘢 –µæêÊd4C½øýË¿ÿ9ã ÏrH¬tzxOlë<•Ù§¦¸qêÚ†~„Ã~ztW¸ªª¹Á UeF« VzÒ€—o6y‘ÝÖL6‚ÔÙ'by(TÛÖ»¢Ïèý²ÒÔÁW J…kïí¢Ç]ÑíŸCÙŸ§3¶äq¦&Ɔ u·ççäÔMF>$½Õ aK=â!1Ú³ä²`A¶Eò)yn¢Bµ.ÜÄVrÔæÈ{z‹»n›ÍØÑ3 €Æã:h_ï)_J9¿Kœ‰å0È×j£{„Àpl†Û5®U;ñ™g4õž°ñÞÁ ½åM§š'ãÈù±¸°ÅòÙ©3ÙêPLÁ4ùpêjû'ÀýÒ}š¨Çª»1aåÆäjψmûœÂÏþ,Y0Ç:+˜KÈ NÉ¿´ùX,Õ¾ÁG[ÓP–ç<Öh«Ä^g¦`~²ÁàÂŗa}¥ŸÂî˜vï°gJ¶ô΢¹mla°—go˜ÚÏà̶Žý8µ]|g›EvOÀ6›’³”¢¦ü¤ÿ„ãµEy6åöhmGŸºs‘ñz¨þ@0ªž´ÆÒ«ñëÏð^L)÷™žÞÇÉO¼'<7M£ÿ«ç£ 쟂ÐFþÐJ’œéÕ{®"ö/EAd^мdÈú꧈"µ¶C% ÿàò±¶|WÐ{Òa«£L¼žF _)!í÷ÁÿQ~‘À¡þO50<~CÂ*!â:²Tz`Z{^CoHزßpIqÓoÇHväõÒ —Á(™ðLà£7¤ia}x56`½!ÕØM(8{C²5eú?µ(Ñ¥÷gþMÍü=-È “þž¦nrLøNUªø3¾·¦ñ\m©Ñð.qÆÔƒ0.MUP¿_^^ýðæ[j®ðX,,¨×÷·ªšžôO4Â5÷ endstream endobj 4421 0 obj << /Type /Page /Contents 4422 0 R /Resources 4420 0 R /MediaBox [0 0 595.276 841.89] /Parent 4336 0 R /Annots [ 4392 0 R 4393 0 R 4394 0 R 4402 0 R 4403 0 R 4404 0 R 4405 0 R 4406 0 R 4407 0 R 4408 0 R 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4413 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4418 0 R 4419 0 R ] >> endobj 4392 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.356 702.288 342.889 713.301] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4393 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.5 678.378 383.563 689.391] /Subtype /Link /A << /S /GoTo /D (wcs_8h_42b2578d76ace7ca6114d82b7ae46a89) >> >> endobj 4394 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [401.872 678.378 439.829 689.391] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e790c9ce6c9b7a4845cf1c3c97b1e97a) >> >> endobj 4402 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.911 648.798 222.445 659.812] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4403 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.63 636.843 306.647 647.747] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 4404 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 517.384 162.169 528.288] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4405 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [342.849 488.228 396.866 499.132] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 4406 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 402.642 193.212 413.546] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4407 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 371.493 355.36 382.397] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4408 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 371.493 481.774 382.397] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4409 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.708 301.195 399.242 312.209] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4410 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.255 289.24 147.894 300.144] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4411 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.087 277.285 248.274 288.189] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4412 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [267.289 206.171 297.505 217.074] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4413 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.05 206.171 420.044 217.074] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 4414 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.517 194.215 275.811 205.229] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 4415 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.233 194.215 390.45 205.229] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4416 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [456.79 194.215 494.479 205.229] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h) >> >> endobj 4417 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.691 176.591 257.225 187.605] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4418 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 164.636 123.643 175.54] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4419 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [312.434 152.681 347.622 163.585] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4423 0 obj << /D [4421 0 R /XYZ 90 757.935 null] >> endobj 4424 0 obj << /D [4421 0 R /XYZ 90 733.028 null] >> endobj 4186 0 obj << /D [4421 0 R /XYZ 90 363.746 null] >> endobj 4425 0 obj << /D [4421 0 R /XYZ 90 349.395 null] >> endobj 4420 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F14 1078 0 R /F20 595 0 R /F38 780 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4435 0 obj << /Length 2504 /Filter /FlateDecode >> stream xÚ¥YÝ“Û6ß¿B7Óûf­’’(Y›ÉÍ$ÛÝLzir»‡$Ó‘eÚÖÅ–\}t×ûã  ,iíÝ$÷$ŠâƒÀ”pÖŽp^]¼œ_üxëÅNìÆ¡:ó• ' ¥«<éÌ—ÎÇQèJ9žH!Äè.­ÜÍxâ)1ºÍ¶šFïõJ—c9é<Å©8˜Š‘ô¢ñçùÏ7ó‹ß/$HŽ4œUäF¾rÒÝÅÇÏÂYÂüÏŽpýxêܪx><·Îìâ× Á»ÝÝÊ ³[)€¡ôÈó]*Úò'ÿãmvi=7P02D LU¦f—–=XBtè}ÏqléguÙ¤5é\ôÔc©F÷u™Ø«²Ø¹ž½ýN‚ÀUÊw&R¹Š-üÓ{Í«fÑãzŽ;/û6îÉýX‚.Õc¶óÊÀ·+þ=–RŽtZåxâûñ¨XÑs«óu½!‰½…±ëûíúOBøDÔ¸ñÔëél˜¦E^'Yžåkz¯7ÓQ¶KÖšæ’û¬¢QÞìºä—OB 9)õ6©³±§F Ã4ÌJ‎DºŽ#ÝñDEÑè]¹Ô%‹1–q&ÓÈc4®tcÅ¡Veë<u¼4Éëg‘4ö)ÕGñ&B… àÐÆq@»Åí–ÆhD$oɲ|ßÔ<$U‰KRaZ”¥®öE¾´Š ÜYYÕ}©°¡üH‡ª‰RÍÂÈ»ä(¯S·%óáüúDö¡âäü$0jÕ‚±Q ž¢vÒR'µeÀ«4úènȬ©ŒëÍâ ¯XêmÒlk¦ª4ŸÁÅsN¹æäóþÕ…óÑ|‡ƒŸ¡Ï”0qÐ zPꤦ‹žš€¢MÀ˾ÈòZ—N8±K4X0mÊW¤5Lü©ËÍŠ!›/™ˆ¿%[;jù `C>m9dù2KÉrðÖ8ŒÅ‘!¢]x\rÂé6ØTDÁ†Á¶:.Ø¥QW¼ÝeÛ-¼¦ÔuSæzÉly[F{NOq/\oeÑ;›K­÷|p‹=½Cÿt¹~òØíËÝà¸ÑÉ=QY“tèªlO¤ÇºrŠj/ê¦ï¬@[z!¦ó--Àx`Éši9¯À¨>ì5ÑRôx¸ð\¢:4s ˆ šÒ®ÜXÁ[½ÓyÍ -¼ã¹ûø™É‹ã²Á¹*¶ÛÂd¾6ÏU{fÖùûRïË"ÕUUppì’Ôºë\˜l]]õm+…+C$…®³Õ>yžz@°ûÏõlöáåooÞ½}õzþá§›+â} êUu»m‘¯³ºYê>Â&˧„¼0àaþ˜ ¨ÖÈù:e®?¼¼¹GÁèÅ8 VÔ¯M²LÊä+•ß…EÄ À¢ðúæÄáVÊv`TV v<ñD Ö¾É@³Ý\Ïß¿xÞA(@doUñÿ2ÿlŽXýÝ?of–]|aü×—l»!Äp’à~זּ¹άå‚Ùz¡9¬mš|l#xÕ”æ|s§“Ü"êd·‡€8YŠßáñ<.-—'òràÃn¿'-W.a0bЉ/>k³m„±9íðì$Tx{°Ä‚)¬§‚»Œ))éÀ`Á”œƒ‘ɪeRòÇ;¯S׋â~ É v½<” Œö{“•¦ã4ä?ôSÅþ1xQ ‡à¶M–nh&J+h§wEy`B2ŒßBBÃZºDÎXÙUÐOнUÖÔ'R#C}Õâû°‹ïcaû˜Q§èå% ‡Ì\Ò7A½‡qn4O˜tiEÒ†±!ÃÑÜn…zÛû(Ûó~»¦âýœÁ!Í š†!ƒÂˆÌghtb&c¿…í0Ū£AE0zkWmtú…).0¹×%(¹3®n%ø¼÷2[ˆŒ{ ߯+ zõÒ?úí”:$Î`‚¼Êª4º´9Á¢wûä’úuªí£ýlìÁîäô`¸$ˆwö*@B×.‡WA.ªÆ'[˜âSÆ”8°Gß=¯o< ]]aªJÖÃÜmmŠf»D¦tÆÌœ®i}‹Iï˜<ðµ2sw¦Yªè¤iÊ$žçŠiÄ. I7¦QΊ¦Ú,<Ͱ8gêå1»· ¶N¾Tšðt¦Ðœ1‰¿·Ûaxó˜DJ!߼+ᆨᮊ[¦ <`àæ\4p¬œº‘Àd:u…²Ø²NꦲZ`™@­!ÒBØ`B.òÔãEX@ÑõA÷Y“"ž;QÉq{އdoÈß ¹¹b$pÞ–ßµ÷òK'8ùÇRoœm¿S„´2^çäØ Gbuì,l¦Û”FÞS}kà"ŸTzŸ”ÉÂ^vöÅõR%~=@ ÜYðô0*n1 -¢ÈªÀÈ.6 ]¨%6Ùüãz`æµÙK^µÚ›ñTY¶M\»õlxkBõ÷©Xºº†§Êžp£±–—–ûÓM!0üV=šñ‡‡> \o × Á£|pß"þ¼:a/ô|I‚“Ãu±[ Û D c¤è¬ãß è!;Å4PZ“²ÎÒf›”ŒèF1†t „`¢‡EèD{G‡2“SS—o&“êH,˜m‘¦MIˆzò6GŒ:»8ØÀE´ÝæÃ3- ®]0{›Ÿ¹Œö§N䯑æÊxê†ÐxÂR7\]þnö¸€oéú±êðßszÈgŒu å$v{·ŸÜóÅj‡zؾÒìÿú_ÌÏ~³׳¡3iÕèš©_T’^îù68¶Ì—ä-ÛÙò+]Ê]ulòq &80A/`xE@À—Ç5NG¯9Š µ¡J$éæT$°æ0© Â{ØsA# ù=—|xöœ~°i1bu7[r qÀy®ÂÀèžê6»*" ¥j†Ì3ü7u‰8>n¯nÞÜÌæ¯_¼!żø\j,æÊR :†8m¬J|ÛÔAbïDCêAº>þüøï©(³4=ÓŸº19Á?†ÈŒ¢ÇØ+×SSKpæ~¤íù¥;õ›–72ßèN^=¾¶î8+7b=ûÕ¶ýeF}®{bd“V{§`³k·º·õåÉÔ4üÿNM{ð•¿íÏÑr¤6ú9ªbh8ä^é\—G-âùÅn¬hŽóR\òJEôæ éY˜äÁøèÍë—4\)úéû§âþ°ÖùPÓ¿¼´™ä endstream endobj 4434 0 obj << /Type /Page /Contents 4435 0 R /Resources 4433 0 R /MediaBox [0 0 595.276 841.89] /Parent 4336 0 R /Annots [ 4426 0 R 4427 0 R 4428 0 R 4429 0 R 4430 0 R 4431 0 R 4432 0 R ] >> endobj 4426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [407.736 651.249 442.375 662.153] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.504 599.873 386.038 610.777] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4428 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [248.454 425.119 283.642 436.023] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4429 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [292.919 409.609 346.936 420.602] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 4430 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 323.792 193.212 334.696] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4431 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 261.536 355.36 272.44] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4432 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 261.536 481.774 272.44] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4436 0 obj << /D [4434 0 R /XYZ 90 757.935 null] >> endobj 4433 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4456 0 obj << /Length 1922 /Filter /FlateDecode >> stream xÚÝYKsÛ6¾ëW°7ªS¡¾Üé!qå4­›´‘2=8ž MA [Šd@2¶:ýñ]KI”(åÑf¦““``±ûa±û-–¦ÎʡΓÑãùèÛ+;1‰8ó¥S' ñ9sæ çÆ cã £”º÷iMÞŒ'ܧîU–K;z!—RYäÊ"ÕS±ˆ¨Ëx4¾ÿ4šÎGoG ,Q‡Í~HBÏwÒõèæ–: ˜ÿɡċ#çÞH­Á=øÍÙè·E”‡¿µ9!‰CÊ4jÆ"ÄÜ 9#AˆÐ¿ÖAˆ; Œ;]ÔíÝxÀ¾·?â;#8±’“˜ˆE“YßÐÛžôï—³ÙËǯ¯Ÿ?{òtþò‡©ÝLí>oÞ÷h~¼mßÜvùòñôêÑåik^Ûäõ)îý:½œ¿xtmWþîéÍŸÿ<03š!è^0L¸u넇ÄCó7pÍ^»yR70 ©[.íLóFÖ¸XW2Í^QÊeme’<·+ÉCV£ø¦êVKت:%I±ÓѨ$G\Ÿ5åŸcF]Y8I¹ÓJ›¬Ämê\”‚ÉŠ-¾N×Ì¡'#±®ÜÁ^èðöÝ»ýMÆÌ›7·ø·þn^«¬i²“ÒÆõH»?[Úq¥À-E£l'î5þ²Í;¸[jö0y ²ËÕžîԾ˒Lôv§;)pkQâ÷Z¾mA¾:óžNºÓéàb°^gÖåcà³S©¯DŒ_õ Oš­7h…ºi{'—ZA’ʾû—¾«'ÃëŠd]å’l1‡$à„Wª\4ÎñN¹§Ñ˜]«2+VßÀœÅ]3!ÂIU% ag!Òš%ïô “¼•vÛ${IÁ0V$tõRG8bŒ¥m@É®³U…¾a=±N6ÖÖBÈe]w¨L&Àœ‰}˜Y)™4&Q,üb+ØX ãÌ'žáÖú*Ó§zg<^ÀúÌs,Í]ÊÝŠƒÃ´ßÞã€÷Àß{Š(RôRIãm®åºTÚɺäy™âµh)Ã&½gýx°¯µÂçË'#çÆìܲ}˜P©T²ASw›÷jÉŠl‹ôH[¤ùëÛRÓk-µlNhqÉéÍ^ Þ !ºH¡VÕ=Ç@liW÷|ëWß’ž‰hôo½cããˆá å³½ ùøÖjx¦GŽ0’¦‘ë ±4%– Õźæú¡Ô™0“ ÙÐÃóýz=}4›ÚÏžk¦šO/޳è3£¼êNÀ^·5âÃbI±›’F À‘lí;ÈÿäL\ôR·w¥šQöÜV #oÊc}€¢£É’<û«³~6¨­ÙÓµ G;qäx ¤ùPD|"(GÇ\*YK¨;õEOÁNQŸœ"RŸ¡>ªùj€ž'Âü´®w0„`@á˲"+ ¸Ñ*)j ubŸz®Ú¢>l`pEýS¿M«t=(Ž|ˆjਲ਼&iZ¼H¥õ žíÓ¢¯Ña¸Tø$бqyŹ:>TzaŸc³6Má•Ð?—©y DðóJ*yÖBÎ~b WðÆ2ïëh ÀÅ`.c°ªˆ`$ úÕ0¨†•jv…0-‹.;?¬&†1áqðùj"§Œ„Œ÷‰ QtNáÎÒïSU N]Û±};ÃÎÛÈí´~×pýn:sEìd)„•­Ï`Ü)¬>@ Zžæèíc÷—$³ o^qxa¨‰uõ‹,YeÝd)ž¶UUYË÷¤!°~DŸ…|^QA¿\þaxXïÓéGÄÈ?_2ý=ú ‡èG*õ/ø'$Ú…ÈÅ?Бi·í¡Iß$jÀ¾ïÁKî£Z‚JIÝÙ< `à‰(àÀ’&dG}qÝÀ‹Q¯§IÐcbK‚zŒ­€ÞR™^†k1èMO¤w™ÖÔökz¹ë×ßÅ•ë¦T¶ØcŠs ª—‡£L¯Ø[Gåæ[Fõ¬Â:Ã#…€ñô&PŸÊüã7UêÙ4ÁÛ8øà•ê˜ðhÛ2œHÑÐw›än(EÃÎyš‡BÑ=saƒéM`F;¨$úžyîÓe'ho&v ¿cÙ […²èV¡‘€âf¦3\6¡¥9Á*GÛ-Ô sÇ1±V^~B€*ª4~cóò-y§£ñ<ÛSÃå?­rÞÿ±Ê~ù"³èC?üwÿ–Hzþ[‰ï#å<‘…T»O:š_ºÁ•®vòÎþØF/»ðCû¼æ8ö¤Z¶û”ùûåìúéc;„ÑmÛe~(6+½ƒ“þ(ÌI« endstream endobj 4455 0 obj << /Type /Page /Contents 4456 0 R /Resources 4454 0 R /MediaBox [0 0 595.276 841.89] /Parent 4462 0 R /Annots [ 4437 0 R 4438 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R 4443 0 R 4444 0 R 4445 0 R 4446 0 R 4447 0 R 4448 0 R 4449 0 R 4450 0 R 4451 0 R 4452 0 R 4453 0 R 4461 0 R ] >> endobj 4437 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.891 539.495 289.425 550.508] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4438 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.751 539.495 364.391 550.508] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4439 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [393.198 539.495 428.385 550.508] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4440 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [432.518 539.495 467.157 550.508] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4441 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [307.164 509.915 340.698 520.929] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4442 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.157 509.915 505.796 520.929] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4443 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 391.274 193.212 402.178] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4444 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.232 331.784 251.766 342.688] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4445 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [300.012 331.784 346.268 342.688] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 4446 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 213.143 193.212 224.047] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4447 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [321.205 153.653 354.739 164.557] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4448 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.604 153.653 445.166 164.557] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 4449 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.952 153.653 478.61 164.557] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 4450 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.395 153.653 511.506 164.557] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 4451 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 141.698 120.326 152.602] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 4452 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.737 141.698 170.953 152.602] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4453 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [477.155 141.698 513.996 152.602] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) >> >> endobj 4461 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 129.743 108.7 140.647] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) >> >> endobj 4457 0 obj << /D [4455 0 R /XYZ 90 757.935 null] >> endobj 4293 0 obj << /D [4455 0 R /XYZ 268.19 592.422 null] >> endobj 4458 0 obj << /D [4455 0 R /XYZ 90 575.74 null] >> endobj 4294 0 obj << /D [4455 0 R /XYZ 90 382.555 null] >> endobj 4459 0 obj << /D [4455 0 R /XYZ 90 368.029 null] >> endobj 4295 0 obj << /D [4455 0 R /XYZ 90 204.424 null] >> endobj 4460 0 obj << /D [4455 0 R /XYZ 90 189.898 null] >> endobj 4454 0 obj << /Font << /F29 635 0 R /F38 780 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4477 0 obj << /Length 2034 /Filter /FlateDecode >> stream xÚÕYmoã6þž_¡Ôb.I‘””¢¶{›m 7ÝÆ9\ÝÅA–Gw²äÕË%¹_ßá›,9tìÝöCï‹MIÔÌpøÌÌ3ÖÞýp{öê’&A‚AEp{$8ˆAœ’àv|˜DÈtF0Æ“‡¬A÷Óåxr™ÒŒn䬧$žÈ2S·ã ¡ÉôÓíOgooÏ>ŸЄ¢%óE!²ÍÙ‡O8XÁýŸŒÂ$ô¬MÀhÿE°8ûõ [+ñÐZÂÖ ID4DXpcòG̰Rÿê’‰á\Šg HOÚÖò#ÆôQÛé€/ðà £(¦î«;³â²*g×ÿ˜ÏÏÍ¥L3딪k·]kÆE^Z=äEaFK{§WMøD®Ü¬ÖJiïóÆŒš¶ÎË5Ú·p¸[3cƘKŒ¡7²íj%¼l.^Zåá$˜Á?æÔ¼»hÓ¶³úk%§4ãÿN)Ÿ¤E'Ç"¥žp0ÃzŸR>žóaÆ=øb: ž,º,“M3^üœ"ƒX×øÔ¸ÆQ¤×½¸ºöÙ‡ç‘ß>áì‹ Íþg ù@*}y# ðCð"ãÉxçÚ:-›"m¥/„FñΤwó…ϤÌî·b¿ò.‰¸éÅåÜ#æÐˆ¸9VBñäJù”@`Meî ÖOŒ—áÁë«÷ s«Ù‚Wê´°/YØ”}]µ6¾ÚûÔ…žf jTíÐdC]”RÚÈ-+;sieiQ¸‡«rI[<};1‘ôñl¨Êð¥Ü†?ìTe\i%,Ÿ;@‹ЦÏ_{ëw1|LDC·/‰P.4Î8˜Ä±…’¦ï‹ UlÓµw[,ùIK Uj,Ô*PS;Ô¥–¥=¥[iRW:B·I×y¶Ç^¦r%‰3¹÷Êåin$0–=2·3fR÷·£lØ‹ƒL†´Ïjo*]µÓÖ†žNTÃ’­‰•³ú%Çñ_ƒ¿’ÿoû¥¶PkËÏrSÕ6¹Bލ²Á6ÞiB³÷u*B«b *­£Æuþ8`×ð·iñK•3«üªÓäM+]¯¬)]é(•‹ÚlÚé£3G×vï ±ÉT!1_íÊ‹¹âÄ%‹—4e lOÔ9ýE1§¯r%Y~½~Pú¬¿¼T™Áí  qËè€7 @aسï}4 #Ú'@r>Êç+ÙjÔÛ¿®ÂªÕk¹U×ûA¹<‰€À—(,Ó%(?wÒåQ© ð_æ­õrâíq#†hœx{ÜdØã†”ÙŠnÆÃ×=;ÐãBަñ‘øð®çy¡Ç äX¶¶í¹4hmˆè‹U©aç‘8>Ü9.±‡J) ¹ñ ‡„Y T©Ç:iUuKhÝ éÑ I¿¼mþ˜ùmïÚ”°E"š|ÒªŒ|¯ðY´_à=VoÖÙ Ž(Q~P vÏúÎb{Ÿû6úÒäk÷» ¬M}6cÄâð‰~0y¥ðºZ?|HüÌ$(Ž{Ì4@Kü¨þº/ww‚m"УèÙ Ž DOƒªTúNp†ÉÖ¦,€˜îé‹ýÜìÊ]eO¯LÓT<ËáGx]ˆõòÿT6þÙìÈZsFɸTžrm’ÔyŸYY.Ô™¤{éVŸhRv›¥â!ú\KÝl”ê´ÃОS«gnŽ9ÕÉÚʾ[ÈrÝÚ9Æ=\ªî¯kÍÈgPKÝ©‡ê›@©Y’,Ðy¡š˜a¢Õ}À·’ T¬Q‚À24_½N5Üt*kêÙŸ;u¾¡†º«[ÊîÇL·ºTÄö @D;òdçß™ÿ!#‡ýÓµZåëß®|'?¡"!=`/¾®ëÔöÕݱ436yÿC‘ˆµÉ'~'r_±J¢0¶_±x‚8·Ë}'KYƒVë{Ö?»Á¥Ž\š a7_0rÁ#sE¡îº–ˆîøç?ß,æW?˜1l?ôX/ü½z|ZËr¥¿a×µ endstream endobj 4476 0 obj << /Type /Page /Contents 4477 0 R /Resources 4475 0 R /MediaBox [0 0 595.276 841.89] /Parent 4462 0 R /Annots [ 4464 0 R 4465 0 R 4466 0 R 4467 0 R 4468 0 R 4469 0 R 4470 0 R 4471 0 R 4472 0 R 4473 0 R 4474 0 R ] >> endobj 4464 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 644.33 193.212 655.234] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4465 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.634 584.549 195.168 595.453] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4466 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 572.594 122.538 583.498] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4467 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [271.279 531.059 331.931 541.963] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4468 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.374 531.059 429.882 541.963] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c089e5d0e3191255ceaea7f8591b27ea) >> >> endobj 4469 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.646 513.435 429.603 524.338] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 4470 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [449.887 513.435 487.845 524.338] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4471 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 501.479 143.02 512.383] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 4472 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 382.196 193.212 393.1] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4473 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 270.615 355.36 281.518] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4474 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 270.615 481.774 281.518] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4478 0 obj << /D [4476 0 R /XYZ 90 757.935 null] >> endobj 1455 0 obj << /D [4476 0 R /XYZ 90 635.364 null] >> endobj 4479 0 obj << /D [4476 0 R /XYZ 90 620.794 null] >> endobj 2201 0 obj << /D [4476 0 R /XYZ 90 261.648 null] >> endobj 4480 0 obj << /D [4476 0 R /XYZ 90 247.078 null] >> endobj 4475 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4486 0 obj << /Length 2165 /Filter /FlateDecode >> stream xÚíks£Èñ»¹ÊTgqó€\u©Úݬ¯öjï’¬Jª¼®†±LÐÙίO÷<Ѐ¬hïC^_ÄMwO¿»GÄ[yÄûîìíõÙ7—,õÒ Lx×÷^J¼XÐ bÔ».¼_”.–”â?å]ð°X²ˆø—e%õꓼ—í‚&¾¬s|”† ñ)'‹ÛëïÏÞ_Ÿý|Fñ¨ÂÅAÌ#/_ŸÝܯ€çß{$àiâ=)¨µ2×Ê»:ûÓ1\—[:ÜR)÷bÆ""Íòoö7—¡pYF!`Qåz•·…bÑâ1žó Ü¿iÛìe±Œhê7÷peÄ/ë^¶kY”Y/õ›§%~ÓV…¾Í›¦-Ê^w‚ˆ.4 —•ìú2«4xöŒ/ew·I .¨¿‚ïümqs{ƒâ¯êÕ­þ<«ÿÞ’…KS(i¹û³ßdý­ÖUÖ*¥Q¿0Ú{l›¿Ë¼—…¥®ÈB$œZQ„Ô«AÓœ0WËP8Á _ní\aØî‰ÃbÎ ý?VªW\ÿAþɘõoêú¬?d14 x<Ķ+€Þ˜PÑÊ~Ó6A7ɪ±û{£ˆ/³üaºÃ‹9H‘,ÛúgÆ¢1ÌÍ2Ó#¨É&Ïe7‘†’/’0>Œ„~m°¼Ñ|Ý•½^¬³î'+û¢ÌÁ^êÕ ‹pØbiBÇc© £š `˜kY÷ŸID:ø¡SÕê`,ˆ&»O(^$Qw”1I•{ˆ©¦‰@p,QÉëÀ±¾½:0H~ÜT•yET»2ÕÔ'‰ ƒ—=¶ë)%ÿFy˜QFÖu²˜gæ• 1ÃËrÝ´/&?TUƒ`Ãö=F© ÊÂâ´ýrCãcYḚ̈ ¾_wà'k‡¬[0«QBîÀ 7|EþiÔCCýC7uWBºªÉ[/ÝÔ­Ì›U]þCóæœ=ÂË£ìN’t4ð1çNY›­å ÐÁPOÛ²8Djº·9M ìœhá±e ª Úƒx‚¨å¯ÈÀ+²N ý?Ôr¬j0r¹¯XÙÑŒæŸd+g¢IYY7 Ÿv·w/:*ã-#½¼o¶Ö­‚ø$9U¯ gÝLŠ€sa3ÕïfªpйÆP˶¾PP¢‡›ðݶƒÄ Ìe+9ñJÙ¢8"€]\¹(V%È:»âç»|+ ü›þ s ¦˜ ~-Ïi¦‰¡£ÂLõq$Âm„%¦.1>pÊ‘LÇõZe²¾ÝäÛw&2OÛVÁíågBøLÉ *\[ºæÝ ¯4 ÒpÀ¢Q¬xÛÅrœ  µ2ÝŒPýÆ ;ãZc:ŸC,’x‚£¬RÑl@A3è…a³¥û”Å [»‰Ø¿5¤öâ_rhþ’xÒüAç4'gÐW:CãÈ^a Õ†ýhèÆ¦¼“ Lø)¨ÃtwœqP™'ñ onº÷ƒIƒ$Ù©ªwMš§bŠ×:/Ô1R€ÞzhðôÂÝp¦H&[G3a`œSlðvúº¹àÞ7¯%Ã,'jû£ öªl²yl\rîibæŠÙß¾Þúêøq …IÙ ôw_}§-gÐ¥“’€„äUŽuˆ:âÊ>Ö è`/ת·¤±_oÖwX)q*TÇgަ°UåÜô^øÎÂ8ùV}[ÉzÕÍŠZÞ-Ô„½†h‰±V;ľ·Vå ²Xèl„2X·+w% nz!5A¶¡Z1ÐÄåzƒ1SAÿ¼Q]1,U ÆGÈ÷s.Uv†v]—"µBï¯fd°0â áC´þwù毮f<‹c 2XÌOhÇŠ‡ãF…¦³©+(´ 8´ß,µó 1ÊDʦ¾ýV_é¤Ãz(‡9ëìäÉHÆ)9êÆ”›Vç˜IÀQfyú ‰‡ÆáêÄZË\Pߎ‘¢4u&.ð;Æ[wä“=c$Ĭ§;.ÅÑIáj÷Oô¬F„#úp[93$¸ÕTðùv†$øh†$"g6‹ Î 18JÙ·vŒjŒ×µÑÌé×…ÿŸÀÎM`Ÿ¥ý'½‡àŠ_~æÂ!þ©-.ðâÁ¬»DA(ÂéØ ¦}Ç.q§üÄcdÍM±lŽ]¸;Ç.2–ãÚ‡ôTä›»!¬@ãLŒëìÁè0vsa%¦YÆ©?W&CÑ7ìâÝŸß¾¿\¤8ž„–øÝû¹MˆÂ¡(0“nmhèq•:±„ǶXÀ74«ºF?Ñí´J¬Üø¹úÆÍZ”·¶I‡$†bœíF}úx¾íž  ŸÿœB ½Ã^_'PËO}Ý RÇ×Úc†C¨N ÆþôOÏÝE¢Ôwä±»ýS€Ò˜'æOQD‘áé;YËv;½²y㻸DÈ;}#LIG.BzÅúŽAëhçÆlëywõñÃ[½ÖÃw:öûæùe%ëéNÿ 2`Wõ endstream endobj 4485 0 obj << /Type /Page /Contents 4486 0 R /Resources 4484 0 R /MediaBox [0 0 595.276 841.89] /Parent 4462 0 R /Annots [ 4481 0 R 4482 0 R 4483 0 R ] >> endobj 4481 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 520.509 193.212 531.413] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4482 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 394.493 355.36 405.397] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4483 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 394.493 481.774 405.397] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4487 0 obj << /D [4485 0 R /XYZ 90 757.935 null] >> endobj 2202 0 obj << /D [4485 0 R /XYZ 90 386.029 null] >> endobj 4488 0 obj << /D [4485 0 R /XYZ 90 371.549 null] >> endobj 4484 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4497 0 obj << /Length 2413 /Filter /FlateDecode >> stream xÚ½ZKsä¶¾ëWL\9pÊ À—©²È%×:qVªÚƒV•¢8˜Æ|LH޵Ú_ŸÐ ŠÔË•\DÝ_¿1¢«ýŠ®~:ûáæì»K?Y%$ ýpu³[%t…Œ>[ÝlW·^H[o¥Ô{ÈZrXoü€z—y!ÍÛG¹“͚ެ25•ˆ˜zŒ³õÝÍÏg»9ûσ“èŠiÊAD"¬²òìöŽ®¶0ÿóŠžÄ«½ª\ ŸÃ³X]ŸýóŒ"—Ôá–Ž¸eÊî˜^Õ^L7;ÒÇ$¢°ž4ðÍÞë.íN­á¤Qt*óŽ2œ¤K$"IÄóðQDïú”e²m]±àÏkh0¤ñ÷SQàweÍmä£^©AÎÚcSNi¨/Ç:¯:°93HÛVnxaÏ3ã#3¿È²n ½´(je5¶SºNÁÚ·ï’—ãòJ¦ÈrפU»«›rt ¼7ù´9Ô^ Vx*`Wxï:\àáWUVWmÞv`•†t¬œªFfõ¾Ê¿ÊcN¿XvºÇ£|ŸÒƒžg:¦MZÊ^Ÿ½™¾O¥ásGMe›SDÏÎûDìùE±з¹¢,ÿç'xþ?*éj,ÜÎìðôƒ|!œ¡â¤Ý:‰†çh"­;­´÷“sZˆLVÉÛdÖÕƒmƒtOÑ¥Zf0±¬Uk¿»dlEH8½é/f…')ñ…]À,Ûæ±•voŒÝMÓ#1.ÝˉOÊ®‡âáëâÎŰ• «ô?·Ôå‹Tà¿Ì.•`T~™Ð7xNÓL$ˆ¯ÒŒð â!µ1ä÷\‡‡ÄWÇ”:%ÌÓi¬kNÙð ã2¨AŒA¡1³0¦”›U"­ŠHÇv Кᕠ°€^]MH…æí)5•õ·Kç#°ý”¢Ÿó÷QÌd1G1Øâ Ee¥m} ÍÐâCªÆ¿·Ç´š#ÏIOü´FÞ²Hyãˆêƒ 1’=¡“ǹ(Ñ’ `¨ã¨g9W±zFk€qÈ&™åP¹ 0<G‡4 £|Œgé‹ÔØCx<ässã?Db[—. ÿA¦órŸ5ÛykŽ?{'"`ØóÄCB™?%nà Y“„ 0²ˆ„¾èý¸ìox9˜Ž…°T´ÜÛç*‘˜\ ²Ÿð=™¢y7yC0šÉ{üØe–C÷á+©PT˜O€$È‚ë¡Z7ݬ6\;«Z^©†¼È¿ê¦üÜäO ›ú¨Áø’–GScMÓà-x%=ÿþÜÁúÀ×fȆÙ&Ú´„ÜŒƒ¿Þú‚ž •¯cªŒG!ž”ÉcgÖv‡´›Òê•­¦ò¢0ó ˜ WÍ" f\1B#Æm÷DãwEn/€¢u‡>´¹6§»ÚA!Ï»4 {—`³è#ÁxùµZ œÅ^›•æ w<ÂTdÚ˜ˆž8žÀ¹ð®vfÍWÙÔ £¯Ô®ªÍ¡ ·³Ew¨O{$s”Í!=¶feUW›úØå¥Á*ö¶Ò\8žŠÝ°H\#3Š6õ^ãµÿ3hm··-äxчŸ«s·2“õ! B[-ªmo>®!£šh¯&:#ú!ÅÂ|kv¥#ŠöRÅêP…ò¬.KõKÅ–˜(Ð ¨sOM"‰®© äü€Õ+^ÙÚh¢ËK[Ò.¼žJ`AøF¯º±»Ô ´>ÆfíÜÝyl̃Ñ7(Ÿ½º 7åÏd÷[>­c{“È…›K8t¶ÿQÍD<—AÍ2­Bµÿi‚6ói#Í‹ dn‹¨æ‡nC«:éWŒ™p§jளd(è8Bÿ´k…©žØÃ!‡ànwŒëž}”Õ‰Ô¸M…×Þø}gž¦Ef¾7¶_u“<“~†S’½¶}C¥<'þô¢¥ùy²d)‚A è›n‰Õ{í¤ˆ›&°¥‘,óÅsû~W.õMýo™ ×í#…?KÀI˜$o„e¸Ày¦AŠÂþšèª4×Í> endobj 4489 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 644.33 193.212 655.234] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4490 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 516.809 355.36 527.713] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4491 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 516.809 481.774 527.713] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4492 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.036 433.117 483.993 444.021] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4493 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.425 379.517 439.077 408.583] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4498 0 obj << /D [4496 0 R /XYZ 90 757.935 null] >> endobj 2203 0 obj << /D [4496 0 R /XYZ 90 507.842 null] >> endobj 4499 0 obj << /D [4496 0 R /XYZ 90 493.272 null] >> endobj 4495 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4509 0 obj << /Length 2706 /Filter /FlateDecode >> stream xÚ½koÛFò»…`` °Xrù6\Ò¸pÑGZ'8ÐÔZÚ†".Çýõ7³3K‘4í¤>à>ÜÇìÌì¼gå-6 oñÃÑË«£ïÎE¶ÈÜ,ñâêv‘y‹$öÝHø‹«õâÚ‰]ß_®|Ïóœ»B»ÛåJDžs®JI£·òV6K?udUàR¦žãbùáêÇ£×WGŸŽ| ä-|ƒ9JÜ$ˆÅîèúƒ·XÃú Ï ²tqg v‹Pð-—G¿yÌ¥÷(·iæz^¸H°‡Äñ[ÙvÀQäTúÌpaÃYopÖOÝÄË+øz‘ ³—mÞvšnÖ žŠÆŸ—"rò²“cŒ ?pÃPDn²ÀÞ ®WHÏ;[®ßs.»¢Z»c‘<Ãg¿teÉû(ÙfÃ"~k ‘aÐÕ¾ÙMqàξVU *£I®µ\?‹Á¼ü,wusOèò²¬‹¼U5‹ív 9ØÊóHLâ'UÉœ9n›¼Ò·u³q£¾ÐX±ö´ª6] §¢Èy„øW2õ‹ª¨+­t+«–p×ÌKW5²¨7•úK®i¥¨ëf­ª¼eïÈ¿X~Úû½|žÒ£žeØ[¢Z[6ùNöúìíôY”â§(M¯6§ˆž›çÝ4±ôËr2_+Ä,ÿô}ï)Ü¡1×Mù€Ÿç™—ß;sÍ[—ÝÀuê®bJŠ—Ú-_]ïe¡Þ{ž=Ü™Ù5Ü ƒÈDŒœcL´¦KÁM#ìwç¾?‹aìA œšCÿ"ˆqàô\Zÿ”->kÙ§™lKp1/ßȉ“ʶ¿â7„³³3@8ÓÔ-Ó«ò ~j±Ë¯b„ÿ¡Sï½ÈƒŸ?ÁOÁc’vVIèŠr‡HÜ(MH¿Ô­¤Œ3‘DâÆ‚õpQ]C¤Ä˜™Y­fþD«ÙÈ `{¨cÚ7R„b+‹hœö`[3F)ò–q´'5­æ´x\4µÖjé;Õæø!-w¹ ß¹èQXâÕ ¦ý„x>!C™çM±ePc^æú¾›E]—¯‘«Øoh€gcð(ÃGµ¡ÅÁíavsO_ŒÃ¸#o“aÐU«¿ãB–R£¼™Æ0Š •6oÚžfÞŽÐA„ßï%3Yªâíúvt±˜.F‡Ò`Èy*¦zƒýÜ86 Ö²häÒ 1Àæš°sÀ52 €€4´ç-H;¨/uþM+"aM« )$eÉD-ÀvOr§å¬OsŠ«“YÞ"áì!çBH‘%­4qªí‘¦î6ÛÉù5³>¸ª‹‘1%›Àœ ®=+ìST‡ÐihUªÃ0š2‘Qž$å Ý0HlaÉ}êa: » } Ö§}ƒ-Ÿê§ ƒÊ)IÇ2Ö ~¨îm ¥!v­­vÆÜÐ!&"]¼×s¡°@§ÛA^"+ÈÙVkßm­ØûÓCeC/•=e0±À¢5"Èí¹’ñ׈3 |0šã°»­2n̤ͬFF¥£SÝÄš&á¥äÌøÅOâ` :‰O=‡§”–ÉA`ÃDÙ/98!Cr˜O¿$ß‚èmÅtÀT¡Ñ¹ƒë|³¨;sÜÎIÀˆŠ ~šX‚Ðë2Cw0ãŒVÚz› ñ ½$Moд»vƘ³Ð ¼èÛlYÌØ2†ªì©ö*ž”ÿ (mÓ "7 “±™¾”EÞA\])EKüªVÓb&Td¥jïgná{±+¢ðÙ.i(1!æÿžfx»V®ÐË 9?\4›ˆäÐì™×—àZXÅ¡Íáz¾§àMŠB´F½Ü?%n’EcµÊ[$„¶Y(ŠRX‘abÌ¡cÍõ¡dn5uWrùeÂ,Ý5ªmÃ"Ù3âRlʰ8ˆÐ§T\3X01{8‡¹²¾)Õ§ŽS+¡öƒ•—s6:ÍÝt \?‹ï€nèú‚•} ¥ê}Ëv…ªƒ Ø‡M~†‚.3ZF¸‘ˆ*÷‚ ãT↉XÏœ‰…Ðàö‚Š˜¹‡4X4mƒ¤š!(Ü$Î&ôŠmÞÌà´Ò´À 9|¾ë‰Þö¯³¶ ]`F‹±;ZyÏx‘pã0™ YD¯%%Ô)šçÔuÆÆza³¤e~¯‚‘ î¸òD Çyg„ƒdØ „ñàí!‹†ÖkšÇ„šÇÈ9™O !$ì~þöõo3W‡><¿ºúýÍk Òa ¿ôªVùœ5 ˆhï°URåºÈÑ÷6ÄŒ‰{8@Ë}h,´åëmüšš·ŒqÅÜþR0˜ùooÓíL¹ƒ+h1õc*ƒ² $ lŽ«á=ˆ¤zä*±ØptºhÔ h±1üÞp5KYo:IÐÔΛN`r[án§ï¹§øž)åšR1L̃؈ˆé=Ð'hµ‘L³|^´¦ª3L7|`ø42Óý˜ËűsüâÅ‹ãS:bJSX3Äáûg‡^‰#b#N©6[èFÍbOšOi½Éà†%uòâ䔘îÑuÓ ¿\¹©¡Ýî}½f( &¸v3û’‚-z«Ú®ozû„F-ÅôŸ¾é?ÀPÑ ?~ãÀößZqðú{j±/ÿ`ºž›]~¶ƒsŒ:ò†&1}|ï,ôÏ¢„fÂÃ’–þ¬‡ÿGÞ½ºüéâ%¡êõ¸_ã†êûúËýFVÓ›þšô endstream endobj 4508 0 obj << /Type /Page /Contents 4509 0 R /Resources 4507 0 R /MediaBox [0 0 595.276 841.89] /Parent 4462 0 R /Annots [ 4494 0 R 4500 0 R 4501 0 R 4502 0 R 4503 0 R 4504 0 R 4505 0 R ] >> endobj 4494 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 673.078 193.212 683.982] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4500 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 529.616 355.36 540.52] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4501 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 529.616 481.774 540.52] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4502 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.887 238.25 291.421 249.264] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4503 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.601 156.736 296.135 167.64] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4504 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 128.84 161.611 139.744] /Subtype /Link /A << /S /GoTo /D (spc_8h_96e8686daa13255e36506c3bfc213e46) >> >> endobj 4505 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.333 128.84 320.077 139.744] /Subtype /Link /A << /S /GoTo /D (spc_8h) >> >> endobj 4510 0 obj << /D [4508 0 R /XYZ 90 757.935 null] >> endobj 4337 0 obj << /D [4508 0 R /XYZ 139.852 291.223 null] >> endobj 4511 0 obj << /D [4508 0 R /XYZ 90 274.495 null] >> endobj 4507 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F14 1078 0 R /F46 2400 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4530 0 obj << /Length 1285 /Filter /FlateDecode >> stream xÚ½X]sâ6}çWx¦/f&V$Yò}Ø]H³“dÚÀ´I†qŒ îøƒÚf7é¯ï•%C€P–öËFº÷êž{Ï‘­……­«Þ§IïrDC+D¡G=k2·BlùAœk2³lÚwÆØþW¢,û0¶ÑKߡۣ$jt/æþ l‘ÇòQ@Y`×í?M¾ö†“Þ_=±EÜG¾Ë­8ë=¹x(ô Õ‡""n¸ôJ䢄—2}T4oB·f0’Kñ¬n> endobj 4506 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 673.078 193.212 683.982] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4512 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 545.556 355.36 556.46] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4513 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 545.556 481.774 556.46] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4514 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 392.244 167.08 399.965] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4515 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 310.401 260.081 320.328] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_d53f2d5e6a70e53cb3decc6c7b42ad96) >> >> endobj 4516 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 296.846 186.468 307.377] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_7b46d9cbaea3241d91e40d03a2725fd7) >> >> endobj 4517 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.019 296.846 270.561 307.377] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4518 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 283.895 211.384 294.425] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_cfa8a447539633296d50e67c7ab466c2) >> >> endobj 4519 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 203.132 186.447 213.663] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4520 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 163.905 171.514 174.809] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) >> >> endobj 4521 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.478 163.905 252.021 174.809] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4522 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.484 151.01 181.883 158.884] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4523 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 125.424 179.802 135.954] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_a3843f24df9351294fa4847eaff672bc) >> >> endobj 4524 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [208.245 125.424 236.788 135.954] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4525 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.475 112.156 183.874 120.335] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4531 0 obj << /D [4529 0 R /XYZ 90 757.935 null] >> endobj 434 0 obj << /D [4529 0 R /XYZ 90 531.982 null] >> endobj 956 0 obj << /D [4529 0 R /XYZ 90 509.67 null] >> endobj 4532 0 obj << /D [4529 0 R /XYZ 90 509.67 null] >> endobj 1081 0 obj << /D [4529 0 R /XYZ 374.54 474.541 null] >> endobj 438 0 obj << /D [4529 0 R /XYZ 90 457.814 null] >> endobj 4533 0 obj << /D [4529 0 R /XYZ 90 409.161 null] >> endobj 4534 0 obj << /D [4529 0 R /XYZ 90 328.398 null] >> endobj 4535 0 obj << /D [4529 0 R /XYZ 90 221.733 null] >> endobj 4528 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4550 0 obj << /Length 2019 /Filter /FlateDecode >> stream xÚ­XmoÛFþî_ÁÃXëÝå{ú)iäœ ÇMm‡´0hre±G‘*IÅQ÷ß;³³K‘2•:í}°w´/ó>ÏÎ’;wÞ½Yž]\ÊÄIXÊÐY®œ„;Q(X …³ÌnÈ„œÍçÜ}ÊZÕ43 ]¶žÍeÀÝË¢TDݪ•‚µØUU†S±ôcWxþìçå÷g‹åÙ¯g$rGh AÄ"/p²ÍÙÇŸ¹“Ãü÷g^;Ozׯñ¥céÜýxƶ|¤5h-xÈ|/v"é1¤úORZ¼=ç|œ |QufÕi^·zƒ‰1ô¾UÝñq þÄÞvÍ.{—‡‹Káµ–’y<„%Ò—sÿðÈ‘}Hyvrõ¹{^–¶FËk»t&Ünך…¬®Z³”­Ó†¸Žä'1ã~2?!ÚgI,ìžÕ®Êº¢®^,"æÌ¾Fì‘¥:¶­,*u_ÕzÚ7b‘3÷„dNÏ…`I`B‘°Ð ¿Êܺ٤Ý9c ‚.F¡<„ÔçN ÇCC¥0ß÷aôYì‡Äæræƒ-eI•RT4vkS:`N§ª®¥_õŠÆÔlÓÑܺ1Ë¿¨¬c“ºt™>c¡/aôX,ä_)ŽÀ¢À}Vo Üý³ -X!65àçKÏõ‹ÅLF/ Ÿ´{Ú&;ÿªq&\¾Bƒ¼í^œ9R9†*¥Îwõvÿ§óáÚç^ÂxìÌýF"¼3aþ­êRôœ8¿UmÖ[,÷ 39(ì3àCóy_c´=.uþâ¨Ó ò}K?0ùqü×ww×WoˆÆüOíBJö†D„ …XÕvídqy"€fÅ„Ÿ˜hM<+h£6 '\6›ûaè^ˆ›VA‡Ñ¦[§˜èqà6ªÛ5Ñ©A#*  ‘FËÍfvgZ¶µ¥Ê:K;e9åæ¼2rRòC¸†‚|°©mÓGs¼0ì»uÑZ=ÈH?­‹l=?a_‘8ˆËª=B®áu€UVïšÌ,p\ç®É)Äq¢ªö;UÞZ5ꈵ5S<ËvM£rfÒ0§¡ˆX(‹´òPêsºÙ–êÕ‰ÚÀv%ÈGÆ,L¤ÎéfÖO!”ƶùeÛlzú[먄ù¶” 0ª*}(B ÀÒíôGWÄ7³¢*úH<¡C¯ÿWŸMX"†’..hýC£/H$µß0~C²O½¡¦±írØÂ&´ý·Èp…59¸õ™cs·MgÌ`ðóœ„ðÏüpl>0Àˆúß ÌûDŒ'm| Å&}²xÝ8·ëвèöôc5(Zسk±*pA—/Œ›´J‹ê‘ÖÑ[§¡$LNA m±Ç2h?SL\­AÝL¤§Ç1Ÿúë€0Mn•–ÆŠV³ªr?á•°:î;?€¨0ŒÝ%¨Lö¨Š â`\½yí6PÀ&Ï5¥–(Ö¥*÷4‹ ¨ÇÊŒEN›0mpbWA.€U¹v"NQ©X†àé 5Ó\¬¨ªîhœŒ.+]©@èCŸÁ7Ú/xBû—æaØôúÃÕú&5×$ô~Õ£Á§¢[×;Ó…€E¦þ6!\‚<\‰²¿È,h½5ÎLí¥x| ÒÙþBý{>:wÈâööþýÝ»ûëÅÍ»å?hZ„ÜòÒzD#^rš0³¾ßj‹ßT½¼M= ÖâÅa¡Ç™¡Ü‘ýÌû¢ w‹%ÉÂ+Ë6'½¾ëJÍsäù]qyu½¸¿ï^_ÝÀÏ>Èê-®n–‹Û›™äîëkÚýÏ»?Ü\£¼ã?6:kä îDq… †‚€“%4¶…¾ÿÝ&Ä|µmê êÓ'7iÖÔ´šœ\«rkÎê¾E˜»°¤9 H‚ÛöèWó£Î+Z* ê¥ĺÓ0%øà¡Ú+?†,ÝÔı{eXwé°k‡‹\#†qÀ¨¤ú.%ò " ø{¤+®è× ¬ÙZã üd÷ë{fÁw3ở ðL ¬x×!¢J7jÌÕ,y‡Î&©³°ŠåGLL‡k}‡Šuûmº¿œBÛ‹€¶*xfÂÄ«ÉmЂ‘;%@VÚ¶à‹–¶›>PXe„îÉh†ôÂV9?ð§áò¥ãú†\3~¢×&ì0ÆèB_ ö´ò #–6¶-í”Kì‹´ïÍZ ‚*P-û¦±Ì"ÊåÁ/ÆT¯ÇTú&pxˆR¿uBWx]…Ã×£±øp›CÏõ†æCˆx ‘s»NŽqi¬À¼æ‹ä9¼h ¬ÈÝÔàš†5/Ú>_õN5+ƒž™z?¸«þs=æj…™œîJãÅÂŽíH‡Éf{n,!ì‡ëÅk Ç7?`Å,¯¦:xÕÆ½7–k+p5Ê;KƒNºF¥ù¼MWнÍǺEðôGa?^~ж6¤Ð[´§ãÏ 1‹8š3Øo%ÜçS9%™øÏSêÔw(žô¸²UÕìÙ[ÕÕü7ÕÔ˜)çÃT™Œ°ÝV¶jBß±ÛŽ?ņ1K á_ø%Ö~/ááï'ú^@ƒ˜šx§*Õ¤ý†`ÃúÞú¦èGhúþʯ‚ˆ~IŽœuf söƒÒ> Q{ "Ÿ÷ª:¶ôw]üÊÆ endstream endobj 4549 0 obj << /Type /Page /Contents 4550 0 R /Resources 4548 0 R /MediaBox [0 0 595.276 841.89] /Parent 4556 0 R /Annots [ 4526 0 R 4527 0 R 4540 0 R 4541 0 R 4542 0 R 4543 0 R 4544 0 R 4545 0 R 4546 0 R 4547 0 R ] >> endobj 4526 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.609 720.286 171.201 730.816] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_b0945d3588b604205b9c1b3d661a794f) >> >> endobj 4527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.019 720.286 227.562 730.816] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4540 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 669.299 179.713 680.203] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_d970e4ae584d3052b7bec2f1afb4689d) >> >> endobj 4541 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.677 669.299 260.22 680.203] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4542 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.924 669.299 335.467 680.203] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.614 587.039 337.156 597.943] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4544 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.419 437.015 334.962 448.029] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.868 257.188 477.095 268.202] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_b0945d3588b604205b9c1b3d661a794f) >> >> endobj 4546 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.241 233.278 397.468 244.182] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_b0945d3588b604205b9c1b3d661a794f) >> >> endobj 4547 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.296 147.243 265.838 158.256] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4551 0 obj << /D [4549 0 R /XYZ 90 757.935 null] >> endobj 442 0 obj << /D [4549 0 R /XYZ 90 632.166 null] >> endobj 446 0 obj << /D [4549 0 R /XYZ 90 399.619 null] >> endobj 4536 0 obj << /D [4549 0 R /XYZ 90 377.308 null] >> endobj 4552 0 obj << /D [4549 0 R /XYZ 90 377.308 null] >> endobj 4537 0 obj << /D [4549 0 R /XYZ 90 358.522 null] >> endobj 4553 0 obj << /D [4549 0 R /XYZ 90 344.041 null] >> endobj 4538 0 obj << /D [4549 0 R /XYZ 90 325.963 null] >> endobj 4554 0 obj << /D [4549 0 R /XYZ 90 311.481 null] >> endobj 450 0 obj << /D [4549 0 R /XYZ 90 209.894 null] >> endobj 1150 0 obj << /D [4549 0 R /XYZ 90 185.525 null] >> endobj 4555 0 obj << /D [4549 0 R /XYZ 90 185.525 null] >> endobj 4548 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R /F38 780 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4567 0 obj << /Length 1673 /Filter /FlateDecode >> stream xÚÍY[oÛ6~÷¯Š=È@Íñ*‰yk·´H‘e[âbÚ¢e:Ñ K™$·Mý/ºÙrb§i±—˜’ÈÃsùÎwì]{Ø{=y9ŸüüŠJO"ÐÀ›¯<‰½0 HPâÍ—Þ;?@„NgcìN*U–Sûèf:£û¯ÒLÙÑ¥Z)øù*Oô«ˆòÈ'LL?ÌßLNç“'vÄ1;ˆ…LxÉzòîö–ðþ‡“‘÷ÙÌZ{œ2øÍ¼«ÉŸì´Å{µŽ$˜{!un5¿Tõ4~^-šå°÷Ö’…Xz3øÅ‚ÚµWu\o*kY©åävüiJ…g5”膸Iî÷žR1œôn&Àuød:cû§eY”VêZUU|æ×ö1u/Ó*^dj‰†b°ÛçþmÈÁÛ¨¼ÛeË­ üɼ§ˆˆ°Cb¨AEš×VŽ…ÇÇÛÒ=¿Ç'E^¹Çª.7É`ªÝð~,$EB`ˆ5cfgñ 7+D<¤ÍœVÐ@sP‘„¼™ó|j|ÒÓ&¹‰Çö I°óˆíoKÓè—(C&0Aô$oF%H`¢€ û¹ç=+©Q"lò¡‘„´Å€èPbâ×7ʾT.ê0´QWv‚^š®ì‡8×Éq×I÷Ôqš«¥›ænžƒ—ÎÝòÚ%ñ¥šþÜŲA-ÀFÉý³ÚJÛTª²#­ì=’‰–lŒ[µïlBýÕ&Oê‹¶s|dÉM É©@—Ö•ùq¯U­Ê-Žèä ñ9Âï1Ç#(rÁ·Pº—ƒBÈ/ÑLžß8RU]ò‹”q¦N곕}yñöüü¹æE}³“ÚÆ}Û²eDƦ©bRùûì¢à¯¨Í•Fí¼Èg=ÕUœ¸rRlêÛËÐ èØ"Í2;Z¨Æ.·5ØÀÕ̪pDÕrøä~dkîî#ãQ¥ƒ}{é8¬r\m’’úQe\PßTØžúd*.» qXY!8ZÞCÍ¡ì˜ÒУeŒPó(-[¥w‰Yp|„˜u‰Ñkª’»Ýr1Œ‡\,ð€‹uPˆîãâ4ÙVß2A€1ß…"úŸòã²È•[r¥ë¢[ëDçýl~°Î0=›ü¸F´O'Gä7ä7ãMªTÆ‘L ³»ý>–Ýv;,½)œŽëüx(Œ’»â(Xµ¨ª¬«Çû8B¶$6½$¶¿—dòá^’‘vNÓËŒèÀ8ŠBù8¢tè·Ü4Sã~ =ȯ3Ž9à`H vLªëùǼ³Àáý€^}¥Ù¬(×q=å‰0ì´x@Bc 3˜Ò•á“P—¥åìb~zy1¥ØáˆæíÕ©ü~q>•Ôÿ[ÿ1Û˜ê®×òAYÒ¹6rZˆ 9^”Lx³êIªÉvß•æ+ãÜ´!ÌxQ4Ý\œ÷[gÖÌé:0î…>H€)×L§›¼KEתj”Yå¯ Ÿ$'uÎ÷¾l|×»Îíúý|öU•…æŠûŒ,@˜ŠãŒ]½ï¸([W^lÖªLPìhU&Aƒxkš5ýUÙ{io°ö95· ùXÏÁH7q|dA´;‚" §ÆRe¡Kû ibwÃH¢ˆË'ÚϦL»¡s‹FÚGýH³9>týÎd_ðXئÊphʼn_¬ì¯Íl´²ÌÓµÊU»¤íOëUŠÃ!4ý©ðe 8€‰öá¶° ¨^ZØßØþ˜"n>Ú« Îü)'5Í»m ‰1} ¸Ö%°Æ¤yZ§q–~m2©TñrVä™KÞe\Ç ÿ$]ùÓYøL{ÖÕßbµ} ÔIj/2’M­OÚÃn_’pÀ8ðæ¼¹)°‡,r÷ûB"!\ô_[÷7†5ªÿÖ ^i¾U ûØ‚O89¡}¢XÿƒÀp˜žÛðàó³—v Í v8Îc¿_î®U¾mé €  endstream endobj 4566 0 obj << /Type /Page /Contents 4567 0 R /Resources 4565 0 R /MediaBox [0 0 595.276 841.89] /Parent 4556 0 R /Annots [ 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R 4564 0 R ] >> endobj 4559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.601 613.296 357.143 624.2] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4560 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.16 613.296 472.416 624.2] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 4561 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.45 418.291 333.992 429.305] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4562 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.847 225.961 196.39 236.491] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.156 207.963 244.81 218.867] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_cfa8a447539633296d50e67c7ab466c2) >> >> endobj 4564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [291.034 136.366 319.577 147.27] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4568 0 obj << /D [4566 0 R /XYZ 90 757.935 null] >> endobj 4463 0 obj << /D [4566 0 R /XYZ 90 664.112 null] >> endobj 4569 0 obj << /D [4566 0 R /XYZ 90 649.541 null] >> endobj 4539 0 obj << /D [4566 0 R /XYZ 90 469.107 null] >> endobj 4570 0 obj << /D [4566 0 R /XYZ 90 454.536 null] >> endobj 4557 0 obj << /D [4566 0 R /XYZ 90 308.039 null] >> endobj 4571 0 obj << /D [4566 0 R /XYZ 90 293.469 null] >> endobj 4565 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4592 0 obj << /Length 1598 /Filter /FlateDecode >> stream xÚíXYoÛF~ׯ`ˆ6»Ë;oMb5µe´EIÉl)RåáXýõÙƒ¢dIŽ#@‹¼p‡ËÙÙ9¿Ù%5–5Þ^M/F<4BzÜ3¦ #¤†ï1ârfLã£éf[CF)5¿Äõ'Jù¹±†Ü¥æ(ËSI]¦‹´²X`¦EŒSÓٞõyúnp>ü=`°5˜ïúÄ·]#^ >~¦Fóï Jì00¾®•ápÆÜ¸ü: JUÚW™9=•Ì6|nê¹RïOÔ¡¸ý‹‘ãõy9q\)&ÊÁÔR‹wÐ>¿­ø'Ñ Ì³Ï,rlnÄ„oÖe[Åê£+èeZ¤UÔdÅroAZUee¹®I¬¡®›Þdµü²jëF2¯Ë¬PdSÊ1’ðdMåÙ?i"'ª4J†e‘oäk5‘¤ê4n²²/Ÿ¨KÏðÛPLÎ ŸÀØÉN-æšwøH㶉湚¯ÛøFRQ-Çefq×¼¬j‡ùfOÚl6ºŸÏfÂ&ºkκJ×U§u >)¹Šâª${¡ÝI›!,A. GdMžé¬(O¥ "ƒnÁ`l|³hWs¨ACtÄ( DB§Ò:…î§Ã½í™Br­p)RèR±j×¥8….ÝÙq6_LÀ¥C™'܃ºjDzGxva1j–Õ*jN:—×õõšZ(×ýd-H3Ga0Êc°)Zb©Ø°éûh#§¡°šCƒ/kÕ,†u³ÑH7\ˆ­šn‹¸LÒú´;—PÆŸg„“ЄÌ4ME™0õ»ý%ÞÀë-fATeªú`&H½lWiÑÔzJ[¯óL øk<Ïþ˜¨ÏÒªâá]€Žzó… Ò:}F•Êév™L<¨–=€:©=g„;N¦Äã>ˆr‰`'d\¦M[azõË“ž ˆOqÿ€P(€­?e>EM[KºBÅ6ð*K¢ºFŸ!DÆuW;ÕF èsƒ®³rbWuWô(Ú,?‹ËµJIŒƒÀû.ÁÛx‡Wî¸ÛÃpÊzÎ>o>q|®yê*> :èÈü.%¡Å¸ô+UðÀ@Æ£AR7‡4`©N$ŸH›:._8×㪰.&Óóˉmðç±Ôïúê\¿LÆVÈÍ?ðAº&Ò[Ûw¼T£Ÿ$®M^ ²òæa;„þ7_Ë„h;èÙøÇbkW<`È[Ôܱg —ÜœÊûŒ`‰âÝs9¬„ã ]|Tµ¬> endobj 4572 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 258.902 177.611 267.749] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f23e7b02522c40fa5dfbf3d569348844) >> >> endobj 4573 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 242.224 184.17 252.13] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) >> >> endobj 4574 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.611 242.224 336.489 252.13] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4575 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 220.048 182.742 228.895] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_7181ebe5e9f0a4058642c56dc848bd5c) >> >> endobj 4576 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 203.37 187.165 213.275] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) >> >> endobj 4577 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.606 203.37 339.483 213.275] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4578 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 181.194 187.564 190.04] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_8f4a947e2605b35ffa92f08b113d60b2) >> >> endobj 4579 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 164.516 189.657 174.421] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_883167275c4d3855ba453364db3d8d66) >> >> endobj 4580 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [312.098 164.516 341.976 174.421] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4581 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 142.339 181.496 151.186] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0816c5f2354ee6c0044e11867d7558ea) >> >> endobj 4582 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 125.661 187.658 135.567] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) >> >> endobj 4583 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.099 125.661 339.977 135.567] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4584 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 103.485 182.592 112.332] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f1b99efe520fbd2d4bd0e5a35f87e186) >> >> endobj 4585 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 86.807 186.16 96.712] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) >> >> endobj 4586 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.602 86.807 338.479 96.712] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4593 0 obj << /D [4591 0 R /XYZ 90 757.935 null] >> endobj 4558 0 obj << /D [4591 0 R /XYZ 90 571.603 null] >> endobj 4594 0 obj << /D [4591 0 R /XYZ 90 557.033 null] >> endobj 1082 0 obj << /D [4591 0 R /XYZ 90 378.899 null] >> endobj 454 0 obj << /D [4591 0 R /XYZ 90 374.291 null] >> endobj 4595 0 obj << /D [4591 0 R /XYZ 90 275.819 null] >> endobj 4590 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4647 0 obj << /Length 1490 /Filter /FlateDecode >> stream xÚÝY[oÚH~çWXÚ[ЧsµÇ•ú@¸d©aì¶J+DÌ$uLÖ˜4hµÿ}oƒqð–FÕ>Dã˜ãÏç|ç›3gÆX»×°vQ;ÕÞ´©£9ȱ¨¥î4k¶E DMµÝB„&ÁëßÜå'Œéúb˜T`½íÍTr5Pw*0ˆÔ•ïF·$§\'Ì6>Þ×Z£Ú_5¯Ã‰á…l&4w^»ùŒµ)ܯaÄ©}‹­æ§ Æ™6¬ýV髇Æ$¼ÁâLj6ÁˆH™Äñ‰R»“=§Ý˜‚úeª¢ |•þ9ܧÞb³(ÂÆÇn»óa ú%šoÚk\²xä¥ÈâT3 GÒN™íøSeP¬?%.îÊ=p׳˜ýOX`ø#E¾,ÃI¸Z&x“Ù*Mç§·”.‚ä:0˜­«pøjšÜ¹]—;¥ÿ€:*$â™\ŽÌŒÊdÖIrÔû£1<$«r’z«ù­ 6 ŠG5Sså‡Ë<·á—”ì\~VÂí“îDè©,Ç*æËû—^ˆ¬ø¡ªIjª‡„\wª):ê\•3™ƒ°ÔLÎ`H+DË_ÍU0 ½…¿Ìaì–—¤ºD„ ‡”©ó¸$§TŒ·žÈ)øïC0qË>’V:`´ƒqÓàX¯„}ÔÌ Ë¡ú;¦›üì°Ÿó sØoŒ¯û9ä}T¶Ae¥¨,C½îuFÃq½Û©ËÐèA4 äˆ<½«qã×zï¢UDè»dš¤tŸÕáu£ÑîùÉ„Œ £—ͤØxwÝíŽûWÞ¨5ØG³34rÚeëòj`XBÿXâ=ËŒ¬6œŠ$üa§wqݭÛFJød/Òiçè<7˜ÐëÍqcô±¿Ÿ'[ĸ0”é“J² ×7@ÛõAý²RTƒl\] šãÑ Þ–€Z/jTäâï€ÊŸ™µ+ õÙïA¯5÷÷ç?#¸¯R)d?—ä“W Š0$ùˆU¿ÞéMh¯¢S‹GåG­*êPEb?KñÖUSsÚ•_Í^©†cÉ` Nð¿'3ÀƒZ†^––‡¤WøªÜg“ïM•õ½©Ú:ý<”®×íé‰í ÆØJ+±²ì¯¹žn>™Ý-‚yvÀí®gž? <·8/$o÷»‘®@—äg£ìË,ó6TîäË–p€v+vüBùÑioæk¦ªËì¢mP¡«[#ý~ž4¼åä­°“ÿ(&4¹º‹l³Õ¶ÝÎyrÍQv8q›v¸ÍÅÓú^ù¹È!Òí“g3 endstream endobj 4646 0 obj << /Type /Page /Contents 4647 0 R /Resources 4645 0 R /MediaBox [0 0 595.276 841.89] /Parent 4556 0 R /Annots [ 4587 0 R 4588 0 R 4589 0 R 4607 0 R 4608 0 R 4609 0 R 4610 0 R 4611 0 R 4612 0 R 4613 0 R 4614 0 R 4615 0 R 4616 0 R 4617 0 R 4618 0 R 4619 0 R 4650 0 R 4620 0 R 4621 0 R 4622 0 R 4623 0 R 4624 0 R 4625 0 R 4626 0 R 4651 0 R 4627 0 R 4628 0 R 4629 0 R 4630 0 R 4631 0 R 4632 0 R 4633 0 R 4634 0 R 4635 0 R 4636 0 R 4637 0 R 4638 0 R 4639 0 R 4640 0 R 4641 0 R 4642 0 R 4643 0 R ] >> endobj 4587 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 709.092 183.698 717.938] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_4d37e0274dff84649cba075b8761b3fa) >> >> endobj 4588 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 692.488 186.16 702.393] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4589 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.602 692.488 338.479 702.393] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4607 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 670.385 192.555 679.232] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0ed13e54c3eacb9325afbae78ef33b61) >> >> endobj 4608 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [315.774 653.781 345.652 663.686] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 629.621 202.916 640.525] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_3229b126ed844da0a2d4f7abff1de7d0) >> >> endobj 4610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.414 629.621 264.066 640.525] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_256ce6281894f65dd15396cc0994e875) >> >> endobj 4611 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 549.072 226.308 559.976] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183) >> >> endobj 4612 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 533.923 202.398 544.109] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251831edfc4a839295befd132ce460d253311) >> >> endobj 4613 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.624 533.923 341.517 544.109] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251837906f35912dd0fb39954bfd5140672a7) >> >> endobj 4614 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.743 533.923 483.785 544.109] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251831e255b3aa269ff0c251ada8a6c3f9602) >> >> endobj 4615 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 521.968 217.182 532.154] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183ec3fdc50ed9f4ca8d80d7ce7751ef0e3) >> >> endobj 4616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 506.101 199.499 516.288] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183ee9fbc64e56bb6d307d06d8ef8e8b244) >> >> endobj 4617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [221.562 506.101 337.566 516.288] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183f574a836e251e8a0257da97580bb9354) >> >> endobj 4618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.63 506.101 446.215 516.288] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251831e4cf4eeb3cd2f4d8c2c1f040aa62f6c) >> >> endobj 4619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.278 506.101 513.996 516.288] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251838553bf40509263e3c3a198810f83d26e) >> >> endobj 4650 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 494.146 193.382 504.333] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251838553bf40509263e3c3a198810f83d26e) >> >> endobj 4620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 478.279 213.526 488.466] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183421fc9b9a2aac54bc832b3c1180f8f07) >> >> endobj 4621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.904 478.279 335.478 488.466] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518326d787caed068586fbef3d3c0fbce41f) >> >> endobj 4622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.856 478.279 495.428 488.466] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251835dd410d6f1a55543c4f7d0f82435eb40) >> >> endobj 4623 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 466.324 249.292 476.511] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518381b5390b4f770515ae950d9e382b2885) >> >> endobj 4624 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 450.458 243.414 460.644] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251833f4b7a9a303943f6c12ea51cce2240cf) >> >> endobj 4625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [264.076 450.458 404.996 460.644] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183d6bf7801d043f41f67c54677d6cfcb75) >> >> endobj 4626 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.658 450.458 513.996 460.644] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518315a9e5f9cbb559ef53018e9aade43e88) >> >> endobj 4651 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 438.159 156.062 448.689] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518315a9e5f9cbb559ef53018e9aade43e88) >> >> endobj 4627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 383.066 154.926 393.97] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4628 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [285.481 383.066 319.015 393.97] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4629 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 344.359 157.696 355.263] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_62298e0fb06332a282d9daab718a1286) >> >> endobj 4630 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.251 344.359 321.785 355.263] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4631 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.49 344.359 441.032 355.263] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4632 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 305.652 148.839 316.556] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) >> >> endobj 4633 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.282 305.652 210.816 316.556] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4634 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 266.945 151.609 277.849] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) >> >> endobj 4635 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.051 266.945 213.585 277.849] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4636 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 228.238 154.936 239.142] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_883167275c4d3855ba453364db3d8d66) >> >> endobj 4637 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [214.651 228.238 248.185 239.142] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4638 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 189.531 152.714 200.435] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) >> >> endobj 4639 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.157 189.531 214.691 200.435] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4640 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 150.824 151.051 161.728] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) >> >> endobj 4641 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.493 150.824 213.027 161.728] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4642 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 112.118 151.459 123.021] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4643 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.742 112.118 284.276 123.021] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4648 0 obj << /D [4646 0 R /XYZ 90 757.935 null] >> endobj 4649 0 obj << /D [4646 0 R /XYZ 90 567.972 null] >> endobj 4652 0 obj << /D [4646 0 R /XYZ 90 401.966 null] >> endobj 4645 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4702 0 obj << /Length 3184 /Filter /FlateDecode >> stream xÚ­ZmsÛ6þî_¡o¡f, ¾øfn&uì4™´qm·77i¦CS´Å”"U’Š£ûõ·‹ø"SršöƒMX.°‹Åî³ ñÙÃŒÏ^Ÿ|{òÝ¥Ïb~0»½ŸÅ|‚i_Ìn—³^À„œ/çÜ{L›ß8÷¿°Õ|ákî]æEF­ëì>«ç"ò²2Å®HùÊ2š¼}{rq{ò牀éøLö:d¡Ô³t}òá#Ÿ-¡ÿíŒ3G³GCµž)_³˜Ýœü|Â.Õ—Œš–úë<ö½¤Î“»"kÌÔî[ø>S2š-|ÁBß~ü›ïëÑ7³ B§UÙ´$eºJj$ùîR¨7-¶¸åù´|PÞúÁ ~ýd!S¡ï>sºý=«ëuó°¿œþlCzGc½„ŠÏ"à(ä½ ¢f ¡çŠæ¸i“vÛ,õ\†^Önë’Þ×YÓ$sÁ½ü—5ìÀ,£ XȘqУò™„gg/LX‹y•µ É’æx•5ioÚ¼*I#upØŤЉÏuµmóöq!ÃØËK|F^»ÊmO³ÍÛÌ.³²ÍïwD’”Kênë¤lŠÄQ}žû­£Ú6Dx_¦i¬º§gY•‹¦°Ñ³|ŒÔÛ´µlWIkgª-ë?Ê ™?––¢BñP !X¬­Uiº­Aqd¤ñãØ»|s{C=ÿ9·U–,³Ô¿PZ{·«¬Éh„yÈè³ûºZSg»²£NVT­é@‰v Ñ’FHÅU‹ï "“áŠ&¤øÃ˜Ç\ho÷ˆÍª^6§´½ 6=WÖ+ÔÙ&Ékj›õ %êÝ™DZƒ¼4›d?©Aä²5¢î.(„gôÓX@àAKÜ}Ƈ‘ólÚÚ {4^¾¹ºYÀFÏthQ¨K©/ÍÀŸ´yRà«ö6uõ)Kûáv·É@OW*˜ùB»#þÓùÕÄBÀÅ"t4h¼SŒX$…£yýîf‚€¦ìæ:¥¥ÑY€57XqMYq¤¶L^\^_ü¼xwsýbb>pâœý|O™éá‚^\^¼{¿0µèE†cÃúáâÝ\À޽˜Ö‘øCÙ"5mÊ  ¡Âk2<‘‘qëàå; Ÿßþ÷ꂨ ôT¨é¨òdJÅšE`0n«Ìéú³‡6‹ƒ„#°À@°#Š»ÝˆžÇÁùƒ¿qÍáOìû~Ãaîsok¥|ÌÛUE/‘·®–àúòòÁ.f•Q F‹'Ž{Ù’ê…0cÕ§h>â1†°½ùüá#´DàÇ Bc<Í®¡—u¶¾E/æTÃg=(!€„›zý$ª!sãZ¹ [ã[±;7^ö¶*‹]? •èBœ³ƒã¾À>¤f°ËúHhYéFÎ,°»lƒápñýq••GäÑü™C ŒæEa'ÈŸgê9;O3ÍKóƒ Ð=Mé¾#Ýš’®¿nÍ&ýëË€ž]ëvaà{ß›]tÁ ´jj®ÀƒY»lm,„ÞºÃø¶¬è ðŒBä×(Ú jÔïZÍž0ž‘Ã_#HÀ @?à³ùü-Lì.б}¿Žƒ÷¥´:;ÌHœAé{Þ U¾á%qÏ ½ k§á ëaº—[ùá…”&Y[:æÛ¢3Ëï÷È- rB?–¬m²Â’®’å¹Ë²rÿM̾Ü~É‹<©Ñû>¡-l¸ù$8š‘WÁÁ²j©±mŒk‡Ö2¯!Ž;úâ®g÷îÍ÷Ô^'¶3)šÊ’eÔ3\ãBû¡w‰n«ªi”|X²ÞÙ锬V[às‹eVO„92vùÕ\jïå< y±xÿýb€ã÷Á~i÷6ôH ØŽž9òÎRñÛê®Ù·tëxdHŽž ½¤±¬É„Bo—؆è¶ð!c ®ž“„ÓÑ4›†G~±0îóo_Q;A4Öì×ɸþ´<,"úμ(¨ug±ì2ãaCŠG l6™[DlÌ IQƒ9îè¢Ë¤³<ÏjH©JÒLZ­ï<#T¦á9€é#ˆz_¹Íí§MIà9Äçf†>‡wðGm¶6±Y {¢Á›ÄîÎ}äxÝd&°Kx`›LM…`—\áZ“MfÓ…7§.]Ø9å4ÕX½”]˜Ã$AX—*!mm=ºìó3©ˆÑVa²ðÝ;–¨gò‘.]úŠtä–òºðp^‚ƒçרýÿÝÎcé½´ýS9%u¤™ØÄê¡Ìÿg”ïf'áùç6iòQÂÚÓlÓ•íqü’l±Z5å¨qUô NT.üBè„\Wmò4x#Z“ƒoó^› ìŽó„¬ó£–¢žëž±ø¸³Gå´ :ê°Še–˜ƒ‡ÌÌS xvêëþÓ‰S“”fwÑò;¸$뎳}œ¶¤mrS«“„–Ûì¡ÒØOþ°(N-§l±WU¶`šö3SNÞäHÚÓa­'éN—X&å¤IÔ(«Ó@R—U)´,²€Q[W¡nr3&ޏ[ZxoJ;’Ômžn Ipªp7’’Ô$4±t«Aù ß*˺¯>M„j©Yô)é+ÎsÎ?Mø…uÑøx–-tW¸:?ÈIBÎûÇ8A*Í™æñXÏW×s NæíÕTÍ1‡:Æ3`Rt˜äâêýùS\4S}‚>͆«N ¿^¼»¾¸œR–Äú§#«¦@Héóüzóþ—ëó‹dº¼ÕN¢ÍJW‘Ô¡…~Ð0€žËª4­ˆ¢vçd˜Ø", ‹E)M#æs9Þ °ÍÆÅÇf»Ùy—¯’ÁC‹ è©‹÷Žþ¨[¤Ìoµ¬çZ{l5ô¦>ÝÙ®„}0+Ž´;Ì©ŽI~” ¿3× € ðÐCŸ‘²8:Òª®©L×ÐH`ôn·G~_UqM-Ç0Ëq5©%Ù–C~«ÜÄAÁ­ŸðQOAKn#9àÝŠŒjéðl/x‹bw6–¸»«ðYEî*&Õin/–GñÌÆ*jè¹10‘:T™NòP•Æ£BwVdkpr4d4­º¢Ï“Z%g¡P½o›¨µ ÅdÔÔ|ºvvÇô÷ ŠÅQçö>MVëS¢sxÑÔùÀd €`œŠc¹´(&Ö*¦Uø>'ÿ¼@â˜K"i’¦©Ò¼ƒbDÁ s=6ÍÞe$ôD>êþâªcœ®Öyë2ìÞŠSœtðW  ã³G€¹‰¹ê`",8®þJ&ì3­ƒ½Lfê2a˜îl¤çr]Ói, :÷sXbhâDýM#^©s*Ð"¬·~_s¦b1Þ*›y.|Ñ]ý@ˤ‘¾M#Elá4ú4^L gœ{/‹6«1Wìçhr Ëð~ÃÙò¦ãby›Åû| CV¾ÀËßÖ²jW¦,ƒdc õ X°ï/‡Iò?jeÛ2ÞÌÂ!h·î{MeêX‘ÀL{m+Ñ‘+aW—Çî½»6Æy-+p?åCCÝÆ– sÚƒJ¼îéýÍ/?½¹º¯ðï‘a~Àaô¡ÉŠÀ©õ:`þÞ¥@ÆlfýbªäN¾G“¯.^OÝÚ¦£þ2‰6va/ÐÅðŸ‰þþüßS‚pæË¸ç4¡3À™})+{˜ÖF¬:¯ðâ‰}™‹‘o2°f“>k_:Ù˜Ûáì>ôWvHzðÊÎ’ñrþîÏãñݱ‹9dè/q©öbÎm%ºÜŒyIku¾dÑž¯#Oãêeû ©BŸP½ËSÇÏMjIžC̈ ßh iV¾õNH[ÕÜ›Ú`@¼+7Óžª/»‡î:¹“ôÿ•_ò endstream endobj 4701 0 obj << /Type /Page /Contents 4702 0 R /Resources 4700 0 R /MediaBox [0 0 595.276 841.89] /Parent 4556 0 R /Annots [ 4644 0 R 4673 0 R 4674 0 R 4675 0 R 4676 0 R 4677 0 R 4678 0 R 4679 0 R 4680 0 R 4681 0 R 4682 0 R 4683 0 R 4684 0 R 4685 0 R 4686 0 R 4687 0 R 4688 0 R 4689 0 R 4690 0 R 4691 0 R 4692 0 R 4693 0 R 4694 0 R 4695 0 R 4696 0 R 4697 0 R 4698 0 R 4699 0 R ] >> endobj 4644 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 698.187 225.192 709.091] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_256ce6281894f65dd15396cc0994e875) >> >> endobj 4673 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [331.208 546.412 366.395 557.425] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4674 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [247.23 534.457 280.764 545.36] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4675 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.434 522.501 198.621 533.405] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4676 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.805 522.501 277.494 533.405] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c8391dd770637dbb841067996b7777ba) >> >> endobj 4677 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [281.31 522.501 310.968 533.405] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 4678 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.2 522.501 402.553 533.405] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e83952aec7c1ac76c090bc89bf4eeea7) >> >> endobj 4679 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [406.369 522.501 437.691 533.405] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 4680 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [316.063 504.877 376.715 515.781] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4681 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [386.084 504.877 435.119 515.781] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 4682 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.488 504.877 513.996 515.781] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c089e5d0e3191255ceaea7f8591b27ea) >> >> endobj 4683 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.501 492.922 162.035 503.826] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.582 451.387 299.091 462.401] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ad387ccbd7847672b5dc2223d9124120) >> >> endobj 4685 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [92.321 439.432 160.734 450.336] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c0cb013b1505fb7abd4167ac0db0e0aa) >> >> endobj 4686 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.838 409.852 340.01 420.756] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.077 362.649 175.065 373.552] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f124a4259475ea355ced38e73a05363a) >> >> endobj 4688 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.452 362.649 298.93 373.552] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) >> >> endobj 4689 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.106 362.649 360.294 373.552] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4690 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [437.611 350.693 471.145 361.597] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4691 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.442 314.828 284.13 325.732] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h) >> >> endobj 4692 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 297.203 123.643 308.107] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4693 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.706 297.203 179.116 308.107] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_62298e0fb06332a282d9daab718a1286) >> >> endobj 4694 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 262.36 142.463 273.374] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) >> >> endobj 4695 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 232.359 145.233 243.373] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) >> >> endobj 4696 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 190.403 148.56 201.417] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_883167275c4d3855ba453364db3d8d66) >> >> endobj 4697 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 160.402 146.338 171.416] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) >> >> endobj 4698 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 130.401 144.675 141.415] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) >> >> endobj 4699 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 100.4 145.083 111.304] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4703 0 obj << /D [4701 0 R /XYZ 90 757.935 null] >> endobj 4704 0 obj << /D [4701 0 R /XYZ 90 716.221 null] >> endobj 458 0 obj << /D [4701 0 R /XYZ 90 662.653 null] >> endobj 4700 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R /F38 780 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4722 0 obj << /Length 823 /Filter /FlateDecode >> stream xÚÝ—OoÚ0Àïù–vI¤áÙNœÄ½QŒ‰Ò‚¶ª­"H EƒÐ…0Ê·Ÿ;”T¡-;1ÈÆñû÷{~Ö3S€@[»ôµ/-ƒÌ&6ð'€!àØR‚;݆Ø4j!¤oÂÕ=Bä>5B‘ޚ͹œõù„'vu‡Ù’kKÇ&3üošçk¿5,Ì!€sõÔŽIA¸ÐîˆÄú7€ É\°Éw-€EL1ÎÁ@û®¡7]%&D6}qål“g¾ÆÊÁæ2\/xœŽÒÙ2μ*kÄ‚¦Åöe!VÒŸ¢’x£Ùêü”S”I GО#Bv M,©«GÜÀT–ˉÓG¥m%ÜX¯äüA¨>š¯Õ§„§ë$æ‘ü7Þæ%¹dªö۸˿‡Qž{D‘øaµYâR[fñ›Æ…—!üÑ(=þf5ÿa¯óžœøu<;òV5ùÁMcÞçYw¥þ/h¸Õ4B•í€'Éb55JV‹Å}£®ÖdÌý%…+«Mþ$äp”Š`Ëäø ;v¡ƒ˜`/–¨ÒR¢‚Ô¤8…¿6Fú(‰ãp¹xîx6Ÿ¥[æúg¹¾^ñá­ ´hzf‰ÈÞ|+5ÆË¬¼6EÞW)EU9ÈNƒÍŠL½‡‹=‘ýy®Í7Kß>ÕÀ›»ž u•É ò/¥ÀJùR§¼pg™\H–eïÅG0$"H"jJ¢¤¼~?hf|ê=¬deV¥,/1 ™UM@0¼ÙWp„pÖ» ‚z·S!Õ»_ë½ö;–pÙÏa£á Ž23ìvƒ›ëNÏ÷úGˆ]yW×ý¬ˆn¡Øéµ‡Ýºö«á¿~žÚ.dØýèë´x•Ú9¦«^¥”AJ•mgç¨(Ûât_“V–_>.®_ùÈA¾ Žê¼&ªæ³½EÝ‹k»Û¹T½ ÄhwªzyÞNy\ŠXDú˜úàú endstream endobj 4721 0 obj << /Type /Page /Contents 4722 0 R /Resources 4720 0 R /MediaBox [0 0 595.276 841.89] /Parent 4556 0 R /Annots [ 4705 0 R 4706 0 R 4707 0 R 4708 0 R 4709 0 R 4710 0 R 4711 0 R 4712 0 R 4713 0 R 4714 0 R 4715 0 R 4716 0 R 4717 0 R 4718 0 R 4719 0 R ] >> endobj 4705 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.629 677.939 265.182 688.843] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) >> >> endobj 4706 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.148 677.939 425.788 688.843] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4707 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.629 628.12 267.951 639.024] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) >> >> endobj 4708 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [393.917 628.12 428.557 639.024] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4709 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.629 578.301 271.279 589.205] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_883167275c4d3855ba453364db3d8d66) >> >> endobj 4710 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.245 578.301 431.885 589.205] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4711 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.629 528.482 269.057 539.386] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) >> >> endobj 4712 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.023 528.482 429.663 539.386] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4713 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.629 478.663 267.393 489.567] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) >> >> endobj 4714 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [393.36 478.663 427.999 489.567] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4715 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.629 428.844 267.802 439.748] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4716 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [393.768 428.844 428.408 439.748] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4717 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [298.307 379.025 332.946 389.928] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4718 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 321.45 138.508 332.329] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000040) >> >> endobj 4719 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 301.36 328.762 332.329] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_256ce6281894f65dd15396cc0994e875) >> >> endobj 4723 0 obj << /D [4721 0 R /XYZ 90 757.935 null] >> endobj 462 0 obj << /D [4721 0 R /XYZ 90 733.028 null] >> endobj 4596 0 obj << /D [4721 0 R /XYZ 90 716.221 null] >> endobj 4724 0 obj << /D [4721 0 R /XYZ 90 716.221 null] >> endobj 4599 0 obj << /D [4721 0 R /XYZ 430.371 681.092 null] >> endobj 4725 0 obj << /D [4721 0 R /XYZ 90 664.365 null] >> endobj 4601 0 obj << /D [4721 0 R /XYZ 433.14 631.273 null] >> endobj 4726 0 obj << /D [4721 0 R /XYZ 90 614.546 null] >> endobj 4603 0 obj << /D [4721 0 R /XYZ 436.467 581.454 null] >> endobj 4727 0 obj << /D [4721 0 R /XYZ 90 564.727 null] >> endobj 4605 0 obj << /D [4721 0 R /XYZ 434.246 531.635 null] >> endobj 4728 0 obj << /D [4721 0 R /XYZ 90 514.908 null] >> endobj 4653 0 obj << /D [4721 0 R /XYZ 432.582 481.816 null] >> endobj 4729 0 obj << /D [4721 0 R /XYZ 90 465.089 null] >> endobj 4655 0 obj << /D [4721 0 R /XYZ 432.991 431.997 null] >> endobj 4730 0 obj << /D [4721 0 R /XYZ 90 415.27 null] >> endobj 965 0 obj << /D [4721 0 R /XYZ 337.529 382.178 null] >> endobj 4731 0 obj << /D [4721 0 R /XYZ 90 365.451 null] >> endobj 466 0 obj << /D [4721 0 R /XYZ 90 287.786 null] >> endobj 4656 0 obj << /D [4721 0 R /XYZ 90 263.571 null] >> endobj 4732 0 obj << /D [4721 0 R /XYZ 90 263.571 null] >> endobj 4657 0 obj << /D [4721 0 R /XYZ 107.713 204.402 null] >> endobj 4658 0 obj << /D [4721 0 R /XYZ 107.713 188.462 null] >> endobj 4659 0 obj << /D [4721 0 R /XYZ 107.713 172.522 null] >> endobj 4660 0 obj << /D [4721 0 R /XYZ 107.713 156.582 null] >> endobj 4661 0 obj << /D [4721 0 R /XYZ 107.713 140.642 null] >> endobj 4662 0 obj << /D [4721 0 R /XYZ 107.713 124.701 null] >> endobj 4663 0 obj << /D [4721 0 R /XYZ 107.713 108.761 null] >> endobj 4664 0 obj << /D [4721 0 R /XYZ 107.713 92.821 null] >> endobj 4720 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4744 0 obj << /Length 2022 /Filter /FlateDecode >> stream xÚÝYKsã6¾ëWh«ö@U°ð17)¥WVv“šL¹8$sC‘Z’Ûùõi J¢)É3ÞCj/ƒ@£Ñýõ ¢Ãå|˜ þqÅãaLâ€ÃÙbÓa0"9ÎæÃO^@˜?3J©÷˜Ö¿QÊŸÈÃhÌ%õ®²\aoªª±ÈSEª§"Á…Ç}žý8¸œ þ;`p2C^†$ôå0] >}¦Ã9Ìÿ8¤Ä£á£Yµ îC›ïÿPË*ÝeY;,3F §brŸÐ@"ßW“_.§Óû#.½³‹ûóÙ¯·—†.=ø3IbÑ»ïvA;=ûé;öžü8½¸ŸMÏnî¾a÷äúúõ;Ùƒ§7—ÓûÛÉ/ßpîÍÇûéå•Þ„ÇßÖy]ïmî lÌQ]cŸË-̈°@»Úi“•‚ë¢L7+U4‰™š .ˆ/âݽ„ÙÝYÑàF‡WýF%ÕŸ€@?”ú$5äÒ¦ÊqÕÛpFäGnÑ»ÑXÂYiYÔö´~Ú" œnW‘8V{jw æï÷½íâjìY™ °»dYøn ’q€úÁµ}åshØrù×€$ö‹Åh[êõP …­ìî{H€P"æü'é¹0"¶‡@"PeO–ñ[É>c7³wÒEÝKn"–Îþ"Wj“ '&Ÿ{4Þ¿š[-&àtÓ ’¡9޳æÁ½1A1wÂ|¢ ÑÐ[fÚC _-pÊ&­Ð³¡ zå*kÅ |޽³45™×?ѲH—DàlÖ&u…éÉ;l˜5ݰÝ÷Bh–[œ¾AÖá)YóS²f,:!k}•ƶ&_Ö'¨yšjÄc%~5™ÝaïA%sU¡Ž¸ A§z04mve­°‹YF _ßæÊ¤É&oì¾[]-è¤HúÞ k˜¬T í ³$$^ƒv79”ŽI…­-Z¸ºp»uŠ­ß? (4ñRs÷ˆ›MPÕ³i™oVE_0u@sZ¿®߉o­Æý¿\Òý׿N_ù§‘û_+›Àÿµ$”dÒÆŒT¡*ç,Ú–›Ÿ\çJkO}ÁA€ £ï{/CqÊlÒ¼Ðk]H‡ïzòû`MÔ–‘Ï§çe[®¶7ý‚¿Â” endstream endobj 4743 0 obj << /Type /Page /Contents 4744 0 R /Resources 4742 0 R /MediaBox [0 0 595.276 841.89] /Parent 4749 0 R /Annots [ 4733 0 R 4734 0 R 4735 0 R 4736 0 R 4737 0 R 4738 0 R 4739 0 R 4740 0 R 4741 0 R ] >> endobj 4733 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 488.329 123.643 499.232] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4734 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.164 488.329 354.717 499.232] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) >> >> endobj 4735 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.464 488.329 388.787 499.232] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) >> >> endobj 4736 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.534 488.329 426.184 499.232] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_883167275c4d3855ba453364db3d8d66) >> >> endobj 4737 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.931 488.329 461.359 499.232] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) >> >> endobj 4738 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [464.106 488.329 494.87 499.232] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) >> >> endobj 4739 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 476.373 120.177 487.277] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4740 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.876 421.09 179.045 431.621] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) >> >> endobj 4741 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.485 404.777 409.658 415.77] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4745 0 obj << /D [4743 0 R /XYZ 90 757.935 null] >> endobj 4665 0 obj << /D [4743 0 R /XYZ 107.713 723.065 null] >> endobj 4666 0 obj << /D [4743 0 R /XYZ 107.713 707.125 null] >> endobj 4667 0 obj << /D [4743 0 R /XYZ 107.713 691.185 null] >> endobj 4668 0 obj << /D [4743 0 R /XYZ 107.713 675.245 null] >> endobj 4669 0 obj << /D [4743 0 R /XYZ 107.713 659.304 null] >> endobj 4670 0 obj << /D [4743 0 R /XYZ 107.713 643.364 null] >> endobj 4671 0 obj << /D [4743 0 R /XYZ 107.713 627.424 null] >> endobj 470 0 obj << /D [4743 0 R /XYZ 90 611.638 null] >> endobj 4598 0 obj << /D [4743 0 R /XYZ 90 588.385 null] >> endobj 4746 0 obj << /D [4743 0 R /XYZ 90 588.385 null] >> endobj 4672 0 obj << /D [4743 0 R /XYZ 335.935 553.256 null] >> endobj 4747 0 obj << /D [4743 0 R /XYZ 90 536.529 null] >> endobj 4597 0 obj << /D [4743 0 R /XYZ 90 228.702 null] >> endobj 4748 0 obj << /D [4743 0 R /XYZ 90 214.131 null] >> endobj 4742 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F14 1078 0 R /F20 595 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4768 0 obj << /Length 1944 /Filter /FlateDecode >> stream xÚÕYK“›F¾ï¯à*£ªeØ®#‰Á7ú÷éy€@‹´~$•Š.3ÀÐÓÓýu÷×{+{/ÏžÍΞ^ÑØ‹QÒЛ-½{2$HPâÍRï½"Â&Áû÷‹úÆô/´žT`ÿ*Ë•½UKUMHä«b¡oEœrŸp2ù8»>{1;ûtF`;ì#^H$™ð›³÷±—Âýk#GÞ½Yµñ8e0æÞíÙ›3ìTÅGUŽb„1÷$]CnÕ~«š-h$ü¢ž-Ú×á]Ü{—DHâØ `Ä‚Úwo›¤ÙÖöd•–SØùç ~’oÕP¢GâDƱñR1\ô>`€L'#Ø]Z™‹uR¬T»×§mV©Ô^}Àec/§‚ªª²‚' ¥c³=áéí±Ûýv»X¨º>"DžÒa›çî¹ölµr.~kVjm0wÕæP†~rWfE±I]«Ô(sàYØ\ʼ€c€L‘ˆ#îP ‚¬˜4i <÷æ«›j»pO÷º<½"¼´³§Æ˜ÙU<ì­’ˆKÚ®Y#ÊŽbÎ÷r„?ØTRJ¢'(¤Ÿ²VN’”#&¢žldBr¿©’¢Î“FÕúZøÍZÙežŽ¨S@uw´Ë þÅ$þìEð˳ۑ½…€½»s‚’Nü²¬6Ic÷¬UcofÅq÷ëçÖäÓ©SÎëXÒç)­ÌJª …ø àR+½n’"Mª´5"A2ÔQFP G2úi­`1‘ÆJÎkSJ±Î%;ø›MŽ™ŠG཰]:¢w¶\¯§›Í´®GlÈ"“Þú80:Âqì$UU¦SÉgŸÔ”Lî”ùùúòˆ»8Le•eU:sd—v4yÄèW*Iwú"ÔŽDDðó/rˆÆ"izzå»I(üsXq-舫Ê !íZÏ„]„×oþHG<Ï0HëÑ ‰afÌsNzå#p²B‹'º 5ç:EIňy)„˜`qæ_‹z³7~‡ò̹ÏCûòÿjioÌËfmã€N£Xã ©\1ÆÔ“¹¦m›³:YUÊ­™ïì¸)Û·šu[^ÖI¾t§Í©»vrkê^uvÈÅÒ¥ò~ÅätŒâ8Ô'AÜ%Ã_'PN’*Ù(@áA½ÞKf푺ýÃHÞ& ?HÜGÉLi¹Ï˲J³Âä@.‰Í½6fe¡ïéÒÕjŽû?–ì1ÿkùOË긽ßé¸ÒR6Úcz2W.sbÄC2Œeø jnHåÀQßĪØ÷³ªè¿eUòŸ`UáǪ¾úDÂ)óª˜ðÎCYÚ v˜?ðrx{è·+ ™²êûÞU=BúÕ,DŒuUïÇ‘t X¦]0“óaªRM IÚs©Ktà“¤EC›ªºLyŠÄì­=‚À1“g._ª"™Ãæç­tõ¨Tø»}«++Cùþ(#–ÑB š&}_—@§#öÂŽtº°Ÿi¶HÑŒBOÀvùª¬²f½©íƒmm 3(#¤É}:ý†Â©EÛr[ñ´—èÙ{?%Íb ØÜicc%qÄÍ”ûo®ß^ÜžÛ…T¸›‚B¸µ‰;ǦL3­š=+zp* °4›ÁlñÊ)"„ä»I¤“' ‡›e‹&°P3ÞÞ\ܼzæü¾Wå¶ÉŠ–Õ $ ¾¬3Êó›Ëë1Ë…`⎛8Vô@Фìxýõó›1A Èo»fKø±„ÎY·Y±”ƒöJ¶WÛ";ì¯ô³‘’‹9Âaw‚ESåcPÒÚu¶Ð4knñ tÓ¯_£NŰ_ÛŸ~Äа. GH¢Œýäî.ÏN’Ciý¶MUÉFŽn”ÌØ6€ófQA¿Q:PÞÄݾ7qæ.lNO¿}ç“ë[~è‚w¦}g”˜BVÛ©áaŒÒ}QIíSÛd£@PÖ5üz¥‰ýq…ŽûĨ3wm¿êè…Ûb}‚ë…–?(}Z–#znÊ V=ÏKÀ{+=)ÚÝ\Ôì¿Ë›àavtß\úˆqø'F¡*Çþ‡ÑþgÍ‚Êkÿf1ÂÑ‹—ªP•u€©?·“+} 5·¡žr2Ò^QL¨£ªzmKWß=¿íØ)Þ4ütYþµ[©âð¤;P`o endstream endobj 4767 0 obj << /Type /Page /Contents 4768 0 R /Resources 4766 0 R /MediaBox [0 0 595.276 841.89] /Parent 4749 0 R /Annots [ 4750 0 R 4751 0 R 4752 0 R 4753 0 R 4754 0 R 4755 0 R 4756 0 R 4757 0 R 4758 0 R 4759 0 R 4760 0 R 4761 0 R 4762 0 R 4763 0 R ] >> endobj 4750 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 658.347 193.212 669.251] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4751 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.631 599.992 415.139 611.005] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ad387ccbd7847672b5dc2223d9124120) >> >> endobj 4752 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 576.081 157.416 587.095] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c0cb013b1505fb7abd4167ac0db0e0aa) >> >> endobj 4753 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.631 576.081 269.14 587.095] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ad387ccbd7847672b5dc2223d9124120) >> >> endobj 4754 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.964 576.081 448.472 587.095] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ad387ccbd7847672b5dc2223d9124120) >> >> endobj 4755 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [307.292 521.634 376.801 550.7] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ad387ccbd7847672b5dc2223d9124120) >> >> endobj 4756 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [409.643 521.634 478.056 550.7] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c0cb013b1505fb7abd4167ac0db0e0aa) >> >> endobj 4757 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 420.575 193.212 431.479] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4758 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 389.42 355.36 400.324] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4759 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 389.42 481.774 400.324] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4760 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.094 283.861 199.263 294.874] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) >> >> endobj 4761 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.197 229.413 439.366 258.479] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) >> >> endobj 4762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 124.852 193.212 135.756] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4763 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.186 109.528 390.729 120.058] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4769 0 obj << /D [4767 0 R /XYZ 90 757.935 null] >> endobj 4600 0 obj << /D [4767 0 R /XYZ 90 650.589 null] >> endobj 4770 0 obj << /D [4767 0 R /XYZ 90 636.237 null] >> endobj 4602 0 obj << /D [4767 0 R /XYZ 322.685 336.615 null] >> endobj 4771 0 obj << /D [4767 0 R /XYZ 90 322.143 null] >> endobj 4604 0 obj << /D [4767 0 R /XYZ 90 89.441 null] >> endobj 4766 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R /F40 846 0 R /F11 1076 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4786 0 obj << /Length 1747 /Filter /FlateDecode >> stream xÚíYKsÛ6¾ëWðÐS3&€:t¦Im×çe{Úƒ“éÐ$d³•H…¤l«ü÷.^”ÈP¶¢fròÅ@ðÛØÅb? ;7vNF//G/ŽiìÄ(hà\N;a@§Ä¹Ìœ+7@Ä{cìÞ§õGŒéº{”c÷8Ÿ Ý:SQIäŠ"•C£Ì%ŒŽ?]¾]Ž>˜ÃQðºú„ Æ_;ùqäÜ«Ys‡Qž3çbôa„¥J}„¾¦Š ݼh4»z‘*Þº÷s\7Õ25oaU‹j.™¾8&lžpŒ(ç`\¡„¯g±`cVˆXHíÀÒS:< C1ckNä$Ç#!EAHd”é×-Yƒ7p(C>6p°Âòˆr·©’¢ž%¨Õs9}á¥e1fؽ¾irèêéõB¤ðÉÌtÓ²¬²|LÜ,âj!êCè»8À'1òÃpg–¿ ‘$3òˆ}ÿîåÅ0‘Øoc÷ËÁØóq¬bF 4öX>•óàûƒ!1C8j¤[<É—ì X„S醛•Áéöê@‡ª#·~™*?èÄPݘ q~2r®Ô{}2'“TF¢™ªs¸ú$MPß­—׉Ô@6åÀJ< ;JiØõ00;?:X£(ŠÛíUležxŒí:L&ú¬Í*1íSF&Ú4¾>õ†ÌÛ²1©´¹M¬Ái› &y^ëUmÞ˜gV’le²œ%ÚÜŠÂ̳).ŸÍt«(Íе1WJ¶šrUåY& Ô¡ÝßJŒâ8€%ˆÁ†*îïÇI•ÌE#ªzÒù| ÓM­ ±Ü‚aN5ÌOÉ•@ sÖË®›Üú!OÛ€}¥2šNg,òu~œ–Õ<ÑYEÌ]´¬ÑvßLðS¡¨M$Eö¢¬¶#É9Èú³ ¥¦Ì“•¦w-Ì= H7zÓÛ¤¸ÙãÎb",ìzë\4ËJú»è¹ª¿››.òõ·MÒ,MìUÇÄÙݘrÆ¥è":ò:æÁŽ ï”òþ¢9\Ö™À †~[jL½@këó2¯D¶¾ÀÛ8N ˆÞ²’9¦»#ðǃäNmm3õ‹ešŠºÞBi—°„ã¶C®ècÈ7‹Ê¨¥t'©ë¾w]5dÞˆyY­l¾˜•©‰ÙŸª“ U\¶ß‚}cã,/Db8÷Ï™ƒv•?tsW7Ë|Ź»Ÿuf¬ŸPåÔyÝ[ð•†Ë²¨DZÞù?6vÒ¬ väÁòQÕÎ~[Í["ºÖR‡!ϬMŽé•ýÖÛ¤ªd§x¨KÖPÍ‹\†Ó̼3²ÈôÎÓ€@ÑeuŠ9¬×«G6>P* P·ä5ÃÝ‚Fˆ[~ò{- ¥4<Õ.?, "Õ^ˆÊZð,„¬Ž¨'yk{~¹ï´ºÏk!#/dm&…ét›Ózˆ[ô¦Ib¾hVmÌlDb=+«*Ñ“5E”Œ©½#ó™Lœ¦êi˃Zü(±CvÔ:þÿÖ:­uäØNZGÅëSRG¢=%uä ´¸Û†¢”ÅLÇ ì¤j ÆÇQ´¿ªéùbQ£î¢‚åYÕ|/UC~€ª¡ÏªæYÕüUÓÏß"kø³¬éÈšv ÿkR¡˜D»þ˜dD Pú‘ù‰ÇˆsS‘žˆBT¦ˆ”gÎø÷mËà׺èÁF&<Ô=Š µ‰ˆ®ýýÇ«‹³Ó—ºÍÁæß°&‡ýZ>¬nDÑ_é*ûà˜ endstream endobj 4785 0 obj << /Type /Page /Contents 4786 0 R /Resources 4784 0 R /MediaBox [0 0 595.276 841.89] /Parent 4749 0 R /Annots [ 4764 0 R 4765 0 R 4772 0 R 4773 0 R 4774 0 R 4775 0 R 4776 0 R 4777 0 R 4778 0 R 4779 0 R 4780 0 R 4781 0 R 4782 0 R 4783 0 R ] >> endobj 4764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [401.946 690.333 462.597 701.346] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.703 678.378 217.859 689.391] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c3c9c869bef4e4850dfd9762b33ce908) >> >> endobj 4772 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [307.918 621.274 368.569 650.34] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4773 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.297 621.274 477.805 650.34] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c089e5d0e3191255ceaea7f8591b27ea) >> >> endobj 4774 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 526.241 193.212 537.145] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4775 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 425.637 355.36 436.541] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4776 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 425.637 481.774 436.541] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4777 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.669 358.882 137.202 369.786] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4778 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [101.648 329.302 136.288 340.206] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4779 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [295.207 277.868 355.859 306.934] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4780 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [390.005 277.868 439.041 306.934] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 4781 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 194.79 193.212 205.694] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4782 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 94.186 355.36 105.09] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4783 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 94.186 481.774 105.09] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4787 0 obj << /D [4785 0 R /XYZ 90 757.935 null] >> endobj 4788 0 obj << /D [4785 0 R /XYZ 90 733.028 null] >> endobj 4606 0 obj << /D [4785 0 R /XYZ 90 420.892 null] >> endobj 4789 0 obj << /D [4785 0 R /XYZ 90 407.082 null] >> endobj 4654 0 obj << /D [4785 0 R /XYZ 90 89.441 null] >> endobj 4784 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4808 0 obj << /Length 1458 /Filter /FlateDecode >> stream xÚåX[oÛ6~÷¯Ú=È@Å’©K¬—t)Ú¡K‚í!) E¢m­²äRÒï×ïP$I±ÂÍö°å!¦Dò;‡çúQØY:Øy3{q9{~Jc'Fq@çráÄØ ‚8%Îeæ\¹"lû5­W™œÃØE«¹G9vOóBèѹX˜‹\Q¦êU„)s óç/ßÎ^_ξÌHÄé$ð…>wÒõìê#v2xÿÖÁÈ#çk·jí0êÃoá\Ì~áƒÚRá€÷Úúˆ¡Èhœ—Ö.Ý×Ó[ýt9N«²6“jhùü”h¸!æ ¸C.“Û¼ÖËFP  íª+„îÇgsƒüº‘mj¤€õ6r­ „qwpƒjú;´  ©]P;4! ÅŒÝáp¢9e! ‚ÀñüR¦§{ƒh<>Qóî°‡¸zá®¨Õ ìþþòBÏ|†¸p…šÚþ9§ÜMŠÖ®YTR¯Y'Œ×"ÓïÓnu‘—™ÌÓ¤Ðk6²úC¤MîÑ«šUÒ詺](dgWVk=Ó¬„~»o aÞf¢Ne~â´ô¹øÇˆŽªK|d¬kJùxÍUW4.px¯Èœõyg“4dÉQGIJ¿£h|£üÐÊ/ Œžå Yü{ò##ÿ§¢7*Ý;%dÙçN®;v1Õϸ<‘Âò ‘9‹‚Øèö²j c‘¾BeêÈkH[Ë •ºxHÏãJ~,EƱ ÂïUòSµÜf›n† 2h#,@¾ØæöãêE0¢}«$ÏŒz» 5(ò¦ª@•î{x_VDOn¿¥Ÿœà®*œ›ÈeÄ*{fÑѨøIïê)ä_—»iŸ¢ôZxu> endobj 4790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 539.169 193.212 550.073] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4791 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 379.767 355.36 390.671] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 379.767 481.774 390.671] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 193.179 214.692 203.107] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_92a0007f672a5498ab1b6ccc6a4a002b) >> >> endobj 4794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 177.582 207.034 187.487] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4795 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 177.582 255.846 187.487] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4796 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 154.325 205.287 164.252] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b9b53e5cfd05653cbca75cf1aa8b2ed) >> >> endobj 4797 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 138.728 207.034 148.633] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4798 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 138.728 255.846 148.633] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4799 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 114.494 217.451 125.398] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_fd6d52bed79bd48230f651ac48eb5ca6) >> >> endobj 4800 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 99.873 207.034 109.779] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4801 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 99.873 255.846 109.779] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4809 0 obj << /D [4807 0 R /XYZ 90 757.935 null] >> endobj 4810 0 obj << /D [4807 0 R /XYZ 90 733.028 null] >> endobj 474 0 obj << /D [4807 0 R /XYZ 90 366.193 null] >> endobj 966 0 obj << /D [4807 0 R /XYZ 90 343.881 null] >> endobj 4811 0 obj << /D [4807 0 R /XYZ 90 343.881 null] >> endobj 1083 0 obj << /D [4807 0 R /XYZ 374.54 308.752 null] >> endobj 478 0 obj << /D [4807 0 R /XYZ 90 292.025 null] >> endobj 4812 0 obj << /D [4807 0 R /XYZ 90 211.177 null] >> endobj 4806 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F14 1078 0 R /F20 595 0 R /F11 1076 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4861 0 obj << /Length 1403 /Filter /FlateDecode >> stream xÚíZÛrÛ6}×Wp¦/äL‰à0o²$ßê[%%MÆÎth‹¶™Ð’#˱ý÷]¤%*©ØR›VÍŒC\`{v$±så`g§±Õo¼Ù¦ @Réô/;J$(qúçÔ•ˆpÏ'c÷áâîz0ö í¢kϧ»ÛqÙV7ºŒàžv£á…éÒ˜r—pî}êï7:ýÆ×Ø!©¡b¹¸iœ~ÂÎú÷ŒX ‡TêÆá”Á5qzß8³¬Æ3V,gÚQ”!,…5ýŒR‘ªÏÇ9§¾ãDgÓa”Ý4F¯2뺩˜YÑ­Þn»ûg«ëqì›ÿú^ÀÜfÎOj¤ñ#¶ÿHán~}³Í±£Á^ɽ”"É©ãŽέ¹[ñĺò&¼ûb[—£qµÉm|}††?RfW8ÔNq>©œÂ·Æ„ÑíĤ”™.†´¦0$]8ŒM†Ý¦èL‡0 ëfùëÑ9Œ”Ì%~-™ƒ#®§S”Ø%È—õý\T :Õ6\Öž‚º‚=ý…Œ *T­Bä"¨”VSz¶ƒÏˆ@’ LJýUn‡ÎÉqk·zÐMß©ÊA×ZäRe˜eÕ !§D#¥õ ß9èv¶="ÜjÜù¦ãž9ªx‰˜Ô5ÀëâxSE3ÜW |«qŒñçJÔõÆç;ðRYJ!_6?•N‘¶r‰Ï+g IV-NZõ¤!xÓIc¼TF¨‹Hðó’†i‚uÆÙû'Ã*ÚÐÿic«Êý“2îh(ùÈsI¹Z䡞k©'»Ív§ÕûØ«Âo<î³^š[6׈їîçiÎ×Q:¼ï¿ë¶:U¨êGuÆIóg[†4Së:)Àé[­#õ··zUœà‡Ü¸¨,vsĉ¬‰Ý/?ÄÈ:ÒöÁñÑÎoÓWBÎ8Í 7­JÈ'5›)*!7Õ ß“Až¶“ÑðÊK-oîlçèÒ^'×Q6"™Dãa8É~žÇÃpüd‡MÂó$— ÓÆmü%Ùüñ]¦ J¨ÍeËõÁ $•΢†Î×½@!Ô…[ÏQB(XŒXGœizB¸ï>ìîTýêD=× ²®Qµ5ˆ¬«ATm "m ¢ ½$£ÛLS޹ß„&3\¥éÁ¿ŽÂA4¶"&QY“§ÒñCû;¼Œ“8MM¦Ûdœ´Q’cì€ÉÈ ÜŽ=.Ü‘û¢²<Úri]†÷IVÒ} “ûhZÓÙz*Il£°€×¤´•2íà ’eæuéëÊ’³Œ‘–Ñš²‡¨š²tÔ”=0…oÉXfzlar–e¦ßX`™ K‰0õ’aiüüÚ¤ ËN=«0e«é,«ˆ¬ÐÕ0Ó§RÁñW :ÏaËÆÿk²»f{!m kÿîÚr§«¾èn2Ž/2-6äày6˜®ià H`ɓÉ?K‘¼è4»Ý…àÐÃþQpòNÚg8 0 ÇãôýâÓ¿ ¶“½{½þBØøw°Í #:¢—ý&ÿ`G¢@Af?Ø"Û‡;Ñ0ÃsûË^óƶG…ÛÒ^~ËÉ[¡ì/Š Í8bdóØ >ØÛ²mŽÎ ÎkŸ®¢áüJÿͳUr endstream endobj 4860 0 obj << /Type /Page /Contents 4861 0 R /Resources 4859 0 R /MediaBox [0 0 595.276 841.89] /Parent 4749 0 R /Annots [ 4802 0 R 4803 0 R 4804 0 R 4805 0 R 4816 0 R 4817 0 R 4818 0 R 4819 0 R 4820 0 R 4821 0 R 4822 0 R 4823 0 R 4824 0 R 4825 0 R 4826 0 R 4827 0 R 4828 0 R 4829 0 R 4830 0 R 4831 0 R 4832 0 R 4833 0 R 4834 0 R 4835 0 R 4836 0 R 4837 0 R 4838 0 R 4839 0 R 4840 0 R 4841 0 R 4842 0 R 4843 0 R 4844 0 R 4845 0 R 4846 0 R 4847 0 R 4848 0 R 4849 0 R 4850 0 R 4851 0 R 4852 0 R 4853 0 R 4854 0 R 4855 0 R ] >> endobj 4802 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 720.889 234.557 730.816] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_017f1e817bdb2114ba765e7a9ef73bac) >> >> endobj 4803 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 705.292 207.034 715.295] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4804 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 705.292 255.846 715.295] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4805 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 682.034 232.405 691.962] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_5feeef18919b1cbb79729bbfa75976ec) >> >> endobj 4816 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 666.437 207.034 676.441] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4817 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 666.437 255.846 676.441] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4818 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 643.18 237.237 653.108] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_fc0a5a6b475a8e50b77d4be099790985) >> >> endobj 4819 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 627.583 207.034 637.587] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4820 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 627.583 255.846 637.587] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 603.349 234.627 614.253] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_63eb554461f3df5dc64a25f71891b9f1) >> >> endobj 4822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 588.729 207.034 598.733] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 588.729 255.846 598.733] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 564.495 232.973 575.399] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_3dea9d7548bdbc9a7cc8d0a04cdd46fb) >> >> endobj 4825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 549.874 207.034 559.878] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4826 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 549.874 255.846 559.878] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 526.617 228.699 536.545] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_ee4fe41274945f9e34009d2eb309c922) >> >> endobj 4828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 511.02 207.034 521.024] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 511.02 255.846 521.024] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 487.763 247.359 497.69] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_1d506ef2ad493a963426e0732a6328ca) >> >> endobj 4831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 472.166 207.034 482.17] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 472.166 255.846 482.17] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 448.908 241.82 458.836] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_1b66d50d7f1927222a170bc88f9db51e) >> >> endobj 4834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 433.311 207.034 443.315] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 433.311 255.846 443.315] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4836 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 410.054 226.876 419.982] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dff9a101a373a634f3a1baab29e92534) >> >> endobj 4837 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 394.457 207.034 404.461] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4838 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 394.457 255.846 404.461] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4839 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 371.2 243.464 381.128] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e8a768f544fe3ae81436b73dca3099fb) >> >> endobj 4840 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.632 355.603 209.504 365.508] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4841 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [227.091 355.603 259.964 365.508] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4842 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 321.387 229.845 331.314] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_df57a609a5c3f7288452cce86210260e) >> >> endobj 4843 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.716 305.79 211.588 315.794] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4844 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.564 305.79 263.437 315.794] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4845 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 271.573 235.723 281.501] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 4846 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.339 255.976 207.211 265.882] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4847 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.27 255.976 256.142 265.882] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4848 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 221.76 234.059 231.688] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) >> >> endobj 4849 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.954 206.163 208.827 216.069] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4850 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.962 206.163 258.835 216.069] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4851 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 171.947 242.358 181.875] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_b65e929c7d525d735ae240046d4f0d9c) >> >> endobj 4852 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 156.35 207.034 166.255] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4853 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 133.093 241.82 143.02] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_a7c5021293b0db20ece0e82c3702a159) >> >> endobj 4854 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 117.496 207.034 127.401] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4855 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 94.238 232.405 104.166] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_7bf13ab87b23ecdbbb4b4847d4944070) >> >> endobj 4862 0 obj << /D [4860 0 R /XYZ 90 757.935 null] >> endobj 4859 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4912 0 obj << /Length 1700 /Filter /FlateDecode >> stream xÚÕZ[oÚH~çWXÚ‡µ¥zvîWêCB’n«ÜHw«¶Bœ„L×%Ñjÿûž±Ç`ƒ‡K€6ûã9œÛwnc;·vÞÖ[µßNhè„(”T:­'ÄN ”8­žóÉ•ˆpÏ'c÷¡;¾ë%\»èÎó©ÀîIeWè&‚=åFqWßR˜r—pá}i½¯·j×HÄI%ˆL8ÝaíÓìôàþ{#*ç!¥:œ2XN³öG mç×T{ŽÚK®µ'4DX9eK‘YpØŸd*;ãoÙÕÍ(IõÊJnf·5çSJ¦^Oî>cáÚL¨¡ð3N‰Ç7O’~×H™Œ²õ{ÿ1d—ƒþØl~﹑ǰûô0JÛg;£xðä ᢒ°ùÀ°|J‘äV†BØgJżÂ û¥}ƘÆÑrËÿ¬7?ºhÇ£)aÉlüˆq¥†s@䊎Bηâ®7ZˆÞ(þUûÕˆxHú™ø)»ˆ<ŠÝÇIû£xüBÝ ªý|rò"ý\tì`°cÇîÔ³ãÎ-„_¼kSÝ+|û"kÅÑÅa3¶xš¼`OÃ~Úü 퇺ñ¤:hÃ2*¦Šêrĉȉ⌢d@ð³¿HD„H°=€Ôº¬Çío Lôÿ ˜V PÈØJ%6€Ræí €³â9Aæ»ùy£@„Ï„Z*úì¡ò]~ˆÛCÔ|c¨Ù…ºŒbê~5ŒÓd»üPŃ PБ VÂT‡¡-dNñªBD‰E«ZO±?AO;‹•înVB†¸äû7c–w6ó™¿+•ˆóªè† ;dˆÒ`¢Þ¸ü+¶UµU3`,4‚1µ¼BhÒåBSøOk…€ôV2È]üuŒÚòêž®Â)Nñ³R\ Lå´,‚FJ­”³Û%%A«r´~tê…ÔmUgI?/Ñæ¬¶K˱ä»xÁò`m˯ÎßUYMQˆw µE¨Ãí ö™"H˜âiH¬gyëã¥epÅr;ËË}Ì" f*Ø2ÊK|¥Å } úpZmuˆÕN­¶ KÓ{Ì7ìz«ÚÃé ~î1áœÙzYÿ¡©: pžO\¬˜tÅÔ~ÆÓ>5J¨õ Ź>dœUO€‚5Rfå, Ñc—Æ’JnW1´0º~ÚWY õ “­Sf¦GË"ˆP†m_(6°¸ù±ÒbQl§[…0hð}Ž9bûxÆ˹­8Ð-‹ÃÏ}z -«ÂI®³,éÇãIÔé™'t7‚Y€˜œÕ\-—oTpÅù¥·:>•IPÖç aÜߣ¤3IŸ,¹Ì…•>(±0{‚˜¿U±…U<×0iGI2ß¶ ô%ÿ±1QpºTúA„ÑÁßÇF»yU¯7›óüæîáâWvå , ¼Î¯NOÛ—ïÎ[Ç% ÉÚ }M»~ú<¸ñìøì¢áIá~¬r›,šè«5r4•q˜¶ñ£výâôêì| Kfe‰-¾½ÔsýA£¹è[¾±¦-/dîÁ¡~/vuz0spÖ\"FdË¿Ó$+Fº÷àÐÌ("¡ñòÉ}ÜÝi”÷ã‰ÝPN„òïý»ùŸê]¹ºw$Óð‚ NH³nÕ™‹j‚yjÚeî âD‰Ç14$Ÿ ™*b¤›W ñ)‰ºåmá&Ñ ó˜Þ f7»“dP \TA±:­£aœD_£îd)[%L×à:IÀ¿†åx’Üw—¢!S4’áø%|F(t]UÎN­ŠE}5… ø/4#KäˆÎ5Á“w­¦—g‡ywÜѯÙÝ1@kÞ2ÃØ<ºŸôãhÖ%Ó‹þ°£)o3°Ó[&&ôïŸñ‚ˆ¬÷¸iiP˜7è 9 ;K €JðM¡””‘,˜µ˜Å ŒæÛrš…›Až%>6㨸»¨>Å Dn¢w4XŕÑ’„eÇ4ç–påpÔàeršsº‡ù,¦åR®¬ÊCÓúWä¡PHŠ’±;Î?_è1=Üa ^÷ãNb>1˜t®ÓÏz{NÑm24Ô­ê²:Cw'YºI˜Ua9ÿý<‰Z÷ó¡ü#'‰Âfíì#'ýž5ŸƒßF±ƒ£|x³õ,¿8ñ¨p£ëì™-¿æäµÌ„† 5a¡ióЀh:}whF#D° ,G£Ç§Û(ž·ô?DÚªm endstream endobj 4911 0 obj << /Type /Page /Contents 4912 0 R /Resources 4910 0 R /MediaBox [0 0 595.276 841.89] /Parent 4749 0 R /Annots [ 4856 0 R 4857 0 R 4858 0 R 4879 0 R 4880 0 R 4881 0 R 4882 0 R 4883 0 R 4884 0 R 4885 0 R 4886 0 R 4887 0 R 4888 0 R 4889 0 R 4890 0 R 4891 0 R 4892 0 R 4893 0 R 4894 0 R 4895 0 R 4896 0 R 4897 0 R 4898 0 R 4915 0 R 4899 0 R 4900 0 R 4901 0 R 4902 0 R 4903 0 R 4904 0 R 4905 0 R 4906 0 R 4907 0 R ] >> endobj 4856 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 720.235 207.034 730.141] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4857 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 696.978 215.24 706.906] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_54634ed49425e8842874e9e2b77899df) >> >> endobj 4858 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 681.381 209.024 691.286] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 658.124 205.835 668.052] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_5592649ee4c25e118559c6d283c51930) >> >> endobj 4880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 642.527 209.024 652.432] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 619.27 211.912 629.197] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_446914676e0b3f55ac6a080015a52b43) >> >> endobj 4882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 603.673 209.024 613.578] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 580.415 227.424 590.343] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6779d48001260a0011b3dcffdcb64cb6) >> >> endobj 4884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 564.818 209.024 574.822] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 541.561 233.511 551.489] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_96b787f84207faa42599e50e6e078d21) >> >> endobj 4886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 525.964 209.024 535.968] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 502.707 230.742 512.634] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_222a5bd7659f3e1ea1a9ed21f54c50ef) >> >> endobj 4888 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 487.11 209.024 497.114] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4889 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 463.852 231.299 473.78] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_ace96fb8c1499616dd1333af3e8340b0) >> >> endobj 4890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.548 448.255 211.411 458.259] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 414.039 234.816 423.967] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_95325b53ebd8d7d0a371a65b27b3d04a) >> >> endobj 4892 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.008 398.442 208.871 408.446] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4893 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 375.185 234.059 385.113] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_9a70ad2a355a9736711d8017535bf72b) >> >> endobj 4894 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 359.588 209.024 369.592] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4895 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 293.446 229.068 304.35] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae) >> >> endobj 4896 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 278.223 226.069 288.41] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdaebfe69dd9e4c486f856a5dc44b02e79a1) >> >> endobj 4897 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.601 278.223 405.176 288.41] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae99dd31e274ec97542e650ff89357cded) >> >> endobj 4898 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [441.708 278.223 513.996 288.41] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae0a858638ef0dd0dc9b529f98b14cc46f) >> >> endobj 4915 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 266.268 160.087 276.455] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae0a858638ef0dd0dc9b529f98b14cc46f) >> >> endobj 4899 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.657 266.268 316.459 276.455] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae0c926e2cc98a8c39585aa0e212423459) >> >> endobj 4900 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 249.984 219.613 260.514] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae218297c7a2a4d405c251e9ed239e615b) >> >> endobj 4901 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.183 249.984 423.866 260.514] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdaeeae58359638c0c631e6c7c573a343508) >> >> endobj 4902 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.567 194.751 158.783 205.655] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.462 194.751 513.996 205.655] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4904 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.69 143.941 156.907 154.845] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 131.986 172.071 142.89] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 93.132 156.58 104.036] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 4907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.023 93.132 218.557 104.036] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4913 0 obj << /D [4911 0 R /XYZ 90 757.935 null] >> endobj 4914 0 obj << /D [4911 0 R /XYZ 90 312.42 null] >> endobj 4916 0 obj << /D [4911 0 R /XYZ 90 213.725 null] >> endobj 4910 0 obj << /Font << /F29 635 0 R /F40 846 0 R /F20 595 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4968 0 obj << /Length 2037 /Filter /FlateDecode >> stream xÚÅY[s£Æ~÷¯à-PÍ2n>O{9N9•T’]ÕɃãÚBb$¨ƒ@ÐÚίO÷Ì€ëæ¬+û ¢™kO÷×_÷ ßY;¾óÃÕ»ùÕ›–8 IB:ó•“øNR0êÌ3çÎ ÞŒú¾ï>,›Ê•„¾Ø•Õ›bŸ —ŠÐ»ŸÿxõßùÕŸWvôªw"ñÀYn®îî}'ƒöŸð$vô¨#‡gé|ºúíÊ·ÚNŸZ{á;1h Ôž²„ø±1Nü00'˜{ sÓ…Ç|wW¦Ê¨»¬«¦U»e[Ô•iQžÜzוôhà­ø±ÁhþÀh3ÆH(<9I¬áþ`,­áÜÍ0]Qµ¶¡ÖÖ*õTÌ\dÓ©Øó‡ø8]¿T0î{#š“œ]u«6£UßÜP18 à<„.£¿ïsüá”ÉqQâݸ½½jiÙ6w,º}éA3N¼6£– "I„0 ßV™D§=ö‹JU¥­ìX+GnVìÛtƒÜšG#«6E÷6ßÔ•‹oãJAb¿‚+Û§­ìTËk5t0rÂý‹_àfÁ “WwóW:ù¼üe¥¤<ågmù‘¢°@ ]tÀ=`§˜vc^&± ”Š QÂ(¹ÜãÈ)SßxA`h=ÚæVH•BòMŸÌk½zñm1з ý<«Ï†¾’eúøê±ý¸‡ýs¤rND| R{ˆTÿ‡*ÁÕyôIÉ¥]}™Cö}¾|ä¥L•Ë4“êb2áC~‰Ç0ü]£@Ú·øû:¼ÙEšn1S#ÝÎ?ÉhíQJ”“ZlÆu53œÐ€­ÿ§«U¤‹R6ŒìEC"xl@Ý•BÇЬ«¡ÓN¢¥ Xj¢EDD4d( ?K¥6Íúï Ò #÷þ"§r8`Ž}ú Rþ®¦‰v§l·‘M“".לÍË] ö%1¡¶(þ ÛŠàÌìñA6KUluUùÂ>"‘p‘˜u>šjÕMÄžy¶ya[š(ˆ©ê„b£÷B±5Of­J¡˜­Ö¦í÷÷ŸºUWµÚ¤¶Ì…†•ª7v¾yXx‚^e¥$ÞLæÎs¾¦k«j|ûRd²ÓÒ y±ÎgxV<¥fkp1`0§É²§©Vhýti#o!Û)«I؇ŒÑÉÆS•MÆ™cÚ2aX"€5ªfxră57éµÓVÛ·YVàд,Ÿ¼0p-e­vÕ²sæ9®G^ÆHvDa19°cw–Ú<°QNˆÏꜦϊÿYö*ÔÌÁ;UH¤¡µöij²e±wØS6òϽPo¥2%º7²R§Óª.ËQôÐ\ÏÑ“[D‚8:MnôÚƒ(fî/[³„và¥=öég œ À(ùûÅ&][±Væ¹Ü©'»2Ò²­ý„Öá>u%Yclqîî¨Ô}*Üþb÷³×OÍbÈ<án ø—µÍgw3ÅPVÇãð¢eàç!('lÄ!ïF}Z³!ž BpX&°3郅¸¿êÚM5`2c4òκќý(pq8·È….R«³+,Úc+¸ÿ/ÐD«g—|(ÊÒh›îÚyc©¹@wjâÚ*i«#@ÞÀŒ`©¸ÏŒßYCsÚ¹wÝÜ8½}w`!°4by²Ð¸ âx\u $ÐÞB„fÀ {@ÒÆÕXò,³à,1ºÈ¿+ü?î[í¥ækš$›75ÆÊ@Û6j˜ŸØ`ô}Œ¬&(aQò¯Ø?^ƒàª’>5VeTQ2Dêv¬  + h“µ¬ ={DC ˜L¡tŠÑÜKtÜ ]LÃpŽƒ|@G‚ûY ý>Ÿt«=Äs¤¾•ŽXn2”~êp†>Hbe½ÞIÓ|ꎆýkÈðzWt*ÉAéÀì  ˆÃF¶§¶ zu 6ìb—#%Û@8P£`^…ÃŒ³’-Àô·ƒÑ¬+ 5H÷ù®°•Å6U@ƒ‹iÇð8¨'ú…M‚øÅà;»úâélDâ”’áé˜ ÁDs8 §²¯£ªºšïª,UÙ¤äÚ5&^Ì'ˆÃÇcêwW`)/[ç8lƒpöâò¶‚ò/-‹¿Nì/ BU" lQ…ç3ŸGôð3–Áy§Ž‹h Ä¡€jD:Û÷EocúÏîfôgÍñÝÜíÍñüÚÁjDx¶=ŽK°ohÿ€¼Ku jËö|‚o§øûa»gÎט7´šG6¸‹é1ÀíÆÝ̘w…F;]ßh&·lGää^=þYÞ m¾/ejWÝm{æè¥§.£ê )Úü²O˜'Ùez5>T„ßZÝ2}-¾¾èÅ©þpb0F(Y$Ìm"âúf‰ƒnÅv{€†Ú ©K«ú¥ÍõEú·XÚ6¦Uû7±÷Ü`pašñ˜º·vžÒ!&uù`úuâ&íOÜQ6…šep}å÷P›é¬“dºÌǹï!/º¦.oA’ƒÄý?Ñ×&“6¯W:Nÿ c’ÐøÒÿ»/C(ðIæßËʸîKͲÂf—À»sÿÜ 7ˆ¹0/¡yPÿZÐë 2o̧ÌFŽ­UŸº}gdA¨?ÄõãÓZVÓ“þ Áö9M endstream endobj 4967 0 obj << /Type /Page /Contents 4968 0 R /Resources 4966 0 R /MediaBox [0 0 595.276 841.89] /Parent 4971 0 R /Annots [ 4908 0 R 4909 0 R 4933 0 R 4934 0 R 4935 0 R 4936 0 R 4937 0 R 4938 0 R 4939 0 R 4940 0 R 4941 0 R 4942 0 R 4943 0 R 4944 0 R 4945 0 R 4946 0 R 4947 0 R 4948 0 R 4949 0 R 4950 0 R 4951 0 R 4952 0 R 4953 0 R 4954 0 R 4955 0 R 4956 0 R 4957 0 R 4958 0 R 4959 0 R 4960 0 R 4961 0 R ] >> endobj 4908 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 696.002 157.138 706.906] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6174a483baad91dae3fa1c30b0e4cde5) >> >> endobj 4909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.046 696.002 257.58 706.906] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4933 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 657.148 159.35 668.052] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_16e35904c64fe6b0aab144bd022c722f) >> >> endobj 4934 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.258 657.148 259.792 668.052] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 618.293 164.869 629.197] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) >> >> endobj 4936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.758 618.293 270.292 629.197] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4937 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.874 603.673 220.761 613.578] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4938 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 579.439 159.35 590.343] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4939 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.7 579.439 259.234 590.343] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4940 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.673 564.818 200.56 574.724] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4941 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 498.677 227.952 509.58] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_06cd9297f8315235ba1cf13d1cc115e1) >> >> endobj 4942 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.404 386.65 218.467 397.554] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4943 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.351 386.65 415.885 397.554] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4944 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.179 309.559 260.031 320.572] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4945 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.56 309.559 310.411 320.572] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4946 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.866 297.603 215.16 308.507] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 4947 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.425 265.723 221.01 276.627] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) >> >> endobj 4948 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [327.809 265.723 376.716 276.627] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h) >> >> endobj 4949 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.702 265.723 417.889 276.627] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4950 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [400.522 253.768 440.123 264.672] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 4951 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [291.802 233.842 326.441 244.746] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4952 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.643 233.842 380.119 244.746] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h) >> >> endobj 4953 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.964 213.917 203.498 224.821] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4954 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.521 213.917 305.709 224.821] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4955 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [445.658 213.917 483.615 224.821] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 4956 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 201.962 151.868 212.866] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4957 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [266.577 201.962 291.533 212.866] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 4958 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.994 170.082 306.576 180.985] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) >> >> endobj 4959 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 114.908 150.762 125.811] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4960 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.364 102.952 159.898 113.856] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4961 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [300.539 102.952 336.832 113.856] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 4969 0 obj << /D [4967 0 R /XYZ 90 757.935 null] >> endobj 4970 0 obj << /D [4967 0 R /XYZ 90 517.65 null] >> endobj 482 0 obj << /D [4967 0 R /XYZ 90 461.356 null] >> endobj 4966 0 obj << /Font << /F29 635 0 R /F40 846 0 R /F20 595 0 R /F14 1078 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5009 0 obj << /Length 1549 /Filter /FlateDecode >> stream xÚíYß“Ó6~Ï_á™>Ô™!B’%ÿ O\( -ôÈÐ`ÇVǾÚ—ë_ß•VN.9'9 Cy¸›¹ÑJ–wW»ß~’êÍ=ê=œMÇ<ñ’„<ô&3/¡^2"9ó&¹÷Πã”úWY³Èë!È>Y G\R¬ …Ò…š)xûªÌÌPL¹ð™ˆ†&/ç“ÁߩǬ‘(^¶¼û@½Æ_x”Iì]ÙYKOðÚÂ{3øc@·tÇkzÃkFC"‚Ø‹x@h(Ñõ÷œKk~û¾±_Ï#ÏÞ»‘Ä•MÛÅ{*)ü³w`©¯›¡mÛ…B!-Ó¢š¯\¯š¹—z ˜ç`àR50«jTµjœÎ+Ý.Pšê2­¯é´PÍ/¦#}Ýâà"-sÅŽ^¦óÎɺN¯;s.õzȤ¯ ìºi?^LD˜x#ÆH"]?A®}ef__±ªó† G’þc0@¶Ó[;kݪ²Ñ•‚˜ØÖ†,`‘?~>yƒC>qBÓ‚_i?€n€ë±Z‹¦Âwj•UóRÿ£œ=·8#.Tšä¬Üç©]Ý]ÑÕBgºK¦Áø¥¶Âö²®ŒÊÏ:wSr53ÚÓUÑâÀç!—àíÊÆÞôuŠ‚‰‹iu¹Pµ†UfNÅRe-Ý,É. F.þ<"2Žþ€‡ñøiÓ@¦-DðÊ´ÂO)/ ]Îoàãrªj7פѴ&G0.,ÆëeŸí¦­WY;ìü¨2¶6ÖÐïPøYY¤· +ªêÓêÒ·¨?„S³nóìá(`K vÎÏ8a‡ë$I¢¸›0&Ô|Ö£‡%’p_=¤Èd€”þd¡l5ÇJQáØ4Eœh*Å´¶Lœ×´UÝ=×Ýsl°~̤ !À¨ Š{EhfšÐœ=ÿ5{öòÜÂß[¤mgÞfÖ‚Är/¶E•¹d™R¹î‰¢HÄd·ú×oû"¾‰>•‰=IbÖMX¦=9`‚±ÉR/!¸ŠtE¾pÙñ%ˆŽR¤ô÷«3¡$þªòÔùúPy4¶ô|°ºšØ-ê„ ƒ0#¬Z]èö;uÝÒÒ'hÁ¤ÛqÕ®êedht™#†p¶Ý“¬jlšK•iÃfBZ´ªÆŠ5ÏoTð~¥†²\5Y­/[»Ùõ%£Û±ä‰=UÒC|Oo\¾q¡»>®ôÈFmܪOj8|–ð¿5ëžÕJDE" âi5l @î•á#c‚A°Ûx"»ð›¡cá7ÏûÃož¸ðÞ.HÆÊì¸Öˆó`›còXF:;‡3b==˜‘ž½âû¦g‘WǰtGƒîèuêJàë`ï”42<§ãÖq›âöxxÄð= 8a‰Ø^w—€§Ê@éÊõi•­–ªlÓÖì8îÀÅ äÍW s/ÿ”ï¼ ÇÀ_Ÿ^|,«n€®©ûë!xs”‹HÈWgºírÍ'”f­¸³Êñ¸© AÜì2õ0ˆàœ®{Lqv6[Zjï5s»Ð»SÓq9Ê÷'iÄÎuüö—Úd½(PØ9 4·÷Î1I°E¼¶u§Þ¯ô¨¬Z—HÙ.ê`µ‹ ~›YhŒÍß=4î 4ËÔå—CCþÐØa…~mØ‚Ÿ®Ùiò÷9D@ãî>Ž#ý÷ÿ˜KÄQÀ<¹ÂyäÕPPwÙë.ë›m‡ÝsËrËḭ́($TlÖ{+è}u80lowº÷v‡G87åÁ"?uÇŒzݺ­ŒÇ„Æså=ڽ߼³NNX„DÁtu(÷¡à?sË£…xþúÕ“_÷kß³ö·®=ç>¬I"ø¦Ò´¢=¨4åòGãüð(ÔÞž¿¼8Û¯´{x÷\ÿ­ñæ‚ÝÃÍ”Ÿ\¼8Æ œ~?Àmžïÿ`Æ$añ]¯ê~U0DüUM‰IºE> endobj 4962 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 719.912 150.762 730.816] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4963 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.804 719.912 261.655 730.816] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4964 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 668.415 150.204 679.319] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 4965 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [290.962 668.415 324.496 679.319] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4976 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 616.918 150.762 627.822] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6174a483baad91dae3fa1c30b0e4cde5) >> >> endobj 4977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.298 616.918 208.361 627.822] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_16e35904c64fe6b0aab144bd022c722f) >> >> endobj 4978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [214.891 604.962 248.425 615.866] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4979 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.564 604.962 362.416 615.866] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.703 604.962 410.555 615.866] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 577.375 158.493 588.279] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) >> >> endobj 4982 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [311.238 577.375 344.772 588.279] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4983 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [464.919 577.375 501.771 588.279] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4984 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 565.794 150.762 576.324] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4985 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 537.833 152.974 548.737] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4986 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.447 537.833 235.981 548.737] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4987 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 463.665 266.177 474.569] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4988 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 463.665 320.403 474.569] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4989 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 446.414 160.714 456.945] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4990 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 396.222 266.177 407.126] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4991 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 396.222 320.403 407.126] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4992 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 378.971 160.714 389.501] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4993 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 328.778 266.177 339.682] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4994 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 328.778 320.403 339.682] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4995 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 311.527 160.714 322.058] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4996 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 261.335 266.177 272.348] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4997 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 261.335 320.403 272.348] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4998 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 244.084 160.714 254.614] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4999 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 193.891 266.177 204.905] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5000 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 193.891 320.403 204.905] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5001 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 176.641 160.714 187.171] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5002 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 126.448 266.177 137.462] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5003 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 126.448 320.403 137.462] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5004 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 109.197 160.714 119.728] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5010 0 obj << /D [5008 0 R /XYZ 90 757.935 null] >> endobj 486 0 obj << /D [5008 0 R /XYZ 90 524.259 null] >> endobj 4813 0 obj << /D [5008 0 R /XYZ 90 501.947 null] >> endobj 5011 0 obj << /D [5008 0 R /XYZ 90 501.947 null] >> endobj 4814 0 obj << /D [5008 0 R /XYZ 192.415 449.194 null] >> endobj 5012 0 obj << /D [5008 0 R /XYZ 90 432.84 null] >> endobj 4815 0 obj << /D [5008 0 R /XYZ 192.415 381.75 null] >> endobj 5013 0 obj << /D [5008 0 R /XYZ 90 365.397 null] >> endobj 4863 0 obj << /D [5008 0 R /XYZ 192.415 314.307 null] >> endobj 5014 0 obj << /D [5008 0 R /XYZ 90 297.953 null] >> endobj 4864 0 obj << /D [5008 0 R /XYZ 192.415 246.864 null] >> endobj 5015 0 obj << /D [5008 0 R /XYZ 90 230.51 null] >> endobj 4865 0 obj << /D [5008 0 R /XYZ 192.415 179.42 null] >> endobj 5016 0 obj << /D [5008 0 R /XYZ 90 163.067 null] >> endobj 4866 0 obj << /D [5008 0 R /XYZ 192.415 111.977 null] >> endobj 5007 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5044 0 obj << /Length 1209 /Filter /FlateDecode >> stream xÚí™[SÛF€ßý+4Óy¦Þîý’7À@CCHm§-C2a/F‰,ÙÄðﻫ] BV Óøf­ŽÎžËç³Z ó‡½ÝIï—¬Ç<˜\ ‚#À0 &³à,äÑþAÃõty9ËûFÁe€ âD;i¤/´¹&CN턘†ˆÊþçÉQoÒûÖCfF b&€ ,˜.zgŸa03ãGDÉ`]h-Љ9&Á¸÷{¶z‹ €œÝy 0ÞãŸfú„8õ>þ¹7þu8ú{oa á7o û+\5öá=û0 8¦Îün¼r7-¢åW']d¹V—Ú ÷ pnDiì÷ç}"BD7 Salæa¥fTär~½Ð©Ÿ2»(Rér˜Ï}2G‡½à¬¸nªs_~‚ šäu]Þ¼F”Î6š8_µš8_¢éT_­|÷ëVñÚL;-"ï‡J¡ªTŠì0 „(mX‰”_òY3¬B0 E½¨Ž\WÃì¹ J³•‡†¸ O¤ê¸ÊV\?ì5áŠà+®/«Ít®`Jþ\å#\!0}Ô•ý8\i WÕŽë¨O`xrô!­‹Û€e¯Àþ'`Ë\7Ga•ši×  Hm[‡4Ý®¹ÑÎpo|:®G_[ä‹Weº'¸|Ü Xm[ C¨•§?Æ'G{ûuœäk{qœÊD?n_T«îu]1±ÙE˜ËÛÖ¾p+nÓÝq}µDðµw½8l6ÍMwÂÔGnZ(’†•”nÝV‘VÒÞ¼?ümÿ´ÆîίXãȳƟdM"qGÖVO°Æ7°fÙÀßÄßX 3ÉÀùâY+†’,»Q“ŠÅ²r¶¸h“âîHV:O£¢–füì0óAêTçæʧ;óÇ¥p`¤ÏÝ wßPô† w†¡Ý„Ù³ºeMiß½Ýu2-^3YéüÖ‡ÙÍí\§#ýýuƒ endstream endobj 5043 0 obj << /Type /Page /Contents 5044 0 R /Resources 5042 0 R /MediaBox [0 0 595.276 841.89] /Parent 4971 0 R /Annots [ 5005 0 R 5006 0 R 5017 0 R 5018 0 R 5019 0 R 5020 0 R 5021 0 R 5022 0 R 5023 0 R 5024 0 R 5025 0 R 5026 0 R 5027 0 R 5028 0 R 5029 0 R 5030 0 R 5031 0 R 5032 0 R 5033 0 R 5034 0 R 5035 0 R 5036 0 R 5037 0 R 5038 0 R 5039 0 R 5040 0 R 5041 0 R ] >> endobj 5005 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 702.288 266.177 713.301] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5006 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 702.288 320.403 713.301] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5017 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 685.037 160.714 695.567] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5018 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 634.844 266.177 645.858] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5019 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 634.844 320.403 645.858] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5020 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 617.594 160.714 628.124] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5021 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 567.401 266.177 578.415] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5022 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 567.401 320.403 578.415] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5023 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 550.15 160.714 560.681] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5024 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 499.958 266.177 510.971] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5025 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 499.958 320.403 510.971] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5026 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 482.707 160.714 493.237] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5027 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 432.514 266.177 443.528] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5028 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 432.514 320.403 443.528] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5029 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 415.264 160.714 425.794] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5030 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 365.071 266.177 376.084] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5031 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 365.071 320.403 376.084] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5032 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 347.82 160.714 358.35] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5033 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.051 297.627 266.902 308.531] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5034 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [284.484 297.627 321.335 308.531] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5035 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 268.422 160.714 278.952] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5036 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.295 218.229 275.147 229.242] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5037 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [295.084 218.229 331.936 229.242] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5038 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 189.023 160.714 199.553] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5039 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.273 138.83 270.124 149.734] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5040 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.626 138.83 325.478 149.734] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5041 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 109.624 160.714 120.155] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5045 0 obj << /D [5043 0 R /XYZ 90 757.935 null] >> endobj 5046 0 obj << /D [5043 0 R /XYZ 90 733.028 null] >> endobj 4867 0 obj << /D [5043 0 R /XYZ 192.415 687.817 null] >> endobj 5047 0 obj << /D [5043 0 R /XYZ 90 671.463 null] >> endobj 4868 0 obj << /D [5043 0 R /XYZ 192.415 620.373 null] >> endobj 5048 0 obj << /D [5043 0 R /XYZ 90 604.02 null] >> endobj 4869 0 obj << /D [5043 0 R /XYZ 192.415 552.93 null] >> endobj 5049 0 obj << /D [5043 0 R /XYZ 90 536.576 null] >> endobj 4870 0 obj << /D [5043 0 R /XYZ 192.415 485.486 null] >> endobj 5050 0 obj << /D [5043 0 R /XYZ 90 469.133 null] >> endobj 4871 0 obj << /D [5043 0 R /XYZ 192.415 418.043 null] >> endobj 5051 0 obj << /D [5043 0 R /XYZ 90 401.689 null] >> endobj 4872 0 obj << /D [5043 0 R /XYZ 192.415 350.6 null] >> endobj 5052 0 obj << /D [5043 0 R /XYZ 90 334.246 null] >> endobj 4873 0 obj << /D [5043 0 R /XYZ 192.415 271.201 null] >> endobj 5053 0 obj << /D [5043 0 R /XYZ 90 254.847 null] >> endobj 4874 0 obj << /D [5043 0 R /XYZ 192.415 191.802 null] >> endobj 5054 0 obj << /D [5043 0 R /XYZ 90 175.449 null] >> endobj 4875 0 obj << /D [5043 0 R /XYZ 192.415 112.404 null] >> endobj 5042 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5074 0 obj << /Length 1410 /Filter /FlateDecode >> stream xÚåXKoÛF¾ëWè¡Pn÷ÉGnvüˆqm-à-®$Âé’tlýûÎ>H‘Iɽ4A‚†»ÃÙ™ù¾™].v–vÎ'dzÉïg4r"ùÔwf 'ÂNà$(qf‰sëúˆð©G0Æîó¼\%Åd­¦Ø=K×ÒH×r!a.te6WC!¦Ü%<š~}œœÎ&O¬ˆ¢W ˜pæ›ÉíWì$0þÑÁˆE¡ó¬µ6§ þ×ÎÍä õ–2„}±óQD|ëò/‰ü‚1ͬ“¾¿ùpr}wtyyñéÜ áÐÃJYy æqËÊÒˆó<+ž…Ll¸¹¯ bCþ~“¥©›ˆ ‹nÙäÙz;…*}Âá(ÂÇñÑõu aú„çuÉôXz,Fá‡# m´0¿§K‚†g í VO½ë  ÄJlC¬§ró_w =fº…[½Z!ŽHSÝ~ö5ÀC€µ·F£À_]üuyq3kÏñ6WØ -ð¬Þ\Y0 <§oÂóÜaQÜ™¿w¦K[)¶p‡Á~ÜULwx£ƒ;3¥­Æ[=_ «ž?h´.n8XAFß\Ü]Œ)Áøó]–× à¡Uê¶k·7ήíƒtn¢ºwôwlEðÅÞ p•äc gyö«2ní>i½/Æ™F¾É>CùÀ>°ÈòðAv :•ó=|Göð>(E͇ïSHHˆo*9F‹…Ý¡ Á³ž@ŠvGÏß”óÔ²Ÿçë§Mæ•rž*Dæ&¸8‹×ùòÉ*A¨zôD}#M !îìÔ³þ8jªµÿûf¡¦.ŸJÙýýî3´¬w´dð«³ì~rþ¨ôæ£ôž]½Ïîâ†àôà˦>%îƒy°÷?løþ‡‹ƒï¸ºÿa{îèŽ+ úò†sœräûQíd¨‡âÄ]gÎzÌt(~×c‚£(ÜÚã¾ „¿»ñY¿œej8qiI¦ËUe¦ç«¸ˆç•,¬Rš••Œ¨¤¿WÎzš#a÷¼<»ê‹œ¢€Ñ}‘‡û"'ã‘/¬ŠÝM˜@>÷ÿ³Ãc3ðú×Q©;ð·¾»…C@Y1w·6Jaëë\f²ˆ«z;Ím‹úT gêæMÞ›ßüüŽ“w"0OjãVºùîðòâØÈl[Ÿm{'ùËv)³×‘þÚf§Å endstream endobj 5073 0 obj << /Type /Page /Contents 5074 0 R /Resources 5072 0 R /MediaBox [0 0 595.276 841.89] /Parent 4971 0 R /Annots [ 5055 0 R 5056 0 R 5057 0 R 5058 0 R 5059 0 R 5060 0 R 5061 0 R 5062 0 R 5063 0 R 5064 0 R 5065 0 R 5066 0 R 5067 0 R 5068 0 R 5069 0 R 5070 0 R ] >> endobj 5055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.367 702.288 274.218 713.192] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5056 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [293.89 702.288 330.742 713.192] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5057 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 673.082 160.714 683.612] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5058 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.897 622.889 267.748 633.793] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.697 561.115 276.549 572.019] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.183 499.341 276.034 510.245] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 437.567 268.389 448.471] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5062 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 420.316 215.219 430.846] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 370.123 268.389 381.027] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 352.873 215.219 363.403] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 302.68 268.389 313.584] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 285.429 215.219 295.959] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [228.6 235.236 267.664 246.25] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 206.031 215.219 216.561] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.174 155.838 276.237 166.851] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 126.632 215.219 137.162] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5075 0 obj << /D [5073 0 R /XYZ 90 757.935 null] >> endobj 5076 0 obj << /D [5073 0 R /XYZ 90 733.028 null] >> endobj 4876 0 obj << /D [5073 0 R /XYZ 192.415 675.861 null] >> endobj 5077 0 obj << /D [5073 0 R /XYZ 90 659.508 null] >> endobj 4877 0 obj << /D [5073 0 R /XYZ 112.645 614.087 null] >> endobj 5078 0 obj << /D [5073 0 R /XYZ 90 597.36 null] >> endobj 4878 0 obj << /D [5073 0 R /XYZ 176.475 552.313 null] >> endobj 5079 0 obj << /D [5073 0 R /XYZ 90 535.586 null] >> endobj 4917 0 obj << /D [5073 0 R /XYZ 112.645 490.539 null] >> endobj 5080 0 obj << /D [5073 0 R /XYZ 90 473.812 null] >> endobj 4918 0 obj << /D [5073 0 R /XYZ 219.802 423.095 null] >> endobj 5081 0 obj << /D [5073 0 R /XYZ 90 406.742 null] >> endobj 4919 0 obj << /D [5073 0 R /XYZ 219.802 355.652 null] >> endobj 5082 0 obj << /D [5073 0 R /XYZ 90 339.298 null] >> endobj 4920 0 obj << /D [5073 0 R /XYZ 219.802 288.209 null] >> endobj 5083 0 obj << /D [5073 0 R /XYZ 90 271.855 null] >> endobj 4921 0 obj << /D [5073 0 R /XYZ 219.802 208.81 null] >> endobj 5084 0 obj << /D [5073 0 R /XYZ 90 192.457 null] >> endobj 4922 0 obj << /D [5073 0 R /XYZ 219.802 129.411 null] >> endobj 5072 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5098 0 obj << /Length 2103 /Filter /FlateDecode >> stream xÚÍZ[sâ8~ϯpÕ¾˜ªE£»­~Ë…t3•¤³@z·«g*Eƒ˜&&kœíÎþú9ºl"ƒ Lg(ËB:7Ë'É8¸pðþèdpôË9UBJR î…ƒH$( ãàK(á­6Á‡ßG‹É8kA;D“V› žOg‰mõ’»þ‹Ã$é®S[¿~=ê Žþ{D€#ˆá "1Œ޾üŽƒ1ôÿ`ÄT|7£N½%Š„:¬ÞõÜCó=uosyb½îm7ÂÍU×g¸à{@È’üœ Ò±R{/¼;,üàóµßÙ ‰«³Ÿ,x$Ùt ãi¯%Døé¢&È#yX½ë¹é@§»z›ce€ƒ­Žz¦e1n9L§›%LgÑ ¦HÁªV£¢z‚Æ~ Ç#„ùÖôY²®×¡0âQƒeÞˆbÄ9+gÏ=j¶_'¤Þ{5ŒÎ¥v^•ˬ·/õk·uñÆR«U™§¸ém weÞ)³ÔÔSæ%4ㆷu’֜ݭ.^i43¢m •Ê|ņ\Ëå™·¶ŽÏ]Šã-{>({é/ÞÛª—B”¯Î¡ÀØÏ—í ÎM€8â¿3$eÎI;)¬v6̧swe4hE<|~t‚ÍGÆì­£0½ìó G-j­•”Ùm’e‹û[Ó_‘´‘Rh stkˆ²Ì³w•Áż\Vó4CÙté=Îz^ï¶szÚé÷½dL|A2äd}ÖÕÍÅÅíõÇîÕ ÓÛ…-¯Çˆ›Œ‹oW¶B¤¯ùd*Õ€ËÒ¨òÿú·}267* ?í+>éüABµŸô …„può}’j„S(RÔÈË¢q®C1ùj_¤}üŽ“w"²oê¢[lÀ ÝÛ†ZŠm˸ˆ©Á?žï“t]Ó?¶û»w endstream endobj 5097 0 obj << /Type /Page /Contents 5098 0 R /Resources 5096 0 R /MediaBox [0 0 595.276 841.89] /Parent 4971 0 R /Annots [ 5071 0 R 5085 0 R 5086 0 R 5087 0 R 5088 0 R 5089 0 R 5090 0 R 5091 0 R 5092 0 R ] >> endobj 5071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.156 702.288 270.22 713.301] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5085 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 673.082 215.219 683.612] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.959 622.889 276.022 633.903] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5087 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 569.773 215.219 580.303] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5088 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.293 519.58 271.356 530.594] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5089 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 478.419 215.219 488.95] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5090 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 428.227 268.389 439.24] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5091 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 410.976 215.219 421.506] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5092 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.321 108.802 177.172 119.706] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5099 0 obj << /D [5097 0 R /XYZ 90 757.935 null] >> endobj 5100 0 obj << /D [5097 0 R /XYZ 90 733.028 null] >> endobj 4923 0 obj << /D [5097 0 R /XYZ 219.802 675.861 null] >> endobj 5101 0 obj << /D [5097 0 R /XYZ 90 659.508 null] >> endobj 4924 0 obj << /D [5097 0 R /XYZ 219.802 572.553 null] >> endobj 5102 0 obj << /D [5097 0 R /XYZ 90 556.199 null] >> endobj 4925 0 obj << /D [5097 0 R /XYZ 219.802 481.199 null] >> endobj 5103 0 obj << /D [5097 0 R /XYZ 90 464.845 null] >> endobj 490 0 obj << /D [5097 0 R /XYZ 90 397.402 null] >> endobj 4926 0 obj << /D [5097 0 R /XYZ 90 372.814 null] >> endobj 5104 0 obj << /D [5097 0 R /XYZ 90 372.814 null] >> endobj 4927 0 obj << /D [5097 0 R /XYZ 107.713 313.645 null] >> endobj 4928 0 obj << /D [5097 0 R /XYZ 107.713 297.704 null] >> endobj 4929 0 obj << /D [5097 0 R /XYZ 107.713 281.764 null] >> endobj 4930 0 obj << /D [5097 0 R /XYZ 107.713 265.824 null] >> endobj 4931 0 obj << /D [5097 0 R /XYZ 107.713 249.884 null] >> endobj 4932 0 obj << /D [5097 0 R /XYZ 107.713 233.944 null] >> endobj 494 0 obj << /D [5097 0 R /XYZ 90 218.158 null] >> endobj 2038 0 obj << /D [5097 0 R /XYZ 90 194.905 null] >> endobj 5105 0 obj << /D [5097 0 R /XYZ 90 194.905 null] >> endobj 5096 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F38 780 0 R /F46 2400 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5119 0 obj << /Length 3088 /Filter /FlateDecode >> stream xÚµZisÛ¼þî_¡f:jÆbyi¿8‡]§¹;½òfÞ¡DÈbC‘*HÙq;ýïÝÅ.x‰’egúAC€€½ðìZ“›‰5¹8yy}ò»s'žÄf8Áäz9‰­IØ¦ïØ“ëtòÕLÛ›Îl˲Œ»EµJåÚ†¹šÎß2γ\Pë³X ‹ Q,°+²ϰ}{úíúíÉ›ë“ذ£5±Õ~h†®?Y¬O¾~³&)ô¿X¦G“;5k=ñžùäêäÏ'VZk@­ãšVàµÙÔñÛ©í@E >Bc±Jd²¨Fê•2¹ç‘²¨“¬ÈŠ›ÎãüòúŠ&dëäFPçJ$),áYÆ)26ãĦãø@«"äµÉV<¯K5Ls==ëË·àgÓY*Š:ûŲQÑîI‘Ò„½+&1Ïi𯯮¨ç;¨ÅÈ÷ý6K saç ('2}ÏÌ¶ÍØg9-K”ƒçõJPc#MyO/‹þŸI̓Rl¤¨€²¤ÎJ”«0]0¸ÝðR%=€žIÒÞ·FeNg®—µ­·²¨4Q·²(]Ó®ÈÕg#©Èø’‚Ÿ¬Uh–Keydrò†mïóÅÉä«GåÈ5Ï!ó⑪–ÛE î*·ÍÀñž¨`X=+Ðzn§HJ«$´NæÍ"#—̽H«†yõDíþœô:IÍäó“õe²)~I6¬š/Õ­ÝHm=¯Wûør#E¥f‚ݶ®`?Ú®jl'0#7xêÙÃ}Ô¡À èèc÷ŠºQªØ¹-¾%âÌ]ÁÝoÄï÷së!?Ìí"Ñì&²bN y”ˆm8 úöß§ŒŸŸwB¡C§gGYò¹[ÒM'›ì‡BLþ[žU¬e^ßìÑ;üÌ2ãèrl3ò]¢ë6àíZT/zo—±½®þ"3´b`/2-ß¡e~Kúó‚žžMÏoÈx< ¯«o×5«äW­ð¬Pã6»^ß0bu†˜,Y ö‘`‹}6™Õ^ÊrM­»U†§R-YòÆ/ycÔ"× =»¯` Š"ØCìQnìôàz K;4 +Çð#YorÁCh8²ÎnV¼øœ×.ç(‘R/P@€¥\j[ä÷4r›%c˜LŒçJéò#ãE¹­aQVhWA‘oú øæDZN]ý q†ŒwÏË@¯¾cú‘£ÿÆ8d»`=1ÊÐ5í(¦±7 ÝÀi4„íg)ÅÄùŒpOt:B*FÛx¶HdJƒJÝÏ2GéNKEo àÉâ^Ôz…È¢p6GÅæÙÕ«ËKj‚ë{Ñf¶àQv]…‰ø$)CC&Å 7­Ž…-\±ê y ¹bSÄW¢p‘oSÁ øòî”Z/¯¸q=-Ÿ½ä·wçÓõÁù9u„@ãÕgvq¸xµ‹ b”û1ŽŠ²¦P«çW«ÙQ‹F7É>|D{¼¦—b›ç3ÎZ…Ôl6ìèÿSñN…Zúf áI݉ið;’|«dïÊÂsQËœZ(ÆJðô¹ÈÉ ë(˜8fûúfd¼ÐºL)¦Ké½*éÉüC‹9hŒòýY.DU‰tL¦óûQØEʃÑǃ•FèR¬K¤‰¤Ånƒ@Ž¢‚¡‹èaû,h³ñXz¦ç8z'Ïzß‹ïSÄ¢8ò† |Ø®ç*ÎïDBûÌ*+ºžîë·Ã|xß̇ý>¤È“‡8€èŲ^“•J!ú\lÐÒ«ª›ä€Môý+HÛt£` lHK†A‡yœõ ÈÆìmQÞÙ¿õ~EÎágA} ¶†IÚv¡Íb~?8Ò›íBŠ•'SW!&À@k_æÍñö>c!3°ð_þ“£>«sy–®uüšèIjÎSm*ãàQÂÉZÊ—Eµ\`¸°L;púŠ8'8»‘ÚÁzÊ…Ô²ÌéEyx’£‡FÚ±„î„qK ±ŒŸIŽ8£f—0UÅ}ªŸÇ‰¹MÞ!&+í0~(ŒÝÅy–øPAàÛÑÀAÁò3¡dd7ÈöFÊRjoJÙz¡&.Aì<¥ÑŠêßÔ­ú—z•&“CŸ‘ {lQŒÒà[fd…;ůKöŠeÝe´É‘q3=ðOQEz ]<žL“Í4}’eº]èŒC˘å ª·5.XèuáÝü.¢7’Þí}Ñf êBÓÝÃT|˜)§ËV®mÖÝßp‡¬]4ÌI‘T:…¿[Mi¨Rh› ˜zšR\¤¢”3\-öŒdÞñê§X‘ Œ9–&¶5OPâÄ~kJª7§Î¢,f¤èÕCìë fÜ O@+Í* ªEÊ›’T`€¤‚K“ÊH#Ó ¢>¸h#èªÈà»yPGõ€\m\³,·EƒÒ‘¸ýsvݪ¦Õs¦Ók™Õµ`}Õ¥6[8@rêûF?†!(Ò̰8hwcdOƒÕF5p'Nƒ}Öé‘§ µs‰]Ïtì§×-)ê8k³Ø1¤‘{Þ͸xœÃîfX uìÄ=htˆì ±¡ÿnUV¢÷WÊpˆ,ZÕvò\ns½ Ç*MC{vBx¥3ºóͪ®}íœæ™þË4S˜dÁ™¦£ R‘C©xšyeúù”B‹y…?i°9Õë¶nFø` TP ® Gº¬·à¦·Ø'‘G€]O< ÞÌÕ±ŸÎ#×Ãd†»ÁÉ?è†~í„@nÀIã*Y«Ú•sð9³éÙ€8¾(‚ä-—¶"]Ú‚YI•-¨¹ïþ`熃ÊߌÏiŠuqÌtíPOøÏȾ‡Q“éL]ß8›à_¿CÌel=yôÎÅôšïýÛ×#A|é‡Íœÿ>DÑì§yúøòj ¾¡éú±Òðz6µ=ßø ¦¿cLám™{4SÏG A´MÆÉUÈam×õaßíŸÕçÀàÅ›c‚ò"Hô—ÔßFɲ[ÆÒøßŸº@#çŒp˜ç?$ÛðlÑ`¢aqÒÂHc^b>gùmtŽÑÐF«IÌ8aÇÉâ(9YlµE(œ¬*ŽÐ{—aئB¹”Ù ŽsBÄa¬n¯xytIÏ¢/̽ÀØíbs?Béóý »š‹ýEÈGe»¿y¸F®ðø‹]s=k>ÅØ1^ÊqÕ5¬NapÝ@wu øAóh¼apƒÈuÍ@Mnc'ž$ê…9ù±kü ‡F7F¡î½Öht|0üjSM\Ze`:³º)J‰Šâdn©zëÿéŽñàÅéû<6“§×?ް à`Aч É;T=*r‰S†ô»a‡~ûXú ½eû%ŧ2+jM¿Î¹þ—þmñ§ù"ÞÕð( ¶e@/ÜI½ÇY×ø”ùü-ö0GØTµ<_}ñQ.¤aêxçƒ_òžœÆá6|E„[põixÌ' j•EÒÛ{ÙÝå™’ìjî9¡M§ssßt¢Á·+Zˆû¡±fIb›Js!ÀR¡>=É©[‰³â¶ÂthuÉ¡*y‡*(Îd³äœ.ÜBº´Åg*–*5Ùæ5ý¡…9Ä‘ØnpÆGèï{D5p6”ˆ‘ëCÓ£S«ƒ¦_‰úÐú:)müÛ®ÞuI³h£ª©ÛµÍ ™kþœ'îZ1&„î`h½­8ÿœs긔BOœó¤&­ÜVú+,5Ž÷’þ7“{äs2¾G>˜õ.*Üp¯€ úh*j2ߘÙ>eîŠtÏ…xÑ¿Áv‹œƒGäKÖòYïýôA5ßàÃ8í³6’âÈ,ÕºÕ—jG¸Ê:Il¥o¤zwŸ}ÿ0üØ/ˆ”8ò[?ýEb!6åôŸ›¾Ï]]ˆBȤÚâ{Ý8W1Æœ^zØÖ Ï~á3l;–í°"p®®ËA4ñîò%µ=Ó¶ú:{]þ¸¿ÅÓÿÒT‚Q endstream endobj 5118 0 obj << /Type /Page /Contents 5119 0 R /Resources 5117 0 R /MediaBox [0 0 595.276 841.89] /Parent 4971 0 R /Annots [ 5093 0 R 5094 0 R 5095 0 R 5106 0 R 5107 0 R 5108 0 R 5109 0 R 5110 0 R 5111 0 R 5112 0 R 5113 0 R 5114 0 R 5115 0 R 5116 0 R ] >> endobj 5093 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.432 696.002 178.966 706.906] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.256 678.378 196.549 689.391] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 5095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.697 678.378 289.231 689.391] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [108.286 660.753 145.137 671.767] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [406.576 660.753 443.428 671.767] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5108 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.265 466.287 206.821 477.191] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b9b53e5cfd05653cbca75cf1aa8b2ed) >> >> endobj 5109 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [477.145 451.865 513.996 462.769] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5110 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [384.264 177.374 421.115 188.278] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5111 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.248 148.531 259.782 159.435] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5112 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.425 135.342 440.065 146.356] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 5113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 111.806 165.486 122.336] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [235.483 111.806 270.671 122.336] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 5115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.605 98.244 435.206 109.147] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 5116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.45 86.288 342.033 97.192] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) >> >> endobj 5120 0 obj << /D [5118 0 R /XYZ 90 757.935 null] >> endobj 5117 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R /F40 846 0 R /F11 1076 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5136 0 obj << /Length 3007 /Filter /FlateDecode >> stream xÚ¥]o£Hò=¿ÂÝ–Æ444#íCæ#{Ye²sIV·ÒìhE cs‹Áx&¹_U]ÕÎdrVýQ]]ßÕmo±^x‹ŸOÞÞœüýL$‹ÄM"-nˆ#ß•Â_Üä‹ÏNäúárå{žç|ËÚMÞ,vÜÍr%¤çœ¥&èJßiSŽ®2ìRž_Šå—›_N>Üœüçć½…ov±r‘mO>ñ9ôÿ²ðÜ Q‹ofÖvŠÚrq}òÏ©õŽR­×óÂE,€Ü($ʯt·ФSµo v9¬õk}åÆ^²XAëIAk¯»´Û·t²ñT] é¤å^1.üÀ % n2ãþBŽ'}^I`÷f¹ |ϹÞg™n[w<Çc$OãðÇå¾,y9Û¬™ÅWf& 2Û5Û)ÙÕEÕÈè#m[¿ˆÁ´|ÔÛºy tiYÖYÚ5³í”ÆIAW^¶EÈ[œ¡4Ó.- «nšºÊHçôuËdœrŠ{{Ʀ…óJé"&€ê‹•ˆ]©b"è²î4)ÏDgîØ„´ªvg9ÙÕßÈm·ùÓüü9ÁT¸)!ó_S+¸ ¸•ܯܦŸ\Í ˆ „ë[.£E»¡+تA »’)#éË6iCØüph.(0‰ÆL2ó¼€f…ÑÐ ]ßWvÎF§¹nf(Ê"´Óà0Q$ AŠÀU`<µúk€<4:›A ¢Œ“çcíÏÒè2½Ÿ#Ów½À™Y×”3øÀ[¨ ~>>u«ç°ŠÐ•ÉQ¬#Žý„{.fuyd×À¡xþ®â;»®BôÃ>úcô,by7úß:랣B’uzfkJ}gÿØ ãƒšMÌí鹡 &{¶]³ '^wBB NÆ †$!ÃPú‰ód€'ax@Fî=SäŠ(fö(к»2‘¸jÈvL+‘ÄNÑR›R³)Ö›øTˆ_ѱê’úÏÎo®Šœ½»¦®¦ÞwE¥é£Û¤AÆ‘ÞUjâNLoK^Ã>ÃxëU<=gpv¥ÅQlÓ5/H›&e4è 'øl¤Jì«wÅ}O; -‹–…F´ðF+9¾!X79ûão›"ãÌg›r¹åh×èVWkÝmlL(8 ÖÏ õƲ:ÅíâÎmH´Üwºj‹¥ïÔÜ[ßÑ,؇ ÑQ «í€i“¿žSŸ8qý èØ Ï(RX¶5m ž¸^WÅV§¥.+˜Ç6ðö₊±RÚA’ô Ôp䬺GêˆÈ¹Ù€8p,²¢’,*éì[Ê"ŒÖ¦g×ÔHÐ×"ç)¹¦œe_v4³ÏüZšðµH 0B‚ Eò.€ß£Øjˆ UÑncÑfû–w–¬‘‰ö½ ÔT¢* Äî{<©‰òþÇû«?Oñü¿ý~þñçGy b«8’šÀ‹åââ1ã^^M&éJ|æk‚î¾í€ÿôf@L3OíèËNa%yÓ–ÐXÿghf™L„q<ÆÖY‘v†ËlP`FcF*£qÔ n¨+²}™64Ñm¿­PsB š³Ÿõ¶‰t}¼Ü\p£,@91êÜ5`( Sfm&œÔa4µ}þÐÔ[†®ùAÖÐÒyPÓ°Mó¼ ”¿Pó±µî×ô‘=!8€‡(0K ÁF×U "ž‹ŠB@<êO~¹žsúûùõ H?{Nšsâ6y­yC#O #cÚzº7L!ùÛŒ¿ÐÚá™ä^@ÁéÇ.Ýœ¸x?G_¢$]üJ”<÷Š¦ŽªS(ÊV¡àˆ‚À¼Ë ýü $ÂT.8e…í'SéìŒðûü5·0L£žs„¦azzOœãÜ(à¹8ÅxkœÓmê–§“3DË&ä¡ÓóO×sæ–0Bs€Šu* Y’‰t2ÝtiÁ½5Bçù€+ÈÄq©8DeS‡Å£ÓÆ(ÌΛô®kýµ¤‰$®cÏŽhHk‡Øw%P§™XrR3.…ƒµ´q¾¬1|[Fó¤÷ÿ&\Aä´Úø¼ æ¨]à›ªý–:祾ôþóêÜêí­9'Ž˜¤€—w½0ñˆë…¥× ÓØõTt„™Jmfÿ:¡|)uá·TøMr1àdµÊÄPlÙÓaŸÎa/ž[6}Õo0mÑ2ëþ! É©‹(DH§CƒÐ‚ì½.õÖdrHGÁû¤³K1{<›'u,Ø©a°;$ËŠ,»(¼%jÞ`€ÙŸ¨Ax£,ûÞË/ð—KÀNŽÞв"Xþ¾8¤ö9 Þ5õv’j«A=?=ãœóÅ&Å€@È©§×l€ú‰Zo6!¾4ÆèÃÖ6ÉÀM¯Í­Z5Š‚ý¬¦tí¨AàÜyñàÊ^<8ípÓdèx˜ „R¹É ód ©Êi;>JâdE“í·­É/™TM¢ª„ŒL)7V“8g­Jô…‡­¬Â±3†‘,Ý·¼ ¥Æ·ð)sTø˜ÙF„ìIÂèµ¶+M°Aˆ\).MxE ‡hª¢ZÓ76Îdyá\ãpk êœN’ähp2®ÍØnæJ³¶ƒ”%×b)Wm«ÁY ¼1îM…Îé§s$_ôMDƃ›§O¿)¹}[l 2`è4e ¶tF%ŸÔfœ‰Ú\¿fT6fz×î;\gXØsHñËD%m Ú¤<É\ú¯÷è1Û)•$ èº%ñ­b`é4 ³Õ˜âj,Á¢k ºL57x¨!œ›KeLÔ!Ò\¬ÂO\¸ª§9áÌƱ+…zžç¹4¶i2$Pàš¨lŸ"3Á] ý>~/¬¨î—6Žá#©¾ì ùì+À0ô¾o>öæ®ð¤ÿnTeæ1DúʦÒÑSa"k<Û@…©o£Iæ8™î_pÔUØkŠ*¼#TòPêá$ã¼Ì@hRœ¾E¸qèýݸüƒ¢÷èS°Fˆ/ªD£Â¶È‘Þ»ú28¡uîf6PŒ’"ün4_p Ä .ceœÆL@t¦Û9¹q·ì¥·ÅzÓ½s}Ûq6NIÁ°¶(`Ã’½9߸p¸@àrüüWÖJ¾q$åÙ)Ø3>-n]E×þ¹É'ZÜDI¤p¥êË@®÷°úÓØÀ»fèe–ÑA¿$CX“5ù+À-q[Mõ ”õ¯²´ÉiÐhÀ+Rª "ù@PjéËEh™ÁYg1(âÕ­©Ô<½~‡µa@W {P♚Yå7)}@2°×Š4iµfлB‘LOÌcx*{? Ÿ^Ê}®ñåo¯ z{ÍÀÍ2 œÓ·üuq¶Tžóš68;£NºàÝ•-“y»Ó—åÑÒÍì8+èµæ‘XX5)ÝàòWÔÀú¨öe¹îl-ä‡äå¯hCó.Iá3q*ƒz½Ä—ÊA>Mƒ£[DÅZóPd dc«yzŸæö·o «˜)þ`FÁˆ¶u^ b3‚os-«’>'|' Àìù¡×Ôø ­ó9žÎ&ºc¯ûãéÎéÞÒl_}à»1U˜¶uÓp3Š«(t!Ð_“½Ðûn¨˜<$‘ž….9M5Þëîi­²ù¦ÛÓÇWˆèÇÑ¿\;€ˆ\ïp¥õžt´Ñz|ˆêyÛÔ¶˜ü×a¹ŠžõpoÿëpÕ?ð;ˆõéüdñä£ËàŠlø¸ßÛón iûÆŽ÷Ï8öícÌñé_Q"¨Õ|õܢ؞DnŠÿ/#WJæÄÏÀ±† tsRj?Zà Y«oé#âW~ïMè¿‘1¿õƒœì¿&»:ÖÅù[‚C×÷ÆÌx_ß?¬u5=éÿ.$ endstream endobj 5135 0 obj << /Type /Page /Contents 5136 0 R /Resources 5134 0 R /MediaBox [0 0 595.276 841.89] /Parent 5139 0 R /Annots [ 5121 0 R 5122 0 R 5123 0 R 5124 0 R 5125 0 R 5126 0 R 5127 0 R 5128 0 R 5129 0 R 5130 0 R 5131 0 R 5132 0 R ] >> endobj 5121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 673.078 193.212 683.982] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5122 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 596.36 160.714 606.89] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [117.27 480.722 207.262 491.626] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.469 480.722 313.797 491.626] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) >> >> endobj 5125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [418.621 480.722 452.155 491.626] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.243 385.698 330.777 396.711] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5127 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 361.787 122.538 372.691] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5128 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.283 332.208 272.817 343.221] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5129 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.625 290.673 292.477 301.687] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.587 278.718 263.439 289.731] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.499 278.718 374.793 289.731] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 5132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [434.358 278.718 467.892 289.731] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5137 0 obj << /D [5135 0 R /XYZ 90 757.935 null] >> endobj 2488 0 obj << /D [5135 0 R /XYZ 262.98 599.139 null] >> endobj 5138 0 obj << /D [5135 0 R /XYZ 90 582.786 null] >> endobj 5134 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5156 0 obj << /Length 2918 /Filter /FlateDecode >> stream xÚ½ZmsÛ6þî_¡ûTjÆbH|ËtnÆ©_êÔIGíµ—d:”DY¼P¤Ž¤¢¸7÷ßo €" ½8iïAp,‹gŸ]ÈÜœÁÕÉ‹ñɳK/ÄvxÁ`<ÄÎ \Û÷ÜÁx6xo¶Ë‡#×qk3­³jmË^ GžïX—YžRë.§ð-²ÒbŠ]‘ãqËõÙðãøåÉÅøäß'.Ìè \1ƒÚ!óÓåÉûÎ`ý/ŽÍâh°RË÷<óÁ»“·'ŽÔÖéhílií²Øc6=f;Oªð<_Lßþç¯î¥"wW'ƒ÷#–óÞýx~÷{’çyãùpÄ\Ç:›-³†ŠB¢Q¥Óò¾ÈþHgôžó²Z&òk:t}ëK“uV5õ•sz6 i4˜—u“³¤šÙ8ÿÌm»Oߎ9-æ2+ÒÑ}•ÀæcQdMË¢©Ê_b14vŠ¡±c&¸¯Ò”>@l­Òj™Õu6ô|ë3ФEZ×$“Õ$“äuI=«D'yz:Á†X‰¤Å­r­M «§OEÙH „íÁŽ#×µc_îÉ$ÍKœz3 |ËîXû٥˷¶täÁÏܨc„wð7Ï.y°½ûžÍ}ƒ¡iSå½»¾Ù‘+鋪*+µ¡«²j²â^nt!7¶£JmsÑ¿jÚ½«QÀÜÓÂ"“<›õ6Ú4è"Mfªý Ž™÷ý«šÕÏ».騑vÒwséÔŽôÝ󒆆Ù^§ÒGÌ¥>ü+6ÊŸ÷«e÷Ô•¨í×É•:ÝVål=•§ ‘ÏÁ¡èm ^™Ü§úx´û¢OO±^N”‚êhiC?ÖØ´ÆŽïÔM÷ëåÉEÝmÙ5M¦ Ó„Ôê¹…^\•&uYP{³ê=R0´Á’Þ¢¾N†úDZu†£ÅÜJ&%*Hè'Ÿ95z޵n¤€À/ö[W½9ue1¢}€^ã>€P³H†®ÕÐË&­RŸeõp0ÉyÉ0𠃣Ӯ#¶D6¢.¾(?˜–0UV$6çªJë´@GÒgVì>D5ÜzuŠ×…áÈXç¤ÛÍiw:“ƒmª¬¸—ÛX*Ç…#T }‰uý¹D»(àP¸8ènÁÃÕ)´úžºxæØÓxæœyVU9…3¦sò ‡Ž;a•Ûž¨±ÁT“faPÁ‹í(Š”šµ5iRi£-·üJN;¯Êå6ܼÿØÃ»‘aîQ7øÂ#8ŠÛsÁ„È" Ö68Ã+™ FSAÿfQÖiç§ëT}"Ï…V½ž¢=çë\M#)@•àÑÄm 9‚ð‘l‡ûfõ¶ƒ=:Ð#õ“#NõHÀ’ÇšN+X¥ê[…«ÅÃGãâ92Ф¡–\+üHáÍ©· œðUb|(šCƒŽ1—ü„†ø¦¦Øe‘'àÝ“Ìõ“cöQ¯ËñzGo$úfzŒãá!ïG÷‡#i½K–0+w"a1|Ž\zjÇ¡PõYl¾‹õ©¤Î¦ÔÜr ±Â1#…ç…vàiö‰°hÈlæ†Jà?†1à|‡D·̷Άøã â6‹\%|jÒÈæ_½<7(ÓµÌi4úæ5½yñ΄ßÐdþ¡¥èµž ]î[¿ ™c]™…i;zQß Á´žÀ#ðxŒóaŸÉ³ÈÁ`WoL†â‘>ÁR¿ÕrÛ…Úñß¾vmçVØ÷Ù6Üg[t½Jí!Óè¦{ט®9~ËÏ‘ ™ Z!.£À£‹_)ÄbK…XFdÅÞM†ÄM¼”z ˆa£E„/9 BÕëŸoHRäØ;Iz-èSN‰çä)¼¼Ëp« hO‰ˆ“"¡Œ•"EÚd*ôŠH€!Wè+~ÙX‚‰'}–!¹¬²{PeB„áå*O—€»ò뜞Eט; €a:*Èìø¡—_MtTè˜ñ¯Év?!¤uº7ç‚æ·§ë—¡ëºDв³>8Kdš5!ƒŠ0—È•-“‡îך?6:>ÖM•MûÒF¤ÄÃ*­ur]gàé¬Ïa!¾:îWw®_]ýxqvn(ðàÜ×KlîÈ{uô{bp>¤× Pììîn‡^/Àw*iô&™¨j[Öª›TìÊ£jÊÁäï^·×¿Þ\¿ïÐë6û"0F–Bò¬nXÌXÕº–Ž÷GZ•§ÚeTÆ ØpÑó-àOÆtê'$ç}®2ò<Éù‚Z‰‰½„ €]#ÿÅ[üñÏצèêÛ,РHLáœÃ*uÊTV¦´Ê±}=ÛÝåÝ[ÓL‘íµ|ꈙä)Å% ûA°o)86´Åù„çD9öI‡‚¦r(Ï%‡’v#¨ƒÆJï7meØNèuq#’‰`‘Ó|=“ÉNϨޚ<îµÉ¬Òlßö=¶Ÿ«¸!¨¨-9Æ„Ç8;`mZ©¦#ùTõD¡KDýXD¡‡ÓC—@‰ôcphŒËb‘|Ï’²nÓ™…­Àz¦ÛÝŠ½ØqÑU¶2Àz`ÀŠQÆ‹5z ˆgsêÉ 8¿Y“Ð-t|Î’£&:»¹mcX?;^ tܽ$²+GkYÏD0C™{|)_H JNý<µìªŽ¨‘ŒÍ!Ÿ2±C <¦Ø³â@#ì¨C.$‡6‡©l 7 ‘‹UcSÄrlLdG½ž£[ð¦™àK8&â~&ëZ Ršˆ}°›j-™zÀ”ÂÔO…gi=­2cõ|r\¼«ÿ¢«ƒ2?D¤–5àÜ–YÑ W`¾+,…ÏD|OfÑ%._P„V„M˜j½,¨M僚~F”j{À–R‰Þ…Áì—8DK¤HÒXÛÃúfèÇÝzb…Ovù±‹Ïp·BÁ©µR¶ÂI$CI$C«^¥Ó ]ød(ùdçx–M¥ç„šŠ†-M$M%M»4aĘk½Q™Ä)‚¤¥¨Ç}‘5ëYjrÛ¶’“×ï²¢«­{7O‹ûf±ã¦O8CÖøÐ®ÒŽRÁP†ÜÑÓaéï‡ëòì¥5#G¬{ÅZ ÞXáë2qÈ㣀Wb;Véïÿ,¥) “âÒ5ýØv`ÄÎMª*ºLž&l´^¡ÅGÀ\,€1MiÆ·’`2 Å¡úÁï¦:Š·e¯OFžÅ÷3"ϱƒ°Uõ“ªÌŽXôͪzÇ«Š˜²C]ðµ{Æ·F}¡ÙzÔÿCß=¦m-»£ìè´ŽR*…ý ^Íw²G†¶yFöxóæõÕO¿=b\2®™˜*Úpª4,ÖI!%å=;WÁž+Æ ±-€ŸË ÔRbÑ«ï!¹ª¸p… \ݪw®Û¶¸Õx‘õ˜ÛºÈ3yÀ¤QCTHˆ×`ÿ&Ș®÷ӛ䂛E6•?$”Bn™-WtEät.R@|’JšÕê(ÓT›«»È_!j÷Û5 ›Û¥¬ËÊ0ÕZUÀ)ÊZÿ™¡;]Ã<ô CYï2T_.>™§ýí I“÷õûXc¶çh4x-ogçÄĸO×^رƒEqëâå„ÓbwýP4Éê;ƒ{ÍHøòNéS·×…R(m¦ÀIü˜í(Vàp;‰W1;ä½Ì®ÿ¯#u%fºïÝNW¶ã¤ö@ܱû¢¬ÈE…e®ü£½òjÚ?È|Uü–?ó±Ó@G÷’qßæïoó“/á Wný?¬AŽêù5õ¯ºpp›þULÄ÷åÒ¯Ò"­ý§õ?Wªq)|cB/=\ç9wŸû!½yŽëIíQV¥Oà7×/¨Ím×Ñwûây^~y¸×É©^éÿÐ X endstream endobj 5155 0 obj << /Type /Page /Contents 5156 0 R /Resources 5154 0 R /MediaBox [0 0 595.276 841.89] /Parent 5139 0 R /Annots [ 5133 0 R 5140 0 R 5141 0 R 5142 0 R 5143 0 R 5144 0 R 5145 0 R 5146 0 R 5158 0 R 5147 0 R 5148 0 R ] >> endobj 5133 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.265 719.912 206.821 730.816] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b9b53e5cfd05653cbca75cf1aa8b2ed) >> >> endobj 5140 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.265 411.07 243.892 421.974] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_b65e929c7d525d735ae240046d4f0d9c) >> >> endobj 5141 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.265 397.123 243.354 408.027] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_a7c5021293b0db20ece0e82c3702a159) >> >> endobj 5142 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.265 383.175 233.939 394.079] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_7bf13ab87b23ecdbbb4b4847d4944070) >> >> endobj 5143 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 330.353 224.724 340.281] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_a7c5021293b0db20ece0e82c3702a159) >> >> endobj 5144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.525 330.353 329.2 340.281] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_7bf13ab87b23ecdbbb4b4847d4944070) >> >> endobj 5145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.668 330.353 513.996 340.281] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) >> >> endobj 5146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [461.085 317.422 513.996 328.326] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_b65e929c7d525d735ae240046d4f0d9c) >> >> endobj 5158 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 305.466 177.661 316.37] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_b65e929c7d525d735ae240046d4f0d9c) >> >> endobj 5147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.633 305.466 286.308 316.37] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_7bf13ab87b23ecdbbb4b4847d4944070) >> >> endobj 5148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 182.303 226.368 192.834] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e8a768f544fe3ae81436b73dca3099fb) >> >> endobj 5157 0 obj << /D [5155 0 R /XYZ 90 757.935 null] >> endobj 5154 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R /F11 1076 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5171 0 obj << /Length 2899 /Filter /FlateDecode >> stream xÚµksÛ6ò»…._Žš±X|ç¦Ò4nݹ¤¹X3íMÒ¹¡(Hb">bû~ýíbðaÊö¥½6A`±»Ø÷‚b‹ý‚-~¸øn}ñÍ•H‰›„"\¬w‹„-¢»à‹õvñÑ ]î/Wœ1æÜfÍa[/a츇åJÌ¹Ê I£r'a-vd™áTÌ„ïðÀ_þ¶þéâÍúâóŠlÁ… r#/XdÇ‹¿±ÅæZ0×KâÅ­‚:.|áÁ³XÜ\üã‚inÙkî¸æ ro Ïea@¬ÿiså‡C@áúXœHñgƒ,؆"0À﫼láŒ+á'N[ѱÓR?ë:½§¥j§qâaë½>õ‡.(=ÕÇ]\M[wYÛƬ*Û4/órOh»Í+Êð."&"ZÕÛ¼L[IKµ<Õ²‘°¿Í«²¹$¨ZiÈ.@®rxr7 ´´Ì‰ÊªÕ* 鱑Eµs» ÇUlõÜÄië[y¬j8½gWÕ4h’Z48Ì=UUìnéusOš"7LšÚ´ 6Ô‘HÜ8Ž Ø'0øã„÷ögC±©4åÒgΗ¥`Nõo0fG6çõ¥°d ¨Ábžèmtf™z¤J-‰JK=Ü ŠÆb7¢YG‘sԒıÂ*¢ØQfW¦M+q6z\ni ¶yZäÿ‘´„Ÿ×åFÖzƒR2<·r‡GO»¢¥ _PÃiÑÉÆ¦®ýY­‘ìôv£þÁz‹‰g-få©w¨=¤í“ÒÈöœÄ"o¬±Òà¡V·´P•†*x µ›Íšòú Pƒ lTøq¯X:vMK³íq»ZÀRö¯·As—´þ‰1QÓþÄØG—?/@òA‚g„ )ãX2É>º\êÓą̊˜ÖòRœÁ Q "!ŽÃJ¾md±ÓZ~¥CMÕµy)/ŸTó—GÎáè¸et}ª«%œ/ùÖèÖ„¬meØ3°ˆ²‘rbŽHÄüaÌYùÌ x¨€Øã'$“²íj¤\6/ͱ±ÝÜe ½7‚»ÆÄ_À£¥kÝmŒq¦è€"‹ÔMˆ`ªà20{I¿é²L6ÍøXJ­ˆƒ?Ž„k$ﺢøª¤…j±i_RðÜífçEh^L2QfF>˜'¦ 5Çבð4‰kãm¨ƒ|k’hÑ5°h™!Ù¯"ãk2Wh4i«7 •u]ÕCS0fl\í j)ØqgDYcàtÎZªÇ]z`©‘@þS aŒ}ÂF±ü™ìš¸Ä¬ Tþòù õd0„#8>X<¾«pá á”æ š„òH=‡E ¾§wxx³5/·ò$á_Ù÷„D…4\£¦ö*3”Ût­7 pãÒ¨@¨j§ ±áîEúbâ·6ë¨'eäÿþ‡À†vú"×kU(<5«0¥Ëëõ?ß¿!0/€yž…¶bÍÓ™H°¯¸‰ÝÕqr’C¾?gµ…ªV"Xse€Ç}I•>Ðø´X ]æÙbíæ±W¿^ßÌðЇN,¯—üš1ö2 ¿yý ±Uà/¯o^ýúæfF˜~âŠÐRŸ“%ŽâsìEܱ˜ÄVà/›óô™µ*‚=ŸäŽY_Ò;U{žu œEcR«¥2$z(Ñ­ ´ÛÒœŽ6ÏX¤á =Ùˆ5ÝK¬JLC ·b?Ö3h,ÊH©#ÿ™¡©Ó´.ŠT¾ÕQôÜ Âhaü~ä?&æV@ª¾ÍMa–k·yQLê;ƒº¢ €ZgmªÑØd¯wØ€ú°»T­(œ1U`ìÏ„`ÛûF!„ÉõSÇ çNÞ£¥½™n•{ÁdUªSÃH·r Á¤Ý]^äi­•:Ï0ÔÌÕh;“ER›(@Æ]‘Ö3Ý J6ÃwiBiD<¿m+›¬ÎO}˜ÌûÆ”JI.-Cy;—ªÆIón䆤›ü˜ÛsR²Ìä©ô#;Ê÷eU˦3]¦U›xVàòÀ÷m蘷¤¹£ç>GSÿ¢rZ9¾+ÈéÞ„cc/ƒjê\[Ñ¡]s7ž„Dro°?>¸ŠæjÎäQtsÚ­µ!ȾúPð~Ò"µ‹4ePjÑi‘ù¹ê·Ú¦y9ª{€ß‚”@:;Cˆhô `¯sÆÿ¸q76±³^1t ûIU·²…Þ÷„DHü)U‘ð¹iµ&†BÆâ_}»xe bSwm¾¹ÔµÌZZ¹º^ßÐô‹y;˜o Àf…4­bö­Ýæífk…a¿PÚ/ô5w^|«Ÿ4]eYW׺ƒ]¬bl­½± MÑD·VYb\D»g}{ÞþÔÇÉÞµlg-¨ã¦Ì)„OM!mQûa rû•´^&x?0Sàú®[W(ŸU“M‰ªÜoh~?C„#ËV>ƒcDä_sµ£›ôlþþt®nZü3îåJÄ­c¿=Ç2&œÿ7Ç –ÐâPÎkÜ{/[ê|A.‹Þ]êp£óÖ#·TÞ“‘Qœ (æÅˆÀ~-é’e(Ú=_<¸çÒQÚ Ë©iòr’B +ÕÞ4~túèu‰{˜Þg=êlš1ÞÙ°Fô½Ðy¯®Nª—ö"çšfyÓ¦äÞªæÄ¹­Ä‹F•å’Zq˜?åT4_äXµãÆDš£¾pj°P(q‘ Z,*–ÞÎõ¬p?ÖfA|‡ŠÀB4sv Üзú]£ R#ðls\ÎR ]yÖ vÛ¥#Ïš£Èbb0ê¼³ä6Xž ö¤ûáq_ŒŽ=>Šø¯g\¾É ŠdL1 Ù‰ÜÄRPe5¤¥£LU’a:­Ã³é6M›·ª³˜¾|Q=CM,ŽLŠcå7C° kªÕaÐYA&L7ê‹!¼‘Á!Œª×†›æªª'¸Ä“+ŠÔ~·b‰iøÙ{¬@{÷ÀWb;ÑÍLXGÓð××@9ZM\Ó@SõZZVhÐwćÐF|0>¤èTTÚŒJ‹s¼Æ ac‡8ð{Ãd‹ÒÖÄ9^)ôç1¨>Ìw^C -?wté6B°ž¯ÿ&§Ø(PJô /0ZÏ…€B@ÿµöø ?H¥óYgåA­±É×¹G¢NÝuޤïõ¬Ÿ;ݪZ=M Aè ué2H ÁŸÒ‹xwÎô"±Ë¼ðyjg>µrýZ±–^m|óÙX¬¯6ê%äY@·1CÊíTý°`ß±)¤s4úIr˜¬¥62Ö«úÖæ¥{oòVo‡ÏÁ%œH «}æè£mÄÜØçÓ.´l¡À‹´Ä!$ºYy!èA…\+«r¹¹Üª¾ ×èö–æc®(þ4Íðr\3ôbÝóI&€Ðg tìÁ)ܿˬ`‚'ô8å^äåì¥R×vµœ4aÍ¡êŠíäRO¶ãKò®yøyð„m¹ºÅ0]È1ÍêêÉs“Ö¥Ç×Õ§ª™ôíÓ•€cðÌß”˜_¾@D‹À·é—/Tžî5¥¬Óvúù­\!×r3ú©g/}þ2Ð?ËŒ óÝ `Í©Àþ~ý}—³±8¿¯îî÷²œžô¿]ô” endstream endobj 5170 0 obj << /Type /Page /Contents 5171 0 R /Resources 5169 0 R /MediaBox [0 0 595.276 841.89] /Parent 5139 0 R /Annots [ 5149 0 R 5150 0 R 5151 0 R 5152 0 R 5153 0 R 5159 0 R 5160 0 R 5161 0 R 5162 0 R 5163 0 R 5164 0 R 5165 0 R ] >> endobj 5149 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.225 719.912 259.759 730.816] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5150 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.571 694.009 440.211 705.023] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 5151 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.076 670.473 259.264 681.003] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 5152 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.605 656.151 435.206 667.055] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 5153 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.45 644.196 342.033 655.1] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) >> >> endobj 5159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 568.614 193.212 579.518] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5160 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 465.62 150.762 476.524] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5161 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.506 322.158 389.04 333.062] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5162 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 290.277 150.762 301.291] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5163 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [401.296 230.501 438.148 241.515] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5164 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [260.838 218.546 285.794 229.45] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 5165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 130.875 150.762 141.889] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5172 0 obj << /D [5170 0 R /XYZ 90 757.935 null] >> endobj 5173 0 obj << /D [5170 0 R /XYZ 90 484.594 null] >> endobj 5174 0 obj << /D [5170 0 R /XYZ 90 446.691 null] >> endobj 5175 0 obj << /D [5170 0 R /XYZ 90 431.124 null] >> endobj 5176 0 obj << /D [5170 0 R /XYZ 90 415.184 null] >> endobj 5177 0 obj << /D [5170 0 R /XYZ 90 307.214 null] >> endobj 5178 0 obj << /D [5170 0 R /XYZ 90 247.438 null] >> endobj 5179 0 obj << /D [5170 0 R /XYZ 90 215.557 null] >> endobj 5180 0 obj << /D [5170 0 R /XYZ 90 147.811 null] >> endobj 5169 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F46 2400 0 R /F20 595 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5201 0 obj << /Length 2551 /Filter /FlateDecode >> stream xÚÍZ[sÛ6~÷¯Ðô%Ôl…Å…ÉÌäÁ±ÔiºñÚJvÛ´Ó¡%Xf*‘*IÕñþú=¯¢¤$J»û" xpîçÃ!éh1¢£—'ϧ'Á£QD"ÅÕhz7Šè(PŒHÎFÓùè½§óÇF)õfÅý<ÃØ#÷ã —Ô{‘,µ]ë; ÷BO§3œ )÷=&åø—é«“‹éÉï' v¤#fv „ÍV'ï¡£9Ì¿Q"¢pô`V­F>ð¿Ýœüó„:ni‡kÚâšñ©F„*iYÿ™s»}ó<îŸ/#×/OFï'Äù×ÙÍwç׿¦Yª;‘§ã‰ …wž¥OPºr<ñ…òâÙL¯Í8ðât̤÷hoh,uZ$YZØ?SIÓ¬¬péý«tjo—÷Y¡íͤžr:Ïã2ŒŒ'¡Š¼éXH/×±Û8ž Ç£ø*M#‘tâϲô.ËWq k¹x¿å,8ÌòywB³-®0Ûâ ˆWndVÆö"vëqWPÙ~²AŸlèÝëxNâSï[·1Ñ — ‘W$«õÒm“,Ò,7†#tDJ+ҵФ’\’ÈÿB»ÇËå€Ùsê쌎«Ì ocœËõ,[¤ÉôÜ^ß>Ú+; Öq^€ìRz=èq¼çúƒž•CìS JssÂ5F+Ê8ÇùÜÎ찌ǖ÷±{2ÎuEÂÍd VþnÞFƒž;?Tx§öÎJE¼Ð[.ª¬´ êTHæeë” *~ÄkîÝj;¿Î“´D¥âd–ÚÉ¢7ªüHÖ1ñÆ\—:_%iõÀí£7VÀÁ¬Ì—öVl’Õb³ÒiYQIçvUê”j.* O>™¤³\#='õ} ìýé}‚Ü)´JE¼°ãÆ”P ›Â0 £2³ÿÄA¼ts÷nÙ:ׅͰøpvgg»¶Å™!Û¢˜o¯"mó^ŽÀs†ªÃÓxrQTnžá£6›å.JŠÊñ³Íâ¾ »^Í÷°u§: ’Â]š¼ÑŽ—7ªØékøm¡ï6.6!㹇uQ&éÂ^Ô©pæ(¢â ·®Œ]No:[YY›ó`Péz_.b_Ðg×èØoðg:Ž ’’x ºƒ€WÉ nöj8! ”‚冠(ŠÔì#"l="|"BV=‘8¢í 2aµôæ‡Ìä ÇܶPˆÖÉ=®ÁÄÐç¾àD†DBïqíâ¤#Ü65À4ô«ÅégÊÕ×+'Rðj-ˆw[ÞPä Úd%KÞ.Ñ€„4ªVOÈv D-N<°;†1áß:Yj‡D‚~š@Á@ýðQÀßQíâêÍÙwñþ‚»p~_íÀ>'AS´ZTúÆaÝÞã!d˜VÙ±Ug»m6 Ç͆Ò_á¨övöà˜)…߇_ÞÑ ‡;z“HD.¾Q‰M|û2Âø6ÊCA‚¨—9ë —­ ÷]ÐË*èý68ÄùK oØ0° oœí†·%žSn­Í8Ò»3Ï`·âüÉ6Žzv7¤% `Õ6ùiŸ0ís€ñýý! ´ÕUÖO;ý€59=Œ!ŽˆLÛÛæ›ð/È7Ç„ÐÿG×C@žWGvvÏß<¿I·Ù»‚5°ç—¾Pʨ/¼2gþÀ;].3D'ÃhGuþ@^ûßán(páW Gx³l¹Y¥“b­gÉÏ”ò™½§ñ2[lÜ¢ÁÄ‚ÀšB{Ž:œŽ#éM/&­a)‚nÕRtC†B¶0 Zþùc…"¶_^É⾬\å4”‘¶¾ÜÈë—+ûÊÚ¼×Ô(pZ¡Ž­·˜»^rðzä;“×oþñòû‹·\Ï5y‡Ôиy©óù¾¤[¾çSÙ|,·–™y÷ #TRáÖã[×(t*ÁîwÕ:¶—·IjOcØÅÆ(µËk¸nºƒ4è¶Ÿ×ÉG‹Äê®_#×okw¼ 7F² °6€ÿ&þ¦é_;¹ŒÓßÜ›ڵéÛïæ¤BA1þįœªo±Ä„¤ýKFæ”c$}©S7ç‘Ì9ØÕà:¨¾µÊþ1úÔgOe`¯8eܹ.®­Þ•ƒ¦^_>·cNóÝOXγ ö%ý/æ;Ô endstream endobj 5200 0 obj << /Type /Page /Contents 5201 0 R /Resources 5199 0 R /MediaBox [0 0 595.276 841.89] /Parent 5139 0 R /Annots [ 5166 0 R 5167 0 R 5168 0 R 5181 0 R 5182 0 R 5183 0 R 5184 0 R 5185 0 R 5186 0 R 5187 0 R 5188 0 R 5189 0 R 5190 0 R 5191 0 R 5192 0 R 5193 0 R 5194 0 R 5195 0 R 5196 0 R 5197 0 R 5198 0 R ] >> endobj 5166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 719.912 204.789 730.816] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_92a0007f672a5498ab1b6ccc6a4a002b) >> >> endobj 5167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 680.062 195.384 690.966] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b9b53e5cfd05653cbca75cf1aa8b2ed) >> >> endobj 5168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 664.121 207.548 675.025] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_fd6d52bed79bd48230f651ac48eb5ca6) >> >> endobj 5181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 584.42 224.655 595.434] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_017f1e817bdb2114ba765e7a9ef73bac) >> >> endobj 5182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [319.017 584.42 355.868 595.434] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 556.525 222.503 567.539] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_5feeef18919b1cbb79729bbfa75976ec) >> >> endobj 5184 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 540.585 227.334 551.598] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_fc0a5a6b475a8e50b77d4be099790985) >> >> endobj 5185 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [315.333 540.585 352.185 551.598] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5186 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.082 502.727 435.074 513.74] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 486.786 224.724 497.8] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_63eb554461f3df5dc64a25f71891b9f1) >> >> endobj 5188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [311.369 486.786 348.22 497.8] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 470.846 223.07 481.86] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_3dea9d7548bdbc9a7cc8d0a04cdd46fb) >> >> endobj 5190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.609 470.846 345.46 481.86] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 454.906 218.796 465.92] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_ee4fe41274945f9e34009d2eb309c922) >> >> endobj 5192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [301.989 454.906 338.84 465.92] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 403.1 237.456 414.114] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_1d506ef2ad493a963426e0732a6328ca) >> >> endobj 5194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [291.612 377.197 381.604 388.211] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 361.257 231.917 372.271] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_1b66d50d7f1927222a170bc88f9db51e) >> >> endobj 5196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [292.609 323.399 382.601 334.413] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 307.459 216.973 318.473] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dff9a101a373a634f3a1baab29e92534) >> >> endobj 5198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 279.564 233.561 290.577] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e8a768f544fe3ae81436b73dca3099fb) >> >> endobj 5202 0 obj << /D [5200 0 R /XYZ 90 757.935 null] >> endobj 5199 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5210 0 obj << /Length 4046 /Filter /FlateDecode >> stream xÚ½][sÛ¶~÷¯Ðœ'i&âÁ…Á¼¥‰“º“¤‰­Þ¦íth‰¶ÙÊ”KJu|~ýY\H“xGúЊ"áÅ·ØÅ·À.¨ Ùí ÍÞ}³:ûï[ÎB/ä„ÏV7³ÍŽ=Fðlµ™ý:çöKŒš?®ó»M¶€ë¹w·X†æo“m¬¯.㛞‰yœ®å-ˆ?ÇŒ/~_}wv¾:ûû Ch†U,ðÊfëû³_G³ Üÿn†<ŠÙ£ju?ó …Ïíìêìó2hŸe`Ê=AüY@ |†m‚h*¼VxH A p«4#Ô ±¡FŠÊ¨aŸzáY€‰G×C÷§Ôýhx™ˆS ^_~úY·© #Ç9/¥F :’"ŠÑéchC>R³`">Z×lÕ€œúŸ yЂœPmÅXäÕ®˜ûlß#ܸóKK—Aà…N¼€ßÃ8èçb¸ÔqSÐ+ÄÄpJ±‡D8¸ 7òü€–¸-6¦ö„ð]x' „‡8íu`>ž` `>a¢–ic·4Æ¢mÄ|Î͹!V¸.¬#À'²?-Ȉ’ø†"³p9ˆ`d•s˜>…ÂPæP ÍŒÉC¸ iÓzm_ —„óec¼øci‘Ñ× ™-1†î˜nùW µŽÓÐÆ¬5 ›™u¼Q ŠÙÊp\¤0ÐÅ™a4Cn7{чáÆk^PÑtw,˜èÈmjX”‘.oíÞˆ%t;cÁhô3„VÓ¯Ùl%ÿ'ãfLYÂD]Á6bœÀH†¥‚ñDbôLYÞŽƒ‚M`ÉÑHƒe´#§¢ˆ‹olaf,ÅSÉÔGb9ŽÔÑJó¸O;éq‚iJ‚ÛN‘UÓô H«ñ0¬µïÅ‘Ô/YÒg–ò§d4J~‡ÞJÏ4ôhvÒótg(ò½œAôtöÈ 8_†…àÏ»Cz[T˜î¥En`˜—²ùàÊhsî¼!ð>ùÀŠQ¸zŽZÒÆïCÑYèsè~½3Ø)0â$ßË…™ÍúÒû/löežÏ|ùÞqšÙ¹½ªÙª9_ C¼>¹•×1L­ ‹Ö8AIë}œ@ w;¥;^RúPàvJgA؇Ò8gIé=³O²×¬’ÌaÙÆKx„ø}Èܰ‚Ì«Àäp­:Æ«Æã:¥q)‚N-Û1ØÅ₟•(ráÝ,¾ú¥G ‹QÌJâ5ÅV À!€œº(Únãp ¼3³<Ý ïåb¸ 4pødÜ…Æ=iU>Ý3 ë™ >WAá'¸&­Çà2 ^Ã%‡ë¼i¼ü^>˜…ÂA"³ÒŒq`ì„Ùïù¡èËá— Ææ?¾ï¶î¥È«Ú­ZÐË7qrc$z+›s‹ÛÎD¸o(é¼7ˆqÞÐ@éÓÁ—œ>ü4^Ÿî©%±OðÔrŸ®dw¸i ï\AñUp6LÙüÕ{;×3Ò+í2¢…ìAD€'žÍ`„{¹Y°û°WñûfÕ?ýØYÃYà€ JY½ÀqßF€= TG`e×ðk.¹o‹ãT´FªŠ-Qchîžî™%w÷ñÌÒ­lfåC:Ñj`zì‹n«•ü?~ K–žîÛ%K×|ûdz{ßFõ4,¨¾ªa3=}³*÷m‘b¼”‘DøˆNŒˆx$¤N"ÀUú&è?]ÙL=y51T@¸x@¨5öPQ‚•]Eá‘OUÑ÷ˆãT´†ŠªŠ-¡bh–P1Ý5ËPÑÇ5Ë1·™yŒ†ýC…E(%Ê­büЕbºK—¢æÒWö³ŒXL]üpÌÉ€á@Ã"BT5l¦¥ „cý20Œ·~¬úCÃé|/„ù!×7£óxgò£€Ì÷wæâ!Kî£ìI‰Ò¾È÷peæ[´ÝÇYíÍŸÜì²û܈ÙÝÆ *Óß“ýÝ‘x~/ïâhS4Šÿ>$ ÂæÿÈÿEÛ8Ý›N +褽Èdðò»lø˜ê—§²äönÿ¸ÀÚor}ow£?u§p±Þmw©WJƒ€Â‹5’j¢94¸•ï^…J}¥ä„JNë[Éžâfó'ÕéNwÊ>Ûntmdnâ|%×±¹™–¢É&уœ¡òëÅ…ü¤š äüpô…©º}R³j)° ¨µq/¦ -xD^lómp$e—ñxÊ¡æ¯îê¾:ˆÓ÷x§“eq—&vg‘¯î•šØ=æ%¬xvã—|mÏ®}ÔQ Üe«œõ6Ù'÷ÉÿbãCÒÕ姦wŠçq–EûÈÜÜÕåÔÊE =îãz4y^ž[CÃÕ>KÖÒÁayŽç9L¶¿’ôö…üJx¸¿3Ñ.M«" Âe”™†é.]V¢¨|”š 9ÿÔŸ©0¶–ñÈè.ZQ ë8)ï˜>ŸI *(JU„ª…O3)7Yt#;àB‡7øÔºÀ…šÿòBоNw™¾P«Íõ°{@ ÜŸ«£r ¡$±ªX^‹ö‡,Úš¿WD´Ó<Ù¥y¦çå|Q¡Ù²&­•ÂÐY`†<óCºM4nÍ#åðDEhøþ˜%{`¾˜ÕŠ(ÇOÝ.,È!€ÆûD®%–Tê»;äºQ²×-`u¢—pïÚÀÈ£›¸Ú= \¯ãó ýÞf¨‡l'Aü“lâÍ‹úº–Y¿(9Ñþh¹“Åùa»O”7ÂWËšE?Øìb³bJwF†¶É:Ž7G2År}eàœj,àÆ¦äÞ:q.nÔrX/b³[³š½|w6ûUý%¸Ù·o.ÿxýq!3ôRÓZ¿¨nÚ$XœF×Û ³êSaD_é¡<͘õ.åTe'eU( aßé$«Ë }k­%¼ú`+b /8Ý¥9Õ>N9k¾¤ªÜª ¼< ëäðãHð¶Le>„åÎLˆ‹M©µÖão„Í5RX$Oúx 8ò@ûrŒö;½è`ÄŠi+r&ܺșØÜÚ~>Uö-ÙØL¶£Š­˜qç SŽö©yÆfá\*”á§q.¬ ƒ€9á\p ZüŒE.öW ê§O'n§™p«š­SزðÐÅÁ–‘È­l ")ælë Ç‚m«=v°ítß+Ù¶ïUN¤¼™tPÜÁp•TÛ=\%ÕNwè’jzÒ9pÀ ž­“íÒ6Ó˜çã ËEfaYÁÚEt³,"ñ9wÁ²2]‰Š_èfÙ«_Îí¯ç±ÀÉŽSÌJ²5ÅV À) f.Hv$r+É"®Þáï Y=$[í±d¸^A²½\OT\¯;ƒÛB²†«$Ùîá*HÖC${âб…c]à2[Ã%çÙ夓ڃ‘r¬Axà¦ôFòXñ:w²zF‘Ð œS—õüóнkiÿ¼›Nz§µfHmÜ7ºéáj¸ì|{¡WOKJL™AiœdúR—³$J÷²ÜL~P>RY/yqÈUž©2 R©Ð÷ßèÄ1–u8|tèZÚã`²f:ãù~—Ùª$}N¡µæÃ×ùƒÎkgÁò}vX}˜ŒXtø’lU½È¤h¤“’5KÞ/Q3ðO¿¤VkeÅPw’޲`þbÈbâü‘—~Ú]ïï,$!°iIÊRü‡Jò.Ý>Éo/Kæ{U&ùŽOüAÈ Y|š­2Ä•— u›Ù„£…ÊÉBÌ6Ók0º²tèÈ׺ZÒ@þðÎÑyâiûáŠnKŸð¦Ú°~•õXò*ª/öË€ú¦2AC<ÿOô}q½Ò¿Ôc:ÿéNý–¬¬HT«LFŒ)ÃÊ?Ò̺ »k]dØrCvˆ©•Im$£4Úînñóù ËêaÒÿØ¥›WAmÎP+¶¾ç±ˆªFì×Ç$ Ël ";’¯,üðóŇw'<4ò,F´zŠm8Ñu¢åþüÕv«ëxú©vYÞº_€÷TîÈ›ú Œ’r£?£Ô|>Ç(ùµ,Áb¹ôgGÇÊSåé!†çYü§{ç–É&ÖMòõî!ÖmTm‘jÝL߈ôóM¬Ë«‡í^ß7çæïoTS¶ßnõuT)—¥>·ºÓ%)Rd©ÛÝG&2_›5†£K¢Y²Ù5¬ë§ÓSJ‡{˜¾ñ:ù !²Ö·Íy$Û¹&ËÐÕ+rÓ[ÙdgJÆ•ó/t¥9Ò솅mSEµþž«Ä‰óϲÝ¿—µ_ÛÏ¢ú0¿­í‚¼Ux4x>  p芪®vëz<Òæ–·”µ|c-ý,ʲè)?*‰ëë$ÕK')B–M=G{(ìñÐñùãhþ|QvÜ%Ð|_5¡ÇÂoQ휜ªËVÝXßS„./é6ÎóN—95E°-}N=6°ÿPåG[ÜÖeµv¦¥, `õ¶Nŧ®J7…áyêv̼\*¿l®ÖbŸÃ^fâÔ`ð$è¨`Es?&©%e “}ÿj|úþ½-ÆrþQ¢æ¼ÇXxÈ’ø¨Â»Ñ>|¢L¸r‚*؃·gU‹}õp,†(˜X"‚õ†7võYñ’øûï?6YþD+ïcäqЬ6®Bëed€?êÍÌÒÀCÁ[ì "‚‰o=bÝp7öêÂÅ{Ô—çW«·—@”ÍæÙµÕ~Õ®ûØïòíåçQeÒ~ƒÑ[ 2(ŸøkaûGÁ= «ül__ F{LБЬ®BûW <ü©}AÂE ØH³Ð‰y…ð|Ÿ=[÷§V§,`{e}ÕÓ—ÿ J3„h3sb/+ËÌY—`sÆh›ÖäÔæ ‚³A?uúÏÇ„hÆ ­èû/Ð6ç°ŸÕõ¿“À ˜Ù,¿‹Ó8ƒ5²I› ãÅÅ[¹O‹¯õ®?0zéã—,ÐßÀˆÙ+ɶ;sBÑäpÕµ´L}Ûõf÷åé6®ç5aàÿÏÎò endstream endobj 5209 0 obj << /Type /Page /Contents 5210 0 R /Resources 5208 0 R /MediaBox [0 0 595.276 841.89] /Parent 5139 0 R /Annots [ 5203 0 R 5204 0 R 5205 0 R 5206 0 R ] >> endobj 5203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.954 365.002 229.068 375.906] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_df57a609a5c3f7288452cce86210260e) >> >> endobj 5204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.252 265.489 250.786 276.393] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 250.315 219.942 261.329] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_df57a609a5c3f7288452cce86210260e) >> >> endobj 5206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 211.231 225.82 222.245] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5211 0 obj << /D [5209 0 R /XYZ 90 757.935 null] >> endobj 5208 0 obj << /Font << /F29 635 0 R /F38 780 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5222 0 obj << /Length 3091 /Filter /FlateDecode >> stream xÚ½[[wÛ6~÷¯ÐéuN…â2o¹8n»NœÚN7IÛ³‡’h›»’è%¥8Ù_¿3(‘$S—Ý'’8øß`0¸ÑÞ}ö.Î^Ýžýô–'½„$šëÞí]/¡=£Qœõnǽ?"M˜ì¥4zUã²ïy踢ÑÛ|’¹·ëì.ƒ¼8Êf#LŠ)—S¦ÿ×í¯gç·gÿ>cP#í1[ƒ2ÄÕMÏþø‹öÆþk‘Ľ'[jÚ“\ÀsÒ»9û팶ÐÒZ&4‰¹ì.ÕÊA~z(*€ ™‰þh£¬ÏTôýkŸ«(,²Êe¥¥/“Žæ‹t2ùî¾U6voCŸò÷×7—¿¼úÑžùÜtRu<ákQŽ}ó‡tîÞË |ÍÇu¥‹où$OËïØ> Ü€1’(¯@>»+Êi:Ï‹™k\'ßòÊ=«|úˆíû¼(´Í_þ‘Ù–wM^Þû¶¿¾8ëýa ™åÔ—qÍësªy¹Í_l·llªˆÑ;ÙìÆè%ƒM!†€iôẗVz—ÚVæElš*“‚pÊz:1„%ƵÝù‡«×?obçš‹ý«]‰±!JòC‘7ÍV$‚–´‘Búô'Uô}áx“Åt6¨³Qþ'¥|²´±M½ã$Æ6:\ïšv!•9’vèùBš“Ðn@µ8Y£ý§·"n¶´"’# [*Ýaû Æaº £©ÛÒ0®fu—Ïï¶õîÚ4´ûœ×Ïo®ÿa›' õö¥CÉæd‡ùÞ:KóLÆGš”$IÄn¾kWDhYœð/­xoü®A†Iä‘\ N´< Õ€‹sß%®_¾9¿ù|âX™¨.-DqYŽ}ˆßÄtãw_ìzA„<’]•h¥vãïký<½àybÃW ôÚófïЪCô5kþ¿Ðw ðËQ¦‰þ QFµF™VÓoŽ3Èe÷¨³¿®›¶Š2ØnŒ5–ðä'ñE ˆÔÔ{õ›Ë[÷EÂΞ÷E‡b Xs ZkFøáÁFvlö`8+æâH† ÄÇ:> ÃF^[ø Ð{õjòÃb 1܄։á0vdØtcxoð†A†ÔÉ‘ «„¦NÃ00“P¶bøæúõQ}ø@l!†›Ð:1ƾGÞ|€aÁØ‘K â·D³Ó0¬((çg濟_^míÄðØB 7¡uaø÷0ö=Þ|€aa4?’a!a€2§aXÄ„Á¥føåû‹Ëà á«VÚÅðØB 7¡ub¸Ï„Š@ƒ͆$q7š÷Ö @3ÈôÈY¾b”ð$>Å"‘+W$_Ÿ¿ÝÁà¾Õšð0ä¡à¼‰üº4x„ÚKÖAMŽ !  TÈ“ÌeD ¶ÎûzߦÖVŸïÛûCÛ4CÕ ÚFS½LÜ| 1¥§š»ÓdµYI‘½82*ð4æ$V%5DϺ n®>^¿MæeL í²æ| ´ÀˆÑBÖ-&¸ú,´Ñ]‹`¯­¹þÖ¼bæ$–¼¯¦C0‰9Ò™ªù)FEÉB©X¶Úû>§ÑËw!cV0¬‹1/dÌMt]ŒÙj0æ„ıédÌÇc_süʘCJ€@¥—M{ Z„•kÑÛú8D\rÙg1B¨2»ùÛh·kÓ2öa6)p+ü £‚]f¿o›ÌDðcc~ c£§Y™‘"Ü:°þ²Ë3•t±ù±…Œ¾ ­‹ÑÙêÁ;ýÞà SJzpàç„ˆÄØó&G™‰ˆq‡ë4SCÇPÎsñ¦S«~¢¢ÛóÁË>“ ¦[‚F–åº?KËŸFhœ´±t± ·sÓH¸XÉv'°¿&zAÓGN „‚”fãkÓrýRçNät £[Ö`Û=}‰{CˆØ‘{~BS¢õi8Ô’péñݯoºöÌÃIl"èB# tÖÜþsçÝž¥r_ü&A„ÀF'ôÈcX!«Ólh ‘%üY% ïâüjðiƒVd°Yu^èt$6I÷F`du䆥ÀÙÃî%·î âP«ƒŸw0x`ÕA›UweðóQ î>À ÈÇ®w ¨„ËÓlH h¤¸^ô ~ÙÁàUlVÝ•Á/aÅj¥aƒ{£0ùt¿apûésagR¢>}žáÉr!…=„ /2ʧé}6xÈÒqVº¬ð¡q,‹g¾?‹h’ÝÍ]Vë9f³;ü9]Læ.¡yÈÿ@>ÚÒÜ®Ëݽu†ˆ«hEã¹})óû·„f…’HŠäohS×î¤:<n¢IZÍ]Ò}Y,„wÁ¢j1zp©i4-NÄê€o#~XãJ:+õå~ô"Ý!z„Q8édâó&󬜥óÌ}–Ùc™UÙlnåW5º"„ "CÆy“[ŽÁ€ƒƒ“j5s.çÍsË®éÈ¿e˜ºGË0aiîÓZƒ-o•ÄõP4Ìjóê€}ñöªTä¨xP-‚oð±”IãJƒýÌgÐòyj¯ƒ`Â4=¤³¼šÂ'b€¶Ï3ÿ/¶>>‡ùl)`ž'þW Ó×R–é÷Ê‹°—1 ñ1ÿ† ’MÜç$¯æÁ…Þt’;«&ýA,’è]&:EÅ{‚òöî¼n¹×9)®—~µUbЉf…Ëi1€ Kðþˆñ‹Vð·QöhÍÉIfùì>`P‚3"ã¥A]^½ÿpu¹mçµwÖìj % ¼\»] !vÃ8µtÛ—nš¼­f˜Ñjµ«fŒ‘M£ÿ‰D:…Öî6Í&è´0Z6ÏNv>¸»V{B4[­èuP·ã‰pñ\¥Ë úÓCŽžLhµæÇuËl*WÄ9nÈÊRøËõ>©ìIªs”ï¢ èŽ ”@cïñᥰ)‚šè±˜ƒËÓ‰Ëçwhv€š¿»TtXxQyc ß!¢~¿å%ÖÿñÓ/ï.Ö·\¬¼ÊÉsw˜, ;÷Ìʲ˜eÅ¢šl¹e¢ð£Ž÷Kø¿wTÕÒ³-¼k õÚàÈôqV;ƒ¥J^^n*hÇšx—‰*Ù^ îÇß‚óÚbp…Þ:bxGl7ç[%k½0åS=WÄ;DLó^ºû.yô”Û@2p\s—„·Ýð™Ï«lrçÞGéÂréŽFBáÛdãn“9yvŒaÃÌË/3_Çîà NXUcà…ôöÀëÒ~H !Ý`$´»Ö‚Ïaæ•À¤ [¾T —j›_Öº%…ØcÕAr@àE7oçY±…èÔqii-{6˜—9JùêúƃÀDn5lêà—’Öõ… cJûFýõDLË}Þ¨˜ýs15 çóWعHjljЊáÛvIû‡½:‰I!ëA·m´É°P0&[#åõíç¡!CbV'«òàÖ–ÓÚZ—!íN¥e:ÍÀlòÿÔ!‡~ó8ýVßpš-¦ÃF8³2Ô‚a&Æm2£üJûŸœ«V© é+Jwúh#nû{h¸Iƒn„x£j8E‚­]Læ<ŠF׎_/úÅDôrâ·ö\®§Ÿ¯O?”ílS/âÎÕÉdN•R ©I¯v†Á£l Â7ñŒ˜b›e3xdžÈŽm€1|c»˜5Û&SÜx%Ú3d¤.½1Cz3b†|ç”àÅĔ/=/¦ùPÔ&Ï|šû¬ãXLòq,¾"{32Ĉ7†ñþ.CØ€_ÀÖm×ÚÝdçæ‚ÿ4õv?¬K«·]–ùxœÍÚýcío'«ç ÓawëPÛîYë×¾uLw½õ]¯vhÁq¸»é*!ªÞ »ÈfYéƬô]ýòÖÎ=‡îC»£/${¡Œûâ”q¯&–­§GîÆ·{Ç¥‹v‹½)¾}¿Ïfëšþ&DZ endstream endobj 5221 0 obj << /Type /Page /Contents 5222 0 R /Resources 5220 0 R /MediaBox [0 0 595.276 841.89] /Parent 5139 0 R /Annots [ 5207 0 R 5212 0 R 5213 0 R 5214 0 R 5215 0 R 5216 0 R 5217 0 R 5218 0 R 5219 0 R ] >> endobj 5207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [293.296 707.957 326.829 718.861] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.722 656.351 479.397 668.684] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_5feeef18919b1cbb79729bbfa75976ec) >> >> endobj 5213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.722 609.74 494.35 619.668] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_1d506ef2ad493a963426e0732a6328ca) >> >> endobj 5214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.722 487.399 484.229 497.327] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_fc0a5a6b475a8e50b77d4be099790985) >> >> endobj 5215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.722 451.135 488.811 461.063] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_1b66d50d7f1927222a170bc88f9db51e) >> >> endobj 5216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.822 210.279 424.814 221.183] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.922 184.376 253.25 195.28] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) >> >> endobj 5218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [275.744 172.421 309.278 183.325] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 120.615 224.156 131.629] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) >> >> endobj 5223 0 obj << /D [5221 0 R /XYZ 90 757.935 null] >> endobj 5220 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5234 0 obj << /Length 3413 /Filter /FlateDecode >> stream xÚ½[[sÛ6~÷¯ÐäIš‰±¸$˜}pm'ëNš¸¶“6Ûv:”DÙÌR”–¤ê¸³?~ÏÁ…"eHÖmû` @ðœƒïÜÈÚ»ïÑÞ»“ïîNþö–ǽ˜Ä!{w“^L{QȈä¬w7îýÒ §ŒRÚUãrí>yœrIûo³<5­›t’˜ê§Å»åAŸI5øíîû“Ë»“ÿœ0x"í1ý‘HÈÞhzòËo´7†þï{”ˆXõõ¬i/à~óÞíÉ'´C-mQËDHz„†ÒüvÀdV"]@^|K¦ó<}=q?ÁŸ¨ÿo`ÄŒ>=bsVŽÍyf‡€òá0’€F@Œ~ÐùÍõÕÏfšP­iäp7ëkbWê€ˆÝ óüEn HæóüÉYÏlWž›ŽlšÜ§¦™”eòT™ñ¬°}ær˜Ié–H†fTÿ1«–Þ) 9 ÂŒÄÒÊ-Éë´,’Úîh™ÎË´J‹:©³Yaú^%¯LcQäiU™ö …øþKË2S;yøä‘ ‹%´ƒF8)Ĩ-cÏ*œ’ nNá•°áÌN!†o."4ß‚Ä2c·ót”ýJ)˜Ÿ íõƒ•‚&–í¤LÝÜYe›yVÕéØŽ[‚1]@%êƒQ„òÞjÄÍ»“Þ/zÂOç·ÿ¼¸ùýl eÿÓÏW?¼³Ó þí¤y¾¨ž«•S…0fD)¾I·DZ…~µ‰ÅE¢˜D\mZ„: ›5ž[Â)ë…JÁ#k`ðìçË[Ï–1áK\$Ï< 1ã{ÓÖ‡¥*îÒfwç„-Uþ§ó³—5¾ðP/' ¥±3õž-†5$¹Ã¯7aˆ‚¬%zÈF`ÚÃHöÇ)ªD‘Vx…ÀþÑ T 3fÆÙ4-*°IžÕOƒPöÁÎFŠ÷“blîhnÌò|6à Qqoîö«NnH µ¦¡úÒ®½š'e2MÁfe:ZõM¾eVK‹Åt˜–o6è‹„%ÿÃôEÄD1q}_Ç[¸Öu1]þ8˜x®ÄÞ¤µ±ÂCî¢KY£-]óÞÑ–#Z÷[ "­p»3ç¬n^c ðˆ2>Ð8¸5÷×ç>)ÃDå䓽$äß}Ö–ÄŠoŸ=óÁ§Í×6ðɾzc°¶_Y<á³3søÀðØÃÐÃ$ð-ƒ¦Hs«_~!  Ÿí¬ÏžœùàÓfìHðÙB>ñ³3wüÀãbz(€('‘äÇ ‰Ê èòý æý;Ÿ 5[¶ {’çCA›º­P𢺸ôù °U‚m‚™ó€ÖòÀ ]ÆæŽc€@Æ )é¼ô@ÐþÇA@1íŸùÀ€JÃ:B÷ca_*=Xèy,´9õ€BAÖÐb=&vgò9&p Çb" u¢³‘bd/CB1.ü H¬ìcGöìÇÎ\xvd?At’F€[Äâ® !ƒS™Ëǽ;È&ë’ü•Æfû Ë`)KÑ?³¦t%íwM•Öd}~y€¨à…’¨Cq'ÅKoø¶·E2"‚»ˆæÓ‡+¯3â„‚²láŒö%Íg€Ú”Ç}úàwF2Š·qF»3çÙXCŠ#ÈNAû‘ÈB¤ÐE$w_®/ýÑHŠ­°'i>´);î¾ìΜ°SfÄ’Çð{¤h´bíÆõHÙÿ<`BöÏÞû‘ ùVqé¾4úÐ&ñX±ˆæó 4ìÌ  õ(~¨?`! £à8hà2në¯?ÿÿßL7AhOÆ|jóuùdAP):!¬gµuò?Ý„¾eãA~r‹ä裊rvôÑòuû¾üÚ÷%ÂÖ_¿=9óÁ¯ÍØQà玄Ð"þ‹à·³l<ðƒ5ß;1w‹PÊ‚Ã0(EäqÜisÂBû"öüÀCþöƒ7¦ŠHÀ7Õî£ÜžÔù¾Éu¨;‡ Š,‹~O*6Ö.¯Ú™Áç0À%0!> 0ƒo~ß¼="óõĆ—7> H°h+ ìIšmÒŽ‚›‹½2«;sçA¬Aù߃Pç[cš FB·_üx1³j°'i^´I;n¿x RHÌåVØ™;`0ÇùtèdŸ¹O÷)¤ˆ@˜î"LµÐéCšŒÓÒ ù¿·ã\,ñiÝ,úy:©Íм4•,ÙØÓ Þœ,òÚtü_õ“|‘ÚÅp¿º«fùbZ˜Ñª)¸é|Ö·&}Å«BjŠsÊìþÁ¼ Ó‹`M_îðuYÀÂþdµS,— ¢¬NtMÓÑCRdÕÔŒÏô<À ¬,­L7Ö`a§+ªÂ¶-ªÒ«šŠ,}›®Èz 2ê³ÚL˜gßt Pn&a‰ÌñÔ3 ÓQ²Ð•D¡­è cË+täI]ã.bç(qÓj³ëØ©ßBW13×ižŸº*ޱKªj6Ê\AL¦õ€ÁÔÔ^·«;ô ¦FL!…oÃt¡n‡ÛãeÝf°Þýù0Ã'Š$µGsJ‚@¬x𭃔µ`¯½†¢•woï÷ye-ƒ´µÁ}áI§‚ÛŠ#Ó4+MÓhf™%EºI#S·†C¡ØÐÍÖÏ`ÏOç·ï¯¾³µ‚1„ÑL­`÷cQ¯TÂUõ¬t¥8YKY7Ö¼=Žªy9õ½ñ®êr1rÏpUw‹oYžÙêF| ˜š©tgª3.@ÿ´Õ±~BÜé–ûÍÓ¤²ÍY±‰h˜°†hiˆAÿ1Óu›Ð;´T”i½(: i̤&.ÁZ'l™ K=¶(ì4-JK•iLÞ¨¦H”öíß\ʸ¶lñM‡Ã,+†‹Äªõ¯!­ÞÒ†-¶`_Mðˉó,ptc_ã³ØZŸÅœ›)(5­$Ƕ”DB€ÀšçàÃlþs•àå—Ç: ­p‹V xbb/­/Ðä£/Ш­ua&Z¦„ÃQ%j³ÙÙ- %Br´@‡3×zo _ðš‘BËÃ\Ì“²ÎF‹<)Í4Wò«äÒ$C·5Éöþ±idö‘ÚÌÃõbnט™kãp JËfÈW×4 §¹Ï!›àtjÀÑQßÝñ„ÏZô2lð} žü•ß•¹Áà ¦¬ÃSD oãÉc™!6FÒÚWxPb/Œ–uÚ+tëÂU % À –"Sĺ›`K‘]«50bÆdEÛUë/ôžãïÐŽ¿2Åó•¯ìÝ…=¶³­`Û*BM–žm~ª‹5ë FgùŒê ÊŒ6Ùjnˆ$ å’¸˜©gÅÿôYñ?µõÊÑ(û⎘ú–¥!”ú’FpˆA¼uÞá]C·Vë$iǺa³ ÝSËP[¾m»>÷ ™^ˬýEÄÚ_ÓÆ› €C YÛÛS›òáÊîFÀm,5HŠ€TˆŸÐZ0Ȥ˜Š°¦â2û ¶LóäÛà4¤´ÿóc¿±;R°ë¿ÜãŒÒ¯¾1)ŽýÝÃò)¤ÐT ú@~T¸´TG“¬í¥Tà3rÔ?­„úÀŽ×ešÔ•·>Cö×lêåõÇózž0ØÕ‚‰]µZ —á;>Ú˜êU¿M eÍv^þˆ„}ºú  |µÆX=*:eÏ£Qµœ‘M 5Ãz+-҉Ŝ(­!¥ð£ú”ƒBšØUüÏ·?Ýœûâÿ@ALm"¯ƒNWF±º+:àlËÏš ‰Pdùõí_›èb2ÞDWGñÜ “s`^¢!ÒCï݉$]:_¥¾Ä?Ù.‚Ï—ïo.ßúpAN«LbßÝL[GÙ¹N•µOi\£*'s§ÙWWW¯]µÊ á5%Ù¼ú•J l%¤vbQ¡2°R±o<>¤™¶%ë}JjŸ’=¬Y]Ï(¼Ç>TL¸l¬24g§V¿ÄD©f›Çè…G‹²°c—e:šÝÙŸ©¹4Q 4ή®oOÁ£ú™¨»0ù¹Xw>â9µœƒÛŠ>35›Ë³] D¸»©^æ!ÔˆI¯¨ [õùç÷îòø–»‰=Æ¡Íý<;œaÃðêŠ¦Ü‹Š•ØÑIkݰþpÚĹýÄB¾ºLòå‘nüÙS!?êšyh<®‚D‚C¸Hçi1ÖÇV85/Ë8ÅC*:y„ ^$÷•é~H0=nè…á¡yí*­Í¤ÌvdΓªÐ|8)–õµoó@Æ2&Å3˜÷‹©¶²3Á £½aôŽìIEê²YÓXÞ§ËÔ¤é ú<¢> endobj 5224 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.248 694.009 433.24 704.913] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.722 565.093 481.549 577.427] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_017f1e817bdb2114ba765e7a9ef73bac) >> >> endobj 5226 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.252 374.861 250.786 385.765] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [263.863 360.914 297.397 371.818] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5228 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.462 282.209 513.996 293.113] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5229 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.47 171.125 452.427 182.139] /Subtype /Link /A << /S /GoTo /D (spc_8h_615d3ef3a505a8be7da1578d9338d218) >> >> endobj 5230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.534 155.185 184.385 166.199] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 111.35 147.444 121.128] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5235 0 obj << /D [5233 0 R /XYZ 90 757.935 null] >> endobj 5236 0 obj << /D [5233 0 R /XYZ 90 140.241 null] >> endobj 5232 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F46 2400 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5264 0 obj << /Length 3341 /Filter /FlateDecode >> stream xÚÅk“œ6òûþŠ)9¶ÊKoò-vâdSÎãì½K]9©Ú. LØÞüúë—40ˬËåòaŠV«‘Z­~3Áænl¾¼xvsñÉ‹°Ø~‘†éæævS›,U~ªÍM½y㥾Š/¯TÞ»Êìêá`Ïß]^…Ià½hZÍÐ+}«a.÷tW!*ÂØSIqùÓÍ×_Ü\üz¡`Ç`£h‡$ó³(ÙTû‹7?›ð_o?*òÍ;¢Úoâ0‚g»y}ñ÷‹@¸ \3®U˜ûQ’n²0òƒ4aÖ Ķ·ïmÞ\%Àü?ÌòØó3ÌøiÆaªFÃÛ~`@—•¶¿åçtò~Q T};í;cÝX6]ÓÝñ¸ìøÙìË;‘Y9 å½ñ—<›+•øEü¿ ‹°‡o÷üÜÊüzý=äMà@Ñ'„ pü'¬h€¶–wÙç"œÚqqèTG·çFƒe¡ðÏŸ> ÎØì1WðA‡á”ß¡ ¿kŒ¶Þš%À£º?IR®†;túàkB¹“Ì_ËT¾ë8ïXv,ÍÎù§S“Ä ž57¨ù^ö_‡]Ü[bnž põth›ª$mʼn5@ãÏ] ’ì{t´`iЯ x#’”U¥ãq†­snJå~œx7H§û©Q×>æò%ѪÀÎå8ç«õŠÀÓÔO³?æ`úl>¬±ÝáíYÞâÂòö%ÌcÇùj–EÍζ8 }ÛßMÚ¥þÚÏߺ–ã‘íêS1ëóFh…ÍoZ‚[ì«Ó؆YlìØ‚,èí›ŸŠ q ˆ2„Šm=Á0ù yó<ëñYÿ3ä°l9Ë)æÌ¸y²R(«ƒ(™zÏÁiê_'™vЖu½æñ:ÜÔÖÔRµz‹H¸³>ÑÉS$”Ø\>qr×Sûj­í¢K÷®i[{ñ£–¶zYþ¦á®ÕÝݸûó,V]ä ñžB9}}óš!ÎeRˆ,Ô%%0©Àé²”K¹”3 –ÆL{-IxR޳ëï14Oˆ`ÈI¾×ÕC×vœ“R…™B"ãkN;ܱçåÀÎær\M# ÁñK¾{ËOöЏœ‘’³G±Gk-ùë¿);£U:y[ãÒoé œ¤%©§ý;PÄ$mRër5JUæLHÚj to…ò°ëGG6¬%$žÆ¡éús% Æ|ÖQL3·FÚ$…Tª]aû²•ÄSWPO4f呂ܣ›Û{n.ÌW>¶ ŠpÙ‚(–õÑbéعM„Ñ-–fÍûágÌ%áÉ—êè·(÷²hµ<àô7G%ªÀ¢8Át]Ž%O@®Œ¥NÍxî2(9 Æf¯(ånb¾¼•=c)@—†§øŠu¾øéÚ½}ü—®%áiL5 ã8ÜY]]x¶QÎdŒL»7ºeU46Ü/ÊѵÙ8aï÷¸ÈYµŠÂyeB-%ÌÎl`¸K³ÉâÆ¢È9X2U(Yù Ælµ–-„E€ˆExš‘j`÷®6‡VF¶ºŸ{Ï4æÉ†÷â ß=èÊi/î,â]¹Ú&g‘h9É^H˜.ÎTâ܈¾CXÀÅ ®jø)­¤œ¹¼ÅT©]?s„2¡fØ2¶•9‘›IÑ÷UÃÅQh½ØÊ]Ãw,?ìò±¸ep’4~' ÀCïÔï€nZM!gJŒƒ®ãüº®# 'ÏûO \”ýArt7šÇ³j{a@#kL®â,_ è'åé7ñA"t~i)%(¨(ñƒ£nžßü‹‰¢|.¥lžÞvåŠ eߣ •Ý”RR:_íé™6JK²8½¯Îr¤H2Fó†® 7ÌJGi ÎÉ!jkI fu¬—BC*G¢Íb?SùièF%Ì€µr/­Ï³p¦»™-i‘`G†•E¨?|K¹¡f®±˜‰wÉæý`P¿}6I½nXÜÕ¿„=ú,õ>“ý&3•-º‰,—VË©õI2“qNS+WD-û†çwåá ;2v !žàydH¸=HÓÔ$ˆ­… *ÈaÍØP˜‡9kßĨ²I^Êfö¾ãÔ25rßéÖN£‡^†T‰÷›Úš¯tx W9_5h¨ÑãÙú ÖhÄ©7âY±Ûɾ¡æMÈ{"uÀ‚¯!Ú$X([œfÔÐ(˜OxTÒ¥»iÏ>9œEN³ç”M1^ÆŠLàäTã^ÛÅ…RWaÅ1ºž{zì¹'…DÑn†³¨@Ï®¿ ˆ@^~7èóÔõÒf Pò_§†;ã©(96úŠœšaØu¬Rù€‘î$8¿žÉ¥FÎÃ|ÿÏ5•ŒüÐ)\ó!Õþye0Ž\Y‚ýj&ûÉщ­÷K¯â ÷SuÒùþõËÊGèOç9ŽÓG¾Ÿk«ÍÊ‘ygoåÄQæ‘Zú©ßëÂã Ãú p„×?~C4:fô¤~ ×•ƒÔÍ_xûsV×/¥í*ךÇ\”"DîhMÌ ¼fú %* õ²ò¦¶Ät'ÜbÍQQð#Űd‘. p¯!G'ç,pbõxG‚3e[¬Ž_¿ce]whÃ…šyDÙ¦9Â}V –Êí£;b¹“ä‘w-{CÎn* 3±Ÿ8~(în~Ì1×6=‰ÇÌ8áNþ€*H:"ð¼ku)ùnâÝýžÛS’I'Σ(Åv©r)%#×™Áv¬e' Û8'ÚoÁÜÂ}¤®:tÜõÃz&ýq*âD­M54[{€F6ñ=øGÑŸñ¹ˆ“Ø¥C–èL-?—IZ'=‹½ÉìsþŒå?'žôÅÚù©(à@?gôô¯|iNÿûÈòÙÿ¦à Àîùÿ† h"¹þ—PZìyHrêo,ð³B-uKÊ|«Où\¨PÎŒ´ö/p?<ýòúñ¯iÁJ‹õóþýý+ŠÝIÿæ¢A endstream endobj 5263 0 obj << /Type /Page /Contents 5264 0 R /Resources 5262 0 R /MediaBox [0 0 595.276 841.89] /Parent 5237 0 R /Annots [ 5238 0 R 5239 0 R 5240 0 R 5241 0 R 5242 0 R 5243 0 R 5244 0 R 5245 0 R 5246 0 R 5247 0 R 5248 0 R 5249 0 R 5250 0 R 5251 0 R 5252 0 R 5253 0 R 5254 0 R 5255 0 R ] >> endobj 5238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.722 614.308 284.256 625.322] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 591.374 202.239 601.302] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) >> >> endobj 5240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.347 562.503 240.675 573.406] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) >> >> endobj 5241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [166.194 550.547 199.728 561.451] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.32 530.622 184.172 541.636] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 498.742 150.762 509.755] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.913 498.742 261.976 509.755] /Subtype /Link /A << /S /GoTo /D (wcs_8h_42b2578d76ace7ca6114d82b7ae46a89) >> >> endobj 5245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [279.347 498.742 317.305 509.755] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e790c9ce6c9b7a4845cf1c3c97b1e97a) >> >> endobj 5246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.002 498.742 440.959 509.755] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 5247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.238 486.786 277.772 497.69] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.843 323.399 264.377 334.413] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.097 287.534 246.285 298.438] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 5250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [291.302 203.842 324.836 214.855] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.329 120.772 185.863 131.676] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.515 120.772 355.731 131.676] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 5253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [483.78 120.772 513.996 131.676] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 5254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.202 108.817 417.196 119.721] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 5255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [137.701 96.862 162.657 107.766] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 5265 0 obj << /D [5263 0 R /XYZ 90 757.935 null] >> endobj 5266 0 obj << /D [5263 0 R /XYZ 90 547.559 null] >> endobj 5267 0 obj << /D [5263 0 R /XYZ 90 517.735 null] >> endobj 5268 0 obj << /D [5263 0 R /XYZ 90 471.843 null] >> endobj 2186 0 obj << /D [5263 0 R /XYZ 90 256.714 null] >> endobj 5269 0 obj << /D [5263 0 R /XYZ 90 242.144 null] >> endobj 5262 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5291 0 obj << /Length 2043 /Filter /FlateDecode >> stream xÚÝY[oÜ6~Ÿ_¡°„Z*IÝt$[.Ú4 ôÁ1͈ãvFšJTlÿû=‡‡ÒHò\\£E8¤Hêð\¾sÓ0ëÞbÖ‡Ù»›Ù÷—"µR/DdÝ,­”YqĽPpë&·níÈããrƘý°hVyíÀÜöVŽ+Bf_kI³Ïr)a/±e¹À¥„‰Àæsîn~šýx3ûcÆáFfq}C{±Z‹ÍìöŽY9¬ÿd1ÏOëAŸÚXða\[׳ßflÄ-›p+|E!q{¥×‰]48¦¶ZÉ’VÚ-ª2ãJÒ‘¶¾G[Ùz]-2eö7rSÕO´³¬j'`ö9<p®ÌiyQmA+¶9”Õuödî_ÖÕft_b¿»úx㤾ýöÝÏ?Ò!éðÐ~T²lŠªüÂBÖÀÜRW BßåÜKC#(’CÍ’Jë{£ÛÏfÖ­ø±­²ù¶Þ˜3¤>³Ó¨º]¨ÆsÜ$ö[G/¾¿¼º¹¾ú•êªUE)ÏÜöÆ„j¾Ö2Ë¿4àBä]³>¾õ…/¬²†èÏ%ZgÛºBΌÌiU TXaŽoÛz[5ÒPiäAÉ':º—ŠøB›b'\y‡Å‹BÑÞHu@$×û¡X¯=ËZUm2U,:O´¤²ÿ!&ÐèQ)x‡ ã¶y©Zš“ZPMÆ/§Gƒ¨9¤lX1›&žQh‚>•¦”J5YJŒ°‚¬ )Åö޶N©±bÌ7/ (šíL!TGs£:\ ‚oû ââq¼ p#à½(HI€Ïˆst†r‚Ö) ö ôZeª5p!¡ù7„J¶n嘢ØB DŒí…§~B½Ç.ÀàI×íb!›f,–Ž¢Hƒ' ‘-â”V÷íTD]nÙfþóÌçE^~¤ƒkçK;Šõ+¯ðÍW]ÀFjvˆà”ÃÇîN™É}nœK„EUíÛ3s>@FWD7ÿg»Cl}àâçFzr©´Èô$뺻pvÏî»mPÑÁ,”/±èÅÜgÖbiî+³9\~ÞQ—'©Á¯ôÖQœº^x"÷ „ÇÃd×êxðÏ´;4§»¥ÈwQ7ö¤z<êC|iÂ41CXNúP r"R(+:èOÒRÌ=ÎÄ.H3ÿ^š—&l€ i0ec¿\šÁ¤¯$²µ:@ÏO{ÌÝŠø®³D·ˆyÜ¦Ò z¶P§{RĵD<ÏE"J{Ì뇬4#æšb‚£ˆi,ʼ€pE:áà„ŠT|s îf’0<.†IYß¶­e#!íaHh:’S"£ë£ö÷E5×È;Jb}•0a„Öíóæ#<}´*µ1ƒFñ.àZ$m$™Þ)NÜyªŒE XÒïè6t_oÜY>c§K(¨=e¾¯ŸÁÛÕºl¡½Ahÿð ,ƒx|nCXÌe]`4þ†jБ©SÇY±¡0Dö z[l`ÙÔÚX¦>àÀbè¹tzž#ö‡s¨§üñ`·‚LTæ2µ‚†—ÈævZæ€ß.) Š&:oúÈÝ}ÀyÚ·Å£&nÊ£uÑ(sbŸÐ/«Á¡¤ ÿÒü ØÉhWž(í êOl7ó®–¨LZLJóç¢l7îwÉw Ÿ*g$–ëÇ^Ê“qõð±þTsñiX"uíuVí$~eÖǧ]!"_þáH×l@yŠÂáhsJÿÂóãt¤ÿT~—òŽhßãîôU™Ó÷<(þ œéžFÓEÃlu|ÆGxóuˆâÖ 3R«„4ЊP^Ü×ìݲ;Ú ®jxt[ƒóï¾"ñ^àw”œA >i¡–]X8{ëpÎí3SIµðÎ'e_/—;£:®ÿÖc„Ù}m´££z–”–m¶ky>¦¢ÔÆÍt ê¾è”æî³Ogû\µ¹<qüÄwŒ'“CãºHwgù[ ïž½=û4æFP%a¦ÁÑåoö”/îŽ9¥&ô+ÊðP4h»¸‘çÀr3AE·Wzæ@YU»Îû¦÷µzÀð£eþކ‰^ÞM<‚Z¿D åèÐåþ šÜéï)Q¢óÊ Né~ô‰Àê`|ú%L½04²}¥¬wQ:_ú¥›\¢¦åœ"8»øEÓ“`\tM´Ø9ùïﯾzGóÚ™>gèñ¿ÕãÓýÄ]AÒÿž¦ endstream endobj 5290 0 obj << /Type /Page /Contents 5291 0 R /Resources 5289 0 R /MediaBox [0 0 595.276 841.89] /Parent 5237 0 R /Annots [ 5256 0 R 5257 0 R 5258 0 R 5259 0 R 5260 0 R 5261 0 R 5270 0 R 5271 0 R 5272 0 R 5273 0 R 5274 0 R 5275 0 R 5276 0 R 5277 0 R 5278 0 R 5279 0 R 5280 0 R 5281 0 R 5282 0 R 5283 0 R 5284 0 R 5285 0 R ] >> endobj 5256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.534 707.957 135.75 718.861] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 5257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [264.375 707.957 339.96 718.861] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) >> >> endobj 5258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 696.002 137.91 706.906] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h) >> >> endobj 5259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.911 696.002 180.098 706.906] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 5260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.367 684.047 188.968 694.951] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 5261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.443 684.047 387.63 694.951] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 5270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.951 666.422 166.802 677.436] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.832 666.422 222.684 677.436] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5272 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.546 666.422 446.08 677.436] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [327.626 586.92 367.227 597.824] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 5274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 511.338 193.212 522.242] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 463.518 355.36 474.422] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 5276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 463.518 481.774 474.422] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 5277 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.462 403.736 513.996 414.75] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.199 391.781 207.05 402.685] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5279 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [324.717 391.781 361.568 402.685] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5280 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.665 379.826 422.729 390.73] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_16e35904c64fe6b0aab144bd022c722f) >> >> endobj 5281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.248 308.229 259.782 319.133] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.922 308.229 373.773 319.133] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [385.061 308.229 421.912 319.133] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5284 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.29 229.026 277.824 239.93] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 137.29 193.212 148.194] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5292 0 obj << /D [5290 0 R /XYZ 90 757.935 null] >> endobj 4972 0 obj << /D [5290 0 R /XYZ 90 454.551 null] >> endobj 5293 0 obj << /D [5290 0 R /XYZ 90 439.981 null] >> endobj 4973 0 obj << /D [5290 0 R /XYZ 90 128.323 null] >> endobj 5289 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R /F11 1076 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5308 0 obj << /Length 1680 /Filter /FlateDecode >> stream xÚÕXYoÛF~ׯ`¦“Ù]Þò´u MÓØE*~ ¥•E„"’Šíß™]^Ö'@Û<;$gggçøfF̺±˜õjòòròô\$Vâ&¡­Ë¥•0+ ¹n].¬™ºÜŸ:œ1fßÎëÕ¢šm»«©#fŸg¹$ê½\JøÛ²˜ã«˜ ßæ!Ÿ^]¾™ür9ù4áp"³¸:!ˆÜÈ ¬ùz2»bÖÞ¿±˜ë%±u«¸Ö–/œ¥„°‹¸g æú±g˜N§N'ÕMµw‡mª5íä~ogÄ]ÎÚóð·KáúA˸[ ¸hâû#5vßK€?ãİ6÷¹K^èI4¾Öª¬vIô„Ë kš7{ôó’À0ÍÐW3_ùUPXŽÇA/p¹Ã#7~{YôÉcý#9àñ¦$9žàv%›mUÔôz­ªôžÈrIk’$DÜÑ""Z³b‘Í¥Þ¿,+"š•Ô’òFVEÚèÇyYV‹¬{®ä¦’µ,š¬,Æ2®¯ÒZ4éu.ÍÕÕe°@èØÍÖé J =R½&úN‰b“ÝMy`Ëœó¬n‹õé)lö WÇ ¤Ô«nt¾5±fê{¬mšé/ÒZ ²°\ÐÓõý!¡B9±Yµ> ·Ý©ú‰ýg-ª–-îöHQKc¼9– Mº'5é|…zcf¶žJµ¯ðåBVÙTöge]͹¬Ê5QÚ-H®d ÌD´%n¹¿EB¢v:ŽòÁan’„lváö¤ß;Ü™VéZB€Õgƒí˜†ðØX׌]¡“ÁgûPäšõõëçèå‡-÷ÛíúÚ\³×~Üïµ&Æ"®*‘ X {lÁµ —#k¸Ö‘[q E‹BïJHs­¦Ô }EÍ÷Fæáû‰_Ú¤!™¤Á§CIcjÔ¡¤9h=ázQòxë™Z°7(§¢¶r\È\š"×úW‰xDœ £T†tõ†š Œm‹ÅˆA²CÂLU§+L'*áçéPbƒ‡Ä‡Oáú”Ü¢H·GÀ†üÃQ˜ây ~½¨­Ê¯‹…‚(_¾§°]­ ލ^¥ÂǾ'ð¹_©ð •ü¢Ü©$ éÀa*åfó2¿š±+úªwÀ¿©Àî•JðSªm <÷†8Ü â Èc‰Fn0óÉ‹)çÜ>9¥÷˜”¸v;Dø`Ë߆ûv%+I$ð‘ÕÄEÅ^p§’9„^‡ñíŽíº º ¸ó6>0¦Å¢“Û¯,!Ýèùs ¦cOgü¶n H©af\ƒÔˆ*¥ð…l†Àäp½CçUQjíD·U Ã:›ZD`8Á±_Ù ’€n¦ÜV™ ta0žS‡D¼½Ü弟»°SÃ|¿1Âæ«ØôK‚n¬¯(Dé4ûPw’çèc7 ôt½ÉåéÐ y]a¦* µ±­'ïNFÀ£Â}àã|¤¹×Ê-ö”`/¶ >EŒSCk cö­¾×qî]ÍàtçäÅÉŒôð#W‡?ÛÑÕ:0ªTJØïxÅÛ¬67ïŠéb7ª‡x›µò•åªgËr››r%¿ÚX“՟вÃ6϶J<„á&„þ¥‡ºYzÕƒ¢uJcÈìwHBW.ˆßí *ýA!Í·rT• *ýàQEéb;‡ bT!T€—aJÎÛmž­'7ýÖf“ÖD '<û0Áñ`jwLÍŸ—4Ô˳ó°/“‰®Ü3ØBDâ{œ¯»©Ux‰ñäÁÔÚYjÇìºq¼cvõy“†ÄÉI*ª<´×r]b‡ƒ/Óbä_zÙoŸwùø›GÁo²Ë0”F<Œ¥ï¹*òÿ®,¶|㿦ÃXÅÞþ3mþ‘¡!‚¾ˆþ‘7´^ÉBV„Þ}oÿfˆs4µ¼¦‡P÷£ìÌçgADO‚q¡Ó yMû×O¿¾~I´e¯ýA­?—w÷7£nnú­«í( endstream endobj 5307 0 obj << /Type /Page /Contents 5308 0 R /Resources 5306 0 R /MediaBox [0 0 595.276 841.89] /Parent 5237 0 R /Annots [ 5286 0 R 5287 0 R 5288 0 R 5294 0 R 5295 0 R 5296 0 R 5297 0 R 5298 0 R 5299 0 R 5300 0 R 5301 0 R 5302 0 R 5303 0 R ] >> endobj 5286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.031 690.333 301.565 701.237] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.204 690.333 420.055 701.237] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.123 690.333 482.975 701.237] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6174a483baad91dae3fa1c30b0e4cde5) >> >> endobj 5294 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.248 618.736 259.782 629.64] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5295 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.922 618.736 373.773 629.64] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.29 467.802 277.824 478.706] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5297 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 376.066 193.212 386.97] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5298 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.1 316.284 304.951 327.298] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5299 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [319.563 316.284 356.414 327.298] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.737 316.284 461.271 327.298] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.324 304.329 165.925 315.233] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 5302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.017 244.687 262.551 255.591] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5303 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 169.105 193.212 180.009] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5309 0 obj << /D [5307 0 R /XYZ 90 757.935 null] >> endobj 5310 0 obj << /D [5307 0 R /XYZ 90 733.028 null] >> endobj 4974 0 obj << /D [5307 0 R /XYZ 90 367.099 null] >> endobj 5311 0 obj << /D [5307 0 R /XYZ 90 352.529 null] >> endobj 2036 0 obj << /D [5307 0 R /XYZ 90 160.139 null] >> endobj 5306 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F14 1078 0 R /F20 595 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5318 0 obj << /Length 2752 /Filter /FlateDecode >> stream xÚ¥ksÛ6ò»…®s3GÍD(@ð™oy¹ã6MÜØ7ÍŒ›é@$$ñB‘ IÕvýíbAR¤(Ù¹û"‹åbw±oòÙzÆg?]¼¾½øñÒg1‹7˜Ý®f1Ÿ…`¾+f·éìÎ ˜ðæ Á9wî“z“VsX;l3_¸>w.³\Óê“^iØ‹]$Џë9"pç_n¾xw{ñíBÀ‰|&Ì ~ÈBéÏ’íÅÝ>KþóŒ3G³{ƒµy®„ÿ|vsñÛ?Ë­+üž[æ±Ðrœ qgX/iý÷9nc?^zÁ5ÁCKÎ2Ä*«Bê Æ¥h±^Ì>U7Õ>éOÛU[zSxo†‚ .Û7ÿà\Np2/t[ 5Á{ÞˆƒN¦Á‘À¬Eßsdñu.¹£+L- ã±ðÉFUSgÇL¤=q¼p™çwˆ­R]Mé=b®ëõô|H³…ô%“ž;[ˆ€Ð*oœ¨ð¡¾/¨pCi!yì4•*ê\5º†gÁe¬—̶Z[ûýôÓÅìΠ÷÷Ü™¨Ýi­‰À½”D^àòêö†VTßwØ|áE‘sµ²Œl4á&e^ì·Üêí°Íº\Ñ>!ŽO¬ V”Åâo]•VM$øBûÖ_àõß ˆ·ÀYf…ªiݨe®i™mÕÚ.UU)‹`Ù7ëû,Ï- ‹¸«ÊtŸè”¡DÎG8«ºÏj 6#¥t²•=ecñATõp÷…:Ya]Ž1­¬(ʃ’»±pj®»½ ˜ÄE¸"À.{˜ ßÑ9Aó¬nh£ ¡$BQ4óZ/š'ý¡h¼'^ÚP™ø`5ˆôÊꤑ‹‡FuVÁ‚SPx!~`µ´Á·ç§}õÀŒM¾U,ê9hÂZ <ÞÏÑÒkz(«l &çôœ”i[§ðœUUniKÑŸåÌã d,ÍÖ —ŒzùxÆ€úO¶é\pèGDÎëÙ.÷Ínßå!ÿdyÈQ¾-ëI»HtÕ¨¬@©P_)Ÿë;«V£YAÿŠþÀã–íþWºÞ餩_Ùód4[¸ âØÆ×õÇA£ä-Jâ{½$¸n%1pà ®@íÀ/ÜSQà÷77 ÌGæðoͣ͘¹À²JkP»±ï\„³SU“%û\µ×@~ÎìÁi©-í¢lO%û‹˜ÄC%Ö°E4àæÛ>«TÏ;´Sï[,¨ÉTÅFuñøæê×ë÷ï¦ÂvÄDöyç˜äĞ·¹ËWŸ¯n¦HqHaÞS¤º|øúêöúêóI÷ s™J\ÂgaرöîÃÛ bâ‚ íg!]¨Ž‘ì,:ogoõr7™Š„ð„fœò˜³ˆ3/n}ó ÿG´•Ûy ê£À¼‡2÷Z.&ñYFƒ$m˜À ‡ÿëF©ª {ž³¯)·ÈΕaµ´.#[d“J~H‚$l6&íÁSûoÌß„2“ÿ”誇&ê.RÝ–‰¥÷!ýtô²UÔ3îÉøE8ml5ö¿Ûå™Nw|¿ÖÛžE~Û«¢ÉšL×§²¸1Þá_&³UM뢭M@ÅžÈKd_·XP­èŠDTkÕKU“×ÓãÍU{t³ÑTi ¼µzlƒgj"úҺIΟgÒ—y©š¬X/veWÓ)b«‡zXgäI ÅPjœ:Huy9oó*ÁõWõ.×[ Œüy.)þQWÇžJæc]¿™ð=(ge4®÷ç…Aˆüšð^è,dÐE„­j*¨ ÛÖÎ`eôëIç¾ÊšÆh€™•ÜÒŠKÙ¶Û’FpLä`x¦Â¢UY Ò«ÄÃò*„<º¯_XŸæ’y£p52ÉNŸ*ãÖô;ÔàûWs( nOwxÏ?Cõ^hc-òV¶û;mJÑ3ŠJ׻ʞä KÊmk΀fÍYZsH53ÆyÈ®*o6å~½™j¾¹Ë¾oþîöO?4ÁߘÜm€%AЫ,G[­ ö«½å´•`¬&«î>Ïç~Áh3ô±¶dë:«£’lT±nûªÅ Ø·÷2AÖtßÂITA SËp1¬e ¼¹×Ú"ÙF¾ë qI­6¥a ! kΛs 71í,>b;k™Y•ÕÖ.—–”¼ƒæóêTÏÔÐvaëÛFͺQ›iÖëaηiîlý41=1-ƒé8‡·=2ÇøSŒõ°ÇÂÀŽ*¯M±U©­†fÔ¨õd*!„c›1î»­ÍzüÔêx6xÈà ž]wð¶+€†JÚéj›Õõa¡¢ëq¹ nY¡ð#ÿ¼•ó—4ú¤“r]d·çu­/ ŸÎ·l©ÆÂ¶hKÂåã(£îöK0­M»YǶz¶(?®– t Ãóœ/„eýUºÍl1¦ÚÔ›hÀmY6˜–L˜Ý®°d`"p‡Ú¼Ì ½XWÐûß„„­pUšf„h#|TÖ³´aäáuxž¹NèâkÚ6  «¼.í %`Ó” áäÛåüà„bÀ4íºžrÛ¥ÎK4§{ cÿzÎXDCUüóIÓ·#éS†ù4v» x]š†b¾1…zü?3VÅíéÀ€;íSÄQ;¬Ààeö’ $&sF[c5Ô l×E†s7éüŽ’Éˆ¸½´¯UlÁ{ÒÎf¼@L×™…NÀe1.ÿOúþÇ“úÍãOé*Áƒ!ljVïú‡Óă0'ôA Ò;*ú¶pä^?¬£¶™ê¼° ÛøNôNÊ?¶9OÆæpF‹ÉŸíø—¨Ü2_/ dSæ©1(ó&Šj ‡Sú(›¦¬L’Æ·We5ÂQ„åyi'2øHƒÑqJs!Hz#+ûþÏ`Õ&XÀÿýZÓÕ„(€¹QÄíî#}ç€%¾.]Z?~Ĩ•MâÆ±¡ô'R‹í'膼¦ÿDÉÍ1«aS~IJ­¦¿KìëÖ<ûŽÝÅ‘ü”YÚ•eesS®Õ׺÷éæ2ãÇÀ?æÁµ„°jÁÿNj ÏK4ĤÖ60·zü±K„¦Cqü¥mpmÃ!¥µM|9㌇þ´pÆßáû<_4˜0¦XÐ0Kâ˜ÜdÀÄ^™§4bfkUC¹eáòØTFÃÆ¥é¿¤NiB2οKäahNwüË‹Q¤©µÂ^ùS's¹S_;Žv'ŽŽº³u“œ¯>E²(ŒMý)#kjŸ0b¢6‹Q7·E§´sïF5ûAä¥õ_˜ÊU¾×½Üª®Ë$SÝ\¯ŸÂA°øSWPè¯ï¾ DC.ÆáƒÈd£g~ƒo¿½,¡¢oï>ôξýÌôÔ:UÏU;üµ]\šFiIý þÒ/ýž\(˜ie&Cm«…Üû«×´ö˜àâômùð¸ÖÅXÒÿ¤ O„ endstream endobj 5317 0 obj << /Type /Page /Contents 5318 0 R /Resources 5316 0 R /MediaBox [0 0 595.276 841.89] /Parent 5237 0 R /Annots [ 5304 0 R 5305 0 R 5312 0 R 5313 0 R 5314 0 R ] >> endobj 5304 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.488 702.288 212.022 713.301] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5305 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.938 648.798 386.79 659.702] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.381 559.536 239.02 570.439] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 5313 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.008 336.78 275.542 347.684] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.997 221.488 219.531 232.392] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5319 0 obj << /D [5317 0 R /XYZ 90 757.935 null] >> endobj 5320 0 obj << /D [5317 0 R /XYZ 90 733.028 null] >> endobj 5316 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F14 1078 0 R /F20 595 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5332 0 obj << /Length 2232 /Filter /FlateDecode >> stream xÚÍZKsã6¾ûWð¶TU„ ’>lUfÏ:•‡7£r3)DÁŠTøÛûë·ñ¢Hš²yf⃋ ö»¿î¦…½µ‡½w'o'ßžÓÄKPÂ)÷7^‚½ˆÄ(ñ+ïƒÏ gs‚1öoÓz³ªf°öÑf6§ ûçY.ÍêWy#áYìË"U[1¦¡Ox0û}ñÃÉ÷‹“¿NpÄÑX„¢€yéöäÃïØ[ÁþFA{·úÔÖ i×Ü{òßl¥Å©qOjB f^D„93¢¤”iöî=ïÜðøt6öß·i*ë Ï`oNJÂÇiKãç6Ïís¥[µ¶JþªO*ÀÕvÕvLC=Ù•YÑ€Ñ̨k¹:JjeùInËêÞy^¦¢ÉÊÂÜ߀Û|Þ:ŽE`Yü˜RX‰›JõMYm{l`]ewfÕæZgźÍá-ÆüÌÉãÜCËý¢HË¢ÎêF¡]ZYÚ¢’i¹.²ÿÉ•ÙI˲Ze…hl|Š;'Os¿“Ç9urÌBìšQvÎVΕØÊΟöi+âÄã4VmÊ4Çi9þy>›¯2EYϘ(dÞç3Â:V²i«¢Vg¿='¤—Ú!GAÀA8ýҿ͉aòcDCw€|cým.+Ùè¨7w²ªÃ-d¾XËQ¨JWYñœ¤>=‚S™ÝX~…Xóouù$U xmÞúˆ†?2¢oRhÚó(D4N¼9‹#c‰ŸËFÖ§ÚúÊéâÔ£òrÂ’?#Δó€_cÕüT›ûf# …°Os„iì(T³ òe.î&xRAÇKèÚ±n·:µ}aùsù¤¢E¦ò_@!óoÌþGŒ±6ëeÖ Wšë®*Õ{Ÿ²•ìŽÓBÎוÈt<«=ð¦*sscÎkf–ÓíF46†)F +A ³¶,Êb^7¢X‰J‘áÿÛÛ÷fñ§Â\©HÝߪ%dMmžhñàz[e Ä<Œ¨¿ØH³©5šmn­R°•=Q·Ë?ÀCZéFk{ÂW_oZÈ*»"Ú·7e›ÛõÒQ”–Úò¾ ˜ž’­Âp›ì›3 `]U@»”iUÚLR±£â]ß,e^*»5Ѥë‘{iO¯­ve=†KÂQÄÃÀ~Z“ ¥` \ñŸ³_®ÁGrœFàÎÊâ_*òlÞ·µ+…ö›Mcµ¾ƒªS¾M*D5eG 'ºb,Ûo*:ºrîprX憢Y ‘µ™²·­]µT¡ba®é*Eºq>3©¤]–5ôäGêY‹ù7*æbEXMt*˜ZV²röp*.ísÍÕztµ7ápf5Ù ½Ä•g¿¼y_Lé0«ãCè&À‘Eb*æD},#Dö°ZLÀ)ÔÕ=œÛÜ⬔·[À©L3…€©ÚÀ$"/×­=ˆ:!^ÀßK7M¾›%Ì_|?ï$ÊA¡'î“æÀÊ$pQФ6–Ð@TlÀ>¦Œpˆ9*‚ ù’Øb,vÐ\*hÎÍm½ äã<‚ÖÒÀ.l^ªb§án/..Ì"S(¿jS•‡zRã'õünFBæ_Íì¿›R8D˜E]+¦¨“lL}Luìp<êpX…]׳œA¡j£(`¸µš¹öKZ­7ÍT@ƒÀȨ¸1â˜öûŠ_.MA.[•Ô<´AxoKœÐµRاܴWÕsÝiæù½9°’¦¤¯lXÝ›«å•ÍÖfˆ’’áöEéHü ÚØlÏÂ<Ó ¢ƒV¡ä”±Œ¯ŸÍT$îòE7¢” àz{5BhÔ0û;iIPv/Ün2 úÀAìvy&GlõÿM™Û¥ÎGeELÀŠNÐÖ6Ѱt[Hî]Ús®¨~ â„GÖ|ŸAƒ¦ü0^Ïcòä… ½¸|[\ÿ)•&…*JŠª¨Û 7^¸èë¿þ[PÊœ‚–$îÄäSƒ×âr*ˆ(â Q2Bÿƒ®'H„(‰»„4ÚŽ§¨…û9€cÅ{>‹·Œ`΋Wr¨R’•<-+ÕBºÕÕÁFHN¢‘:Ф ±Ž†EßÑ õUõPÛPÀê e’PC€³Èå¤ILx~q÷Åû2¤«,H­_½0í”Øît:ƒ^&Íà 54ŒÐ$jHMˆÍ~õRU‰F˜óÆÈý§ÅvÊZÎÐ!†XåClÌ5÷uÖdÛ}çÚ5þ]ÏmCYd >3‹¦ü@Çñ+L£³)a ÂûñøÕäQ€µq‚Çz3¶vmâútÞ99™š…̓U©‹œ-ÊÆl™XM¥#'uÏ¢ÏÀ[‰Ô|V‚¶1v•N¹JK·5¨DÜ ‰7pìüÔͽ¼Wއ%È©èÇí0¢Õ7m!·e‘¥öH, ˜•¼3yÕ}:T N=Uê►˫âzûÅ+]ðDŽŽ¢T­‚·žJÊ«‰8‡+ >_¦lŸÎ”.­‡8?Hë'U™jbAòUUé’27r¹qùOÏ ¦ú»ìèkò4OyB£€É‹Ñø(·=†ÆSn!0ŸÆá?ã—Çš˜Í)?ÔÔP;SröuSÛû¦f˜’ñàÉœìÔ½¼šîég¬µ‡,FöCûAïrì´«£´—»·SºAOØI+ì7hµyd:4Ž;´Á[®CƒM1°i¿Ì«b¡(¤Ãf¬ÃyÛ¶™¨újÚ‹ÐÿøH{}ð9 4y4úòiÓkQ.@†‘çáÿ¤ß>w;þ²À÷1é˜ш~Õjõœ @#î•vãÜ|ªŸÿ¸†œ½²†|ü‹k<ó-îg7bbÄüì†%ˆ1›Iï@6@v§û¯úOnq®>YÊ¥¹áæBðiHNYdî(&ÔýôƒîÿÏèÿãų†‚„­õì?ºÎÊ»ûµ,ÆšþÆäX endstream endobj 5331 0 obj << /Type /Page /Contents 5332 0 R /Resources 5330 0 R /MediaBox [0 0 595.276 841.89] /Parent 5237 0 R /Annots [ 5315 0 R 5321 0 R 5322 0 R 5323 0 R 5324 0 R 5325 0 R 5326 0 R 5327 0 R 5328 0 R ] >> endobj 5315 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 703.972 193.212 714.876] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5321 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 592.39 355.36 603.294] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 5322 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 592.39 481.774 603.294] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 5323 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 495.682 183.419 506.586] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_54634ed49425e8842874e9e2b77899df) >> >> endobj 5324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 475.756 174.014 486.66] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_5592649ee4c25e118559c6d283c51930) >> >> endobj 5325 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 456.807 180.092 466.735] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_446914676e0b3f55ac6a080015a52b43) >> >> endobj 5326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 435.906 195.604 446.919] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6779d48001260a0011b3dcffdcb64cb6) >> >> endobj 5327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 368.16 201.691 379.064] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_96b787f84207faa42599e50e6e078d21) >> >> endobj 5328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 236.653 198.921 247.557] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_222a5bd7659f3e1ea1a9ed21f54c50ef) >> >> endobj 5333 0 obj << /D [5331 0 R /XYZ 90 757.935 null] >> endobj 5330 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F40 846 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5340 0 obj << /Length 2185 /Filter /FlateDecode >> stream xÚÅZYsÛ¶~÷¯à¤/ÔL„bå’·ÆvRw××VÒÛI2Š‚%¦©r‰ãJ¢ m¶Óû"‚ÀÁÙpðPØ›zØ{{òztòó{1Šx£[/Æ^$(ñFï“ "C‚1öïÒ:ÏÆŽ}4 ©Àþ›,—¦u-oe5 ‘/‹TuEG> øàËè·“óÑÉ?'bh"D!^:?ùô{èÿÍÈőw§©æ§ ž¹wsòŸl•Å=¥ñšÒˆ³È )C8FóÏ” -~5_ɯ¦V‘ë·'Þ§¡Ãþ8½ùõì÷¿N¯¯þ[$½)ÀæÕ`Ș: Â/+cí,«›²ÊÒ$7ï•Lê²¨Í p3+5%YH;éÂ<&ò3Æ´“ž U qʽ!%(&áÒž`c˜¼¶rªšø«¢Ü`*PF2ÖÐô˜ÐAЖ ÞÆå¥ƒGqD:‚l¯gï1õG.]ŠøßÔåÃå…K¸à?^p©ÇèÏ+÷Ú²×áJoI1qñ"(Ñáž¹á|·%bÂ!,9Ýv{hœM2ÎeÝSsÛ†RÎPˆ…7$ '[¶„ÝУ-ÑÍ9¢!?ƒÝ¢Vr¹ËF;¢—1ÄñÑQó@YÉrG'£ÇñsÊqGØì9ýèëÃ[/úF;¢‹qÄ(9>ºÙw…¾Òt€]«ÉH"Bqö±UÏcQè·µ4»¬™•mc^’Â>óFVEÒXšoÂ}9 ~Ug¥&‰üz!ÓL!<À>…Ãÿ×r@…'Õï7­X¥ò(8‰ÃèX¦ÉRpyk53Û!³é¬¦³¤JÒFZ=ÿ@N’ŠÓýj–•ö3øaHÀ.»RÈJM•ÀV³ë‘æ ô]^jJ»TiZÎçåD›§:Ò2oç–¾hçcYÙ½:…|×,§ÏKÇ%À$¯Ë#R¡6GŸ Ù¾T®¥B®A Wñž8BϪ¶÷éá¸vî†jÌÈ¿«È‡K·""Œ÷+Õýú©Søââè+Öß÷GÕQû“õå€bÿw‚dÑ3T0Gå¯ÏžPÁˆr†¾qåKÀø#k"”6Ýz_é°u)¡|ˆ£ðø"pW²u¯ÕñYýˆ§s-háñ¼é–0™Ñþ¶{}ß©šäåÔ¾XÔÔ'ªšÆå` þ/7󲘚–M9šÉ¬´;ôdõ#á½+Ž0 #qðULâ‚„q,Ž„óýqv€"» !@ô”ºùó|oî»iI–Qð8\à@³£pÁµ FÐ.\è-ØhË‚0†(^‘ðÁÑqc ^–ú~ s[Ç1,–Õ&tºË35²¨ \@Ýcf%í÷,Ï]6ÂxV(¤HsWãeõc r2©2ÍÊÐwPZ9·¬*;TH9QE•.Í ÔK‹¶‘®"ͪØRZ‚º™ªýjdªÑ®*n®(š,És ’m±£p+ÊæAgI›<;Ú&›ËQÝÁãÒYÙE˜øàw €é¬QÍ@yÚÐ:Ø*Ò»´73u”RǧÍ=©( .Їuêï*3‹±ëP¾ v¥ª |bE{Š58BÆ+”+êF&cš±g3Ý «}­ \§\Æ«v—ÞC, €î]|®m9&˜Ùrq„ù3õÕr«×ùn¯+ŠF]Ö®Ã=;{' °jÏEÔb˜<ݯ=Iµñ˜ü§ÍÌm5ü$¹Ô7È,ŒüR­ 9PÚ óäÞ4 ‘½k€œÀ1í#Â)œÌ€90\‚OkþpàáUø‚ŠQDº´ ¨ÿº¯áÕ‡Ÿ¤ÊTª5¼ÎÊ´iAX †À‡‰õéˆXúnÞÂâ,©Œ„¯ÚˆPD—+g<æÐ\.Ó.îlRý%+¨§Ÿ*¹û_K>Œ!ïÅ1¬LˆjÍ;¯*±¸ðç²V« œÄÍõ„îMštf»t }5˜ÛÖ¦mc¥•†¦’M[Ú÷0x[•sÓ’IÇå¶-Rå,• pä¨íL0£³á‹Ýi¶’× p^ïhiûŽÚ[¥Ã= Ή‚¬op`'FÕžê;xÊ…OøÓÄíkÇdžëOY‘æ­Jî0~‘ÊÍ^,W )œ„·Y£¢b“˜;‰ó¬8Œ+œ\㸨¾FX/ÒÃD׋١¿[Â%~oþ%ˆtåuà_QºÿËPîÁR™ÿˈ¢Å*ðV²‚òÆNi?½ïoÔ‘có˜Á¯8y%BóF1¡¶~T´] àþîâµiC¤a[ëßwÐóý~*‹MKÿ,^¶Õ endstream endobj 5339 0 obj << /Type /Page /Contents 5340 0 R /Resources 5338 0 R /MediaBox [0 0 595.276 841.89] /Parent 5343 0 R /Annots [ 5329 0 R 5334 0 R 5335 0 R 5336 0 R 5337 0 R ] >> endobj 5329 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 719.912 199.479 730.816] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_ace96fb8c1499616dd1333af3e8340b0) >> >> endobj 5334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 532.615 202.996 543.519] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_95325b53ebd8d7d0a371a65b27b3d04a) >> >> endobj 5335 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 381.183 202.239 392.196] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_9a70ad2a355a9736711d8017535bf72b) >> >> endobj 5336 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [260.67 381.183 297.522 392.196] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5337 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.776 369.227 226.627 380.241] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5341 0 obj << /D [5339 0 R /XYZ 90 757.935 null] >> endobj 498 0 obj << /D [5339 0 R /XYZ 90 343.698 null] >> endobj 4975 0 obj << /D [5339 0 R /XYZ 90 321.386 null] >> endobj 5342 0 obj << /D [5339 0 R /XYZ 90 321.386 null] >> endobj 1084 0 obj << /D [5339 0 R /XYZ 158.712 274.302 null] >> endobj 502 0 obj << /D [5339 0 R /XYZ 90 257.948 null] >> endobj 5338 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F38 780 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5353 0 obj << /Length 935 /Filter /FlateDecode >> stream xÚÕWMoÛ8½ûWí…:˜á·Ä½t.¶Aë¸ÝCÚƒ"ѶEN%*mþý’"騂¨Ù,{1)r8||óÈ£h¡èýìÝzvvAd$¡DDëM$Q” 9ÁѺˆ®€XÄsŒ?óö6Ó;¸‹ç„#pQVÊõVj£š§@Õ¹JO<þ¾þ0;_Ï~̰٠E¸÷ΘPå·³ëï(*Ìø‡A*Óègou1BM[EW³Ï3tŒ”¦¤„B$¸Cúº¬óª+ aÀ¾Ò٠ܽ²Ìú9N  lÔÐk²¡jš¡-ÊvSþšìwW4“m] &‚¸kÊZo&ûÖM¹ì»«K=ºN—•7HÎ,¥bÉŠã{Í-”ΌΠ'´…jó¦¼Óå¾ö~Щ eÒùYïÊÖ.£`§²Â´ïCˆ8Ý2æïš}Œ9¸/ ·‘éU=¸þfï—æfW†À½µUuiÅc/­r&¥v­Þû v0«*×Ùo¼ÕÎÏ´ê.k2íaýõÇÕŸËwÇÐ[x  c(9'þ¼ÌÅÈsoêh(Ž)\(KW­Úþ&‡«8  ÈÌÅœE¸‹ßá'k¢ë97À^Þ£Ÿ´oB³õê7³0?-‡‹í(5gÅ\Á)Oe")¡)3 =µ¶R$†%ò"Xd5æÓò §¢“¹G†ŠRÃ`–!ËŒ‰Ò3( ÔZ-m›˜&@©Ö…ÇÉÆJ,+ʬöAz6x´Vÿýø&˵‘'ÆÀQ$OÄl ™TâáiEc<õ$ ú<­Žiücäý8ºú¼Šk2Êdæ.cÊ¡ E’#–¦ÿ¦²h–—_Ç¡³' /CË—ËÅùÅòò|T@2Mg”4JÊçÊèkÿ¬êüCص!§M•uQæþ F óâéêpoþ£Ëj]ꇘóÿ\NÇàN½˜4ÇÑ}Lxdóú“a7ôöm|„Þú™4Ìò&fìŸbY«VûkéÒê?¢z½æTBd23™‚³Ç¬øÕ„O…¥>¼+.‹#`3­2?F=Õá%jµÁÞY¸yp­ËðpR-$ 9 ÷¢pè÷yw«jüCÄníáìš )öw’ê°ŠF8Zć¿ÊÄ” ®xçò¥÷ªV¶ò<Š?†Î…Õ¬ºqÂ5½aø OÜA˜xaYÛ ®ÇZ 1:Ãbÿëa«êáIÿ "Ò endstream endobj 5352 0 obj << /Type /Page /Contents 5353 0 R /Resources 5351 0 R /MediaBox [0 0 595.276 841.89] /Parent 5343 0 R /Annots [ 5344 0 R 5345 0 R 5346 0 R 5347 0 R 5348 0 R 5349 0 R 5350 0 R ] >> endobj 5344 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 413.53 156.58 422.497] /Subtype /Link /A << /S /GoTo /D (wcsmath_8h_598a3330b3c21701223ee0ca14316eca) >> >> endobj 5345 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 400.699 166.543 409.545] /Subtype /Link /A << /S /GoTo /D (wcsmath_8h_0a3cc1d5cde549e408f825ddd7f5853d) >> >> endobj 5346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 361.844 166.543 370.691] /Subtype /Link /A << /S /GoTo /D (wcsmath_8h_39c663074332446065723e9be9350139) >> >> endobj 5347 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 321.306 177.571 331.837] /Subtype /Link /A << /S /GoTo /D (wcsmath_8h_514396dd60fa0621c83072091fb2a0cd) >> >> endobj 5348 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 308.355 195.275 318.885] /Subtype /Link /A << /S /GoTo /D (wcsmath_8h_01d44d9782a85952a48ed76bf105351b) >> >> endobj 5349 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 296.967 204.719 305.934] /Subtype /Link /A << /S /GoTo /D (wcsmath_8h_2dc3870be25a19efa2940150507aaf71) >> >> endobj 5350 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 256.549 187.016 267.079] /Subtype /Link /A << /S /GoTo /D (wcsmath_8h_dea646bef24ac88b544d7094860127ff) >> >> endobj 5354 0 obj << /D [5352 0 R /XYZ 90 757.935 null] >> endobj 506 0 obj << /D [5352 0 R /XYZ 90 549.557 null] >> endobj 1085 0 obj << /D [5352 0 R /XYZ 90 495.947 null] >> endobj 510 0 obj << /D [5352 0 R /XYZ 90 481.377 null] >> endobj 5355 0 obj << /D [5352 0 R /XYZ 90 430.567 null] >> endobj 514 0 obj << /D [5352 0 R /XYZ 90 218.855 null] >> endobj 518 0 obj << /D [5352 0 R /XYZ 90 160.155 null] >> endobj 5356 0 obj << /D [5352 0 R /XYZ 90 137.843 null] >> endobj 5357 0 obj << /D [5352 0 R /XYZ 90 137.843 null] >> endobj 5358 0 obj << /D [5352 0 R /XYZ 90 120.219 null] >> endobj 5351 0 obj << /Font << /F29 635 0 R /F38 780 0 R /F20 595 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5381 0 obj << /Length 1490 /Filter /FlateDecode >> stream xÚ­X[o›H~÷¯@Ú#Õ“¹•òÒ:®\µÙÔñvšª"x’P9ànš¿g.`ã€ãxó`™33g¾ï;ÀÞ­‡½ƒwóÁÉ„F^„"I¥7¿ñ"ì’ A‰7_x߆‘ÀŒñð!)WEšU7>Ctç¨ÀÃIºTön¦nTá“p¨²D?’Q$†DJÿûüãàl>ø5 °'öˆÙC(`ÂKîß¾coÏ?z±(ôŒÕ½Ç)ƒëÒ»|à½þR†°¿QDÏ-ÔÆ4s>ŽéÌÞ\LOHˆÖÎÁŠxkEìH€$åvÁ‰>mœTyam Ù²¥pŠHÂcz…ñGLO­i¸eIÂ$¨-ao·ó$ŠŽ"Î=†$õŠDv¸ o´eXåö\Ižùk§UQÙ‡7E~oïJÜJ•öA=¯ˆiœ•Èm¶ðHbÒ¶£ˆDm˜Y7Ì3:¶7ã“‹éËa{Q~9v-Ê8a ºSCÛS C‡õ®ìplƒ»…úKæÝ_~™i/æÔÁŒ8á”0!) ŽæaèÎÎÛ˜Gˆ…Ìn±êˆÌ1L= hRÎöF'ŠBÒħ‰ËmÊê…°@!vûÑõ2´Æø=ͺT {—gËG{wýhœµ^·ÎÝÙ‡÷ÍŒßçËRUWX`øgks†³ÐcÖÖr4@³ÚƒÏêp’bÄA§ÎfUä?UR¥y¦·ê$”0‚!ŒŠgž­IÅ'žŸÅNüN©[ެÌ;ô`ÑkÒ+ ‚a²«Ü p¼&š•„C¾_äDñ«LþÐò8QD¢‘å—Ë÷¯" N€.Ú) Ù-ŠÎÇg“éù™Ë¦QHÁe¨(z>§~õA„Ãx¹V»Ö™)ÍiWn<Μ]V»áÌ­ã¬J+»-Ë«4»u‹ÝÅ.žÇç.õ%q&ަ'Û¯ò¢Š¯—}XáN‚n¶¼ÕžAfÆæÌ†óÆáæ±}tzºƒp­ýˆ~Ž“"ï³Re] ŠíGô·O…qgs|è"ªsç爄ÁÿëÁ:¥1‡ëØùT¶Bc· JÄ!8FTZ7YW”ŠÝp-föÆå¿ï//fÓóùäÇÅ|¶³Ž!«¬ ââ~U:º0@ŸÄòÆqŽ!™ERr à0§:î 3p%èBcç¨Y, ŸCU–u3”:¶â¦Ô—iY©zÆCüè @½góv´³Aó0â Q·8ëÌdˆWƒ[Ÿe/ÐZ~@qì˓駳ŽÚ@0äû0Øô¶˜=W¿a»|]ÊÏ(”ÐöŽ ‡Ñ¥r`ÃB«µ»_¤å*/SÝ&¾;xOòï!±‡“Q-%xшÈkqÒLJ–;xrÔ„ðÀ ¦©¢€Ø}\½ALOZì=[ñsãÔ¼› ¯]•€ ÿ4}Wëô{›åe•&®Sö¹Ð,§™ëŠcã:žSèª,w±ìàïÉ;¶•ïíÚ§€F/¹¿õpž.fA>²Í‡:Hª;õ$™¹ð¹Ù±çT‘ÅË&6å»öª†)Ð2¼<űM¥BÄÕª±ªb¨LNcU&Eº2’鬳º0ñÈ®3¿S%8Íå°pÑÿ(™Ë\—Î;ÂjD¥‡ë¬¡ÇÌKYo(jëD-WEßK”œÞÉœ‰á2ÍŽÌ¡]üyüÎå*É>9Z¯ã=7Jß3Ùìg‹¾UtCe&pTQüè_rDÃÐvXp5$\ µH h·¶¶Æc{Ñ=ÈÒ™šN ®I¼ªÖE=ÁTúÍ„&ô.@d:LÁA§šÌËzÿF“f‘åÒÞ@Ü“ûÁ๲dŒ\qk’)+ívdî~U“8HxèGµúcÚæ# ,!"$D“g2UÄÕæÅË^?×7 ’º¶¤{kÅo9y+ûbâ>Q@ë¶x»6@Ÿ‹Û•cœÿy¼UÙîIÿ§íM endstream endobj 5380 0 obj << /Type /Page /Contents 5381 0 R /Resources 5379 0 R /MediaBox [0 0 595.276 841.89] /Parent 5343 0 R /Annots [ 5364 0 R 5365 0 R 5366 0 R 5367 0 R 5368 0 R 5369 0 R 5370 0 R 5371 0 R 5372 0 R 5373 0 R 5374 0 R 5375 0 R 5376 0 R 5377 0 R 5378 0 R ] >> endobj 5364 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.678 602.65 195.875 615.837] /Subtype /Link /A << /S /GoTo /D (prj_8h_151140d870ed4f490317938bd6260a6a) >> >> endobj 5365 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.641 552.497 206.386 566.018] /Subtype /Link /A << /S /GoTo /D (prj_8h_fc5276e759c799deea36271d9cafc5e9) >> >> endobj 5366 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 371.991 226.886 382.895] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_7af03fe3aabc25673cc012adc1e3f8cc) >> >> endobj 5367 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 291.229 182.592 302.133] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_5c6f91916a0b8f8c2d85274c0ba130f6) >> >> endobj 5368 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.75 276.608 262.095 286.513] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 5369 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 252.375 166.542 263.279] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 5370 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 213.52 222.223 224.424] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_b8a869f35385b17a26cb5070ab63e5d5) >> >> endobj 5371 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [276.333 131.074 307.645 141.978] /Subtype /Link /A << /S /GoTo /D (cel_8h_db2e4565f61a9de5fe278d9035850dc3) >> >> endobj 5372 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [312.472 131.074 342.688 141.978] /Subtype /Link /A << /S /GoTo /D (lin_8h_946005b038f5c584691630b5d39369e3) >> >> endobj 5373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.514 131.074 378.278 141.978] /Subtype /Link /A << /S /GoTo /D (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) >> >> endobj 5374 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.105 131.074 416.081 141.978] /Subtype /Link /A << /S /GoTo /D (spc_8h_7304d0d00bcf9d2bad1f56ba6d8322ea) >> >> endobj 5375 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [420.907 131.074 452.777 141.978] /Subtype /Link /A << /S /GoTo /D (tab_8h_6b3768349e9a5e925aab24effddc584f) >> >> endobj 5376 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.604 131.074 492.791 141.978] /Subtype /Link /A << /S /GoTo /D (wcs_8h_b9aeb8cf1afb1bfb22e989580d90fca8) >> >> endobj 5377 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 119.118 140.231 130.022] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) >> >> endobj 5378 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [453.255 119.118 499.511 130.022] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 5382 0 obj << /D [5380 0 R /XYZ 90 757.935 null] >> endobj 5383 0 obj << /D [5380 0 R /XYZ 90 733.028 null] >> endobj 5359 0 obj << /D [5380 0 R /XYZ 292.107 705.441 null] >> endobj 5384 0 obj << /D [5380 0 R /XYZ 90 688.38 null] >> endobj 5360 0 obj << /D [5380 0 R /XYZ 292.107 655.622 null] >> endobj 5385 0 obj << /D [5380 0 R /XYZ 90 638.561 null] >> endobj 5361 0 obj << /D [5380 0 R /XYZ 270.405 605.803 null] >> endobj 5386 0 obj << /D [5380 0 R /XYZ 90 589.076 null] >> endobj 5362 0 obj << /D [5380 0 R /XYZ 280.916 555.984 null] >> endobj 5387 0 obj << /D [5380 0 R /XYZ 90 538.923 null] >> endobj 5363 0 obj << /D [5380 0 R /XYZ 446.709 506.165 null] >> endobj 5388 0 obj << /D [5380 0 R /XYZ 90 489.438 null] >> endobj 1086 0 obj << /D [5380 0 R /XYZ 263.597 456.346 null] >> endobj 522 0 obj << /D [5380 0 R /XYZ 90 441.676 null] >> endobj 5389 0 obj << /D [5380 0 R /XYZ 90 390.965 null] >> endobj 5390 0 obj << /D [5380 0 R /XYZ 90 310.203 null] >> endobj 526 0 obj << /D [5380 0 R /XYZ 90 176.2 null] >> endobj 5379 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F11 1076 0 R /F8 1123 0 R /F13 1145 0 R /F14 1078 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5413 0 obj << /Length 1993 /Filter /FlateDecode >> stream xÚ­XÝoÛ8÷_!xQÀj.I}÷ž®ÛM‘E¯í%¹Û‡î¢PdÚÖÁ–¼’Ü$·Øÿýf8CÙrä¤uïÅ¢ÉÎp>¤ô–žôÞŽ^ߌ~¼Ð©—Š4Ò‘w³ðRéÅ‘¡VÞÍÜû4‰„Ч3%¥œÜåͶ.Êv1UáD¬¦3ÊÉE±64º2 SOU21eŽSQš†ÅÓßo~ý|3úc¤@¦ô”•Æ"öC/ߌ>ý.½9ÌÿâIᧉwg©6^ }ø®½ëÑ?GòI}µ/dîõš5~c~“R—¬à›*ßmLÙfmQ•¨l9ÓðƒôW(æþaÞcÿõ§ëW—ïo.>¼¹úM†²ikõr: tÛÖÓTOø,h PNìé€düé²õμ²vqsß/üÄ‹EK…§CC!cV°XLg@é Òʰò¼ò+T¥BéÄ›¥"ˆXpç=d¿h^ü°¾ÑŒ_îwÄóà–S»²)–¥™Ó̺*—Hp ¾Ï®yUýíHP$E¬>쨿ˆÄ¬3|†–G÷òÙ|³V°pbŽLÇðeOô‚yäOˆ(Ñà?Kг0І¾}¶µÙÖUnš¦ªif“åuEÃ]ƒÆÇQ[9r°o0Ÿ×Àfx¿¢ìí›W༦5Žúnª`íaAòÒñYÉ^|~€MTšLšjcpOšØdÓÐt»24oÇ4XTõ&k‰tnš¼.¶-×jSÎMͬ}ÞÿëÝ;¢ÞVpäٱp\Q.‰r ž 8Fêw V@Y7ài-“ɪšêprgð÷ –'Ø6.•HCvqÑ:CVó]îŒ7–c8'ìÅv£ËbžDm|°ç^#sÙ‘3×+ʪœý×8Ÿ²ÛúÁQ€ÅæÞ d—ßíÊiwqnõc‰ûó[­èU>ë Xóq@«D(ºà<;”#¿‹Tš²ÙÕÖšQ^ÄÀéŒ>äuu^G:{z¤Zcpr„òµRðÎ6xªä5'-°†¦ØVR‹8û®gýÔ Ô$« Í?rCйÈÐ 4×®vã¨øK1·áŠd]æå¸b3ýhLâ2¸rŸm¶kÓ_BîÍ6«y3I ƒj×nw-ÑT‹¡ÈnM³íem1à}`ò¡É¥ ^øÜò.ven»ãÓ ó°×ú]¿ìêRW§?7†§0l..ßýLú¨à0èp2ܘô‰*ˆ¨bÄ]‚°ÆÀÙt"´ĪâhH¤ˆ•ê—º¾š?Œ@˜ÀOÓ p€ÿ}éüS`½“¥ª!ªŠÒ4bK~p„ËÊu2šv^¹Uð›…­±»5/‹¡þà§BBí”ß™'°ÿ*kºŪ×Oól½6sÑ;ö1ô‚î/d’XùšD|´g€úf ‘4§€t¿È$"–)!Cí4 ä@¥QZað¸Ôêxx|ßzßM?ºöæCÕGWà7+éëJŽߘlƒãˆÎZ{á€Ìd™¶Æ"pÛ&ƒ»ŠK¹„`óÓ`bÄðH†ÖÑ´£qÀ¾÷ IžÕE¸9Å¡ê'Öº¸­³¬¼à†€Q­RG AˆáÁ¿Š« ² Ô]›æ4Câ,UW"í4ž¿¡?3ZïBVIîîĉ2 ¶B‹'— Zàn|x>D„ý:c'XSåÔ:±&lm,¤M˜Ìø¿ub ú0ƒŸ*ÏZ{½Ç¥Hu;ÕPˆq‚M}6î×a= ·ÆÒû2ë›ì·b†ê¶Í ²¶5ýD9:à>GY§Såéét $T—¸ŸmW¦ÝÕWÊ£T;ʃ¡»ì°ã Pã>œú_ÐdoÁPy ÷`‹P¤~ÄYªux\ñ’-_¿ÞåxwB:°.Täñïøq´è“ eXÇñj¾ÊêAìí ýìb 0Ý™ð \1ã®ð¾|n/!†ŽÝ#9À@)êªO` ºÐ{Ìãº+J"ø2ü€‘m1±z~èø;à‡Žãóᇎ£sá1Ÿ7€ù|¼ÌÏã zo€_¾oUoÌ8z¥æ²å„®àÕ1ÛÞ]¶Ï‹ÚäíñóEæÒKj÷pènÜ]eÅmú••ŠF‘ ¥ ô°(J¿¬ðmþõ)˜T}Òzº²êDš\YÕÿÇøß€cúeç$–Ñ" »úsUŸŸwöb€»ÍšGoS•{+­¸ŠRt¯V¶)ù{pHFÞë‡>—C 0܃‘pFšcS÷L4Ãû¤½ëaùq9=ÙàØwÄ·oÝK{Avº6]6´ùª‹ez!s÷÷Þã¢úÈ2ÏôgˆuuEßÓŸßï6·NgýÛ‡Ö8C¤¾NÇOùQ"R•|íK¾{Á‡4Œý„_ðÃÂŽ;Ò[@»uÖÕ ÷ñ7¸Àš`néOD%_êUÓ?-•v¦Ã®¼üúÓõ»Ë×4„’ý›Ñ›êþaiÊã“þå}J® endstream endobj 5412 0 obj << /Type /Page /Contents 5413 0 R /Resources 5411 0 R /MediaBox [0 0 595.276 841.89] /Parent 5343 0 R /Annots [ 5394 0 R 5395 0 R 5396 0 R 5397 0 R 5398 0 R 5399 0 R 5400 0 R 5401 0 R 5402 0 R 5403 0 R 5404 0 R 5405 0 R 5406 0 R 5407 0 R 5408 0 R 5409 0 R ] >> endobj 5394 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [278.46 442.154 324.716 453.168] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 5395 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.007 442.154 443.319 453.168] /Subtype /Link /A << /S /GoTo /D (cel_8h_db2e4565f61a9de5fe278d9035850dc3) >> >> endobj 5396 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.922 442.154 477.138 453.168] /Subtype /Link /A << /S /GoTo /D (lin_8h_946005b038f5c584691630b5d39369e3) >> >> endobj 5397 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.741 442.154 511.506 453.168] /Subtype /Link /A << /S /GoTo /D (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) >> >> endobj 5398 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 430.199 121.98 441.103] /Subtype /Link /A << /S /GoTo /D (spc_8h_7304d0d00bcf9d2bad1f56ba6d8322ea) >> >> endobj 5399 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.968 430.199 156.839 441.103] /Subtype /Link /A << /S /GoTo /D (tab_8h_6b3768349e9a5e925aab24effddc584f) >> >> endobj 5400 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.827 430.199 195.015 441.103] /Subtype /Link /A << /S /GoTo /D (wcs_8h_b9aeb8cf1afb1bfb22e989580d90fca8) >> >> endobj 5401 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [214.88 430.199 266.108 441.103] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) >> >> endobj 5402 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 333.026 192.953 343.93] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_b8a869f35385b17a26cb5070ab63e5d5) >> >> endobj 5403 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [196.574 213.645 227.886 224.659] /Subtype /Link /A << /S /GoTo /D (cel_8h_db2e4565f61a9de5fe278d9035850dc3) >> >> endobj 5404 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.136 213.645 261.352 224.659] /Subtype /Link /A << /S /GoTo /D (lin_8h_946005b038f5c584691630b5d39369e3) >> >> endobj 5405 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [264.601 213.645 295.365 224.659] /Subtype /Link /A << /S /GoTo /D (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) >> >> endobj 5406 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [298.614 213.645 331.59 224.659] /Subtype /Link /A << /S /GoTo /D (spc_8h_7304d0d00bcf9d2bad1f56ba6d8322ea) >> >> endobj 5407 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.839 213.645 366.709 224.659] /Subtype /Link /A << /S /GoTo /D (tab_8h_6b3768349e9a5e925aab24effddc584f) >> >> endobj 5408 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.958 213.645 405.146 224.659] /Subtype /Link /A << /S /GoTo /D (wcs_8h_b9aeb8cf1afb1bfb22e989580d90fca8) >> >> endobj 5409 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.48 213.645 476.707 224.659] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) >> >> endobj 5414 0 obj << /D [5412 0 R /XYZ 90 757.935 null] >> endobj 530 0 obj << /D [5412 0 R /XYZ 90 733.028 null] >> endobj 5391 0 obj << /D [5412 0 R /XYZ 90 716.221 null] >> endobj 5415 0 obj << /D [5412 0 R /XYZ 90 716.221 null] >> endobj 534 0 obj << /D [5412 0 R /XYZ 90 502.748 null] >> endobj 5392 0 obj << /D [5412 0 R /XYZ 90 480.436 null] >> endobj 5416 0 obj << /D [5412 0 R /XYZ 90 480.436 null] >> endobj 2419 0 obj << /D [5412 0 R /XYZ 90 266.514 null] >> endobj 5417 0 obj << /D [5412 0 R /XYZ 90 251.947 null] >> endobj 5393 0 obj << /D [5412 0 R /XYZ 90 89.441 null] >> endobj 5411 0 obj << /Font << /F29 635 0 R /F38 780 0 R /F20 595 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5430 0 obj << /Length 1241 /Filter /FlateDecode >> stream xÚÕXYoÛF~ׯ ’·{“t‹Mœ¦µôÁ Z\ÉD%2%)ýõå,iJ–b¹6Üú‰ÃÝÙ9¾9ö ÞÌ£ÞáèíxôÃO¼„$ško<õêEšÅ™7μ3_!£”úW“º©òYÀ”O.‚+êäsƒÔ‰™š*`±oЉŠI}¦ãàËøÃèýxô׈Fê±VƒŠH$”7YŒÎ¾P/ƒñ%"‰½«–káI.à;÷NG¿èw­å‚P­zk#"ˆ¸µø[•ÍôëyÀ©¿œ¢­Ÿ©¢—£~™g@3k#(a­æ%Ý] L ´«„¨HÃÊv…•ÚJ Ó~ešeUÔöGùÍ…ÁÑ4Ë*S»ÑrŠƒý,¨3U‘ÎqÚ‚]Ìp¦³+ßÂÜÎO*“6&C†« S´P#ÆÕÌ}r8òΣw¨6Mo+.Ax[FåçugM!¼´šË?-Z Ë:·CÆH¢ðWyãR"oj—GÇï4&‡  ÿ=fTl6"2âOÚ¦Õl¹0Eƒ’Á$š¿›ª$+¾¬åI)­iì7Ñ2AÁ'6D6›‹zo}ñГˆ&àoL¨¸ö—>4Â@Â Ä ð×èµ@*(¥ ”1óǸVû˺ 0ð.Ò$¦•1†¼Þ(Çÿ$Ï­ÆíùL»åƒelCk©´/”Aä/­ é<‡Dä2òæo¼„ÀkqOä%IbÖñ¼A‘†Ìˆ5 $³rÙ¸Ÿ1.u ÏmñÙÀ7ÏÏqˆ*­npbº,&M^8µXÖ ŽÿúÉæú‡Ï æàJˆd­ZžNÄrOÊ¥iÿ[Ù&F}L<ÄŒc6*«È …„î=¦Ñ¶ÒE<@ÂÃ%]’¿Î‹É|™9NÆV+1‚ŽëÀþiƒ,èÒ Ç1,Òæ̹+G€7ºoƒ?o&PÑL¬vØÞ²PƒÏ¯Ài€pšÏÈÅ«´·',qY·§¼0õw W)lÑs¢»â3çj=Ëè9‰Û«Æ¢ÿÇ»ÓñÉÑá×±À§ãuI–…ˆâÊÄ­y’z1˜§¥5Ïš%9€I/(ûå"Í‹®»ÍMÛŸRÜRahZVH¤u^ rÞŽ™#&e½:Õe}M¶˜µÚ+EBl«´õªœY„§‚êø|~ÖàG¶ `ëœ[ï<ŸÍÍîõÐß•€¦VN;¡ángsC²Ð,fU  7™- nÁ(ìôé%aÇ ŒNÿacγ{1zP*½qNôð¯mdL-£‡ìd`Â}R¥&œ=H(ÖùN…³‹ 2–ÛbÚ7ÉË-…&}¦R ·RÚó@w&}V°ž­t×’¸~ TGx‡°Û˜=¶¯äŒ¸š@Dì}©='¿€\Kwí»7OŽÞËÇn×B­Ÿ»æ¶jÿ#øž?¾[òZù«ûÎãKú· †n7O«;h•îD±¸dÁ†o$ŽI ˜Qqÿ&pý#\ƒ"Öß•Æì…i Œ!ÏŠÑV˜^!ÿm ×_­4èí;>ZuUš$œŠñ±Ê>tgêCS˜ _pZôœ‰;âÀ^¬Í9þhü0º'ÙžŠðSÆÝ ßòvw¸£½Eð¢HÙÇûÝ/¯ofýcQïé?áËÊH endstream endobj 5429 0 obj << /Type /Page /Contents 5430 0 R /Resources 5428 0 R /MediaBox [0 0 595.276 841.89] /Parent 5343 0 R /Annots [ 5410 0 R 5418 0 R 5419 0 R 5420 0 R 5421 0 R 5422 0 R 5423 0 R 5424 0 R 5425 0 R 5426 0 R 5427 0 R ] >> endobj 5410 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [407.355 702.288 469.66 713.301] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_5c6f91916a0b8f8c2d85274c0ba130f6) >> >> endobj 5418 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [423.438 646.631 485.744 675.697] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_5c6f91916a0b8f8c2d85274c0ba130f6) >> >> endobj 5419 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 504.632 216.724 514.56] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_dd1b8466211aa6885bed0619f32b35c7) >> >> endobj 5420 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 422.893 163.773 433.797] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_42ae26d339f06986ca7f12ba02abcd32) >> >> endobj 5421 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 384.039 162.119 394.943] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_2b83ceb814c90ebfa042a26d884ac159) >> >> endobj 5422 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.915 345.185 165.795 356.089] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_ee847369fa66666bfe1e72e7872499b6) >> >> endobj 5423 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 306.33 162.667 317.234] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_666bbac788099d5bc6d88e685f2713a3) >> >> endobj 5424 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 267.85 168.196 278.38] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_b4e520246350c50275f899c9b97c68d3) >> >> endobj 5425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 228.622 166.543 239.526] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_7a2ae59365f19adb4af90f4df3074e50) >> >> endobj 5426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 190.141 167.091 200.671] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_872bdab5707df527946ecbad24ee03ab) >> >> endobj 5427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 150.913 172.072 161.817] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_d029e98723548c7236e805c7b48c7c90) >> >> endobj 5431 0 obj << /D [5429 0 R /XYZ 90 757.935 null] >> endobj 5432 0 obj << /D [5429 0 R /XYZ 90 733.028 null] >> endobj 1087 0 obj << /D [5429 0 R /XYZ 90 625.71 null] >> endobj 538 0 obj << /D [5429 0 R /XYZ 90 621.102 null] >> endobj 5433 0 obj << /D [5429 0 R /XYZ 90 522.63 null] >> endobj 5434 0 obj << /D [5429 0 R /XYZ 90 441.867 null] >> endobj 5428 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F38 780 0 R /F11 1076 0 R /F40 846 0 R /F51 5435 0 R /F53 5436 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5457 0 obj << /Length 1852 /Filter /FlateDecode >> stream xÚµXÝÜ4¿¿"€YÁÛ‰óQÁôh)**\WêõB¾Ä·È&K’íõþ{fðFû•²4RA±?»|ǃ远EyÜX®}Ëžuðúì÷3þQmeÄx¢î´eÂé{n ú•¤à¹é‹®: UÛ N ˆOñ`-cÅ9Éy³3 \ËEX]WÍ–67Õ°£UajÓ•®q+âm»²jô°¡!RÛfß»nJZô‡éª‚î‰ðеšurŒo¹â}»7´Û·é[Z;Ýäv=p :©÷ìÑ04E–+ç’öz°¶$ØÒW¾²!ƒíÐÒóØ[Bjǧ›í±ÖmöF÷ÇÎ_ÙéV 9&Âû „ú[ô4Hÿ  ÇØ™ašA[×Ûµ×^œ“[Ãáp,ÝîÞqÓvàø%ãPÉ, ûöh#“©ðÐÖ†­Ö±HýÇož¾~ùâG:j¬ÒpB¶yð¼×m]·+© Ø6ìxYß6XŽëØŒa³·­_à`Э0Ò^j†c× ¼ ¹³dMÕPª–Ö…ÛΘþ‰­_HXe«)SYJ·ÞJ©f\TfÝÖÕÛÜ»\+(ˆ¢íKL0›:óN>*E5ñ8Ñ}Õ>ËÚq¹¤s[º–Ú¹izìõPj‚t$.ÙΑMGÄ¡mD1X`ÕÍ9±ˆ(HXž‚5Ø¥€; "–ï0.’…&MQÅÁzÂH¸aÈ*ÖL­´‹dÀWP•YHYGR2píY^SKÉ¢ð)>dXíµÙ{Tî‰8ÁtbÈù¸ÔžGwQ,JEÓ–ú‘êêªÓÝ­»i{¾³qœÇbG”B÷Ä51 íµ»†9Bð9!6íð™Oœ=]ù\a”’¬ÀQ„ÚîmÀÓB½%ìÌ:Dçcc {ÓŽ†”›NÐji‡Í+Jâ{üÎкÇBÔ]éãtdW“ö€Û+°³œJ‰ÂN—•n–º€k¸ßP/ÐeI}ÖŒ=-¯­k`á’Ô8úRŠ %Yœ$LÑä£)CeR†:>—u"Iç9,R–ȘÎ~¦>jð÷=ú&D˜ ¿qe¿€1—~Ìd»9:\®£’­ÆyW'áŠmáQ ÃÙ®­ CDÌR|{ª"{F’¶0}NDÊ^]KwïÆTˆ{ƒ´‘.—‚7 <<¸Àªl›¯p<¶[iCI6’¸˜D·‹‘Lb–ÁÜüÿ€ÊÓØ`Åíþ`gzTÆ]\­ÏWÇjÙ\¼xþǯP?¬¢<|zñ|…ÉÈ.×p‡àp{À‰·¾u©’I˜ôÕÜo’é§' Pâòûj%yx\²[€Em´ëí Oˆ(TüÞ•Ac´»Os2À\Ø3çˆ|>úG’‰|ú !ÇOˆ·œËƉ8o‹ã˜>úÓϺ;~€|Qή{÷m0^½$¢0À»üAbKÉiuÞîµ°¤Óô™5…‚ÑT=ÆK”ƹ 'žùÑt’øSû)øä%`PÔ‚<&ÚªqÑ–Üܕ麶#‡Æ8\xáR[ˆé§rĨ÷‹ ›¤©g¨+x£W¼õàš­¹_;‰b™’þ¾XÐÚ/Ò1|çâiùq¦Ä¨ãŸ "$K“ôĈ™’~L‚bê®À¿[€€™C)ïÃ`µc|)‰»Zƽ^­Unˆt±Zgá  gáó¯«Äx),¼'fy&<ƒ“ù »uørAV‹Š<û@ŸÙE—C7U]»Âwá:£ÿ¯ûŸæ)àˆø¯°dÿ–ÓÀfÿ•ï¿Çÿ72ŸCsû"&ãQÒܬ#•3 >¸:‘Ãg®$ƒ:ш:e{¼òÿÊà°íëVqwbu%'¹"s0p ‹T‡É2ÉG7ŒsØ )³y‘ÛWßw¨š‰|"cE4íö'õ ‚*¡væ´xæŸ[o궺3š94L¾§Ùl¨8 |Ôdíp‰%Þ»¿Ù†Ôiøú‡QðÉâÑ)Nd,µ³P“xä-ù¢çY¬â{ŽŸj8K/Á1½.aï>n•—Gùܪ t5^nNLº®;S$Ý}º»Þƒ&Ìõ9ý÷/ÉX.²‡þùçÿô›L8<€RÊ%ÚsÓ@;!—ͯ~ñ óÂ\Ñ&q]—?‰Å•ÒNr!ýô¼¾ÕÿÁ:fÐ¥ —n}Y~¸ÝšæÔÒÿ,L‹ endstream endobj 5456 0 obj << /Type /Page /Contents 5457 0 R /Resources 5455 0 R /MediaBox [0 0 595.276 841.89] /Parent 5343 0 R /Annots [ 5446 0 R 5447 0 R 5448 0 R 5449 0 R 5450 0 R 5451 0 R 5452 0 R 5453 0 R 5454 0 R ] >> endobj 5446 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 632.484 140.799 643.015] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_42ae26d339f06986ca7f12ba02abcd32) >> >> endobj 5447 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 612.559 139.145 623.089] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_2b83ceb814c90ebfa042a26d884ac159) >> >> endobj 5448 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 592.634 139.693 603.164] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_666bbac788099d5bc6d88e685f2713a3) >> >> endobj 5449 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 572.708 145.223 583.239] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_b4e520246350c50275f899c9b97c68d3) >> >> endobj 5450 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 552.783 143.569 563.313] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_7a2ae59365f19adb4af90f4df3074e50) >> >> endobj 5451 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 532.858 144.117 543.388] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_872bdab5707df527946ecbad24ee03ab) >> >> endobj 5452 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 512.933 149.098 523.463] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_d029e98723548c7236e805c7b48c7c90) >> >> endobj 5453 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 493.007 152.425 503.538] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h_ee847369fa66666bfe1e72e7872499b6) >> >> endobj 5454 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.969 411.557 169.763 422.461] /Subtype /Link /A << /S /GoTo /D (wcstrig_8h) >> >> endobj 5458 0 obj << /D [5456 0 R /XYZ 90 757.935 null] >> endobj 542 0 obj << /D [5456 0 R /XYZ 90 733.028 null] >> endobj 546 0 obj << /D [5456 0 R /XYZ 90 374.072 null] >> endobj 5437 0 obj << /D [5456 0 R /XYZ 90 351.761 null] >> endobj 5459 0 obj << /D [5456 0 R /XYZ 90 351.761 null] >> endobj 550 0 obj << /D [5456 0 R /XYZ 90 281.946 null] >> endobj 5438 0 obj << /D [5456 0 R /XYZ 90 259.968 null] >> endobj 5460 0 obj << /D [5456 0 R /XYZ 90 259.968 null] >> endobj 5439 0 obj << /D [5456 0 R /XYZ 90 125.317 null] >> endobj 5455 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F8 1123 0 R /F13 1145 0 R /F11 1076 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5463 0 obj << /Length 856 /Filter /FlateDecode >> stream xÚÕWßoÓ@ ~ï_q¼51öýÌí‘Á&HÀ*ñ0öЭ·®ÒÖŠ´Àøïq’»¶iÓ­ÁÓ9‰c¶?Û Š±@qÚ{9è½8‘^xðVZ1¸…³F’ŒÄyßYNˆØÿq5_”“qF¦7Y. öO&·¡‘>…ëPfTôÃôªºå¼Æ>9Ì.o{¯½¯=b(¨ö`8eÄÕ]ïüňï¿ÊâG­u'´T|ÞŠ³ÞÇ>ˆV*@kVhAŒˆG³o— à|25Ò4Ÿ0¸'Ú®Y$Y€VŽýÕ‡ÓqRk9–¬7I‹-R¥$r2¤$ ¬ÔÍãÚuc×]qê(“ ¬íÔ˰øVNçÍÅâfC”f×Í9œ¦sœO2iúß«2…øtÏQ¨îŽËæP&ev#ºœ³èÈ ~ ¬ö À±Ÿrx¡œµÞ_Ù!½!›A_›C#Sœ;óÚè­´¯#\Ïäô:›ÔÏc`Ge (TŒ*æS•çêÝéFD›µêˆäl«ËBÕø¡ƒ7/)‘k d\‹µ*²ö{•èÙd´¬ùÕl¾uú©û<ËͪSjíV ¾ªËDÕáÙv2é0à¯\_*ôA^Í!^9G]^yÛ]*År¶»´Nôv£VyÅ'6ê0M¶ý·º—ñzßæùÿؼ-4¹F¨ú† øX°g"‰TÜÙÔÈ.Y¶W;ï„'=Øjb„/’ö¡#-%åã=Œ°Í íA3×[3}çøãmì½¹EXÿà)¥;vëb¸ßnUÈŠž¾[%¸Â¶»¶vݱ[=(çiY64ÓÅ_iPÉß:NýÙõªþ©õú(Áöدƒ¬¨3¿U•ß[³¦ƒÀýW¬CKnÞw¸Öà ê ¯âöó‰¼q*w,þ¤-a/SPcde9Û+çpŽjpü1ñ'8Jû/ÕJí.¶ÔRÒL‘-sQVœiÄóœžÓ#´ÕüÅÎy2m©Ý€o«Dbñ}„ØÝ\›¿L¶OžLéOÉ‚wªˆJƃ1qlž†i(‡‹I?‹9|Ÿ„“jÈ…ËæÂ6ᑦ#ãš+‰$éºÒ•ÍÅçã³wo^6²ÂFºüÙœ¯f÷?¹Ÿ7#ýÞ¶oJ endstream endobj 5462 0 obj << /Type /Page /Contents 5463 0 R /Resources 5461 0 R /MediaBox [0 0 595.276 841.89] /Parent 5469 0 R >> endobj 5464 0 obj << /D [5462 0 R /XYZ 90 757.935 null] >> endobj 5465 0 obj << /D [5462 0 R /XYZ 90 733.028 null] >> endobj 5440 0 obj << /D [5462 0 R /XYZ 90 605.919 null] >> endobj 5466 0 obj << /D [5462 0 R /XYZ 90 591.348 null] >> endobj 5441 0 obj << /D [5462 0 R /XYZ 90 429.011 null] >> endobj 5467 0 obj << /D [5462 0 R /XYZ 90 414.44 null] >> endobj 5442 0 obj << /D [5462 0 R /XYZ 90 279.669 null] >> endobj 5468 0 obj << /D [5462 0 R /XYZ 90 265.099 null] >> endobj 5443 0 obj << /D [5462 0 R /XYZ 90 132.485 null] >> endobj 5461 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F20 595 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5476 0 obj << /Length 1272 /Filter /FlateDecode >> stream xÚÕXÛnÛ8}÷Wí‹ Ä,Iñš}Js[Ùl6ñbÒ PlÅ6àH©$7ñßïð"[RdÇi“öŤ(z8çÌ™!)Lœv>;ŸN¨4Ò‚Š`xhHA§$Žƒë®@D÷úcÜ}å‹dVähÚëSŽ»'³yìz—ñ]œõˆêÆÉÈ ÉP¨.‘¤w3üÒ9v¾w,‡bÍs‰dȃÑ}çúcÿ`j<ÚY÷£!´óàªóWou•† ¾rU¡ ïî8]Ü–Fù,»îW̱Þ}:a¢b’„!bDÂÖâÒM©­ÊóÎNcdÐ'¡DŠQèH$(s¯Ý²Î®Ø IÌ+F°5dýËâb‘%¹{(¦À,é1ÜýÑ#¼g¹ëë×¶ÇfÆ$‹ãYòKö úÀ›ÄZ†´ôEQYt°Ä~íïk3„UéR`Ef…0§%†Û˜¥ˆqV#¶ê\•^Í,‘­˜È¢dâ»×}²Gn¶eq!=PôÒPlˆJ0Ž´ÁlDzçÚ¥÷ÐÄ9Ùô ¤"I>DU]IJMÄE´£ˆ9Âr¥Ñ¼eé)ÉÛD¬fª!b»l‹ˆ ¹úe&žIñ³:æà«‡÷¿r¾ÁzÝË " Ð÷J©waÈR‡ù/êPmÐ!ÝIˆ|¸‘ôÛªé^¯Ï×k=·ê”|%Û§VsZ‘]+…¨AhuÍ׺¦­ÂÖ(dÏu͸XëšqétmFÒy”¹1ˆÁ<ÞsFA.CT®­Ö²2.H eSÂX®¤„cbÜX~”¦Ùx–DEtcŸøª0­2„[|mT‡þ*²âuÍ&‡í\7Io SgZÎ¥Yçi®N†Ã(+â|%.`!ìOŠšBDæ¼ü›׆ŒiÄuø`OÕ²R( Ռ¡^_Ö@ú™³Ï,wmü}1ëQ© ?Ñܦ§/RßNã–Õ1AX¯*k”G„mÂ’VRî Š½J"ÎVò¸[$£b–&ÎW#7Óþsxå:FÑœüìã`°W‚J“©ë?Î ß+`㆘çñØ…˜BBp%ê!Žì)r²¸¦^¨üi-þ˜š²±ƒúHžŸ6«¦8¢l•7ýu4¹©¡ê åÎÀâH0þ XOÛaAïõ°žZa Ív€U¹H‡êí¶Ñ W8ížfêöjë|–;öBµKÙdo•ˆ欪KËöí²†ºý †ÐpÈ ™Ýoöâfm‡UW±M°igóã,ÍàL_€Ù`7Î24ýвcSÄánæ©>Š¿bL“8ß#˜/'ÒÓC)¯ý'¸¶‡„coÑ¿4—Ëlâo™—všÅêïóÁðêÛÅÙÁùñ·ƒóÓ³ã¦93o¨ ÃÖ¥¡´ûk›°W<†$ÔëßAfÕ-Ë,°C1ˆÞ>Þ¥^_ó¨¼"T¤f£âOoËcÔêÈÂú¥Gæ:Ö›2võçÙàh3cäËÓùlüΌѷeìð÷ƒËÓV²è«É’¯"kd&M¡˜…²;1Ûà®t5?Îp‡¨]¿Í”ßd .KH\÷M†ÃI¬,B§qgP×} S½û£ìœ˜sQ|ë„kÞgdŸK÷D1¡¬™[ÎÏŸ]Ÿ!‚]ïÖÓt”>-á.ÔDú/vm~› endstream endobj 5475 0 obj << /Type /Page /Contents 5476 0 R /Resources 5474 0 R /MediaBox [0 0 595.276 841.89] /Parent 5469 0 R /Annots [ 5470 0 R 5471 0 R 5472 0 R ] >> endobj 5470 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 179.178 274.457 189.106] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_6ef9e3ba449b38275c422e454abe3601) >> >> endobj 5471 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 140.619 271.688 150.547] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_69241e398126a72e5d095ed3aff156c3) >> >> endobj 5472 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 102.061 244.58 111.988] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_45b2d15aa5504b7e7e8b7b345d090f32) >> >> endobj 5477 0 obj << /D [5475 0 R /XYZ 90 757.935 null] >> endobj 5478 0 obj << /D [5475 0 R /XYZ 90 733.028 null] >> endobj 5444 0 obj << /D [5475 0 R /XYZ 90 608.136 null] >> endobj 5479 0 obj << /D [5475 0 R /XYZ 90 593.698 null] >> endobj 5445 0 obj << /D [5475 0 R /XYZ 90 465.324 null] >> endobj 5480 0 obj << /D [5475 0 R /XYZ 90 450.886 null] >> endobj 1088 0 obj << /D [5475 0 R /XYZ 90 282.623 null] >> endobj 554 0 obj << /D [5475 0 R /XYZ 90 277.409 null] >> endobj 5481 0 obj << /D [5475 0 R /XYZ 90 197.028 null] >> endobj 5474 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F20 595 0 R /F14 1078 0 R /F11 1076 0 R /F8 1123 0 R /F38 780 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5510 0 obj << /Length 702 /Filter /FlateDecode >> stream xÚÕ˜[o›0Çßù–öqmƒ¹ô-mIFH—]ÔVSš8)R€ŽËÚ|û™`º¶sµiª¥òs€ÿùåøøØlcí$ÖŽFÄôlbƒx<CJ0ˆ×àR·!öŒFé÷«²Î’ª„·Æ€P¤’k{3¶a…]e«fÈ1mWÇ1®ãs͵æŸC^O蘬Ríò5?šž îV)°ˆÉÛ˜kŸ4$¤¾Ö¶. '.`dCËtƒÄØjý¸"„ätÏËåN}X³+„HÆÄÍFd±jg³ÆÃ/§óEÄóïátâ¿|Oc`>ìÚ£‘…€Ë•ÙV£Œh[ °=KœÕ—ûe’­™AþÐ^nò¢í¤yûð´ÝjÇš‡¡ôã¿E<Ã3èTzøméÄ~xáφÆX3))K1©Š¥w¬µ¬êÂ0] ¸7&7Y„Aû‘ŒULlW§I–×egU±¬Lªýû·p8ŸË€Ùª'ã²,ß?‰ã2>Žê€bÙ¶ºíÁ¬‹ƒPš£\Õ9*I{ÍOüa(£ã)¦sÖièÒd‘j:IÖ8±V§êAÚ9."9¢˜Ï*¯³ª »a!}Ìû‹3i‚ƪëí²b»Ýòq½70Ò·X½îAÞ¾¾ú)5Õµ÷]òÀv=˜€óé¤Û¥S))Õ5w™?‰®®š»–$ÿ1ö¹™ ÓæçµXS]„ÿÌÅÚÛ‚ŠâoòößUxT§7LPÈ7m˲ªHØãNÀ¸ý3[-éÒ¿QzyrcsYØý׃›îlɆžcºâl‰zRáÆ˜e¬XVl-<¢Ã®32ÕÙ!¶t¢º:¶ð1uÚ+‚ø‚ÙFEcÛEg? NÚ¾yAÖ–"žÎò‡ý–eÏ<çžþ …^T endstream endobj 5509 0 obj << /Type /Page /Contents 5510 0 R /Resources 5508 0 R /MediaBox [0 0 595.276 841.89] /Parent 5469 0 R /Annots [ 5473 0 R 5485 0 R 5486 0 R 5487 0 R 5488 0 R 5489 0 R 5490 0 R 5491 0 R 5492 0 R 5493 0 R 5494 0 R 5495 0 R 5496 0 R 5497 0 R 5498 0 R ] >> endobj 5473 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 707.937 231.847 717.865] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_807ef7c93e34207776303badf177fa41) >> >> endobj 5485 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 669.083 275.025 679.01] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_8bb521a40223ec7358f85d719834ad7f) >> >> endobj 5486 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 630.229 255.638 640.156] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0967644d30d7f98f21b6bb0e68a637c0) >> >> endobj 5487 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 591.374 230.751 601.302] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_8f84e63b1fa2003f3438e7cd21231b92) >> >> endobj 5488 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 552.52 243.464 562.448] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_59e3354bb9908a4841aa478f2dbd3973) >> >> endobj 5489 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 513.666 227.972 523.593] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_347b88663166b66404cbb2f8aac211bb) >> >> endobj 5490 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 474.811 232.405 484.739] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_11a1284e63c7515fd0240ca8f85fc111) >> >> endobj 5491 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 435.957 220.779 445.885] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_84fdca1d2c8647a2f33a760578de62c6) >> >> endobj 5492 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 397.103 219.673 407.03] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_7332ce1c3c715011599d4b9d13e7b760) >> >> endobj 5493 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 358.248 237.935 368.176] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_27df51b1593f3642bfd9833e71c73a34) >> >> endobj 5494 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 319.394 263.538 329.322] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ce657c3f971b4ac9004a2639d142f636) >> >> endobj 5495 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 280.54 231.847 290.468] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_2cf5fc976d2663fed07f1f837245f36b) >> >> endobj 5496 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 241.686 251.772 251.613] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_b622892a80194a6a432510665156e4fb) >> >> endobj 5497 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 202.831 236.58 212.759] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_946bca82ae3fb279ad3d86dbc793be07) >> >> endobj 5498 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 163.977 235.723 173.905] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_7daf2b3a5c7e96f2823bca916554cc4b) >> >> endobj 5511 0 obj << /D [5509 0 R /XYZ 90 757.935 null] >> endobj 5508 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5550 0 obj << /Length 1688 /Filter /FlateDecode >> stream xÚÝY[OãF~ϯð£-‘é\Ÿó댱sç`çcãxÐøå”FN„"A…3¸u"ì‚ N‰3;×®@$òšcì>Žòyš9šxMʱ{šL¥õä­Ì<º2©G¡Kæ}|j´o ¯ÃÑð<@ãÎè¾qý;cxþÉÁˆE¡ó¨gÝ;>ep:ýÆo \+*e nDm§ó{™ÅE2Ksýær)¬ÃKëˆ@> &¥ ¦]û…R¾²Æ¹nrÐY¦}®ÄÏî¬==Cé^²2”YvŸß —V<#©yUÁ„È‘Ó$…˜i®ºA¿Ýë ûW­V»ß_Ç ©ï~ðàÂ]|P-^Vx†:öwN†Ý«óáùÕ™Qwй<ë´{›èÜ û.©EèM5þl‚"nI=ñ|ìu?žuº‡ÇîÅå6b>¢õ·s Þð:ð/¢©rFQHèÛ”7©'›Âb+%{ÃÔø~YÑG"â?-+’½²bÉõFóÎbªJªîr¼Fü]í™â,‰ëÍZøu·¨NØôû-V^“"@~ðÌñÚ9Ì6ó—œì–žAE.V³s¿ˆ‹¹MʺMÅ<³ùø^æy¬’Ôú‘ïØ üׄO2>»1°¶Ú‡=LžòÛÜ}›CÊOŠäÿDge­|:ÍmâjF`‘Úÿ5}E(\þ"bOd'Si;㙲äA÷#›y ëÓèp No6/’´”-±SL’²Á™'…M^cYÚþ1)&/µBö)´í«{0ÝVdj–®Rýœ¹ìªŠâÖú—ŽÀ¥ª$›eìÚ=„M¶Ê‰ªËFŒR[ÝÁÌ^ÚW”ù\fK%_²JKóü6›Ý[ó§åšÙÚÚŒ2µB›8‚  ^C‰ÚiÖ0BCá™Ùxi'ÀÌÉ ÜI Ž)(t?K§Oæ¯y® F7ªGœfÒÒÍþmY„Ôî$½GoÒÈw;vEbßu\¦ãTSÿÞH+I> endobj 5499 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 697.386 235.164 708.29] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef) >> >> endobj 5500 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 682.303 212.779 692.489] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3efc00b91a489f7273d2733f58201b6a723) >> >> endobj 5501 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [249.954 682.303 417.823 692.489] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef4ad61420ee56456d08647b222c4aa8af) >> >> endobj 5502 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [454.998 682.303 513.996 692.489] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef5ceed55803deb4a34266f23cf6d47274) >> >> endobj 5553 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 670.347 202.936 680.534] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef5ceed55803deb4a34266f23cf6d47274) >> >> endobj 5503 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [221.506 670.347 385.859 680.534] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3eff7a5cd4ed90aeef7598875cb5bf57a11) >> >> endobj 5504 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 654.546 271.419 664.733] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef67b504a215f2d34d1be4956b1e9e55b7) >> >> endobj 5505 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [317.78 654.546 478.825 664.733] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef0c9333946c5918c15c376f12e9afb086) >> >> endobj 5506 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 642.591 254.632 652.778] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef367f21cd3b49b178d4fdadaf74f2618d) >> >> endobj 5507 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.202 642.591 399.568 652.778] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef49231fa8fbeeca036424cd7df0d5a3a8) >> >> endobj 5527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 626.79 249.302 636.977] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef5b8db327b9d6bf09e93e7e0fed910792) >> >> endobj 5528 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [274.213 626.79 404.423 636.977] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef116bc901282cf346621b9e56e4676b24) >> >> endobj 5529 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [429.334 626.79 513.996 636.977] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3efe9b1b29365d17b25452562f770d44975) >> >> endobj 5554 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 614.835 168.485 625.022] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3efe9b1b29365d17b25452562f770d44975) >> >> endobj 5530 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [192.037 614.835 305.491 625.022] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef599ff63ed46928ffb2f5edc07de3ddcc) >> >> endobj 5531 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 598.69 245.974 609.22] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3eff6fc9ca59d14a8889809c050c01154ff) >> >> endobj 5532 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.39 543.721 168.675 554.625] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_47aa4e0a54f11d7ed5146c00906a3984) >> >> endobj 5533 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 532.14 167.08 542.67] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 5534 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 493.564 164.879 504.094] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_25ba0f0129e88c6e7c74d4562cf796cd) >> >> endobj 5535 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [282.971 493.564 311.513 504.094] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 5536 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 454.988 165.686 465.518] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_f2c6e7c95fd6741183b2b74dd24d59ce) >> >> endobj 5537 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [438.453 454.988 466.996 465.518] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 5538 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 416.038 163.783 426.942] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ef5d64e333f758458b1edaa617911513) >> >> endobj 5539 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 403.599 160.455 414.13] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) >> >> endobj 5540 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 390.787 161.412 401.317] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5541 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 335.818 234.049 346.722] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_8217718f8c515151dc33ceba922b39ba) >> >> endobj 5542 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 297.242 227.413 308.146] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 259.224 225.76 269.57] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5544 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 149.592 161.83 160.496] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_47aa4e0a54f11d7ed5146c00906a3984) >> >> endobj 5545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 129.945 158.503 140.849] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_25ba0f0129e88c6e7c74d4562cf796cd) >> >> endobj 5546 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 117.99 187.245 128.894] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_f2c6e7c95fd6741183b2b74dd24d59ce) >> >> endobj 5547 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 98.343 159.31 109.247] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_f2c6e7c95fd6741183b2b74dd24d59ce) >> >> endobj 5551 0 obj << /D [5549 0 R /XYZ 90 757.935 null] >> endobj 5552 0 obj << /D [5549 0 R /XYZ 90 716.221 null] >> endobj 5555 0 obj << /D [5549 0 R /XYZ 90 562.556 null] >> endobj 5556 0 obj << /D [5549 0 R /XYZ 90 354.653 null] >> endobj 558 0 obj << /D [5549 0 R /XYZ 90 221.61 null] >> endobj 5548 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5613 0 obj << /Length 1344 /Filter /FlateDecode >> stream xÚ͘MoÛ8†ïþB÷"kîð[ìÍi7Eìvc{Hƒ@¶Ç€-wý±iþý’"eK*$ñ°i÷`ˆ‘£‘øø!!X ;ÓÎWD )AD0} R`Ä ¦‹à>«n@ø2ßÓÕaž»=Â!¼Z­ÛºMž’]Ga’ÎIR…X²îÃôSg0íüÝÁúqàÌ=—HRÌ7ûÚþ)DU¼d£6#T_×Á¤ógC%àçPqÁ^&_Hê¼ÜΛ$=ćÕ65Qi—=Âeª8a7û·Eiú_&wãëéäñËMnVéö¸7=£Y‡$ݯn’CÇη×tôwÃL¶²ƒQDª%ñzfÇôšØ1÷ýØ1#3v a7ûldÇlpz"¤dEœþ?²#ÛRY2±&á V¤éfð`…ÃM¼ß[“#Ŷ×RˆBì\É4B"Y!Åx=“bzM¤˜=IfI1SI1ÏlW3ªŠ’›žE s@R—¥Šù­kŸ¨Mqãáô£5JÿB™—¶åŒç…²¶¯“tyx¶Æ¼HΆÛk]‘LbÌ£HV”U‹d.‹E2o)’¹o‘Ì]*É\6ÉÜg'nÜ4ÉEòW¥&ÕVÐ\\ù§%(§%ÈÓè qµI¬)ÏAàrÔæ !â±íƈ‘ª²¯…-9|«^¢ïÛm9„O• ¢%ݸÐJÊ´’´Þ -Ä\ ú#kRÞÄ0©J¹CcŸ%feZ¹¬Dö Æ˜êd몥]VÒT•íµ +QóAí)+4ß{ŸÃnöÙ"+²¥â•ºèWâ¿—•ÓŒêYµÐ%Ž|ªó#jaê®ÈQs…8wh “Ôlw²ÿ­d›Úë(o\™È’Y^öØcBxÏð{.Ý `b[Ofl&A–Ô›ë ·5Ëx6­Ùk~úýýu™¤Õ7ýiÌÔ endstream endobj 5612 0 obj << /Type /Page /Contents 5613 0 R /Resources 5611 0 R /MediaBox [0 0 595.276 841.89] /Parent 5469 0 R /Annots [ 5578 0 R 5579 0 R 5580 0 R 5581 0 R 5582 0 R 5583 0 R 5584 0 R 5585 0 R 5586 0 R 5587 0 R 5588 0 R 5589 0 R 5590 0 R 5591 0 R 5592 0 R 5593 0 R 5594 0 R 5595 0 R 5596 0 R 5597 0 R 5598 0 R 5622 0 R 5599 0 R 5600 0 R 5601 0 R 5602 0 R 5603 0 R 5604 0 R 5625 0 R 5605 0 R 5606 0 R 5607 0 R ] >> endobj 5578 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.139 677.939 390.264 688.843] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5579 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.948 677.939 489.822 688.843] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5580 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 665.984 150.223 676.888] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5581 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.563 616.165 389.688 627.069] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5582 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.813 616.165 489.686 627.069] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5583 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 604.209 150.223 615.113] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5584 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.582 554.39 384.707 565.294] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5585 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.641 554.39 488.514 565.294] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5586 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 542.435 150.223 553.339] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5587 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [436.941 492.616 478.066 503.52] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5588 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 480.661 151.877 491.565] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5589 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.887 480.661 237.107 491.565] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5590 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.493 430.842 390.618 441.746] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5591 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.032 430.842 489.905 441.746] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5592 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 418.887 150.223 429.791] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5593 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.947 369.068 410.072 379.972] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5594 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.488 369.068 507.361 379.972] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5595 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 357.113 167.1 368.017] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5596 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.082 307.294 350.207 318.197] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5597 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.113 307.294 445.986 318.197] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5598 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.836 307.294 513.996 318.197] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 295.338 110.373 306.242] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.173 245.519 384.299 256.423] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.545 245.519 488.418 256.423] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 233.564 150.223 244.468] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5602 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.41 183.745 349.535 194.649] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5603 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.833 183.745 445.707 194.649] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5604 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.836 183.745 513.996 194.649] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 171.79 110.373 182.694] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5605 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [342.246 121.971 383.372 132.875] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5606 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.327 121.971 488.2 132.875] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5607 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 110.016 150.223 120.92] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5614 0 obj << /D [5612 0 R /XYZ 90 757.935 null] >> endobj 562 0 obj << /D [5612 0 R /XYZ 90 733.028 null] >> endobj 5482 0 obj << /D [5612 0 R /XYZ 90 716.221 null] >> endobj 5615 0 obj << /D [5612 0 R /XYZ 90 716.221 null] >> endobj 5483 0 obj << /D [5612 0 R /XYZ 227.044 669.137 null] >> endobj 5616 0 obj << /D [5612 0 R /XYZ 90 652.41 null] >> endobj 5484 0 obj << /D [5612 0 R /XYZ 227.044 607.362 null] >> endobj 5617 0 obj << /D [5612 0 R /XYZ 90 590.635 null] >> endobj 5512 0 obj << /D [5612 0 R /XYZ 227.044 545.588 null] >> endobj 5618 0 obj << /D [5612 0 R /XYZ 90 528.861 null] >> endobj 5513 0 obj << /D [5612 0 R /XYZ 313.928 483.814 null] >> endobj 5619 0 obj << /D [5612 0 R /XYZ 90 467.087 null] >> endobj 5514 0 obj << /D [5612 0 R /XYZ 227.044 422.04 null] >> endobj 5620 0 obj << /D [5612 0 R /XYZ 90 405.313 null] >> endobj 5515 0 obj << /D [5612 0 R /XYZ 243.921 360.266 null] >> endobj 5621 0 obj << /D [5612 0 R /XYZ 90 343.539 null] >> endobj 5516 0 obj << /D [5612 0 R /XYZ 187.194 298.491 null] >> endobj 5623 0 obj << /D [5612 0 R /XYZ 90 281.764 null] >> endobj 5517 0 obj << /D [5612 0 R /XYZ 227.044 236.717 null] >> endobj 5624 0 obj << /D [5612 0 R /XYZ 90 219.99 null] >> endobj 5518 0 obj << /D [5612 0 R /XYZ 187.194 174.943 null] >> endobj 5626 0 obj << /D [5612 0 R /XYZ 90 158.216 null] >> endobj 5519 0 obj << /D [5612 0 R /XYZ 227.044 113.169 null] >> endobj 5611 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5650 0 obj << /Length 1309 /Filter /FlateDecode >> stream xÚ͘moâ8Çßó)"Ý›Dºúìø¹ïú@+ =w»êVJÊ"AØ °Û~ûÇN!é’¤º»Õ½@ØÃäï‰ócfbì-<ìuZ—Që·›P{i /zò4ö¤ ˆ‡Ä‹æÞ½/ÑÁÁûß·ûd¹Û¢/ÁYȱ³\Åv4ŒŸâ4 Ê“Gc’T(ŸHÛ Nn§‡–wŸy›ç¶²‘ÆǸ ì΂ö¯ Ä°?Mæ…°«5MÔ“ÝË×x[–»°2F¯™Ì™ñƒgÉ`@æ¼´=o–€g¸XmfÓ• BÛ´œÎVñ¹ ÕÅgK]&¬&rÀæÀpR†‡°Ï–;kÉÉ|­é0 b• €Q*,êGÀÀ•À€wC`@És»Z³§×Læ°Ô?ZÌÕ`ÜÏ‘ #ä8F†In‘1öÇÍ>ÙÙ¡ƒÆül 1¦Ðp‚µÐZ„— 1ªhÌZUÐïfÐpê 9 û”&o‘©€¶™#.ˆãCØ{|•ý÷AaEPX (·ç~Æã붆VË9FêBŽ©Í10ØîâÕjê&ëéît?í4O;RÙ´¦)†$ü»ê‚;墜v@õ(íÀ¬2íÀï ÓŽ.í®֬$(Ë"!HCKRÈ"5¹ÿ—•ò ¯Áè®û±Ýsø°Æù†hzŒÑ®Dû×å³1Ç+;uÄØ+¬ë©B¥å¬A¡ ålzˆç@ŒY£ŠãÝÌ,1æ’JbrÍêœc"«„£ “*Ž‘àä'*QÎhÐ^šûQwàøáù¡¤P¯(‘–cßn²äclëévkét·ÜX£ÊJXÓ©B‡/¤ ^%_y2KTñd¼›ñD)µ<E]­Ù$1ÄáñÍ@²¤?ÆýAï‡L$ÞÑù¨bç£òÎG™ˆ±¿yÍFÆôÚ)שŠ(ä²IDÕ›H: UÓ©ÆÏ; UשF¬í€¨.Õ¶ŸŽª§}ºË;Yßùô÷ëYlºú›'óMý8Ù¥ËxkYC#N–'ŒoPœ´&åv4ÚX¶²ï†ÅI8Œdu;ã4kÞ¢DÝ[” õß–,HªL—JÖ?îŠów§v²_ÇYEH¬ZHæÃmÙÙõæ~OvÖÁÄbðG¥Ç|Q”ŸõÄ sbœ¦ëíb’ýR¸Ã3 ÏW€¼ZÍ&=/8çßÀ‘(õ/°/ aZŒæöp8¯®Ú£ÑU2š9ÒŒ”.º4;yq=éo'·ãž9J‹ºw½n{X­S’¹Îdú^·ß1Ç\ƒ»w]žGÑC÷¢7}º½ôÞ%q3î_A/чWà~Ôþýðâò‰ PHÕô@0?„–]BÖ¶\#Î]081Òžv@íp|Ýæƒs›ñÌND~xÎÈ9—vbs&dFOÆ×žÛdI«×½´c(ØŽf/9±Ï/‹8)Ü1Üéß²ZW… endstream endobj 5649 0 obj << /Type /Page /Contents 5650 0 R /Resources 5648 0 R /MediaBox [0 0 595.276 841.89] /Parent 5469 0 R /Annots [ 5608 0 R 5609 0 R 5610 0 R 5653 0 R 5627 0 R 5628 0 R 5629 0 R 5655 0 R 5630 0 R 5631 0 R 5632 0 R 5633 0 R 5634 0 R 5635 0 R 5636 0 R 5637 0 R 5638 0 R 5659 0 R 5639 0 R 5640 0 R 5641 0 R 5642 0 R 5643 0 R 5644 0 R 5645 0 R 5646 0 R 5647 0 R ] >> endobj 5608 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.896 702.288 348.022 713.192] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.203 702.288 445.076 713.192] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.836 702.288 513.996 713.192] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5653 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 690.333 110.373 701.237] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.22 640.514 347.345 651.418] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5628 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [381.923 640.514 444.797 651.418] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5629 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.836 640.514 513.996 651.418] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5655 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 628.559 110.373 639.462] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5630 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [342.402 578.739 383.527 589.643] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5631 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.363 578.739 488.237 589.643] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5632 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 566.784 150.223 577.688] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5633 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.896 516.965 409.021 527.869] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5634 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.488 516.965 507.361 527.869] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5635 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 505.01 167.1 515.914] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5636 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.036 455.191 350.162 466.095] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5637 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.094 455.191 445.968 466.095] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5638 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.836 455.191 513.996 466.095] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5659 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 443.236 110.373 454.14] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5639 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.68 393.417 407.805 404.321] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5640 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.488 393.417 507.361 404.321] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5641 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 381.462 167.1 392.366] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5642 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [342.305 331.643 383.43 342.547] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5643 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.34 331.643 488.214 342.547] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5644 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 319.687 150.223 330.591] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5645 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [282.956 269.868 324.082 280.772] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5646 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.012 269.868 421.886 280.772] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ec5892437858120d456503fe38f4031b) >> >> endobj 5647 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.142 269.868 507.361 280.772] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) >> >> endobj 5651 0 obj << /D [5649 0 R /XYZ 90 757.935 null] >> endobj 5652 0 obj << /D [5649 0 R /XYZ 90 733.028 null] >> endobj 5520 0 obj << /D [5649 0 R /XYZ 187.194 693.486 null] >> endobj 5654 0 obj << /D [5649 0 R /XYZ 90 676.759 null] >> endobj 5521 0 obj << /D [5649 0 R /XYZ 187.194 631.712 null] >> endobj 5656 0 obj << /D [5649 0 R /XYZ 90 614.984 null] >> endobj 5522 0 obj << /D [5649 0 R /XYZ 227.044 569.937 null] >> endobj 5657 0 obj << /D [5649 0 R /XYZ 90 553.21 null] >> endobj 5523 0 obj << /D [5649 0 R /XYZ 243.921 508.163 null] >> endobj 5658 0 obj << /D [5649 0 R /XYZ 90 491.436 null] >> endobj 5524 0 obj << /D [5649 0 R /XYZ 187.194 446.389 null] >> endobj 5660 0 obj << /D [5649 0 R /XYZ 90 429.662 null] >> endobj 5525 0 obj << /D [5649 0 R /XYZ 243.921 384.615 null] >> endobj 5661 0 obj << /D [5649 0 R /XYZ 90 367.888 null] >> endobj 5526 0 obj << /D [5649 0 R /XYZ 227.044 322.841 null] >> endobj 5662 0 obj << /D [5649 0 R /XYZ 90 306.113 null] >> endobj 566 0 obj << /D [5649 0 R /XYZ 90 244.339 null] >> endobj 5557 0 obj << /D [5649 0 R /XYZ 90 220.125 null] >> endobj 5663 0 obj << /D [5649 0 R /XYZ 90 220.125 null] >> endobj 5558 0 obj << /D [5649 0 R /XYZ 107.713 160.956 null] >> endobj 5559 0 obj << /D [5649 0 R /XYZ 107.713 145.015 null] >> endobj 5560 0 obj << /D [5649 0 R /XYZ 107.713 129.075 null] >> endobj 5561 0 obj << /D [5649 0 R /XYZ 107.713 113.135 null] >> endobj 5562 0 obj << /D [5649 0 R /XYZ 107.713 97.195 null] >> endobj 5648 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5671 0 obj << /Length 1801 /Filter /FlateDecode >> stream xÚÝX[sÛ6~÷¯`óDu- LfwÆví6]Gv%evw’Œ†¡ ›SštI*nòë{.ISv’Ç}@\Îõ;ˆz7õ~9:]ýtÁ/!‰äÒ[n¼„z‘dDpæ-×Þ;_–L¦ŒRê?dͶÌÛ†ÜN¦\Pÿ"/”™ÍÕFÕûªÌp) dì³HN>,;:_ýyÄ€õ˜&/"ÂËîŽÞ} ÞÖó( ’Ø{Чî¼0Þâè÷#jE¥]‘CÙ™1J8 ½ˆ„Jaä~;{½\œÏç«Ó þÉÏ«óÿ^_ÍV‹ÿ½9½ºÔr ÃÏ” ’„og†Äåêt~2‘Â?û÷ùò;)\Obçç³oºv5[œŸ­N_Ï®®Oßdƒ«–!ÌWð9 ©5ÿ&ÞÎ|¸°Z\ŸŸ}×í‹·³³Å7Úlqrq¾ZÎOfý‹¼N¹qþ4à€T±- -l/¶eÖæUi ús•mïTÙ¦z £<$A˜tïfoçe )Û¡_™Ï÷TЬ*»›Ý¦5RB3¬ <4íÛôÓ„ _™“==€)g±;ø¸ËÈÿp<™†¨?ËHR&Ò]˜0ê§ ù(Ÿ8ø¬«íÇÂJÇÂέP(fîÖ{Jƒ1H‡îL“¥Å˜žà®0 Ü)Í—æD$Œå·ð­6˜‡6Sžs"¨øZæÓ Žˆ`”‘Dˆ'…A#î(ßWˆ{íUÉ!âŽÖ´õ6k Jlª®Gd’OÖsÄy'¡ØÙyG¬™(ÜLÄ”"Ã$"’[½÷ø7„hìÓq“ š˜Ve­ê­aߘÅöÖV@6&%³Y7»0ÝÔÕ™U¥=Ú|nZå7fÔY’•Ó²êõDŸu¬tF›gNœp÷µÊÒV­-ÛªphosË`cóȱMGXÎê[׿ÉÞ9×i©vVè&/ãmr5Þp›Gë;CGs™XGã¶ö…u½v´fÞq´ÞµN5N$ð÷œþÿâh£ÍÏ:Y7Çûr|ü¨(r}µ4ÙUdzGŽìçýmccm$31Ôå$¢ É I]Â@¸2ý€>ص*^ˆ“¼F¬¢?š h¸×Yþ”[0´„ºý3T­¥ùʪ6n{œ£Anr-4c‰«¯3(=iQ|¶†í•W(Ç,8ØáôÂûƒ]‡ƒ^—ø_TP`zEødê¾5;8)ª›}ÝÆ“»²»ŽTìF70ÒWä†L¦ dÁ–Ú›_¿àÅæ¦ÎÂ0¾0$íž-Ò2&1û!s™Ì„7êxÌ6p>bûÆëa×põÌ%]³Lú%V{æk«ë„•žö …[ÚP81÷{£àéq£·FAó¼èܼk¬]"Ú‰tüÔ·NœAYÞn›C=”ݨjHOi£zö`“7í®ÁùŠ aø4 Â~Üð£``W™p0b<`ìò?M`èX{õd¶aQB".ûÑñ|¾±Ó¡¤ÂL{c¿ÖÝ8³L¡÷_ëž,öm2–»VÏ|ÕªÝÖvþ ±ˆê7¶Mc½×<âöýk¬?£$ ;¸2ËØ5™²óÀzSfŽkÓÜŠša­`©0k„Ú;áïTÓ¤7êØl4JêWñéGx(û¸2MèÊXæPK±Ô“Zd}´EgööòÒ–kÇ͸:û…ºv×’7ùHEêw«ÐÒK™fÕÊ=G/a”ƒFuè‘uѦ­‹¦½·éÞÛ}Š y½zøžs10’~ÔÑ—ÆR‹m–Ú}­ÿ}¢Á¦‰£r@NÝÂ>û*)L~Ñiâ°c¿G@§å¬*§€U|E¥e§T·5x±g˜±'˜¹ÀmlÞ|ì(Sì{ÐÃêè€îýÙµîP®²l[þß • »§¯ü»Óý#+!C&6ÿÈŠ„aøE•ªÞ¿XÀoÜä1«>šipPÈ^ŠÈ|qʸ5žuºüçlqùúÔÌáEmdvÿ›ýõùF•CMÿ®ˆ| endstream endobj 5670 0 obj << /Type /Page /Contents 5671 0 R /Resources 5669 0 R /MediaBox [0 0 595.276 841.89] /Parent 5674 0 R /Annots [ 5664 0 R 5665 0 R 5666 0 R ] >> endobj 5664 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 504.583 275.542 515.487] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ef5d64e333f758458b1edaa617911513) >> >> endobj 5665 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 294.506 194.796 305.409] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 5666 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.761 219.297 268.16 229.828] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_f2c6e7c95fd6741183b2b74dd24d59ce) >> >> endobj 5672 0 obj << /D [5670 0 R /XYZ 90 757.935 null] >> endobj 5563 0 obj << /D [5670 0 R /XYZ 107.713 723.065 null] >> endobj 5564 0 obj << /D [5670 0 R /XYZ 107.713 707.125 null] >> endobj 5565 0 obj << /D [5670 0 R /XYZ 107.713 691.185 null] >> endobj 5566 0 obj << /D [5670 0 R /XYZ 107.713 675.245 null] >> endobj 5567 0 obj << /D [5670 0 R /XYZ 107.713 659.304 null] >> endobj 5568 0 obj << /D [5670 0 R /XYZ 107.713 643.364 null] >> endobj 5569 0 obj << /D [5670 0 R /XYZ 107.713 627.424 null] >> endobj 5570 0 obj << /D [5670 0 R /XYZ 107.713 611.484 null] >> endobj 570 0 obj << /D [5670 0 R /XYZ 90 595.698 null] >> endobj 5571 0 obj << /D [5670 0 R /XYZ 90 572.445 null] >> endobj 5673 0 obj << /D [5670 0 R /XYZ 90 572.445 null] >> endobj 5572 0 obj << /D [5670 0 R /XYZ 90 164.194 null] >> endobj 5669 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F14 1078 0 R /F20 595 0 R /F38 780 0 R /F40 846 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5678 0 obj << /Length 2452 /Filter /FlateDecode >> stream xÚµY{oÜ8ÿ?Ÿb08 qmËÏ{@›LÞ ö2Ù=ôÚâàñh2FýÈÚž¦ÓO¤Hù1õdw¸‰%J")Šü‘R¬ÉÓÄš\}x}±&+ _O,SDáäEÍÊ'®#à›MGÿ8²^UÕ¦å{ª¦k:¬nZ4¤êÝ€zžQ°¾Ÿ-ÏÂaPïí¹ë÷xÚ¶ í$*–ISe4k Ùf(ÚI'Ç3ä%›¸áèD¦zª²_S°tÓž÷ öàÆf K¶I·Y1Ûíq\ÓµZŸ-KàïØÓõZ•ZfÃ:¦¸3ÏÆI“™º¦)3;0}ǥ቗Õã%BÓ ½/Kñ›yŽk4U\ÔYÜÈûÂHdÕÄiAƒI™çe‘í¨·­åŠZËcÇ2¶ uв˜ÕM\¬âjE<ÐÈ4vK‹§­9†4ŸL°«-cz6¿˜2yzwù/h«í±ª0ÉŒœjS•YM½¨Ý²Ž#¶bÜÂü‚ßz›p)“ĵÜsÿ‰m™¶ïÏô#ÎtŸÇÛ‹w• íw„eÇšS#Þ‚1°aéà[ÃHUjbpz¯ q^r¹/dó_ q_r¶/dEB€sßV,áq£]E¾jýò }-çRÖÅ,MÐù=zG5ÝElÍ@û²‘•ŒŠ :Q:eû @æûØ9€<x3²Ãáöþö§€×+öaž€2«Ã¼{HÊ3â<-º„…eeœ Äs¬b¶ :?ÔJPáì¥%˜]üY&)DŒ“h”ëßrϨ:“Hš¾B´žÃ\YŠõ³°}-›J \'ƒ0ÈðKÅ 4búœ_=.°å(Æ+Z@ýЉHA;„vÜj‘*¯€LU’6€#a—WkoÅ "UÍ˱8CUUÀ”ÈëÛWD¬6õá±&â›OoˆÒxÉ|®:‘DU'µi%œÌÒ£ì83¼ˆp€‡[¶zê!Láªà¸¦²Óÿ¦¼Óu,|JîŽÀ·¬öX£Èt}‘üð¢ÙÿòÓg­ßŽŠ'€OŒ;Dt÷g%â*ÉUɈ/ÎÔAó æïNï®îň,XTˤã‡ÅütÐYŒè°”qΆÀ'·ËÞáh6æAÖ¶ð"ÎòðJÎMu'ç‹<öÏÞìZc{ZIM­JJÍRu4׳ùE×z˜Ï±}^\þ`®#R7¼‡MÕÓû²§÷åÃWd깸쇞6Æük+üf8Îl®wÌæúãÈêVí«Ì¾¥Ë¡Ž6ÇMèf84¿ý½õ$ê,¡¶ÿ/?Tñ_ü‹þÏŠÊB!ÿgÅ‹LÏÓ†—…¬º©¾FÞéÆ9¢‡\Rǧm½síwß¾Ëvøçê¤ùÏÓÅíÕj»¦Í¯KNÉgå÷Ý“,öwú ™Ê endstream endobj 5677 0 obj << /Type /Page /Contents 5678 0 R /Resources 5676 0 R /MediaBox [0 0 595.276 841.89] /Parent 5674 0 R /Annots [ 5667 0 R 5668 0 R 5675 0 R ] >> endobj 5667 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.869 690.333 296.268 701.237] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_f2c6e7c95fd6741183b2b74dd24d59ce) >> >> endobj 5668 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 660.753 272.215 671.657] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) >> >> endobj 5675 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 429.726 194.796 440.63] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 5679 0 obj << /D [5677 0 R /XYZ 90 757.935 null] >> endobj 5680 0 obj << /D [5677 0 R /XYZ 90 733.028 null] >> endobj 5676 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F14 1078 0 R /F20 595 0 R /F11 1076 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5686 0 obj << /Length 2320 /Filter /FlateDecode >> stream xÚ½Y[sÛ:~ϯðæÉž©¹¢îê™Ù·MZŸã¸Ùا»Ýl¦#ËŒ£©,¹”ÜÔç×/@‚º8ršéþD ‚|k°Xƒ÷go–g¿´£AÄ"ßöËûAd Ÿ3Ïæƒåzp;ôFcnYÖð1)÷yZ•ìa4¶=kx™fBS7â^ȇ"Op*püpȃpt·üýìbyöíŒÃqÖ€+ñ^ÀÇ$Û³Û;k°†ùßs¢p𨸶×và› gÿ<³Úª:á `Q`qT•óù‘=l‡Y¾§õýº=´ýã O‡­ãˆ¹¾«WaÑGS¶¢’â• -dCKQ¶ÌàÊ|/–7 }qÓž_´íóI»mšÆnˆ,Óy~Wþ2ëþÓ³ÿãÃ–Ö  žî¿ŽÉú]\&qFêè±äº½tÝ]š,ÞNfAŸ»ô‡ÈFcGÉFºÞ?ý÷ŬM/zt”ñšl*sâ×#éfò®¡¦“ygЧSI7[Š„x*òug`¤ÿ×ò¬üá4^\¼m¨ówAŸ Ÿè´ïEV3’Fþ§fúS{úãlÙ"ûÌ8HºÀƒˆMP"iD|6ñöùbÒ&•,He«•Êc[çä#s¸¯X>`‚†Î0ÎÒ¸¥œÇù¦¬d±=™vćç_†Žó5q½9Tâ\Ó÷…ÔúrB»iDéñÖìD‡ÓÙ’”p-›<ýKÔl 24VÈ ÆÍû³Á­ZGÐáÞðþA‘–«wi¤@—rÎ"| %²{TqIß\÷yq?²=°Â²“4Îô¬>¡y™ÄX€ê0¯¬À¸Xb€áp5²AZÕ0„%i „àÈ…HQªËJÜÅ ÑzžÞjêAHÁè¢Û˜ ö:6ã®ß@6s™C°æ¨•m“ó~=B×B%-&±Ô¢AL#š»³ýŽP¢þW²Gˆ1î†ïÎöƒá8Çõ<¥‚ÚÂÝö–ˆqß6[àœ@läžû}žôœ u 䵎tæºØ¯ Tžë„Ìr^r¬kx"EŸÍsç™s;"»ç*Ož9'ü®ß'Ím ){ì;g¡åw“í®Q¯µZSBgÌsTïÕ3ÕÀ³ÚÕ ¿¨¤DÎ,N¾–G({2lÈÇñÚÑdN'œ»™«žq©Ê:šeÓØö]„.s‚š7\$£|ÝÐê¨ ÈXø°Å³¾®u*ËÝ o+ÙÉUHùUçû,ƒ^ÐÁê;„´WE²,VÃXÊø€dˆá^Åi®ò —”ב ØFž£Ô…« lN1ë‰Å™b_àØÌ‡Lëd\¹—Âo­NsHÚo{Ut]‡W áWô¬ÀsqcEµ/8Hó,͉õH¡ê7èÇ ²WÔhÆû"XÈ ÄŒG:•kQf’e= ç#„ z.íͲt“€Ç‘Ów6pD…½ÑþöÓë6…óÔ]à ªFåzÁtB&)w;ƒ¥ 4Ê‹Š(·²ƒ±«j†VÕ§m{G9:ö­×€?à¡y‘‹§Íh¹Ï à$ +6MYA­c€ž¤"·ú…;Ï ·ðüÙâ—D;$ZÇ׮Ǟx›Yaׯ?º‰9^›}AEÏ ÚEO ¡‹¤ª¤ÖSG)ôVo¸ÝgUºSÕ ¸cÍú³'Îöt 9žß¥ª0…åÖ9Áp£«´*@yst©WWÃNù…Š¢.V´i7ßOê3N¦ÕSS§õã yyº¾ø®êæð¹»jÚ1¬°m\ä“®'SZ\ l„ åf5Ÿ+û€ÚiDƒê£Çª2×ûú h°†òО5Gj ¡¡ÄXö\h 6™Â‰ nã²|E·á3‹wo#ù¦z@VÛVШ©º EMÇAk¢J^´5¼–ÐS DŒºM€émœH´êÈ¿Þ.þœCÇøe¾ü|}¡—•lìEÐ7¹r°*óqÚtJ}謻ìuŒ¨‚ˆÁÒ t#„«D«$NÝW!Uks=›Ì/¾Læïgø+’EÍÒìbþ~ùZRmeà«àk«Cž‹´Û„)"x;eÓ‡µèm!!¹vÕIÏ·Ûõ‡ÐÀ’ú©ÁåõÏ}_ÔÕÞÞie'õ²ú{{§vÑc×ó!drË͸£ßµ(™® ˆÆ ýº%<¯°Mïö™µ­ÿ¯\¤ñT&B§Ë½ºWœªVb4á¨é·˜nWS Õ^]ƒ!½ 9ï<Â#f7‡ü£¯µX݇r:ÖôÓ~ónú1Í2MQ¦±þ¬LeºGÐv£ú¢-Þèê¨ê¢5Ç+³Ý£ç§n¶¿h¿œjÖ™.…W1]º ŠùŸ³Ýþ}÷ç›ZAË(H|eÝœ˜×G™öôVݮܵôc¶Ý”ßà%aÂçGùñ´;qʸEW{Ò¤¹l«¹ì£† ²Õõt|†þËú¥Å^á{Ú{´úßõLS*}J«”-ßoáUœsuOûÞ6õiöËš¨wX©;†÷„¤û.vBÆ«¿|†óœEåa»*.RºŠ) ït2«{ÓçÿÚñ.ÙéšÓæûT©“gÿÛÄz½ð¿&æ;>‹'¤ìxó<ê£ß‹m^ãF×+C\¢šb¥¾éž_»üµè‘mq› ÈkòÊÙlú†^ n}ÍtÅÈ-ýVY·³ endstream endobj 5685 0 obj << /Type /Page /Contents 5686 0 R /Resources 5684 0 R /MediaBox [0 0 595.276 841.89] /Parent 5674 0 R /Annots [ 5681 0 R 5682 0 R 5683 0 R ] >> endobj 5681 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.597 597.951 513.996 608.855] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_f2c6e7c95fd6741183b2b74dd24d59ce) >> >> endobj 5682 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 482.736 273.171 493.64] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5683 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 208.932 194.796 219.836] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 5687 0 obj << /D [5685 0 R /XYZ 90 757.935 null] >> endobj 5573 0 obj << /D [5685 0 R /XYZ 476.377 589.149 null] >> endobj 5688 0 obj << /D [5685 0 R /XYZ 90 572.471 null] >> endobj 5684 0 obj << /Font << /F29 635 0 R /F38 780 0 R /F20 595 0 R /F46 2400 0 R /F14 1078 0 R /F11 1076 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5691 0 obj << /Length 2109 /Filter /FlateDecode >> stream xÚµÙ’Û¸ñ}¾‚Å'ªj…%H‚‡ßâÇë­xíÄ“£jìJAFb…‡BR;£ýút£›)qì‰+yP }Ÿðã;oo^ßÝüxdN&²8ˆ»'ó$–BÒ¹Û:÷^,d¶ZKß÷½Ç¼;ÖE߉ýj(ß»-JC«¿˜Ó®dê™:Ç­$ŒSO&ÙêËÝ/7oînþ}#œïH‹^%" •“W7÷_|g û¿8¾³Ôy´P•!ü—Χ›?ßøÌª?cÙŸ°,)d:I ?VÄ÷ç P–üpϹ_+B½Z­Cé{ïêUä{¿­å鲨’Ý©Ú4%­‹šþßüãã‡_i™7uoVRyO½˜ãöµT"‹¾N;fÚ­7ºÔ *&»iuþ¯˜ïÛ<ƒ÷ [S÷{ÓÝwáMïOMÝ™üب­ßPl÷MQëöDëæ`ZÝ7ís¤ä×ie£]zÓÖº%èÀ³ìÚ´mÓ®”ò,ÀŠHÍäèr=x¤®YÖcï¿ðnËÇ¿›¶´Ô°¡[Ó[^š)mÏó# y:k Ž-Cü_¨4!ž~mzÓ½šI|å¾ ÇÅ-).od—7"8±°–¥y2ÌÑu˜ˆ8HÀϾòá'AŽ òŠÿCÌV]7·-ž×t®óÜú¢ÞÑöã¾ÚÆ9XATÒÆ$Hº Lôi-B;ÝÁäÅgßrÝM=P0퀼§­mc:2:K´–RdŠC½n,K½¼5º7´Öզ؋þDŸ(»;±ZƒæÎ76¦4¦æ+ôW™¾-rZZƒì=1€uª3äFw E«n×;ÔóäÑE—Ç-)΋z GbùsÊ‚²9œ[6;Z¡™YF3+_ÈTžÍì‡ø[ðv5 I—PƒYsNëÖ1àÿ¡i+°*‡÷¶èà£A/y4Û‹_'Jø)šh,E –âüÓñphÚ~>öSw`ÿ‹8qm?d¬ñ×ó‡«A™}ÛTîYWÞ¾ûÈY Ó;þ?q"Ñ<éëí¶`„¯¾aKüa ñ]éÔmöÿWî>ì¿—±×§ÞL8Ë›ª°ÿxÛ …K¯™Ù—½&\ôš»U ¨7˜Ý#x1þ…^ó@Ÿÿém|DoÒ¬¸ÿŽþʢă0Œy®¦cÎG¸|hZ‚ãpÀ½!àö˜ð:ß±5gá±N²Äû™¿Ï$[l:~À$d3'Æ>'sJìäýõÅÒ+ªCi*¨âœ £ %ž^ñ§;›[è÷º¦Jy"âöfFÄ ’?ÆhriÝA×õ±â„¦@P÷ÔNNOF·t¸ÉÜC aª,¨­æ9cŠdnQô.¯mr Ó˜}e¾«Xh\] wJÓutJãŠ%Æc+1îÍ$Æ +1.ÜJï\‚FV»Þ”¥n—d@À|ÜÚ¨#Ä9ÌÞ3- ‘L<÷£KÛV¦×X¸c ÿ“’hs/î“›b»%‡M/MÙJŒn´maä!°^¶Í·Á. B?;r'ø|,ú=ã£øq—¤FtŒ]–6èÄl C° Ȳ¶¬¬W€^Ö*m÷C` …ë+[ ®œU±²¾z¢íy%¢;dFX¸{—Èï¾9¶¤¼‡®4ŒcÍÝâ Î|[}â Qæu 0ë˜Æ=œY_Àù4Ð0èÆ`ý,ˆi+èŽþEÞ¬‘Õ™`SÒ2•|;¡H·¦Ôg*‚²B±^²HqÙ…¯Ç43ɵÑb®½=Ö9gð$óúÓ ƒKèC†X0ìêIO™p´â‚Êúa~Ziì%Ò!á–m¦ùnÏ÷†]¯[ÞÃD?;zH›÷àx!¤Þ»‹ ®-k€Ò‹œŒ øA“€á#ò-‰~`:3@ÀÀ‹vÒFÓ‚:»¡ù늭¹x5Œ_®¶£óîˆió^žÍ½jvFï¾ÿùww@ºØ5’yì\®†©eÒßižuÏè×öŠé¬U $áW”>$N,²$LíS;¡ˆ%s/´œCÛ~z,Jî6f:xqSy5SÅJpwBªôü(!"ñÃÄÎ éøBA_ÔÊÔæ{Êç?ÞFñTÐɱ{Þk‚®yš§©{ 'Þ,T±ò¾M(–"ŠG…>b‡¯ñE:i?CgÛ7¥Y¢XDi0xHDpÇи ø"JÆ)á[tÆätGŒànXÔ:³$|åÇ/%õ:É#¾¬UÏ0%£‚T@ìœÕ.ñ ¥¦£³ä4زŸê={£šy£¢÷²¾EoªÏ½u1˜|î„Ò*R¹¼oË%ÇÁ1’‰n0]?ãmA&ÂQã6(úE1!Ã+Ÿ>‹+S_¤ŠåU3yã%yKó4#(&”ÿ|ð¡Ù’ò™,Ä„b®}4¦Ñ7s☗—ÔžŠs`1ɯ…C¢þ+ª/ÃKº3”sº”—qfáóæ¡s d¼`ïÁ»ÿ¶Êpæ)hCÓþ±Éç … „40ÓûB2†E¯˜é0E…Ç×:œ‰2ÓáøÿiÚ¶êvƒ` õhÅ"ÈRûXÁoÎÏ{L0ñvóùµÒýP>©Á Žß‘‹pÛTüÚ¡,C 0ïÀ.ŸÊãTdPq^øR><æO*´ï(P½b1ßšßh/>ß‹[”Âlè#¦?鿊ä+•ÐWàË€@ØAi0€ÿéÝkZGzªï§ÁAžN;S_JúYŠ+‰ endstream endobj 5690 0 obj << /Type /Page /Contents 5691 0 R /Resources 5689 0 R /MediaBox [0 0 595.276 841.89] /Parent 5674 0 R >> endobj 5692 0 obj << /D [5690 0 R /XYZ 90 757.935 null] >> endobj 5693 0 obj << /D [5690 0 R /XYZ 90 604.011 null] >> endobj 5694 0 obj << /D [5690 0 R /XYZ 90 558.138 null] >> endobj 5695 0 obj << /D [5690 0 R /XYZ 90 486.407 null] >> endobj 5696 0 obj << /D [5690 0 R /XYZ 90 378.81 null] >> endobj 2077 0 obj << /D [5690 0 R /XYZ 90 328.997 null] >> endobj 5697 0 obj << /D [5690 0 R /XYZ 90 314.427 null] >> endobj 2076 0 obj << /D [5690 0 R /XYZ 90 284.972 null] >> endobj 5698 0 obj << /D [5690 0 R /XYZ 90 270.402 null] >> endobj 5574 0 obj << /D [5690 0 R /XYZ 90 253.076 null] >> endobj 5699 0 obj << /D [5690 0 R /XYZ 90 238.506 null] >> endobj 574 0 obj << /D [5690 0 R /XYZ 90 206.012 null] >> endobj 5575 0 obj << /D [5690 0 R /XYZ 90 183.576 null] >> endobj 5700 0 obj << /D [5690 0 R /XYZ 90 183.576 null] >> endobj 5576 0 obj << /D [5690 0 R /XYZ 371.451 148.447 null] >> endobj 5689 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F14 1078 0 R /F8 1123 0 R /F7 1124 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5704 0 obj << /Length 784 /Filter /FlateDecode >> stream xÚÅVKsÛ ¾ëWp”¦€„9&­3I3m<Óƒ“é`‰ÈL%äH8‰ÿ}‘€ø1iâQú8Ø fùøvÙÝJ€À¹w:óÞMI2˜Å$³[!ÄR‚Á¬s?†8 &!ä?äÝZ ÕÁe0!ùSQq3ûÆoyàÔç2ï—’0N}œ¢àfvé}˜ywÖÇ!€xšÀ$¤ ¯½ù …^¿†Y «D$Ôc®¼¯z‘* !Šé–*¤Xºy#;eøåKÖö\ÞMq´¦0Õ3d¶_#£½S%ÄÙ¸üP›ïæú¤8ñoì.´³k’Åh&81‰Ìî/¬æatÛ´f²ZÔßt"g•Y¸[3©„ÎR5f¬™ÊmàÕÒÆ}àb¦÷¦>Ï•Ãm¹Z·’æk±yÆ3’ ˆÃh×·Š?òg¼ {'Òm (Ò?|2\¯»0!†¡öUŸif}¾&„îÛÍ'Tß: &!ÖþWLZo˜,+¾o‹t5žÅK`Ø‚uM%ŠWÁèË`Ä‚ I£sºZ˜ºéTd¯W¼eú:Ç¡§Z×B6k›/B*.;¡6£0cçëºQ‰#Åe©–£â“ºøˆz\`2 °à¬€]/„—·ø @cð”¬ÍZŽ„p‰Ú)^U¬uݦԽe]Œ‹,v¹»C_ªÆ…‡nëÚÓ… šq¤\ÒÞùͱƒ¾¨›:ŒBÝ»#ÝÄ%üâ2üÿ qyN(úî}uÑ÷ï¿®/‘ú8=V_²Wõ%NaF3«/ô8}Ѭ‰—-™ÉÛâhY!˜|“¤œ5목ÿWO>¤Oü{!ß$'9“¯Ø›ä㧨š²ý]÷“š«‘Êè¤ãºœ‹Þb[û»o˜™«‡–×Lh·m °Ö®Z‚´˜6²â]÷Ž:|ýö9ŒÓc¿îÑÃ,Ѭ̣—êFD-µs.û·«ÃFšñ³›L‡Ë^˜Ø Z¶"|BóE&¶mô¶®¾¿Ÿ]}º85óbôTçÃø¾yÜ”\zú §ÆáÏ endstream endobj 5703 0 obj << /Type /Page /Contents 5704 0 R /Resources 5702 0 R /MediaBox [0 0 595.276 841.89] /Parent 5674 0 R >> endobj 5705 0 obj << /D [5703 0 R /XYZ 90 757.935 null] >> endobj 5706 0 obj << /D [5703 0 R /XYZ 90 733.028 null] >> endobj 5577 0 obj << /D [5703 0 R /XYZ 90 352.972 null] >> endobj 5707 0 obj << /D [5703 0 R /XYZ 90 338.402 null] >> endobj 1089 0 obj << /D [5703 0 R /XYZ 230.641 92.662 null] >> endobj 5702 0 obj << /Font << /F29 635 0 R /F14 1078 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5716 0 obj << /Length 1427 /Filter /FlateDecode >> stream xÚÝX[oÛ6~÷¯Ð€=ÈÀÄ‘©KÞ’4éR¸Y—8†$(d™v„ÉR*ÉMýïwx“-ÙNÜ-°½˜”uH~ç|çFagî`çýàd<øùœÆNŒâ€ÎxæÄØ ‚8%Îxêܺ¢x茱û”ÖË&ËÑÃУ»çY.ôìJÌD5$‘+ŠTþaŸ»$"Ãûñ‡ÁÙxðe@à4ìµ;Qès'] nï±3…ÿ?8ùqä<)©…ècî\~àRBPÌ9µP©pÀÿ.TÀ×S;eÈg±Þò|Y¤MVµRÅb5xc ó#XHQ`±ÜQÊ;kœ[°¯CŠÝ2›šwÒ&ÕÜçJII”þçIž~¾Ã˜æy7)w‡9ΊF«Vü¤Çô!©ÌìÌ„î=È‘Îúµ& ;h0©‰Ô€QÇ# ÅŒ w38_m™˜‡„»ò’´æÀº©²b®çOYc¬¯´¨ÑN{LêY$ÀoL^Ó¤Å2Ïÿó½¼ÞΠRÿƒl™äùÙ——­8d’$ÐK¤Æ ëw" ke3ó÷´\Nrž„m¨A‰"ÀYZŒ}ěʂ­#º!C«º9”0Ä",èR6ÆÔÞ¬4ìˆ/Ë$Ïš•~*gF“ªÉÒen}ç«H›v!¨-ŠæPøªAQ‹æøx8ÉýôaŒ0‹Þ”¾ˆ"?Šºô]‹æ_¤æÕ™É^Ú=ZHä#Æß”•€£0þ‘r’5/“²;¹íá Ĉ„p@¬L-ò>Õ“¬©Ÿe:;½Íwœ’TU²:˜gJàÁßG´„gÑ™ò&‚b7í°\÷Ò©‘$ª8®†œ»o—9U±ß‘º"DðVŒìð•ÞÙ!ba6ÖfME¡´?ãBrز[èWA +ù“Êq«§yҬߚ~kÓëŒ=âǪq÷|ŠHÌÖ=7"¦ë~'š:mÃæ;Q§Uö(Ûç{öu¶xT=z¸ÒDº¨†\Á׸z'Kï66·‚¶m˜O(_)’ÜlY ½]Yä«hBpŒ õùÉJ¯úýôztq‚ôʱ¶“y•Tì´L—Òi•Ö ö 웺ÌEn´H |åËrÌŒxSJ4²lqD!Läý&Ð8–ÅT@–MŠiÛ6Â&”©d>Á›ÈT˜‰¢\';MûÍ‹¦]TÚJð¶L¼ÞaÇŸ.ôd‘¬Z÷)æbÝ—–˦=5KÅ»¯V[žCçØ{–ñcÓÄúNß[ôÚÖï ðéì½ÿòÔÉÎ ´xÄ#ùÀ:@±>GÜo3'Q7Wtv£1ò}+šîØ‹!}ÅUý¸“-hˆ8‘΢€šåÅåøìêRÖ©ã‘VçæúLO~½Éþôùƒ¬½ÔZÖÍ;ýûd? 8¢ñF Ò ÃVçiݽ°€î^ý¬„,ðÛ2­—Á^‹¬HÖ2òšÓ?Ìæ~Ç3h;ŠÞÔÒÍóU ËQíÎ…[¸{Y5•ŒAùæ©J%|ù°‘fäcVèERºÎ $ùâTÊËG(íÄ•ú·Ë!®ÕlëÔÓ_ޝŽe·v t¶\m=´"/ª,ºwÇëgdŒâ8PUÛç“ À¶®>ÚS´{Ý ±,ÙÂÜ·Ü3¼+L(ô‰¬%{?Š`ÄÛ4ÅÜÒmËú:“uI5À»¶PÝÞ÷­Ð/‹{2ÀÏ‘Í-?¾ˆ=}{Œn%Ç{pj‡7)ø¢±^msM›}'6/óܳ.n“±Íx•h–Uñ<Û ,€¿S¨6^ÉuªÒíáºÿõ-€þŒD‡~|³Ý°0tú›çÆÐïE!ªmu>Úɹtf1Ñ>b䈇ú‰bBMa’²¶8éÒ«ç :/cË•-ßVsÑõ?Ðô/êθ endstream endobj 5715 0 obj << /Type /Page /Contents 5716 0 R /Resources 5714 0 R /MediaBox [0 0 595.276 841.89] /Parent 5674 0 R /Annots [ 5701 0 R 5708 0 R 5709 0 R 5710 0 R 5711 0 R 5712 0 R 5713 0 R ] >> endobj 5701 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.915 673.272 207.867 683.802] /Subtype /Link /A << /S /GoTo /D (wcsutil_8h_38322fa65b3bad54552d374d873ad037) >> >> endobj 5708 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.915 634.417 201.232 644.948] /Subtype /Link /A << /S /GoTo /D (wcsutil_8h_9d96f343fc444f8c6f1fa01367c4d765) >> >> endobj 5709 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 595.19 183.708 606.094] /Subtype /Link /A << /S /GoTo /D (wcsutil_8h_4c7c5a686aaa39f511598b32e944ac68) >> >> endobj 5710 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.915 556.709 193.471 567.239] /Subtype /Link /A << /S /GoTo /D (wcsutil_8h_fe7f963c2038673015bbce204c4a8171) >> >> endobj 5711 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.915 517.855 193.471 528.385] /Subtype /Link /A << /S /GoTo /D (wcsutil_8h_b32722081f8cda184d7ada6d734c637c) >> >> endobj 5712 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.915 478.627 192.923 489.531] /Subtype /Link /A << /S /GoTo /D (wcsutil_8h_0d982911e7f694a751f2887ea38890e4) >> >> endobj 5713 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.019 439.772 206.104 450.676] /Subtype /Link /A << /S /GoTo /D (wcsutil_8h_9bc774de065f8937aa9bbffa2df6089c) >> >> endobj 5717 0 obj << /D [5715 0 R /XYZ 90 757.935 null] >> endobj 578 0 obj << /D [5715 0 R /XYZ 90 733.028 null] >> endobj 5718 0 obj << /D [5715 0 R /XYZ 90 691.872 null] >> endobj 582 0 obj << /D [5715 0 R /XYZ 90 426.198 null] >> endobj 586 0 obj << /D [5715 0 R /XYZ 90 357.699 null] >> endobj 5719 0 obj << /D [5715 0 R /XYZ 90 335.388 null] >> endobj 5720 0 obj << /D [5715 0 R /XYZ 90 335.388 null] >> endobj 5721 0 obj << /D [5715 0 R /XYZ 90 141.806 null] >> endobj 5714 0 obj << /Font << /F29 635 0 R /F20 595 0 R /F40 846 0 R /F14 1078 0 R /F46 2400 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5729 0 obj << /Length 1482 /Filter /FlateDecode >> stream xÚÕXKsÛ6¾ëWðÐÕFH:“CÒÚ™d\5åétO†’ ‰Štø°ëßŃIQŠ2M&éÁ&,–ß.v¿];k;¯F/g£§4tB *œÙÊ ±ã ‚8%ÎléܸQ<žŒ±û°(ª2NÐf<¡»q"Íè\É|LW¦ 5`Æ]ÐñíìÍè|6ú4"ð6ì­ûÈgÜYlG7·ØYÂü#΃–Ú:eðLœ«ÑŸ#|)e ¾CŠ(¢íý˜`7‹—¢Åþ!­’äÃ{Œi’˜…÷˜ã8-Ô§žhé'#Ï÷àíZ}jD:8â,¬žŒ'Þ»ØDù€6"ÆjÑÅ€.³µÀ !|÷Ð%ëLH"_øHPψ½žÎÎßMÇ»/.9×WçfðÇôrR÷oõi¸»wÈ#n¡>â`‡…¥œ¥!MnQæñ]aÆÙjL¹»R?|·Ì£8‰ÓµYš'QúÑŠEéÒˆÜEK;Un¤(ÇE‹"Ɉæyôh„7Y²lÔ5òêõfÒwârcf§×——Æcú„ra_¿£ôÉu!U¼Pæn£8MÕØsˬžû¨bJšÙ\µhÐf J&I¼Žç:E`9N­®x5½63K9WX­×µª‡M¼Ø˜á(-‹ÞÖ¼šÏãbcfWY’dÊ÷ʵMÊd›fD@ÝÆiTj§© åª'f˜Í‹E•7+Íž{¥9Jê,º‹òÒnXõ$ýÚ«MÎö"|‚QÂP˜to•GÁ‘[©嬳}§†xí¼ C•sZ¦‡‡R˜"w3¸ ®èçÕ’Ój;קѲ´:‡ÐÁ¡ XcB8Ø’èOŸÅ¶8†-Dn$gµÇÛxâx`¤ð»'ðN–7wÓžû{\<b ;Ë,Ç*âìÐk”$çŸ>K¬ŒéŒlŽÅÓlÍ]9Ä‹pÌTÐÉ+¦P·‚†S™Èí€B0>Ä¢ÏÚYZX[–Y¥ÒVoì­`ˆdÇ…˜ `ð¡fЖ Í‹rÈ*p›V-ËÓ¢†~ –ç]–7³ÏïPŒ¹ÏöùÝF¡¹†«ÌF™üT”Ý܈vô/ª$ª…ád"šw²…ì1‰€2ÛO°nó‚8´AL¾tãõPÖBoB=¶—¶é·±½K. Â#ô-¹|è:¢ Qø{h™®ËM­Œ›>î1çîqèІGº¼xôVOÐŽ ßfªüZëÚÝ®Sµ¶ýmDeÑ Ùf³éI„2u â7YEÅNƒ\Íœ(—‚”À!¡¯\žWø<ÐQÊê–ügèòêhœmª¯bm—6{þ܈@wÌTˆï„ìU‰ßÚÿ‹yè iµ !"°@9–šì‹ˆg+þã‹ô!Pè™î€1(Ü7Àìê™YáTçÉYiJïåbBvõ÷l€’Ø$D î¿—‘¶/VÃm¼ÞØPÛÕe qXÄYZÇ_Tœg@¦Œ©®Œ¡¶Y¶…P›{£€ßÞh³oŸ%h" Â Hu`Àæy°Íè÷amZffïU••Í­\éI;Ýi%{ aÀši|ë½÷”ò®Ì.ûøÌ$ò4³~Œê{¡NWÔkˆzÄ{@)±J_ìë껊Dr„'÷;=–wô åóÅ WX ]â}Q§E¾u§u°½‚,ö;¬ÿ Ú+_ÿmc ¿‚æ™øÃýl*†ï[•üŽý•€è#ì{^Ó~þŠüïû«Ÿ~˜æêp+õä´¨?Š(]6kª¢.r5&èmŒòn ì Ipê÷Èú;$ÔIJ¨ù Y饄W2•yÔô™5ü÷zp¡ì“sóC˜Ág9ã¾ùE1¡¶yT²uùׯW—¯_𱇶…ßö¿eÿ<®eÚ·ô_=SS endstream endobj 5728 0 obj << /Type /Page /Contents 5729 0 R /Resources 5727 0 R /MediaBox [0 0 595.276 841.89] /Parent 5734 0 R >> endobj 5730 0 obj << /D [5728 0 R /XYZ 90 757.935 null] >> endobj 5731 0 obj << /D [5728 0 R /XYZ 90 733.028 null] >> endobj 5722 0 obj << /D [5728 0 R /XYZ 90 535.858 null] >> endobj 5732 0 obj << /D [5728 0 R /XYZ 90 521.44 null] >> endobj 5723 0 obj << /D [5728 0 R /XYZ 90 228.632 null] >> endobj 5733 0 obj << /D [5728 0 R /XYZ 90 214.214 null] >> endobj 5727 0 obj << /Font << /F29 635 0 R /F46 2400 0 R /F20 595 0 R /F14 1078 0 R /F38 780 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5737 0 obj << /Length 1359 /Filter /FlateDecode >> stream xÚíXKsÛ6¾ëWðÐÙV(ÄË™âÖÉ$ã¸i¢N§ãx:´YœJ”KRNòï» @š¤IYòLÚrXìãÛÝOÄÁM€ƒ—“ÓÙä‡TiAE0[RÄ) f‹à2ˆâhJ0ÆáÇy±+Ó5ZESÊqø"]7zg–&ˆ M6·K 3Å¢«ÙëÉÙlò÷„Àm8 •t.‘d<˜o&—W8XÀúë#¦Uð±Úµ bÊà¹ÞO~`¯iÿYiÎT ‘–˜XÍ)g`$%HH¯þ·V‡ FRÑ€À%±[þ€9^¦yQFS–}ç™Y› ¼"núcuV „¥ ¦­Ó#B+ϪwSÍ‘ˆ œÂHq=|Œ?ªKu@¤cíà{%Ѿîqo˜B”ËÙ(+)»3ó)±Öõ-01Å‘so" ·?¥‚!Lb¢æ>˜³•w’çÉg7ܤ7«Ò ¯ýÛEº1Y‘n3³ðÛ‹ õ}¸ö°JhŒ³W ð2sW.¶»k›RÖº»KkóÕe屫g™½Œ1L Δ"é­}gʤ$³â¤sRMkL9ÄRëûGqŸçwÁá6õù¬ÿ³0åóuêÖlLÒ¬tÎŒEKSDbWU’³(®äñÐ̽ëÛªƒÃ© õæï£)‡ë‡CRs¥¹5zÁ­‹1ã10f·JKÚÚC-¢ì€Á[²£UÂPN¦B$‘ Y¯.fgï."ŠÃççο½?sƒ_.Î#MÃ?ìªD`Ö‡µŒ‡`æQ"[š`—1V:*ܨ¬Á}Q&ëŸn—Äîq›äe:ß­“ÜÍ­ÓMæ3 Í:{AxW†z¹Í ´¾°G8+FØgÂ[‹À$O6¦4yÀ÷b:á(I¬«ÆœÖæÇx£Åæ#mëÙö,ÔR7XhÊC¶Û\›ü`Ó;:Ot ›Œ„C2²c”®ñ?ª­FJÉÚ®MvS®ºÚšd¾êëqîWòœU ΪîýýÍ£z·RhTs‚p³ÿí’·vo¹í¡·–6β[Å·5á ø¸Jk¯¤>ivE]ãkEÌ7Ò¶0ÊëÄkU¥·‚çW¶²—­Ð'²ñ•­|!¶b»êFUÄcTå4-¥*û(…ìQŠù6+šR3Ä.bP”ˆcØEaÖC̪¡PO`H×iY ɃHê#’:ƾ‚£™|H˜…°þ"ìÈÆÿ©ì¨r]§@l -ÖIã;MÑãLY¯Óü¿YÏqâb€åtÝ0ÞqàÇP Ÿ/cú[J7Ùð|±ÈMaU¥Â`»¾›ºàBQô«¾‚¶66¬ Ö*Ç¡hÊ0 ߸ÜÕW+êÖÌSËJ*¨XaþJç{|·^»W· µåÔ_^ÓXš'…ñ-òÐ6 õÞ#=©¤<B’›.`÷û2\Õåpù¾..£Î׈É¥BÃá5G{i2“'MÙú‚ù¦¼°ÿD̵›÷ ø$&'\ºÅ„ºÑÒîÝúþþÓûóW§n#‚}ó þyûéóÉú–þÿD endstream endobj 5736 0 obj << /Type /Page /Contents 5737 0 R /Resources 5735 0 R /MediaBox [0 0 595.276 841.89] /Parent 5734 0 R >> endobj 5738 0 obj << /D [5736 0 R /XYZ 90 757.935 null] >> endobj 5724 0 obj << /D [5736 0 R /XYZ 90 610.109 null] >> endobj 5739 0 obj << /D [5736 0 R /XYZ 90 595.83 null] >> endobj 5725 0 obj << /D [5736 0 R /XYZ 90 340.87 null] >> endobj 5740 0 obj << /D [5736 0 R /XYZ 90 326.591 null] >> endobj 5726 0 obj << /D [5736 0 R /XYZ 90 123.377 null] >> endobj 5741 0 obj << /D [5736 0 R /XYZ 90 109.098 null] >> endobj 5735 0 obj << /Font << /F29 635 0 R /F38 780 0 R /F20 595 0 R /F46 2400 0 R /F14 1078 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5801 0 obj << /Length 695 /Filter /FlateDecode >> stream xÚ½—]oÚ0†ïù¾id¶“8É%Z1±RªUê&ˆal40'-°_?6)IN±Ë•ÅyŸã÷ø£)Â覂3íÕ òñšzˆX†i1Šäaä`ǰlù¢Çj' ùºömðiÿ“ü#ÏðeéÕ)6,‹íúãE¦ý‘}¨ê„žmï¾®Æq"fSãû‡¿’$RÝôÁ¿© Ç:µq•8øˆ)UN¨ñ+/×KñT¡3¼Uv‹Pÿ²71]ç‚–âG)È%$‡'á¬iüŽœ}Þ弬 9ªyrNæéæÌ“¢Z-/ ÓƒQæ³HäB@b|ÒoIrTmä(—Œ#‚Í27o«d${”€,ųèb»CDTŒaa~õ²jÄ®®jË'Š«/Š[ }RÃvèA–õ ö%}çó…šœ“äÃ|§ƒPÈÀ¿—ª›š:tHŽâj渰xTW³ 'ÛJ]fØ2.Ûµ ›;áO‚ÿT¦­F2J[ÌÞ‡&eÚÂŽgn´ˆŽÂÎØ$4É9tÈ;rŽ¢³ÏÛsrÊ=Aò@T*w§4Îe|Ř&ñÏtUá©a6¥ & ã@(û9ª~ €y’e?ÀâI¶“0]ˆ¢+.| aÊgáW>ÏŸ"ycsð9çvHÝ7[ׇܱJNZ-€Eóôm$kªp«¦gj’—©IɹHMòà25ÉçESTî<Ë„QJ‡›½Ùäè ¹Oñ´DÌ&§kŠeu†oï¥è]¯s;hûZû÷Íf»¯88éHyÛãoɶíAå• endstream endobj 5800 0 obj << /Type /Page /Contents 5801 0 R /Resources 5799 0 R /MediaBox [0 0 595.276 841.89] /Parent 5734 0 R /Annots [ 5742 0 R 5743 0 R 5744 0 R 5745 0 R 5746 0 R 5747 0 R 5748 0 R 5749 0 R 5750 0 R 5751 0 R 5752 0 R 5753 0 R 5754 0 R 5755 0 R 5756 0 R 5757 0 R 5758 0 R 5759 0 R 5760 0 R 5761 0 R 5762 0 R 5763 0 R 5764 0 R 5765 0 R 5766 0 R 5767 0 R 5768 0 R 5769 0 R 5770 0 R 5771 0 R 5772 0 R 5773 0 R 5774 0 R 5775 0 R 5776 0 R 5777 0 R 5778 0 R 5779 0 R 5780 0 R 5781 0 R 5782 0 R 5783 0 R 5784 0 R 5785 0 R 5786 0 R 5787 0 R 5788 0 R 5789 0 R 5790 0 R 5791 0 R 5792 0 R 5793 0 R 5794 0 R 5795 0 R 5796 0 R 5797 0 R ] >> endobj 5742 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.712 671.898 167.648 682.802] /Subtype /Link /A << /S /GoTo /D (page.170) >> >> endobj 5743 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 647.988 155.753 658.892] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 5744 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 624.078 152.157 634.981] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 5745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 600.167 144.406 611.071] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 5746 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 576.257 144.406 587.161] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 5747 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 552.347 144.406 563.25] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 5748 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 528.436 144.406 539.34] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 5749 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 504.526 144.406 515.43] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 5750 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 480.615 144.406 491.519] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 5751 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 456.705 157.407 467.609] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 5752 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 432.795 157.407 443.699] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 5753 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 408.884 144.406 419.788] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 5754 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 384.974 144.406 395.878] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 5755 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 361.064 144.406 371.968] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 5756 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 337.871 151.868 348.057] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 5757 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.712 313.243 167.648 324.147] /Subtype /Link /A << /S /GoTo /D (page.170) >> >> endobj 5758 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.712 289.333 167.648 300.237] /Subtype /Link /A << /S /GoTo /D (page.171) >> >> endobj 5759 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.712 265.422 167.648 276.326] /Subtype /Link /A << /S /GoTo /D (page.171) >> >> endobj 5760 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 241.512 155.753 252.416] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 5761 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 217.602 152.157 228.506] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 5762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 193.691 152.157 204.595] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 5763 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 169.781 152.157 180.685] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 5764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 145.871 144.406 156.775] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 5765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 121.96 144.406 132.864] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 5766 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 98.05 144.406 108.954] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 5767 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 671.898 372.234 682.802] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 5768 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 647.988 368.638 658.892] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 5769 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 624.078 360.887 634.981] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 5770 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 600.167 360.887 611.071] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 5771 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 576.257 360.887 587.161] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 5772 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 552.347 369.465 563.25] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 5773 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 518.474 368.668 529.377] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 5774 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 494.563 360.887 505.467] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 5775 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 470.653 360.887 481.557] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 5776 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 446.743 360.887 457.646] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 5777 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 422.832 369.465 433.736] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 5778 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 398.922 373.888 409.826] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 5779 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 375.012 368.917 385.915] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 5780 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 363.056 373.888 373.96] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 5781 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 339.863 380.812 350.05] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 5782 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 315.953 380.812 326.14] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 5783 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 291.325 360.887 302.229] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 5784 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 267.415 360.887 278.319] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 5785 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 243.505 360.887 254.409] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 5786 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 219.594 373.888 230.498] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 5787 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.555 208.356 341.51 218.543] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 5788 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [374.655 195.684 386.61 206.588] /Subtype /Link /A << /S /GoTo /D (page.51) >> >> endobj 5789 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [401.773 183.729 413.728 194.633] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.741 172.491 483.696 182.678] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5791 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [433.743 160.536 445.699 170.722] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.283 148.581 427.238 158.767] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [435.656 136.625 447.611 146.812] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.55 124.67 478.505 134.857] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5795 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.173 112.715 459.128 122.902] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5796 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.757 100.76 428.712 110.947] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5797 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.49 88.805 369.445 98.991] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5802 0 obj << /D [5800 0 R /XYZ 90 757.935 null] >> endobj 5803 0 obj << /D [5800 0 R /XYZ 90 696.969 null] >> endobj 5799 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5871 0 obj << /Length 866 /Filter /FlateDecode >> stream xÚ½YQs¢0~çWäQfN. $@߬Ҏ«=¤×Îô:Õh½°H§öß_¬‡§@áE’ïÛý’]v‚€àR:w¤ïئbRL3&:E Á8ðÐèö;Ö½üè\  $”Ï‹ÿ@Ù\–,Gz‘¿ Šg]ÑUÆžôðÁ„_¿PQM¼Åwy@Ã*?.ÀPú!ÁŒ%ðKäcL€ŽUR’°ŽÙbîÏ¿ÅÌ e8K¹íK <41 ÍLÿO ùO!Å$Œ Co5+‚2r¡ÚV¯gõÅ0¸9Ë0v‰cˆ¹D? Vx]€AP‘9ã$ o X‘:–À8•9k¼6‡c|Íœ&J‚bÉR´8P3·ì8•çO.jóPÊ5bþ«'D¸¿©ò³l{t.«¤ÑêŒÚƒÝ9v«?¬›侑MÜhÙ­ëÚ½¾éÞ×Îy'#ØؽNm:w{½šÖ7ëqÿ–ß º}Dzk#Þ¶ÛÖð€“ôô|9Ûçm¼ú!^’!Õ,—b¸ði¸ß4d¬z“ª¡úí‘©NÄèŒr»ƒW0bòåÜZ†^Ñ( t‡ëR¢ç>|Ù낉!ðÝ«ºEÏmš 1_ 7úšéÂðù˽yLeLÓâú*ß›¥;™Ìý™)Ëç93"ü-¤gȦBüÑ3‹ÜOºp»¦¦·xÓR¡[‡š£ ÝÚªè»;JÃk•⇖Z*¶‚Éqž»ŠiP~þY-ÇÅ•35/.¹±…Ò¤$ON œ’'o瞇դ«I7&#Ò¨V»mòzh]K.2/-*$ò<æ_¥M ­þlZìXå÷¢èG¥Tô§Aè¹ ÁL£—p°=èwÛbÃ(GóÓê;ÝA?~+Ñ«ñCÄ œ¥‰Ü§i¶Ü ¦‹ÏøCKòTš.vºÕ”f—ºiËëý/ÔPLd”ý±ý”BSWôS 1BÒ:ý’ù,t#6‘c#?9^o›fŒ=Éi§„"<ÓÐÑ“3 NFqã„ÉÉ]{Øëž'cMA0=½'ÇN°~Ÿ1?ã1÷ô/-WäÎ endstream endobj 5870 0 obj << /Type /Page /Contents 5871 0 R /Resources 5869 0 R /MediaBox [0 0 595.276 841.89] /Parent 5734 0 R /Annots [ 5798 0 R 5804 0 R 5805 0 R 5806 0 R 5807 0 R 5808 0 R 5809 0 R 5810 0 R 5811 0 R 5812 0 R 5813 0 R 5814 0 R 5815 0 R 5816 0 R 5817 0 R 5818 0 R 5819 0 R 5820 0 R 5821 0 R 5822 0 R 5823 0 R 5824 0 R 5825 0 R 5826 0 R 5827 0 R 5828 0 R 5829 0 R 5830 0 R 5831 0 R 5832 0 R 5833 0 R 5834 0 R 5835 0 R 5836 0 R 5837 0 R 5838 0 R 5839 0 R 5840 0 R 5841 0 R 5842 0 R 5843 0 R 5844 0 R 5845 0 R 5846 0 R 5847 0 R 5848 0 R 5849 0 R 5850 0 R 5851 0 R 5852 0 R 5853 0 R 5854 0 R 5855 0 R 5856 0 R 5857 0 R 5858 0 R 5859 0 R 5860 0 R 5861 0 R 5862 0 R 5863 0 R 5864 0 R 5865 0 R 5866 0 R 5867 0 R 5868 0 R ] >> endobj 5798 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.047 720.63 148.002 730.816] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5804 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.694 707.957 180.649 718.861] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5805 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.097 696.719 164.052 706.906] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5806 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.595 684.047 148.55 694.951] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5807 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.242 672.092 181.197 682.996] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5808 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.365 660.854 151.32 671.04] /Subtype /Link /A << /S /GoTo /D (page.51) >> >> endobj 5809 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.012 648.181 183.967 659.085] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5810 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.595 636.943 148.55 647.13] /Subtype /Link /A << /S /GoTo /D (page.50) >> >> endobj 5811 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.242 624.271 181.197 635.175] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5812 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.365 613.033 151.32 623.22] /Subtype /Link /A << /S /GoTo /D (page.50) >> >> endobj 5813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.012 600.361 183.967 611.265] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5814 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 577.168 144.954 587.354] /Subtype /Link /A << /S /GoTo /D (page.51) >> >> endobj 5815 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 553.257 144.954 563.444] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5816 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 529.347 144.954 539.534] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5817 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 505.437 144.954 515.623] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5818 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 481.526 144.954 491.713] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5819 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 457.616 144.954 467.803] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5820 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 433.706 144.954 443.892] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 409.795 144.954 419.982] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 385.885 144.954 396.071] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 361.975 164.331 372.161] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 5824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 338.064 164.331 348.251] /Subtype /Link /A << /S /GoTo /D (page.142) >> >> endobj 5825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 314.154 144.954 324.34] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5826 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 290.243 144.954 300.43] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 266.333 144.954 276.52] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.999 242.423 144.954 252.609] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.651 229.75 128.625 240.654] /Subtype /Link /A << /S /GoTo /D (page.5) >> >> endobj 5830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.969 218.512 131.943 228.43] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 5831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.825 206.557 140.799 216.744] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 5832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.854 193.885 135.828 204.789] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 5833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.499 182.647 142.473 192.834] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 5834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 169.975 148.55 180.878] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 5835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.346 158.737 143.32 168.923] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 5836 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.01 146.064 152.984 156.968] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 5837 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.624 134.109 138.598 145.013] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 5838 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.979 122.154 131.953 133.058] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 5839 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.969 110.916 131.943 121.103] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 5840 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.259 98.961 145.233 109.147] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 5841 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.48 720.63 361.435 730.816] /Subtype /Link /A << /S /GoTo /D (page.49) >> >> endobj 5842 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.48 696.719 361.435 706.906] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5843 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.48 672.809 361.435 682.996] /Subtype /Link /A << /S /GoTo /D (page.51) >> >> endobj 5844 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.48 648.899 361.435 659.085] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5845 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.48 624.988 361.435 635.175] /Subtype /Link /A << /S /GoTo /D (page.50) >> >> endobj 5846 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.48 601.078 361.435 611.265] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5847 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.48 577.168 361.435 587.354] /Subtype /Link /A << /S /GoTo /D (page.50) >> >> endobj 5848 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.48 553.257 361.435 563.444] /Subtype /Link /A << /S /GoTo /D (page.48) >> >> endobj 5849 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 528.63 373.888 539.534] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 5850 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 504.719 369.465 515.623] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 5851 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 492.764 371.676 503.668] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 5852 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 468.854 360.887 479.758] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 5853 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 444.943 360.887 455.847] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 5854 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 421.033 360.887 431.937] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 5855 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 397.123 360.887 408.027] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 5856 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 373.212 360.887 384.116] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 5857 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 349.302 360.887 360.206] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 5858 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 325.392 373.888 336.296] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 5859 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 301.481 373.888 312.385] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 5860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 277.571 368.668 288.475] /Subtype /Link /A << /S /GoTo /D (page.11) >> >> endobj 5861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 253.661 369.465 264.565] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 5862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 229.75 360.887 240.654] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 5863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 205.84 360.887 216.744] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 5864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 181.93 370.571 192.834] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 5865 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 158.019 360.887 168.923] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 5866 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 134.109 360.887 145.013] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 5867 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 110.199 360.887 121.103] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 5868 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 86.288 360.887 97.192] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 5872 0 obj << /D [5870 0 R /XYZ 90 757.935 null] >> endobj 5869 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5930 0 obj << /Length 864 /Filter /FlateDecode >> stream xÚÅ™]o›0†ïù¾ie¶½k›¶JÕMZiºj"ÁI³%š?ƒ“6¡I8š^D6ñsÞƒÏ96`4@]j§íëõ‘oúŒ2Ôé##—Ó¡uBt¯·¿·Îβ±gb‡ÉÿåˆÇ²ÓÚyG{Òˆ<‹Éÿí¸¦k9¨7Öî0 åù+„MË÷Ð,¿kŒljÉv„nµÞ°,¡–‰™£€½(Nxš›Bä]ÔAG„˜¾³¼‹¿æã—Ü$e‹,º¹ÔÐýu°îÙËëŠ)Ø2äÌirN¾¥0uqÖKR1”’óA¨çÉnÏýƘ¦É?ƒ`ÄÑðŒJ Pr±*Æb\±@âD”û àx N<œïÔ3NÊ9ÄÚäà*>q@¶N êèÁh§½IÜ+gQ²ÝÞ¥oÓ  Ão@3ƒhNz ׋[È©›‡örØ §v‚éY&NÓEÌkÆ)h/¯°‡•‚Q>ä>q@&Ì“kÌ?\ˆq2h ’++:7í³“ëœÖ×NVô¬º ‹ÀY[“k@•W Ô¢7ûBa¤€µ¤”†A_<õÚSJç€2c¥<0(Ö§ƒFr±•3Ó‘þb1åï•u׫’3ñ6…‘Z†õƒ¢w6’k6ÊÙæÄ ­2Ï&™aEÄ,¯EùSÝœF¬Ê4bU¸Ó옢·lö¶[…½ÖÍ­¨©dC—§kÄmº›gòÑú.„UX)[Ä™pÑÀC0Ów-oùòßñåÅV¦]fZnOB#7"š¨öÛªs‘ ä]uÀTCð±MŽWQL¨êõ³{#¡~žÝ^·OUß6 V½îBµ­h¾¨L¿®ô?¥)Ê' endstream endobj 5929 0 obj << /Type /Page /Contents 5930 0 R /Resources 5928 0 R /MediaBox [0 0 595.276 841.89] /Parent 5734 0 R /Annots [ 5873 0 R 5874 0 R 5875 0 R 5876 0 R 5877 0 R 5878 0 R 5879 0 R 5880 0 R 5881 0 R 5882 0 R 5883 0 R 5884 0 R 5885 0 R 5886 0 R 5887 0 R 5888 0 R 5889 0 R 5890 0 R 5891 0 R 5892 0 R 5893 0 R 5894 0 R 5895 0 R 5896 0 R 5897 0 R 5898 0 R 5899 0 R 5900 0 R 5901 0 R 5902 0 R 5903 0 R 5904 0 R 5905 0 R 5906 0 R 5907 0 R 5908 0 R 5909 0 R 5910 0 R 5911 0 R 5912 0 R 5913 0 R 5914 0 R 5915 0 R 5916 0 R 5917 0 R 5918 0 R 5919 0 R 5920 0 R 5921 0 R 5922 0 R 5923 0 R 5924 0 R 5925 0 R 5926 0 R 5927 0 R ] >> endobj 5873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 707.957 144.406 718.861] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 5874 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 684.047 144.406 694.951] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 5875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.712 660.136 167.648 671.04] /Subtype /Link /A << /S /GoTo /D (page.169) >> >> endobj 5876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.982 636.226 159.937 647.13] /Subtype /Link /A << /S /GoTo /D (page.11) >> >> endobj 5877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 612.316 157.407 623.22] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 5878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 588.405 157.407 599.309] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 5879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 564.495 152.435 575.399] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 5880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 552.54 157.407 563.444] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 5881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 528.63 155.195 539.534] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 5882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 516.674 154.089 527.578] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 5883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 504.719 157.407 515.623] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 5884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 480.809 144.406 491.713] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 5885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 456.899 144.406 467.803] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 5886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 432.988 144.406 443.892] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 5887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 409.078 157.407 419.982] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 5888 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 385.168 157.407 396.071] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 5889 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 361.257 157.407 372.161] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 5890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 337.347 157.407 348.251] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 5891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 314.154 164.331 324.34] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 5892 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 290.243 164.331 300.43] /Subtype /Link /A << /S /GoTo /D (page.142) >> >> endobj 5893 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 266.333 164.331 276.52] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 5894 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 241.706 144.406 252.609] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 5895 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 217.795 144.406 228.699] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 5896 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 193.885 144.406 204.789] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 5897 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 169.975 144.406 180.878] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 5898 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.799 136.819 173.736 147.005] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 5899 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 112.191 155.753 123.095] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 5900 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 88.281 157.407 99.185] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 5901 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 707.957 373.888 718.861] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 5902 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 684.764 380.812 694.951] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 5903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 660.854 380.812 671.04] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 5904 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 636.226 372.234 647.13] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 612.316 372.234 623.22] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 5906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 588.405 372.234 599.309] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 5907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 564.495 372.234 575.399] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 5908 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 540.585 370.571 551.489] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 5909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 516.674 372.234 527.578] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 5910 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 492.764 372.234 503.668] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 5911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 468.854 372.234 479.758] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 444.943 372.234 455.847] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 5913 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 421.033 372.234 431.937] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5914 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 397.123 372.234 408.027] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5915 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 373.212 372.234 384.116] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5916 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 349.302 372.234 360.206] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 5917 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 326.109 368.349 336.296] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 5918 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 301.481 369.465 312.385] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 5919 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 277.571 372.234 288.475] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 5920 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 253.661 372.234 264.565] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 5921 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 229.75 372.234 240.654] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5922 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 205.84 372.234 216.744] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 5923 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 181.93 372.234 192.834] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5924 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 158.019 372.234 168.923] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5925 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 134.109 372.234 145.013] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5926 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 110.199 372.234 121.103] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5927 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 86.288 372.234 97.192] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 5931 0 obj << /D [5929 0 R /XYZ 90 757.935 null] >> endobj 5928 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6006 0 obj << /Length 1028 /Filter /FlateDecode >> stream xÚÅY[wšJ}çWÌ#¬uJgf„¾™HR[5)áœ&+§ËE­-¢AlLý.6ä2ˆ1O\gïýݹ@0\ g–ðþë@—uŠ)°¦@‡ C‘L0–îÅþ¨gÜJ߬O@…š eëâ HëD§ÃÄÎB€âÕ¤#w& áþ;ÿ @YÑ5ðßµ*VØÖ7Âf”Àœ¬È’„Ðy’m Cñ—„ˆèJ˜°=v¸\…±BÄcÞ!$ë$]µ^mWÁâ¯Xj¢1˜¥bÍKܿʘ¦×- ¡iÿ÷éyýià>îsÒ&œ„‡3²mÏ߯c+fHHK\ß ZÒ¨æE4Åž|¡’¿×0!¨óP=nævàÚ^iÔVÁz³P‡“Ë_nK­zš¬ë™TÈÔ‡iâzõ,9s`›û.Q‹1¹U«Ô±^M82×`ðdmµ?Bû¡C•|ÁW8‚o˜æÀ•æ3#ŠÒƒ±¾„®jÝxîqÓ­˜&jrÛÐKçJi…vÔù±²ÉÒ ¡o/^“,k]à.ìR¶ƒÒ¬Š-™Á+™÷ÿÁ1-åøB®F³,Võ\ÛÖ9BznU£ukíR0‡#õc6@œ1Ce*%¹az‡ ëKPnöïNPãÝèžz'*§o@æ¼X)²¡¼\½è[7{æø¼köê>¤«áÐYíÀþX7f9·XϾDÚgãÎ4ÎTF÷°þ‘BÄîàoã8žc_£’¾jŠü`DeUÀb]¦Šž¥±Ìn`˜í4ÏýªíR™ÛﱡÛNCiŽ‘Ô(-ŽlT /½¶ê •¼Å…sJê|™ísÖ¿h³“¢| ‡gJøì þXžoBŸ6‚Ó'ÿƒK§`æ ' Ÿ}rýc²\,\?¬A•CaÚNüÝòŸ-—¿DcîÔ@i¼HþòXH¿¢WÛÛ¸ZI÷ão@Ë ­^;§¯lÇ™û³v ë–ËC;ܬóBêÕðyU½R{ öÖ_c©MåNr„!ëtñÞ4ºw$_Ïoý³d_•ÙÈŠ÷ž“mo¹}ž¹~ÆbféÆGB endstream endobj 6005 0 obj << /Type /Page /Contents 6006 0 R /Resources 6004 0 R /MediaBox [0 0 595.276 841.89] /Parent 5734 0 R /Annots [ 5932 0 R 5933 0 R 5934 0 R 5935 0 R 5936 0 R 5937 0 R 5938 0 R 5939 0 R 5940 0 R 5941 0 R 5942 0 R 5943 0 R 5944 0 R 5945 0 R 5946 0 R 5947 0 R 5948 0 R 5949 0 R 5950 0 R 5951 0 R 5952 0 R 5953 0 R 5954 0 R 5955 0 R 5956 0 R 5957 0 R 5958 0 R 5959 0 R 5960 0 R 5961 0 R 5962 0 R 5963 0 R 5964 0 R 5965 0 R 5966 0 R 5967 0 R 5968 0 R 5969 0 R 5970 0 R 5971 0 R 5972 0 R 5973 0 R 5974 0 R 5975 0 R 5976 0 R 5977 0 R 5978 0 R 5979 0 R 5980 0 R 5981 0 R 5982 0 R 5983 0 R 5984 0 R 5985 0 R 5986 0 R 5987 0 R 5988 0 R 5989 0 R 5990 0 R 5991 0 R 5992 0 R 5993 0 R 5994 0 R 5995 0 R 5996 0 R 5997 0 R 5998 0 R 5999 0 R 6000 0 R 6001 0 R 6002 0 R 6003 0 R ] >> endobj 5932 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 707.957 155.753 718.861] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5933 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 684.047 155.753 694.951] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5934 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 660.136 155.753 671.04] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 5935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 636.226 155.753 647.13] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 5936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 602.353 155.753 613.257] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 5937 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 578.443 152.157 589.347] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 5938 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 554.532 152.983 565.436] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 5939 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 530.622 157.407 541.526] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 5940 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 506.712 148.55 517.616] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 5941 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 494.757 152.435 505.661] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 5942 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 482.801 152.983 493.705] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 5943 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 470.846 155.195 481.75] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 5944 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 458.891 155.753 469.795] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 5945 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 446.936 154.089 457.84] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 5946 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 434.981 157.407 445.885] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 5947 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 411.788 164.321 421.974] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 5948 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 387.16 148.55 398.064] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 5949 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 363.967 151.868 374.154] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 5950 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 340.057 151.868 350.243] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 5951 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 315.429 154.089 326.333] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 5952 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 292.236 151.868 302.423] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 5953 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.231 257.646 152.187 268.55] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 5954 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.46 234.453 152.416 244.639] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 5955 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.824 209.825 172.779 220.729] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 5956 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.299 186.632 158.254 196.819] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 5957 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.373 174.677 138.328 184.864] /Subtype /Link /A << /S /GoTo /D (page.52) >> >> endobj 5958 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.375 162.722 151.33 172.908] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 5959 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.082 150.767 200.037 160.953] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5960 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.324 138.811 223.279 148.998] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5961 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.022 126.139 183.977 137.043] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 5962 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.256 114.901 212.211 125.088] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5963 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.287 102.946 225.242 113.133] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5964 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.215 90.991 223.17 101.177] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5965 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [418.949 720.63 430.904 730.816] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5966 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.875 708.674 362.83 718.861] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 5967 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [380.743 696.719 392.698 706.906] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5968 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [370.232 684.764 382.187 694.951] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5969 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 660.854 374.735 671.04] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 636.943 374.735 647.13] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 613.033 374.735 623.22] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 5972 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 589.123 374.735 599.309] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5973 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 565.212 374.735 575.399] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5974 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 541.302 374.735 551.489] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5975 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 517.392 374.735 527.578] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 5976 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.787 504.719 343.761 515.623] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 5977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.815 493.481 346.77 503.668] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 5978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.472 481.526 379.427 491.713] /Subtype /Link /A << /S /GoTo /D (page.11) >> >> endobj 5979 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.709 469.571 345.664 479.758] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 5980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.161 457.616 345.116 467.803] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 5981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [335.373 445.661 347.328 455.847] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 5982 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.279 432.988 359.253 443.892] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 5983 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.491 421.033 361.465 431.937] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 5984 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.858 409.078 377.814 419.982] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 5985 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.902 397.123 371.876 408.027] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 5986 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.161 385.885 345.116 396.071] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 5987 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 373.212 374.446 384.116] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 5988 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.267 361.975 346.222 372.161] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 5989 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.086 350.019 360.06 360.206] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 5990 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.547 337.347 354.521 348.251] /Subtype /Link /A << /S /GoTo /D (page.9) >> >> endobj 5991 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.547 326.109 359.502 336.296] /Subtype /Link /A << /S /GoTo /D (page.11) >> >> endobj 5992 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.538 313.437 356.493 324.34] /Subtype /Link /A << /S /GoTo /D (page.11) >> >> endobj 5993 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.528 302.199 364.484 312.385] /Subtype /Link /A << /S /GoTo /D (page.11) >> >> endobj 5994 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.124 290.243 355.079 300.43] /Subtype /Link /A << /S /GoTo /D (page.12) >> >> endobj 5995 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.97 278.288 363.926 288.475] /Subtype /Link /A << /S /GoTo /D (page.11) >> >> endobj 5996 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 254.378 380.812 264.565] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 5997 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 230.468 380.812 240.654] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 5998 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 206.557 380.812 216.744] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 5999 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 182.647 380.812 192.834] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6000 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 158.737 380.812 168.923] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6001 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 134.826 380.812 145.013] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6002 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 110.916 380.812 121.103] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6003 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 87.006 380.812 97.192] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6007 0 obj << /D [6005 0 R /XYZ 90 757.935 null] >> endobj 6004 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6069 0 obj << /Length 953 /Filter /FlateDecode >> stream xÚ½™Ùr›0†ïy ]ÂLK%zçÚÄ¥uÔÆm:i‡Á†8´ÄyûŠ%S/,ÊØå BàÿÎ"ɬcîƒÅ½»À:ÐE`¬[ C $*Ë7¼9×Â/ë¡&B…ÐïŠ MËs†ÅÝsˆ>…_+ª¨J Xm¸›_¸ôù'EI×ÀSñÖÈX¢×̹¯ܳX‚%¥^˜×ÆlfO/í™qa_™×öðòr6*lCô3¬€·‰ºR½ÿ´JBˆ·âÝ›ÂÐÒÂd]™:sàæ-V dX½PšBejäŽñß$)ü`Ò·‹Éľº4§–1;F“×¢%=7§ãÅd0³¿X×gðúUè«¡½¸ 2äBˆ·Œ¾-X ‡Æ|ÞsÈSÓšÛƒ‰9˜÷å/Õ’œu#måq²é ‘}Ü—ü°[IõU¸ãä7ƒF»i¼êÖÀ¨U#s– Z«M`·†$3äî6ñî3—Æ[S[1äƹMZQÝ£jŒ9Rø'AÞ0äOÄêŒX/ô’Æé~^Ôcî¡D§y† +.qÜžP»iË}ì) ;ذáò®2? Ûj´—$]S7 0UBZ©´ö2*FËN¾vš¯TÀ†‚³ÔN<ǵKéWŠÖ†dDK'hL7[ýVÛ¢–JÁ„öcm¤Î0i,¥è.Þ¦xÛ˜â³r¼ì4ŽÊÆÙâôœq;¼R]"*T U$š\ ûÿ¤n$þÉç®—W‹çÎÉÙº®ÆéÊIÜ. ½]ã‘AÃÖ^å)[:“_VêRv ß­Ÿ6­³’YHî–=M~g1 r³Žý*9»o¡[ØÝì![W§3±2"wDòÎMEa(æ­ÎUaòÓqâ§›F$[ÓË”¯4 œ¬Ä´QP8»+ÞçÒôç¿Õ¤Ú$íͳ¡5G??ÌÑĘžkHJl̾ˆÇñ £^㻣ö(`…w‚¯§±ulAÑGIO#ì%ö´¼6O[ w«BÐoTÛ*Óþ]Æl”8 ¼Æ5í¤€0’ö ÎY½@Ùs|bì ÈO‹›,±QºK”Z³é:Ö±éŽp“®»ŽÒ¤®³´JÇö‡Îs9Xۯ⭘gŒgø/¿"QW%­:»WtÚøW ÿ8?Iq2Ï #è6¹¸~y¹¹È ¥·ª£ÃjR¾—Ñ{ɪÁ¦dqw›¿%å߇ó‰ù¡¼—E:‹»åsyEÛçµîyL=ý Òû¬Ä endstream endobj 6068 0 obj << /Type /Page /Contents 6069 0 R /Resources 6067 0 R /MediaBox [0 0 595.276 841.89] /Parent 6071 0 R /Annots [ 6008 0 R 6009 0 R 6010 0 R 6011 0 R 6012 0 R 6013 0 R 6014 0 R 6015 0 R 6016 0 R 6017 0 R 6018 0 R 6019 0 R 6020 0 R 6021 0 R 6022 0 R 6023 0 R 6024 0 R 6025 0 R 6026 0 R 6027 0 R 6028 0 R 6029 0 R 6030 0 R 6031 0 R 6032 0 R 6033 0 R 6034 0 R 6035 0 R 6036 0 R 6037 0 R 6038 0 R 6039 0 R 6040 0 R 6041 0 R 6042 0 R 6043 0 R 6044 0 R 6045 0 R 6046 0 R 6047 0 R 6048 0 R 6049 0 R 6050 0 R 6051 0 R 6052 0 R 6053 0 R 6054 0 R 6055 0 R 6056 0 R 6057 0 R 6058 0 R 6059 0 R 6060 0 R 6061 0 R 6062 0 R 6063 0 R 6064 0 R 6065 0 R ] >> endobj 6008 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 708.674 164.331 718.861] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6009 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 684.764 164.331 694.951] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6010 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 660.854 164.331 671.04] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6011 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 636.943 164.331 647.13] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6012 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 613.033 164.331 623.22] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6013 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 589.123 164.331 599.309] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6014 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 565.212 164.331 575.399] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6015 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 540.585 148.55 551.489] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 6016 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 528.63 152.435 539.534] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 6017 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 516.674 152.983 527.578] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6018 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 504.719 155.195 515.623] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6019 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 492.764 154.089 503.668] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 6020 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 480.809 157.407 491.713] /Subtype /Link /A << /S /GoTo /D (page.34) >> >> endobj 6021 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 456.899 155.753 467.803] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6022 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 432.988 152.157 443.892] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6023 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 409.078 152.157 419.982] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6024 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 385.168 152.157 396.071] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6025 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 361.257 152.157 372.161] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6026 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 337.347 152.157 348.251] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6027 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 313.437 152.157 324.34] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6028 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 289.526 152.157 300.43] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6029 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.46 266.333 152.416 276.52] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 6030 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.899 243.698 152.854 254.602] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 6031 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.868 232.46 192.824 242.647] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 6032 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 207.833 152.983 218.737] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6033 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 173.96 144.406 184.864] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6034 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 150.049 144.406 160.953] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6035 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 126.139 144.406 137.043] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6036 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 102.229 144.406 113.133] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6037 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 707.957 368.668 718.861] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6038 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 696.002 368.349 706.906] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6039 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.5 684.047 369.455 694.951] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6040 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 672.809 368.349 682.996] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 6041 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 648.181 368.917 659.085] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6042 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.464 624.271 376.419 635.175] /Subtype /Link /A << /S /GoTo /D (page.12) >> >> endobj 6043 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 600.361 368.917 611.265] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6044 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 576.45 370.571 587.354] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 553.257 374.735 563.444] /Subtype /Link /A << /S /GoTo /D (page.54) >> >> endobj 6046 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 528.63 371.676 539.534] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6047 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 504.719 365.031 515.623] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 6048 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 470.846 370.571 481.75] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6049 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 446.936 368.668 457.84] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6050 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 423.026 363.687 433.93] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 6051 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 399.833 374.735 410.019] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 6052 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 375.922 374.735 386.109] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 6053 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 351.295 363.687 362.199] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 6054 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 327.384 368.668 338.288] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 303.474 363.687 314.378] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 6056 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 280.281 368.349 290.468] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 6057 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 245.691 368.668 256.595] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6058 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 221.78 373.888 232.684] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 6059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 197.87 373.888 208.774] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 6060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 173.96 365.031 184.864] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 6061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 150.049 373.888 160.953] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6062 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 126.139 373.888 137.043] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.459 114.901 340.414 125.088] /Subtype /Link /A << /S /GoTo /D (page.57) >> >> endobj 6064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.559 102.229 385.514 113.133] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 6065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [400.677 90.273 412.632 101.177] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6070 0 obj << /D [6068 0 R /XYZ 90 757.935 null] >> endobj 6067 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6152 0 obj << /Length 915 /Filter /FlateDecode >> stream xÚ½YÑr¢0}ç+ò(3+›¥om¥Žª»j·ît;ŒUê2SEÛêßoª•ƒ3& œsî½ 77@04•«¾òý›ÀÔLŠ)è¿‚EÁôÇà±Òj7¬úÔ¿¬kPö\üª›«ËŠÕWþ)ˆ]…ÅO“šVÓ ùÊãcvý@M7ëà#¾ËÖYû zÊOn)_” Èú˜€Ö5HIÂúê£PE°²ü³'´Ñ$åï6ðXÅV(JÿOàÙO!Í$;8ŽEþlÂ#f.œÝj[Ý®sgÝuº*%•ßá” û'œ[Iþ,Ü,&N?Í“ÇYÜÇrîÃÂ<Ýw‚$F> e„ïÝWÞªmçÁl 0¢šQÇ€êºF±‘G¡·(œ]ðßóÈÈø¡>œÈ‰ðœ`¸ðfG Iãîùoäã;B±â‚D%(s,¥ÇúN8½@ZK8’C²%¤•bI ‚y($et¤)iXØcC^Î’·À›/ B$ïJº¯ˆÛ¼“iY+šS,JÑíÏlt'—°bPÎ,,f֦蔣ƒbt¬¨”ãÑÅÜ·)^Ï`Vp˜„•4üdn 1–ùróhéDÓ ß/ÆžåÇ.ŽàþÍߊXãÄUxAeÙͰNsU»\©:©\6vêt­ç—ŠVìRÁVÕu§k7x¨$¯tuPŠÆ"{ÃB€‚[¹/Ô3þ6#áa,ð¬ F5œuBs…âÊl5•09÷r&ÂÙ¬'‹œ¯IqæÁÙlÍî ­ŸÊ~£uÍDuÑo`Ÿ_á¨fÖôzúŽ˜!i½Öt7ÎݱKžI{÷Ù¹Q1©¸ÏÉ M/ tAjɆ¬àŒ{/«{§Qròpݳ[WIßÐLzÏˤmLˉd-ýôld endstream endobj 6151 0 obj << /Type /Page /Contents 6152 0 R /Resources 6150 0 R /MediaBox [0 0 595.276 841.89] /Parent 6071 0 R /Annots [ 6066 0 R 6072 0 R 6073 0 R 6074 0 R 6075 0 R 6076 0 R 6077 0 R 6078 0 R 6079 0 R 6080 0 R 6081 0 R 6082 0 R 6083 0 R 6084 0 R 6085 0 R 6086 0 R 6087 0 R 6088 0 R 6089 0 R 6090 0 R 6091 0 R 6092 0 R 6093 0 R 6094 0 R 6095 0 R 6096 0 R 6097 0 R 6098 0 R 6099 0 R 6100 0 R 6101 0 R 6102 0 R 6103 0 R 6104 0 R 6105 0 R 6106 0 R 6107 0 R 6108 0 R 6109 0 R 6110 0 R 6111 0 R 6112 0 R 6113 0 R 6114 0 R 6115 0 R 6116 0 R 6117 0 R 6118 0 R 6119 0 R 6120 0 R 6121 0 R 6122 0 R 6123 0 R 6124 0 R 6125 0 R 6126 0 R 6127 0 R 6128 0 R 6129 0 R 6130 0 R 6131 0 R 6132 0 R 6133 0 R 6134 0 R 6135 0 R 6136 0 R 6137 0 R 6138 0 R 6139 0 R 6140 0 R 6141 0 R 6142 0 R 6143 0 R 6144 0 R 6145 0 R 6146 0 R 6147 0 R 6148 0 R ] >> endobj 6066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.717 719.912 150.672 730.816] /Subtype /Link /A << /S /GoTo /D (page.61) >> >> endobj 6072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.364 707.957 183.319 718.861] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6073 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.051 696.719 211.006 706.906] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6074 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [228.47 684.764 240.425 694.951] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6075 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.345 672.809 244.301 682.996] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6076 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [198.054 660.854 210.009 671.04] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6077 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.912 648.899 151.868 659.085] /Subtype /Link /A << /S /GoTo /D (page.61) >> >> endobj 6078 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.56 636.226 184.515 647.13] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6079 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.951 624.988 146.906 635.175] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6080 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.598 612.316 179.553 623.22] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6081 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.875 601.078 161.83 611.265] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6082 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.375 588.405 151.33 599.309] /Subtype /Link /A << /S /GoTo /D (page.62) >> >> endobj 6083 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.022 576.45 183.977 587.354] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.499 564.495 147.454 575.399] /Subtype /Link /A << /S /GoTo /D (page.61) >> >> endobj 6085 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.146 552.54 180.101 563.444] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.499 541.302 147.454 551.489] /Subtype /Link /A << /S /GoTo /D (page.62) >> >> endobj 6087 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.146 528.63 180.101 539.534] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6088 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.375 516.674 151.33 527.578] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 6089 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.022 504.719 183.977 515.623] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6090 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.188 493.481 153.143 503.668] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 6091 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 469.571 143.858 479.758] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 6092 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 445.661 143.858 455.847] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6093 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 421.75 143.858 431.937] /Subtype /Link /A << /S /GoTo /D (page.61) >> >> endobj 6094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 397.84 143.858 408.027] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.46 373.93 152.416 384.116] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 6096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 350.019 143.858 360.206] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6097 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 326.109 143.858 336.296] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6098 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 302.199 143.858 312.385] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6099 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 278.288 143.858 288.475] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 254.378 143.858 264.565] /Subtype /Link /A << /S /GoTo /D (page.61) >> >> endobj 6101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 230.468 143.858 240.654] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 206.557 143.858 216.744] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 182.647 143.858 192.834] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 158.737 143.858 168.923] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6105 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 134.826 143.858 145.013] /Subtype /Link /A << /S /GoTo /D (page.62) >> >> endobj 6106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 110.916 143.858 121.103] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.555 98.244 132.51 109.147] /Subtype /Link /A << /S /GoTo /D (page.12) >> >> endobj 6108 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.277 87.006 145.233 97.192] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 6109 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.865 719.912 362.82 730.816] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 6110 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.45 708.674 353.405 718.861] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6111 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.335 696.002 357.291 706.906] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 6112 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.173 684.764 371.128 694.951] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.625 672.092 370.581 682.996] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 660.854 374.446 671.04] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.597 648.181 375.552 659.085] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.068 636.226 370.023 647.13] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6117 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.155 624.988 376.11 635.175] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.223 612.316 387.178 623.22] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.528 600.361 364.484 611.265] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6120 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.422 589.123 363.378 599.309] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 6121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 576.45 374.446 587.354] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6122 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.472 564.495 379.428 575.399] /Subtype /Link /A << /S /GoTo /D (page.15) >> >> endobj 6123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.796 552.54 351.751 563.444] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 6124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.625 540.585 370.581 551.489] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.875 528.63 362.83 539.534] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.384 505.437 360.339 515.623] /Subtype /Link /A << /S /GoTo /D (page.61) >> >> endobj 6127 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.384 481.526 360.339 491.713] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6128 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.384 457.616 360.339 467.803] /Subtype /Link /A << /S /GoTo /D (page.62) >> >> endobj 6129 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.384 433.706 360.339 443.892] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.384 409.795 360.339 419.982] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 6131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.384 385.885 360.339 396.071] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 361.257 373.888 372.161] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6133 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 337.347 373.888 348.251] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6134 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [330.67 325.392 342.626 336.296] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.771 313.437 387.726 324.34] /Subtype /Link /A << /S /GoTo /D (page.66) >> >> endobj 6136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [402.889 301.481 414.844 312.385] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.722 290.243 480.677 300.43] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [437.31 278.288 449.265 288.475] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 6139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.08 266.333 420.035 276.52] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6140 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.827 254.378 460.782 264.565] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6141 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [418.411 242.423 430.366 252.609] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6142 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 229.75 368.917 240.654] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 6143 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 217.795 368.917 228.699] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 6144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.596 193.885 362.551 204.789] /Subtype /Link /A << /S /GoTo /D (page.66) >> >> endobj 6145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.596 169.975 362.551 180.878] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.596 146.064 362.551 156.968] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.596 122.154 362.551 133.058] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 6148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.596 98.244 362.551 109.147] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6153 0 obj << /D [6151 0 R /XYZ 90 757.935 null] >> endobj 6150 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6215 0 obj << /Length 797 /Filter /FlateDecode >> stream xÚÕ˜[o›0†ïù¾ ÒÂlƒ ô²mµk;­É´I]U‘@§KÉ¿Ÿ‹“¬I8¸ƒ°î"²Ãá}¾`¸‚±t<•ÞŸa˜ŠI1Ó`B S¤ŒÀÔ·ƒóëÓÑWùnz4h(Pv_q™ðù°4šJ?%ÄŽB€Š»‰®è*ó@º½ƒÀfÇ/TTÓOÅUаÊFL¤Oܲ¾°A6ÇèXU %œêG®òý]æÄÄ]¡oƸbT[çÊ`ˆ¸Ð!Å$+¡ËãÑÍÍýäóÉÉh2),»¬3JqÞŽCê8t#”ãô€œPG¾S zš§q4TZAÂL \骒‘Y³f6¼ *qòØÌ@Æ6nç$NçVb7i˜åk;Öji]ì^(­>(BÖªbÖ†Vàô—È·òC’èR”ØíA‰ù”ØNÒOô’(³*«ª[RìÕ¼õßZý& “åw›oø7ñ´8]öU3Ù2nûl úô+ô²–Õ)Fú¡j¹-O±‚½•¸ÚŽŒÈ ¯ p—¯4FËÓ^^ž:¥ìŽL˜*„EˆªHa¿5õÅÚŒv÷a™RpXqKªãl>uׇ¤l¼ ­ÜK+Iÿø“°“زm/tߺ½›èÆóÿ'´ÕUÐâõ‘E/öˆ’³‰ÛÄôáOÛWNù¶s’y¡¬ÁÁ¢®h›7ìBõæ$[ º·ÏmäB ã8Y;ãl5:vÜíΟGÛ’1K‘Û²ì ,š¥}€"¿´^=MÓ¶9¥ÕÐ9'u+ƒÆ²ã4¶WÔªÚ.Z^:W ëóúvT©'Û­Š“lc€³ô‡Œà X-/½Æöªo_ ÙM…ìn¿|RÛïOURº`Þí†S£hd 6Ã×íxª˜ºj¬ÚñÄd+o›6vB'±2Ç– #¢WëÉÙóöÝ™ñ?”ièˆèòªEˆ0Ÿ=<_%üÏ—“Éåù1Ÿk ‚|6[òñ4Ê—®nyÌ<ý ?ø„Þ endstream endobj 6214 0 obj << /Type /Page /Contents 6215 0 R /Resources 6213 0 R /MediaBox [0 0 595.276 841.89] /Parent 6071 0 R /Annots [ 6149 0 R 6154 0 R 6155 0 R 6156 0 R 6157 0 R 6158 0 R 6159 0 R 6160 0 R 6161 0 R 6162 0 R 6163 0 R 6164 0 R 6165 0 R 6166 0 R 6167 0 R 6168 0 R 6169 0 R 6170 0 R 6171 0 R 6172 0 R 6173 0 R 6174 0 R 6175 0 R 6176 0 R 6177 0 R 6178 0 R 6179 0 R 6180 0 R 6181 0 R 6182 0 R 6183 0 R 6184 0 R 6185 0 R 6186 0 R 6187 0 R 6188 0 R 6189 0 R 6190 0 R 6191 0 R 6192 0 R 6193 0 R 6194 0 R 6195 0 R 6196 0 R 6197 0 R 6198 0 R 6199 0 R 6200 0 R 6201 0 R 6202 0 R 6203 0 R 6204 0 R 6205 0 R 6206 0 R 6207 0 R 6208 0 R 6209 0 R 6210 0 R 6211 0 R 6212 0 R ] >> endobj 6149 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.114 719.912 146.07 730.816] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6154 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.114 696.002 146.07 706.906] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6155 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.114 672.092 146.07 682.996] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 6156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.114 648.181 146.07 659.085] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 6157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 624.271 157.407 635.175] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 6158 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 590.398 154.089 601.302] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 566.488 152.983 577.392] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6160 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 554.532 151.868 565.436] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6161 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.018 542.577 152.974 553.481] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6162 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 531.339 151.868 541.526] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 6163 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 506.712 157.407 517.616] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 6164 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 482.801 152.435 493.705] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 470.846 157.407 481.75] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 446.936 157.407 457.84] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 6167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 423.026 157.407 433.93] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 6168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 399.115 154.089 410.019] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 375.205 157.407 386.109] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 6170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 351.295 157.407 362.199] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 6171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 327.384 152.435 338.288] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6172 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 315.429 157.407 326.333] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6173 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 291.519 154.089 302.423] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6174 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 279.564 157.407 290.468] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6175 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 255.653 157.407 266.557] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 6176 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 231.743 157.407 242.647] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 207.833 157.407 218.737] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6178 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 183.922 152.435 194.826] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6179 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 171.967 154.089 182.871] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6180 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 160.012 157.407 170.916] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 136.102 154.089 147.005] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 112.191 154.089 123.095] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 88.281 154.089 99.185] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6184 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 707.957 370.571 718.861] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6185 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 684.047 370.571 694.951] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6186 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 660.136 370.571 671.04] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 636.226 368.917 647.13] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 624.271 373.888 635.175] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 600.361 368.917 611.265] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 588.405 373.888 599.309] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 564.495 368.917 575.399] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 552.54 373.888 563.444] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 528.63 373.888 539.534] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 6194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 504.719 373.888 515.623] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 6195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 480.809 373.888 491.713] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 6196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 456.899 373.888 467.803] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 6197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 432.988 370.571 443.892] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.384 409.795 360.339 419.982] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 6199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 385.168 360.887 396.071] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 361.257 360.887 372.161] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6201 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 337.347 360.887 348.251] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6202 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 313.437 373.888 324.34] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 289.526 373.888 300.43] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 265.616 360.887 276.52] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 241.706 360.887 252.609] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 217.795 360.887 228.699] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.942 194.602 368.897 204.789] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 6208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 160.012 369.465 170.916] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6209 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.464 136.102 376.419 147.005] /Subtype /Link /A << /S /GoTo /D (page.11) >> >> endobj 6210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 124.146 369.465 135.05] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 100.236 368.917 111.14] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 6212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 88.281 373.888 99.185] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 6216 0 obj << /D [6214 0 R /XYZ 90 757.935 null] >> endobj 6213 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6299 0 obj << /Length 897 /Filter /FlateDecode >> stream xÚ½™]S›@†ïù{™ÌTº»° xWãÇб±ÕLÕ±^‚1­ ˜ûë»|D›8G6ãÈóžwÏÙJ¦„’ã`d|<æñLOrIFwģđÌœ‘Ñ„ÜôüááÑUÿvô™ØÔ5©êå æ±â²q42~L]¥„•ÿŽéX‚„sãæ–’‰ºþ™PÓò\òX>5'6·Ôñ\ß º ݈„[&•¢\„eL=ÁÙcÌôD}+ÆI:ÿPÆS’NëˆÎO r³ÇíY´¾_ *ÂÒb2›7Ê<æã M[bd’쵊¬U aÆÁ©Ìƒe³ ýy•­vvßnªžôüØ !3¼\ûWmJ?(åKóPc–‡q¥ÊW¯ñ]qEbNEŠÇÙ4Š5…0]5¾ësѻˢ¼±Ãè“m¦Ü ”Ðw{’`2™-¦zn6ê›®#Šzʳ_}F{QŸ‰ÞTYt;®NæÃlGÄìÖ’ô'‚á¶2²d 3x{ÓtÊ#í26ð¶ZkµÀ‹!KB„eŽ/;Þ(…˲2´»pÓŒ7ϪœÀñÒµ:-CË.u–<{°±Íp ¶ôKߨ@ã­ ~KƒH¤Žn‚%¦+‡±v‚×u6Š+M¡ô$÷Liy5ø~ö߬%õgÆN÷ÖÚæ«ÿ:ΗåÂ<Èïá%¡d¶œÍ§Òi:ÛîèìTͱ´w=8úƒFATîÝ6½—QO/Õ¦õÑÊ|oã³b‡l³Öâ+Q®ÍP³#C®9‹ Ä‘#¼€ „€‘†/dÀ^@ÂKûÊ4ø›À^œöUeÁ½À Ø ÀÇ D^$È€ó2y‘­y Lßç­q„¦ïƒ „€ú^£³ùÌÐ÷O^È€½€ „ˆíÀKÔÝ‹|fïØÚ~Ê5ÄW ¯߆#ÿlØ·DïÓ©-Œcí©`èKܽqŸ“”hOàCwW í <Ì0¸2`/ áÅiÍËàúÔžûíb-÷¹ý‘ºæè®:kΛGìÕqó{‹tËmJäç–ÕizŽåÖŸY„§Þí*¼“h¥AMúeñ¢:~Y›®Ñ¸_¿ Ö»„û6ÛNõ‹SÆ«³rƒ6N«—ƒ‹Sÿ :·MF«³ñSu<Œ—OÓh±æX9ý¾ô" endstream endobj 6298 0 obj << /Type /Page /Contents 6299 0 R /Resources 6297 0 R /MediaBox [0 0 595.276 841.89] /Parent 6071 0 R /Annots [ 6217 0 R 6218 0 R 6219 0 R 6220 0 R 6221 0 R 6222 0 R 6223 0 R 6224 0 R 6225 0 R 6226 0 R 6227 0 R 6228 0 R 6229 0 R 6230 0 R 6231 0 R 6232 0 R 6233 0 R 6234 0 R 6235 0 R 6236 0 R 6237 0 R 6238 0 R 6239 0 R 6240 0 R 6241 0 R 6242 0 R 6243 0 R 6244 0 R 6245 0 R 6246 0 R 6247 0 R 6248 0 R 6249 0 R 6250 0 R 6251 0 R 6252 0 R 6253 0 R 6254 0 R 6255 0 R 6256 0 R 6257 0 R 6258 0 R 6259 0 R 6260 0 R 6261 0 R 6262 0 R 6263 0 R 6264 0 R 6265 0 R 6266 0 R 6267 0 R 6268 0 R 6269 0 R 6270 0 R 6271 0 R 6272 0 R 6273 0 R 6274 0 R 6275 0 R 6276 0 R 6277 0 R 6278 0 R 6279 0 R 6280 0 R 6281 0 R 6282 0 R 6283 0 R 6284 0 R 6285 0 R 6286 0 R 6287 0 R 6288 0 R 6289 0 R 6290 0 R 6291 0 R 6292 0 R 6293 0 R 6294 0 R 6295 0 R ] >> endobj 6217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 707.957 154.089 718.861] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 684.764 151.868 694.951] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 6219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 660.136 157.407 671.04] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 6220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 636.226 157.407 647.13] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 6221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 612.316 157.407 623.22] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 6222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 588.405 157.407 599.309] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 6223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 564.495 157.407 575.399] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6224 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 541.302 164.331 551.489] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 516.674 157.407 527.578] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6226 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 482.801 157.407 493.705] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 458.891 148.55 469.795] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 6228 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 425.018 154.089 435.922] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6229 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 401.108 148.55 412.012] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 6230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.231 389.153 152.187 400.057] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 377.197 152.435 388.101] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 365.242 152.983 376.146] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 353.287 155.753 364.191] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 341.332 154.089 352.236] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 329.377 157.407 340.281] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 6236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 305.466 155.195 316.37] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 281.556 152.435 292.46] /Subtype /Link /A << /S /GoTo /D (page.15) >> >> endobj 6238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 269.601 155.195 280.505] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 245.691 144.406 256.595] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 221.78 144.406 232.684] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 197.87 144.406 208.774] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 173.96 152.435 184.864] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 6243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 162.004 157.407 172.908] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 6244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 138.094 144.406 148.998] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 114.184 144.406 125.088] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 90.273 144.406 101.177] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 707.957 365.031 718.861] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 6248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 696.002 369.465 706.906] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.28 672.809 390.217 682.996] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 6250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 648.181 368.917 659.085] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 624.271 360.887 635.175] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 600.361 365.031 611.265] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 6253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.007 588.405 340.962 599.309] /Subtype /Link /A << /S /GoTo /D (page.66) >> >> endobj 6254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.74 577.168 366.695 587.354] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.97 565.212 363.925 575.399] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.74 553.257 366.695 563.444] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.192 541.302 366.147 551.489] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.422 529.347 363.377 539.534] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.192 517.392 366.147 527.578] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 505.437 368.349 515.623] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.624 493.481 365.579 503.668] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6262 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 481.526 368.349 491.713] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 468.854 370.013 479.758] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.288 456.899 367.243 467.803] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 444.943 370.013 455.847] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.174 433.706 371.129 443.892] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 421.75 368.359 431.937] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.174 409.795 371.129 419.982] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 397.84 368.349 408.027] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.624 385.885 365.579 396.071] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 373.93 368.349 384.116] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6272 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.5 361.975 369.455 372.161] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.73 350.019 366.685 360.206] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.5 338.064 369.455 348.251] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 326.109 370.571 336.296] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.846 314.154 367.801 324.34] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6277 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 302.199 370.571 312.385] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 290.243 370.013 300.43] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6279 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.288 278.288 367.243 288.475] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6280 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.908 266.333 369.863 276.52] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.385 254.378 373.34 264.565] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.618 242.423 420.573 252.609] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 230.468 370.571 240.654] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6284 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.846 218.512 367.801 228.699] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 206.557 370.571 216.744] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 193.885 370.571 204.789] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.846 181.93 367.801 192.834] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 169.975 370.571 180.878] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.952 158.737 368.907 168.923] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.182 146.781 366.137 156.968] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6291 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.952 134.826 368.907 145.013] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6292 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.908 122.871 409.863 133.058] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6293 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.466 110.199 370.421 121.103] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6294 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.697 98.244 367.652 109.147] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6295 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.466 86.288 370.421 97.192] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6300 0 obj << /D [6298 0 R /XYZ 90 757.935 null] >> endobj 6297 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6397 0 obj << /Length 971 /Filter /FlateDecode >> stream xÚ½™ßW¢@Çßù+æÎÙØ™Aè͔ʩnµmÇcJæžCÛµþúÀ6³äŽŽúâÂçÞïæÇ½`4@(G-åû1u£;Œ2ÔºGF#ºI jõÑZ«WÝ+í¶u†JØÖ±ÉøsÙÄ¡éeÅm)O áW1"ÙÓ¦¥[†‰z#忣>¿~†°n86ú›Ý5B%jðöÊ…‚?x‚Œq@L˜$£É@ÞœÓ £ç³‹RqrÚšþ™ëû#Í0ÕrµÓÔª–ýòù†Î±¯©àˆ]â]ò7Nmø^u+ÔzÛó:ÍF­Þrý­ƒv¥âtÿÞ'a(×2Œ†ÒŽp†Ø°L(>ž[—cpwÆÉTZglEGÁS¹eC£% W²lÙ­é—Ë`lËx¥Üáa¾¢L˜Ù¢3ÛÛ®6*×O üZ¥ìÉ­0Í’£ëiÒØ™X Cv'Ï;«°›.ÒU¢­•0_2*í#W.´“_›ï@?Pd÷ Ez:FzpaŒS¬C~hÓÁÚZ–[D ÓK6EÌ0tFKïdx"t ïf/€ñ:Xh`ÆÆZ؆´–i7’Ö’2dû…3äµÈ̘ì!›ËM…fÌbÆkØÐB@¬dh)fütëµÖéÆ ê¼g^Ç‘|DÆòs$g¬?G´àǾȉ?äØY1rÅ­úÚñ[m3ÍÃ?›bk˜rMå³ýÈZÈç¥ .g,+ f9ÿî㸪.°{‘Ÿk;´ÉŠë {S»XƒØ›Ñyb÷á×2ö2@†Ñp_v¶1Ñ,çc«^OÏ­ïÐÎb]ªK’%ÒW »ø9êCË)ÞŒ,,R/©8™¨’’â:Z/ŽîãdÔ}”s¤?Ô¨©þIU…‰FluFÐÆ€§¥áÓó°›„²žñ7y=?ÞÚ寕ÌÖb‹~¬|û\ÊtÇ2ìùçRÓÑMsž}„Q˜ð¡¯eNÄQÞž¿§ ïò–7–È¡iågšݧ÷ÆI~rY ¼ÚQ~\Ò Îî^ò¶Ï^xß|PÌ•þ@Ùµñ endstream endobj 6396 0 obj << /Type /Page /Contents 6397 0 R /Resources 6395 0 R /MediaBox [0 0 595.276 841.89] /Parent 6071 0 R /Annots [ 6296 0 R 6301 0 R 6302 0 R 6303 0 R 6304 0 R 6305 0 R 6306 0 R 6307 0 R 6308 0 R 6309 0 R 6310 0 R 6311 0 R 6312 0 R 6313 0 R 6314 0 R 6315 0 R 6316 0 R 6317 0 R 6318 0 R 6319 0 R 6320 0 R 6321 0 R 6322 0 R 6323 0 R 6324 0 R 6325 0 R 6326 0 R 6327 0 R 6328 0 R 6329 0 R 6330 0 R 6331 0 R 6332 0 R 6333 0 R 6334 0 R 6335 0 R 6336 0 R 6337 0 R 6338 0 R 6339 0 R 6340 0 R 6341 0 R 6342 0 R 6343 0 R 6344 0 R 6345 0 R 6346 0 R 6347 0 R 6348 0 R 6349 0 R 6350 0 R 6351 0 R 6352 0 R 6353 0 R 6354 0 R 6355 0 R 6356 0 R 6357 0 R 6358 0 R 6359 0 R 6360 0 R 6361 0 R 6362 0 R 6363 0 R 6364 0 R 6365 0 R 6366 0 R 6367 0 R 6368 0 R 6369 0 R 6370 0 R 6371 0 R 6372 0 R 6373 0 R 6374 0 R 6375 0 R 6376 0 R 6377 0 R 6378 0 R 6379 0 R 6380 0 R 6381 0 R 6382 0 R 6383 0 R 6384 0 R 6385 0 R 6386 0 R 6387 0 R 6388 0 R 6389 0 R 6390 0 R 6391 0 R 6392 0 R 6393 0 R ] >> endobj 6296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.52 720.63 168.475 730.816] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.692 707.957 154.647 718.861] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.922 696.002 151.878 706.906] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6303 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.692 684.047 154.647 694.951] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6304 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 672.809 155.195 682.996] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6305 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.47 660.854 152.425 671.04] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 648.899 155.195 659.085] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.25 636.943 155.205 647.13] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6308 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 624.988 152.435 635.175] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6309 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.25 613.033 155.205 623.22] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6310 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.471 600.361 152.426 611.265] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6311 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [137.701 588.405 149.656 599.309] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.471 576.45 152.426 587.354] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6313 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 564.495 154.089 575.399] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.365 552.54 151.32 563.444] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6315 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 540.585 154.089 551.489] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6316 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.92 529.347 181.875 539.534] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.199 516.674 182.154 527.578] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6318 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.645 504.719 164.6 515.623] /Subtype /Link /A << /S /GoTo /D (page.89) >> >> endobj 6319 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.626 492.764 169.581 503.668] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6320 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.744 480.809 196.699 491.713] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6321 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.751 468.854 165.706 479.758] /Subtype /Link /A << /S /GoTo /D (page.89) >> >> endobj 6322 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [214.502 457.616 226.457 467.803] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6323 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [196.042 445.661 207.997 455.847] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [216.415 433.706 228.37 443.892] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6325 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [227.932 421.75 239.887 431.937] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [197.516 409.795 209.471 419.982] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.46 397.123 152.416 408.027] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.499 385.168 147.454 396.071] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6329 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.146 373.212 180.101 384.116] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6330 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.337 361.975 161.292 372.161] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6331 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.047 349.302 148.002 360.206] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6332 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.694 337.347 180.649 348.251] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6333 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.817 325.392 150.772 336.296] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.235 314.154 191.19 324.34] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6335 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.464 301.481 183.419 312.385] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6336 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.047 289.526 148.002 300.43] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 6337 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.694 277.571 180.649 288.475] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6338 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.817 265.616 150.772 276.52] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 6339 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.235 254.378 191.19 264.565] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6340 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.464 241.706 183.419 252.609] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6341 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.171 230.468 232.126 240.654] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6342 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.835 218.512 145.791 228.699] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6343 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 205.84 152.984 216.744] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6344 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.259 193.885 150.214 204.789] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6345 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 181.93 152.984 192.834] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.754 170.348 180.71 180.878] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6347 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [137.163 158.737 149.118 168.923] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6348 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 146.781 146.348 156.968] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6349 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [137.163 134.826 149.118 145.013] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6350 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.375 122.871 151.33 133.058] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6351 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.605 110.916 148.56 121.103] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6352 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.375 98.961 151.33 109.147] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6353 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.375 86.288 151.33 97.192] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6354 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.086 719.912 365.041 730.816] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6355 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.856 707.957 367.811 718.861] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6356 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 696.002 369.465 706.906] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6357 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.74 684.047 366.695 694.951] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6358 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 672.092 369.465 682.996] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6359 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 660.854 368.359 671.04] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6360 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.634 648.899 365.589 659.085] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6361 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 636.943 368.359 647.13] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6362 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.298 624.988 367.253 635.175] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6363 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.528 613.033 364.483 623.22] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6364 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.298 601.078 367.253 611.265] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6365 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.5 589.123 369.455 599.309] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6366 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.73 577.168 366.685 587.354] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6367 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.5 565.212 369.455 575.399] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6368 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [379.637 553.257 391.592 563.444] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6369 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 540.585 370.571 551.489] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6370 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.846 528.63 367.801 539.534] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6371 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 516.674 370.571 527.578] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6372 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 492.764 360.887 503.668] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 468.854 360.887 479.758] /Subtype /Link /A << /S /GoTo /D (page.89) >> >> endobj 6374 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 444.943 360.887 455.847] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6375 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 421.033 360.887 431.937] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6376 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 397.123 360.887 408.027] /Subtype /Link /A << /S /GoTo /D (page.89) >> >> endobj 6377 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 373.212 360.887 384.116] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6378 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 349.302 360.887 360.206] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6379 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 325.392 360.887 336.296] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6380 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 301.481 360.887 312.385] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6381 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 277.571 360.887 288.475] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6382 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 253.661 360.887 264.565] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6383 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 229.75 360.887 240.654] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6384 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 205.84 360.887 216.744] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6385 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 181.93 360.887 192.834] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6386 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [337.584 169.975 349.54 180.878] /Subtype /Link /A << /S /GoTo /D (page.15) >> >> endobj 6387 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.174 158.737 371.129 168.923] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6388 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.543 146.064 376.499 156.968] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6389 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.201 134.826 361.156 145.013] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6390 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.338 122.871 383.293 133.058] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6391 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.442 110.199 379.398 121.103] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6392 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.904 98.244 378.859 109.147] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6393 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.45 87.006 353.405 97.192] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6398 0 obj << /D [6396 0 R /XYZ 90 757.935 null] >> endobj 6395 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6470 0 obj << /Length 891 /Filter /FlateDecode >> stream xÚåY[s¢0~çWäQf¶l @ßZµN;mw«v·;m§ƒÑ® MX/ûë—›Ój¢Q_öE"pΗsÎw.>€ ¡œ·•¯ØŽæL@»,‚4#ÐöÀcåò¶VPŸÛWÀ€¶MË¥£'§•z[ySP|”J›–fé&èÊã3^|þ @Mwl0Mï €õø8-åNK;v‚`¼Æ&°°®Abf¨Oê®ÿ%EÎ ™Ÿc7 x<Á&¬ ’_ÏTÇ?'iŽ™ëð‡£Ž;,ÓaêÊÄíBñPRÜ èŽ> ™†±ëyƒÐ—ÛÆ¸?€r¡³WŽg’»`¯3Ì%uL$í˜07ô鎜ÊcÂ$ÉÁxHÿÒPŽÚQŸF®äV¦rá˜A9ùù¶ò'(«5Ë9Â^Ç,JkßÒåwÞiý‹á˜q^(c÷åàL1¸8çäpìââ’H… ßÌ÷æU ?¼œ5­c9æðqx÷§’ô²Í¢G¥W\Ž÷jÖ!éõ€[Ç£Wì˜ãÅaM rN»¼Üº·x×e^Y(œeMë ¶Ô±í8V,>Q±Yq‡è–jÖ“ªU¿¯}«þºŽGçæeõìzcDbm‹ðx<)â“@²” ãn¹ŒŠ'yÎ-¼69ç0”âÜŠøê`D4ÃÆ€èºF°±W÷–yЬ0ñÇí;/Ⱦê Y;ú~ÚªZ[p¬ Y™¦7Þ]\ÈÙd X”à|lÌ;xNg©Sî'wÌŠ`å^5`å¬V½?¯Ë!ÚE‘²O2EÛ×£µîkâÚF”¸ÚnÔ/µ$æz”ÏyZ¹M£½(]:,G2‡ò¨ÇÞ6í£ÜóñL@‡q¨–ñÉ­<š&YàªV&ÿƒå‹X’†2ÝLݨã2VF]"ó›Óã Bñ߉ÿ©ŠÌʼ,)E2…ÓÓ‘Ûp HMn$qNòfsm{Û¦8ë"žK‘dœ.j“t‹BZ¼ú:вŒvGÜ+êøå½Ç‚bh{€"Ž”ô|µ~æ]ýF@ì´n~"X|¤ šcévþ‘Ât4Ó̇æ )s#ê©é&Fav¼Y,.’H;jÞ!ó"sj SÓRóqálÕKî±ìÏÏjëúò<[Z\—ÒUgžk£ÙÜÏ(÷ÑÒ‚˜¬ì endstream endobj 6469 0 obj << /Type /Page /Contents 6470 0 R /Resources 6468 0 R /MediaBox [0 0 595.276 841.89] /Parent 6071 0 R /Annots [ 6394 0 R 6399 0 R 6400 0 R 6401 0 R 6402 0 R 6403 0 R 6404 0 R 6405 0 R 6406 0 R 6407 0 R 6408 0 R 6409 0 R 6410 0 R 6411 0 R 6412 0 R 6413 0 R 6414 0 R 6415 0 R 6416 0 R 6417 0 R 6418 0 R 6419 0 R 6420 0 R 6421 0 R 6422 0 R 6423 0 R 6424 0 R 6425 0 R 6426 0 R 6427 0 R 6428 0 R 6429 0 R 6430 0 R 6431 0 R 6432 0 R 6433 0 R 6434 0 R 6435 0 R 6436 0 R 6437 0 R 6438 0 R 6439 0 R 6440 0 R 6441 0 R 6442 0 R 6443 0 R 6444 0 R 6445 0 R 6446 0 R 6447 0 R 6448 0 R 6449 0 R 6450 0 R 6451 0 R 6452 0 R 6453 0 R 6454 0 R 6455 0 R 6456 0 R 6457 0 R 6458 0 R 6459 0 R 6460 0 R 6461 0 R 6462 0 R 6463 0 R 6464 0 R 6465 0 R 6466 0 R ] >> endobj 6394 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.854 719.912 140.809 730.816] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6399 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.817 707.957 150.772 718.861] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6400 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.661 696.719 133.616 706.906] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6401 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [118.892 684.764 130.847 694.951] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6402 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.489 672.809 147.444 682.996] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6403 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.01 660.136 157.965 671.04] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6404 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.624 648.181 143.579 659.085] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6405 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.817 636.226 150.772 647.13] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6406 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.817 624.271 150.772 635.175] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6407 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 612.316 135.828 623.22] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6408 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146 600.361 157.955 611.265] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6409 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.209 589.123 134.164 599.309] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6410 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.308 576.45 166.263 587.354] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6411 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.259 565.212 150.214 575.399] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6412 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.103 553.257 133.058 563.444] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6413 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 541.302 135.828 551.489] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6414 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 528.63 135.828 539.534] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6415 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 504.719 144.406 515.623] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6416 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 480.809 144.406 491.713] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6417 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 456.899 144.406 467.803] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6418 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 444.943 152.983 455.847] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6419 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 421.033 144.406 431.937] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6420 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 397.123 144.406 408.027] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6421 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 373.212 144.406 384.116] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 6422 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 349.302 144.406 360.206] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6423 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 325.392 144.406 336.296] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 6424 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 313.437 152.983 324.34] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 289.526 144.406 300.43] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 265.616 144.406 276.52] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 241.706 157.407 252.609] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 6428 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [119.987 229.75 131.942 240.654] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6429 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.68 218.512 128.635 228.699] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6430 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.661 206.557 133.616 216.744] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6431 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.24 194.602 147.195 204.789] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6432 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 169.975 144.406 180.878] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6433 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 146.064 152.983 156.968] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 134.109 155.195 145.013] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 122.154 157.407 133.058] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 6436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.093 110.199 133.048 121.103] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6437 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.68 98.961 128.635 109.147] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6438 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.661 87.006 133.616 97.192] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6439 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.721 720.63 363.677 730.816] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6440 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 696.002 360.887 706.906] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6441 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 672.092 369.465 682.996] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6442 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 638.219 360.887 649.123] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6443 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 614.308 360.887 625.212] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6444 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 590.398 360.887 601.302] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6445 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 566.488 360.887 577.392] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6446 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 532.615 369.465 543.519] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6447 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.28 509.422 390.217 519.608] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 6448 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 484.794 373.888 495.698] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6449 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 460.884 365.031 471.788] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 6450 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 436.973 371.676 447.877] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6451 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 425.018 372.234 435.922] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6452 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 413.063 373.888 423.967] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 6453 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 389.153 371.676 400.057] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6454 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 377.197 372.234 388.101] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6455 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 365.242 373.888 376.146] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 6456 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 342.049 368.349 352.236] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 6457 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 307.459 368.668 318.363] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6458 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 283.549 370.571 294.453] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6459 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 259.638 370.571 270.542] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6460 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 235.728 360.887 246.632] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6461 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 211.818 360.887 222.722] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6462 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 187.907 360.887 198.811] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6463 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 163.997 369.465 174.901] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6464 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.193 140.087 384.13 150.991] /Subtype /Link /A << /S /GoTo /D (page.170) >> >> endobj 6465 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.193 116.176 384.13 127.08] /Subtype /Link /A << /S /GoTo /D (page.169) >> >> endobj 6466 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 92.266 360.887 103.17] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6471 0 obj << /D [6469 0 R /XYZ 90 757.935 null] >> endobj 6468 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6551 0 obj << /Length 894 /Filter /FlateDecode >> stream xÚ½Y[s¢0~çWäf¶lH$}³–ºv\ëŠíL·ãXE׊ÜŠÿ~#Ћ(&k¨O àw9'—s‚)€ ©]ôµ¯W˜f2Š)èOƒ F‘I0ý1¸×[K÷Îxè_:&$”ÿ/½˜½¹¬¹}íYCü*(ý7©™5‹€Ñ\»€`̯_hZÌ«ô©9°±ÅOÀÓ~hpK ,(Á– )ÉãYûËT âOaÎ2Éo‡Ñó÷—TR¦%šæ¢zM ÜŸauæ÷3N°ˆó$8>O8Ú%¡Ù½Õ(£¹€Å¶äXÄrÙ6P ÎÀ¢y<€!X0Ë€~ðWä‘Y"°á,ŒE ì ˆ×m¸½Þà°ˆ^¿x]·q¤*Z 8è ëõ^ý»§æ¸€}W ZçfÐøVï4ÝjÐnÛíA÷¦Õ黽J½ÛFÃõ<å¡2‰|_-³dÌ”…p ¹Éİ(>m·£†Áå„ÑR„aK`HZF'Ɖƒˆ²Ä1*“ã«G‡cT&'LÔW`b ¢ gÅyêj8ˆP‰#Y‡(Y‡þ‘cï„Wʆc¨ ˜÷%ÂýQ"0D˜š\9’û*-°d*–Ų´ÔPbd‹-ºUލ1 g{*ŒOtGdÊšÏn±ô9™ã·òètŒJ¨Ò&¡jҼ̪ÒdñÈq©I¸jY&ÅöÿUëC:é6/o†~Aˆñª`í;tÇF WŸñѭ³”îø4Ò}…å©xv–qzÄèÄtY‘«f ËÙ÷Üîi• @£ÅX´WbtpÃE/&úðéH˜<[š§’õ\rûˆì¾R> endobj 6467 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 707.957 144.406 718.861] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6472 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 684.047 144.406 694.951] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6473 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 660.136 157.407 671.04] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6474 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [114.737 648.181 126.692 659.085] /Subtype /Link /A << /S /GoTo /D (page.89) >> >> endobj 6475 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.838 636.226 176.774 647.13] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6476 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.956 624.271 198.911 635.175] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6477 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 612.316 155.195 623.22] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6478 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.466 601.078 217.421 611.265] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6479 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.497 589.123 262.452 599.309] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6480 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.849 577.168 200.804 587.354] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6481 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [216.864 565.212 228.819 575.399] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6482 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.596 553.257 241.551 563.444] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6483 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.18 541.302 211.135 551.489] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6484 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.672 528.63 154.627 539.534] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6485 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [137.711 516.674 149.666 527.578] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6486 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.358 504.719 182.313 515.623] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6487 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.001 493.481 162.956 503.668] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6488 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.259 480.809 150.214 491.713] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 6489 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.906 468.854 182.861 479.758] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6490 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 456.899 152.984 467.803] /Subtype /Link /A << /S /GoTo /D (page.95) >> >> endobj 6491 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.676 444.943 185.631 455.847] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6492 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.259 432.988 150.214 443.892] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 6493 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.906 421.033 182.861 431.937] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6494 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 409.078 157.965 419.982] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6495 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.302 397.123 157.258 408.027] /Subtype /Link /A << /S /GoTo /D (page.96) >> >> endobj 6496 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.259 385.168 155.195 396.071] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6497 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.682 373.212 154.637 384.116] /Subtype /Link /A << /S /GoTo /D (page.98) >> >> endobj 6498 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.922 361.257 156.859 372.161] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6499 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.346 349.302 156.301 360.206] /Subtype /Link /A << /S /GoTo /D (page.95) >> >> endobj 6500 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 337.347 152.984 348.251] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 6501 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.676 325.392 185.631 336.296] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6502 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 313.437 157.965 324.34] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6503 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 301.481 157.407 312.385] /Subtype /Link /A << /S /GoTo /D (page.97) >> >> endobj 6504 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 277.571 151.599 288.475] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6505 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 253.661 146.617 264.565] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6506 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 229.75 146.617 240.654] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6507 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 205.84 146.617 216.744] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6508 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 181.93 146.617 192.834] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6509 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 158.019 146.617 168.923] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6510 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 134.109 146.617 145.013] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6511 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 110.199 146.617 121.103] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6512 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 86.288 146.617 97.192] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6513 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 708.674 380.812 718.861] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6514 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 684.764 380.812 694.951] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 6515 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 660.136 363.099 671.04] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6516 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 636.226 363.099 647.13] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6517 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 612.316 363.099 623.22] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6518 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 588.405 363.099 599.309] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6519 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.796 576.45 351.751 587.354] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6520 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.201 565.212 361.156 575.399] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6521 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.058 553.257 362.013 563.444] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6522 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.45 541.302 353.405 551.489] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6523 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.335 528.63 357.291 539.534] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6524 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.943 517.392 373.898 527.578] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6525 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.472 504.719 379.428 515.623] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6526 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.472 492.764 379.428 503.668] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [340.354 480.809 352.309 491.713] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6528 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 468.854 368.349 479.758] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6529 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.076 457.616 373.031 467.803] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6530 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.289 444.943 372.244 455.847] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6531 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.943 432.988 373.898 443.892] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 6532 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.289 421.033 372.244 431.937] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6533 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.943 409.078 373.898 419.982] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6534 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.547 397.123 359.502 408.027] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6535 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [337.585 385.885 349.54 396.071] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6536 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 361.257 363.099 372.161] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 6537 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 337.347 363.099 348.251] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6538 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 313.437 363.099 324.34] /Subtype /Link /A << /S /GoTo /D (page.95) >> >> endobj 6539 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 289.526 363.099 300.43] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6540 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 265.616 363.099 276.52] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 6541 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 241.706 363.099 252.609] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6542 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 217.795 368.08 228.699] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 193.885 363.099 204.789] /Subtype /Link /A << /S /GoTo /D (page.96) >> >> endobj 6544 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 169.975 368.08 180.878] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 146.064 363.099 156.968] /Subtype /Link /A << /S /GoTo /D (page.98) >> >> endobj 6546 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 122.154 368.08 133.058] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6547 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 98.244 363.099 109.147] /Subtype /Link /A << /S /GoTo /D (page.95) >> >> endobj 6552 0 obj << /D [6550 0 R /XYZ 90 757.935 null] >> endobj 6549 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6646 0 obj << /Length 959 /Filter /FlateDecode >> stream xÚ½™[s¢0Çßùy”™•M Ò7«Ö±c­ v·3NDZŠö¡^ ­í§_nn‘*9êáâï.1‡0Z"ŒºÊåHùyE-di§ÈÂÈäDc” Ñk½A»s¯>Œ®‘f<ø]tƒX,¼¬tFÊ‹B‚«‘è×ÌÔL¡ÙJ?`4®_#¬éV½EO­AõàøŒå—‚,Á)KÆ”!“êæ,Võ·3íéG$+zËDÚî*h\§ ×,#¹“QÄ :!šÅ>A;êO\Ï[ùËÈ¿O‰åt ÜÖ/¥C0Îâi!·œG&È#wvRåmæo½•@Æ @ÿÝ/©‹œ;ÛåÄmÈ,pOò¹>šo§BR&Êø d; !ºâÓBŽCþÇÿ)øGÊBê§#““KH`³3Œ^I!ØúFø«—†.ÈBI`B;ùØMÞËÂs_„¬Fîô›ª„ÕÞT‚ƒŵ¿ ¤•û·È"ÿ†çîóF„%D ›FB<ÎÅ?º¯)ÀÚ|œ»v½ b"ÂL—Ìr„ÉįËB'+ÀTòå‰WuFvnœL!×Eqé’-[”3&9ÃûIÓî:%1Ár–¼LÊ‚Æ5až¨ÈƒŽmO.UÕšíIoà ;­IëöÖn—Mšq‡ªEkM»yã|ü·JÂ3»(š wýþdxÛŒ:v5Æ:w­VÇ©Àó~gP²_+dW3AqÙcÃ*Ptýà‡(Èê/XŠö(•ø +w"‡ÒfûZ›="J¸f4(⺮qj$bÁª\A8²¶V\Ѳø Êw&²ìëÏCÇI-97²è’B‘ë âúQdæíløñ²øÙ ðlí-ÜóS¥ó«X™î[¾°žŠÄ©òZ­½õL >CvòÊôùüO—òó©&åþ£8h4¢Ñ"|vãÅ'ZN¿w -hù£Ñã{|lovïKw}àqàé?Ïy endstream endobj 6645 0 obj << /Type /Page /Contents 6646 0 R /Resources 6644 0 R /MediaBox [0 0 595.276 841.89] /Parent 6553 0 R /Annots [ 6548 0 R 6554 0 R 6555 0 R 6556 0 R 6557 0 R 6558 0 R 6559 0 R 6560 0 R 6561 0 R 6562 0 R 6563 0 R 6564 0 R 6565 0 R 6566 0 R 6567 0 R 6568 0 R 6569 0 R 6570 0 R 6571 0 R 6572 0 R 6573 0 R 6574 0 R 6575 0 R 6576 0 R 6577 0 R 6578 0 R 6579 0 R 6580 0 R 6581 0 R 6582 0 R 6583 0 R 6584 0 R 6585 0 R 6586 0 R 6587 0 R 6588 0 R 6589 0 R 6590 0 R 6591 0 R 6592 0 R 6593 0 R 6594 0 R 6595 0 R 6596 0 R 6597 0 R 6598 0 R 6599 0 R 6600 0 R 6601 0 R 6602 0 R 6603 0 R 6604 0 R 6605 0 R 6606 0 R 6607 0 R 6608 0 R 6609 0 R 6610 0 R 6611 0 R 6612 0 R 6613 0 R 6614 0 R 6615 0 R 6616 0 R 6617 0 R 6618 0 R 6619 0 R 6620 0 R 6621 0 R 6622 0 R 6623 0 R 6624 0 R 6625 0 R 6626 0 R 6627 0 R 6628 0 R 6629 0 R 6630 0 R 6631 0 R 6632 0 R 6633 0 R 6634 0 R 6635 0 R 6636 0 R 6637 0 R 6638 0 R 6639 0 R 6640 0 R 6641 0 R 6642 0 R ] >> endobj 6548 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 719.912 146.617 730.816] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 6554 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 696.002 146.617 706.906] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6555 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 672.092 151.599 682.996] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6556 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 648.181 146.617 659.085] /Subtype /Link /A << /S /GoTo /D (page.97) >> >> endobj 6557 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 624.271 157.407 635.175] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 6558 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 600.361 157.407 611.265] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 576.45 152.157 587.354] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6560 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [115.295 564.495 132.232 575.399] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6561 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 552.54 159.071 563.444] /Subtype /Link /A << /S /GoTo /D (page.102) >> >> endobj 6562 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 540.585 159.071 551.489] /Subtype /Link /A << /S /GoTo /D (page.103) >> >> endobj 6563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.586 528.63 158.523 539.534] /Subtype /Link /A << /S /GoTo /D (page.101) >> >> endobj 6564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.586 516.674 158.523 527.578] /Subtype /Link /A << /S /GoTo /D (page.101) >> >> endobj 6565 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 492.764 152.157 503.668] /Subtype /Link /A << /S /GoTo /D (page.102) >> >> endobj 6566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 468.854 152.157 479.758] /Subtype /Link /A << /S /GoTo /D (page.103) >> >> endobj 6567 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 444.943 152.157 455.847] /Subtype /Link /A << /S /GoTo /D (page.101) >> >> endobj 6568 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 421.033 152.157 431.937] /Subtype /Link /A << /S /GoTo /D (page.101) >> >> endobj 6569 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [115.295 409.078 132.232 419.982] /Subtype /Link /A << /S /GoTo /D (page.103) >> >> endobj 6570 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.99 397.123 162.926 408.027] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6571 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.523 385.168 167.459 396.071] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6572 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.489 373.93 168.426 384.116] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6573 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.056 361.975 171.993 372.161] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6574 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.315 350.019 164.251 360.206] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6575 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.096 337.347 164.032 348.251] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6576 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.99 325.392 162.926 336.296] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6577 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.523 313.437 167.459 324.34] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6578 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.096 301.481 164.032 312.385] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6579 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.956 289.526 163.893 300.43] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6580 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.654 277.571 164.59 288.475] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6581 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.523 265.616 167.459 276.52] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6582 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.23 253.661 168.167 264.565] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6583 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.595 241.706 153.532 252.609] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6584 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.733 230.468 180.67 240.654] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6585 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.396 217.795 177.332 228.699] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6586 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.321 217.795 197.257 228.699] /Subtype /Link /A << /S /GoTo /D (page.112) >> >> endobj 6587 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [256.375 206.557 273.312 216.744] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6588 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.045 194.602 267.982 204.789] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6589 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.682 182.647 247.618 192.834] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6590 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.144 170.692 247.08 180.878] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6591 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.728 158.737 216.664 168.923] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6592 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.549 146.781 168.485 156.968] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6593 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.489 134.826 168.426 145.013] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6594 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.514 122.871 164.45 133.058] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6595 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.956 110.199 163.893 121.103] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6596 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.24 98.961 168.177 109.147] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6597 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.997 86.288 168.934 97.192] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6598 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.135 719.912 381.071 730.816] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.537 708.674 388.474 718.861] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.004 696.002 383.941 706.906] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.722 684.764 384.658 694.951] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6602 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.23 672.092 385.166 682.996] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6603 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.12 660.136 385.056 671.04] /Subtype /Link /A << /S /GoTo /D (page.112) >> >> endobj 6604 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.712 648.181 384.648 659.085] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6605 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.12 636.226 385.056 647.13] /Subtype /Link /A << /S /GoTo /D (page.112) >> >> endobj 6606 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 612.316 368.638 623.22] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6607 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 588.405 368.638 599.309] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6608 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.627 588.405 388.563 599.309] /Subtype /Link /A << /S /GoTo /D (page.112) >> >> endobj 6609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 564.495 368.638 575.399] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 540.585 368.638 551.489] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6611 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 516.674 368.638 527.578] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6612 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 492.764 368.638 503.668] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6613 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 468.854 368.638 479.758] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6614 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 444.943 368.638 455.847] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6615 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 421.033 371.676 431.937] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 397.123 371.676 408.027] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 6617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [340.354 385.168 352.309 396.071] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 6618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.431 373.212 358.387 384.116] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.964 361.975 362.92 372.161] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.989 350.019 358.944 360.206] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.452 337.347 379.408 348.251] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.986 325.392 383.941 336.296] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6623 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.952 314.154 384.907 324.34] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6624 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.519 302.199 388.474 312.385] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.777 290.243 380.733 300.43] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6626 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.558 277.571 380.513 288.475] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.452 265.616 379.408 276.52] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6628 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.986 253.661 383.941 264.565] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6629 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.558 241.706 380.513 252.609] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6630 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.419 229.75 380.374 240.654] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6631 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.116 217.795 381.071 228.699] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6632 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.986 205.84 383.941 216.744] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6633 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.693 193.885 384.648 204.789] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6634 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.952 182.647 384.907 192.834] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6635 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.977 170.692 380.932 180.878] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6636 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.419 158.019 380.374 168.923] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6637 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.703 146.781 384.658 156.968] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6638 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.46 134.109 385.415 145.013] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6639 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.116 122.154 381.071 133.058] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6640 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.519 110.916 388.474 121.103] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6641 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.986 98.244 383.941 109.147] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6642 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.703 87.006 384.658 97.192] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6647 0 obj << /D [6645 0 R /XYZ 90 757.935 null] >> endobj 6644 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6727 0 obj << /Length 937 /Filter /FlateDecode >> stream xÚÅY]Sâ0}ï¯Èc;³v“´I[ßPÑÁATŠ+;®Ã`)è®…n[?ð×oJp„&Ú}€¤_çÜ{’›{Û@0œhíû1ö€gzSЇ"“`:p£7ZGõ®qÛ96tMH({nvy4?­Õ;Ú_ ±³ ÙÓÄ1‹€ Ònn!°ó§š–ç‚—Ù]°±ÅÚGàk—\²~°AÖÇ8Ø2!%œuðb ¨÷ õg=40a=v8‰³o3ƒ¸%ÉhnRûD7{˜@ÓùuÎÈþö2=² ú­TÈñ0 ÿŠàH1\nѪ•j†ã0!Øëè!8…&Èèb"ÄýÁàa¾“' ]Fɦq¨j\˜Oâç¤?PCØ6¶CS×écЫÅÖÛöjï!¾j.Y”Ư>¾˜­âë/q‰ˆ°Q·"ÿ²mP¨wðg®¹v/Aõ³{ó^@‡(݆¯Ñú±Ñ½r)ÓtšNîÒ"6±˜6,b¢ ¦4 ¾’éݧ¬Ÿ=mvé„8KÿäñæÁ8pºÅq¤âädIMël”â×S-N~ ÇÜ…’ÍzkW Åº…‘úâ'™ú€1ÒÆ‹%^!ˆ+"kÉÌ2´ºB ¤4…X*WWˆì¨ÏÉtSö[t×´íÒµé¶VI7çÙ´BºayòÚò¦ùŠÄ.JüÿÏ„îWSÓ‚B¢z·?Õ³Ï “ÏÄô‹¢;/=JpÓ‘g«(®—j™êô\N9¸(°ªS”b%(*™$>D:k^{W€‚É$~Î.~á ’ç|«ÿ¸Ì{»ºÿFÝÙwÉí·÷ @jzŽåÎ7‰gbsëNò¢~Œ™“1oÏÞ;ǹíá? ¼ApßFûÄáG"Ì{ÃüÞI®ýfã€÷mAÞ»›òöhò:…ã%™§ÿ}ús endstream endobj 6726 0 obj << /Type /Page /Contents 6727 0 R /Resources 6725 0 R /MediaBox [0 0 595.276 841.89] /Parent 6553 0 R /Annots [ 6643 0 R 6648 0 R 6649 0 R 6650 0 R 6651 0 R 6652 0 R 6653 0 R 6654 0 R 6655 0 R 6656 0 R 6657 0 R 6658 0 R 6659 0 R 6660 0 R 6661 0 R 6662 0 R 6663 0 R 6664 0 R 6665 0 R 6666 0 R 6667 0 R 6668 0 R 6669 0 R 6670 0 R 6671 0 R 6672 0 R 6673 0 R 6674 0 R 6675 0 R 6676 0 R 6677 0 R 6678 0 R 6679 0 R 6680 0 R 6681 0 R 6682 0 R 6683 0 R 6684 0 R 6685 0 R 6686 0 R 6687 0 R 6688 0 R 6689 0 R 6690 0 R 6691 0 R 6692 0 R 6693 0 R 6694 0 R 6695 0 R 6696 0 R 6697 0 R 6698 0 R 6699 0 R 6700 0 R 6701 0 R 6702 0 R 6703 0 R 6704 0 R 6705 0 R 6706 0 R 6707 0 R 6708 0 R 6709 0 R 6710 0 R 6711 0 R 6712 0 R 6713 0 R 6714 0 R 6715 0 R 6716 0 R 6717 0 R 6718 0 R 6719 0 R 6720 0 R 6721 0 R 6722 0 R 6723 0 R ] >> endobj 6643 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.73 719.912 168.685 730.816] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6648 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.62 707.957 168.575 718.861] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6649 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.212 696.002 168.167 706.906] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6650 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.62 684.047 168.575 694.951] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6651 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.056 672.809 143.011 682.996] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6652 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.969 660.854 136.924 671.04] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6653 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.95 648.181 141.905 659.085] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6654 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.01 636.226 157.965 647.13] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6655 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.912 624.271 151.868 635.175] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6656 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.595 613.033 156.55 623.22] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6657 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.916 601.078 142.872 611.265] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6658 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.072 588.405 160.027 599.309] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6659 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.425 576.45 143.38 587.354] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6660 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.614 565.212 143.569 575.399] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6661 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.483 553.257 146.438 563.444] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6662 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.639 540.585 163.594 551.489] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6663 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.19 529.347 147.146 539.534] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6664 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.066 516.674 143.021 527.578] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6665 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 492.764 155.195 503.668] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6666 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 468.854 155.195 479.758] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6667 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.799 445.661 173.736 455.847] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 6668 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.799 421.75 173.736 431.937] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 6669 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 397.123 157.407 408.027] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6670 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 373.212 157.407 384.116] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6671 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.231 349.302 147.205 360.206] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 6672 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.46 338.064 152.416 348.251] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 6673 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 313.437 144.406 324.34] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6674 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 289.526 144.406 300.43] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6675 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 265.616 144.406 276.52] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6676 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 241.706 144.406 252.609] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6677 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 217.795 144.406 228.699] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6678 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 193.885 144.406 204.789] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6679 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 160.012 157.407 170.916] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6680 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.233 148.774 130.169 158.961] /Subtype /Link /A << /S /GoTo /D (page.112) >> >> endobj 6681 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.732 136.102 175.668 147.005] /Subtype /Link /A << /S /GoTo /D (page.119) >> >> endobj 6682 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.85 124.146 202.786 135.05] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6683 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.371 112.191 157.307 123.095] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 6684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.018 100.236 189.955 111.14] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6685 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.981 88.998 239.917 99.185] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6686 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [435.836 720.63 452.772 730.816] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [406.605 708.674 423.542 718.861] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6688 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [417.933 696.719 434.869 706.906] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6689 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.352 684.764 464.289 694.951] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6690 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.936 672.809 433.873 682.996] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6691 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.048 660.854 374.984 671.04] /Subtype /Link /A << /S /GoTo /D (page.117) >> >> endobj 6692 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [390.695 648.181 407.631 659.085] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6693 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.086 636.943 370.023 647.13] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6694 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [385.733 624.271 402.67 635.175] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6695 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.758 613.033 385.694 623.22] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6696 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 601.078 379.427 611.265] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 6697 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.634 588.405 370.571 599.309] /Subtype /Link /A << /S /GoTo /D (page.117) >> >> endobj 6698 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [386.281 576.45 403.218 587.354] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6699 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 565.212 373.34 575.399] /Subtype /Link /A << /S /GoTo /D (page.118) >> >> endobj 6700 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.051 552.54 405.988 563.444] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6701 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.634 541.302 370.571 551.489] /Subtype /Link /A << /S /GoTo /D (page.117) >> >> endobj 6702 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [386.281 528.63 403.218 539.534] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6703 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 517.392 373.34 527.578] /Subtype /Link /A << /S /GoTo /D (page.118) >> >> endobj 6704 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.051 504.719 405.988 515.623] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6705 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 481.526 366.576 491.713] /Subtype /Link /A << /S /GoTo /D (page.119) >> >> endobj 6706 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 457.616 366.576 467.803] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6707 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 433.706 366.576 443.892] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 6708 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 409.795 366.576 419.982] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6709 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 385.885 366.576 396.071] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6710 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 361.975 366.576 372.161] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6711 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 338.064 366.576 348.251] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6712 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 314.154 366.576 324.34] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6713 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 290.243 366.576 300.43] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6714 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 266.333 366.576 276.52] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6715 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 242.423 366.576 252.609] /Subtype /Link /A << /S /GoTo /D (page.117) >> >> endobj 6716 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 218.512 366.576 228.699] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6717 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 194.602 366.576 204.789] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6718 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 170.692 366.576 180.878] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6719 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 146.781 366.576 156.968] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6720 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 122.871 366.576 133.058] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 6721 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.69 110.199 350.645 121.103] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6722 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.076 98.961 365.032 109.147] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6723 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.058 87.006 362.013 97.192] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6728 0 obj << /D [6726 0 R /XYZ 90 757.935 null] >> endobj 6725 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6796 0 obj << /Length 978 /Filter /FlateDecode >> stream xÚÅ™]w¢8Çïù¹Ôs¶lH€¹ó=LÁ3ÝÓáÂXg] ­~û¡Ží $m,{#1!ÿßó’ X†Rוþ`²A1îw`@ Q$Œ€€Û–e÷Í›ö7÷3P¡.CB³~ÇdhyµdºÒ¿Êj!@ÇÞD“5…€ÅFºýAÕPV <ïÚ+Ùu é‹_XÏ,A0+c4¬È’‚„ëÔÿã.ˆñ²Dφ¸½Â¶X¶ÊÙÏB²AJ‰0ŽÚˆ´öin-ùBÅ_24°^«±Š‚–Œñ{ZÈ\¿³{iÅX¬ûÆ[l·qÀŠ&b‰ÄmLZþZTˆ+1Œän<ÞÔT™CÏ„ö‰¨O×¢cÑxlü¨ ¶ ÓÆ4‰bAØAÁþ~¬"Á‘™„QŠJ¤ìñð*W¨xž¿Jý»]œ×—ÍôÔÜVaK¾g°Ò¸a^¶l’å¯LòV¦ÊÇLðþ0½FÏa—sp:¦€iܰ†2ø3¨{œ|tÉ9¬é FA%êi‘¤ñjÉFi+–QÝlØÅ?˜ Íàs©nP^’S76Ä9Ïq»SVrázo Z¿²Ä?؈òÄ$YˆæX×xb’qs¬súSæøtã©V¨¬B PE‘)VEÉô9=쟾j}Jï|æQFåâüCO‡œ&ÿ´,>±~§Ÿììa†§ÑIup ›£â Δ^(=¬Ã¨óÖà ÏæÙ‘{`Ùf¿Î»ŸÞ³Ê´6ýe†²sJîHM> endobj 6724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.277 720.63 145.233 730.816] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6729 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.969 708.674 136.924 718.861] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6730 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.85 696.719 157.805 706.906] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6731 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.854 684.047 140.809 694.951] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 6732 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.898 672.809 147.853 682.996] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6733 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.103 660.854 133.058 671.04] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6734 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.767 648.899 134.722 659.085] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6735 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.327 636.943 161.282 647.13] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6736 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.308 624.988 158.264 635.175] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6737 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.586 612.316 153.541 623.22] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6738 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.63 601.078 160.585 611.265] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6739 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.231 589.123 160.186 599.309] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6740 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.835 577.168 145.791 587.354] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6741 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.499 565.212 147.454 575.399] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6742 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 552.54 155.753 563.444] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6743 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.835 541.302 145.791 551.489] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6744 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.066 528.63 143.021 539.534] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.315 517.392 135.27 527.578] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6746 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 504.719 135.828 515.623] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6747 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.01 492.764 157.965 503.668] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6748 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.489 481.526 147.444 491.713] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6749 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.817 469.571 150.772 479.758] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6750 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 445.661 150.095 455.847] /Subtype /Link /A << /S /GoTo /D (page.117) >> >> endobj 6751 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 421.75 150.095 431.937] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6752 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 397.84 150.095 408.027] /Subtype /Link /A << /S /GoTo /D (page.118) >> >> endobj 6753 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 373.93 150.095 384.116] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6754 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 350.019 150.095 360.206] /Subtype /Link /A << /S /GoTo /D (page.117) >> >> endobj 6755 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 326.109 150.095 336.296] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6756 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 302.199 150.095 312.385] /Subtype /Link /A << /S /GoTo /D (page.118) >> >> endobj 6757 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 278.288 150.095 288.475] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6758 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.712 253.661 167.648 264.565] /Subtype /Link /A << /S /GoTo /D (page.170) >> >> endobj 6759 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 229.75 144.406 240.654] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6760 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 205.84 144.406 216.744] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6761 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 181.93 144.406 192.834] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 158.019 148.55 168.923] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 6763 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 146.064 152.983 156.968] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 122.154 144.406 133.058] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 98.244 144.406 109.147] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6766 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 719.912 360.887 730.816] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6767 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 696.719 368.349 706.906] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 6768 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 672.092 363.687 682.996] /Subtype /Link /A << /S /GoTo /D (page.9) >> >> endobj 6769 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 660.136 371.676 671.04] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6770 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 636.226 373.888 647.13] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 6771 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 602.353 368.668 613.257] /Subtype /Link /A << /S /GoTo /D (page.11) >> >> endobj 6772 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.28 579.16 390.217 589.347] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 6773 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.28 555.25 390.217 565.436] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 6774 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 531.339 380.812 541.526] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6775 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 507.429 380.812 517.616] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 6776 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 483.519 389.669 493.705] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 6777 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 459.608 389.669 469.795] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 6778 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 435.698 389.669 445.885] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 6779 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 411.788 389.669 421.974] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 6780 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 387.877 389.669 398.064] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 6781 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 363.967 389.669 374.154] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 6782 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 340.057 389.669 350.243] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 6783 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 316.146 389.669 326.333] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 6784 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 292.236 389.669 302.423] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 6785 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 268.326 389.669 278.512] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 6786 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 244.415 389.669 254.602] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 6787 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 220.505 389.669 230.692] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 6788 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 196.595 389.669 206.781] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 6789 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 171.967 368.917 182.871] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 138.094 368.349 148.998] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6791 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.5 126.139 369.455 137.043] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 102.229 373.888 113.133] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6797 0 obj << /D [6795 0 R /XYZ 90 757.935 null] >> endobj 6794 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6880 0 obj << /Length 1008 /Filter /FlateDecode >> stream xÚÅ™k“š:Çßû)òfÎr’@"ôÖ¡EØ N·³í8^p×ΊÝîÚO‚h«x 4±ç…DùýŸO€à@Щ5ÃÚ¿·Ø–fQLA8uŠ4‚'àAq¼¶}¯~ ßš$”]·ùYfvºf‡µï5ÄÎB€6W“ºV× Ïk_!˜°óïÔt˯›Íu6>ƒ ö±,{– ÈŽ1u¬k’\u™¼%éüŸr.™>nµ{x¸Á*˜lÏÑà处4‹lI?TD”èy1ÌÆWAe¨bÈNg¾žº€IkOe„PéQ´ ÊÁKrôPnšF߯)Wðn¹^žU{/ùi4ª¨­ÖItɹUcTˆ¥Š‹&;û÷*'¦b¡Õ­Rb̵E² +)Ö\êÿi:œ\ÓÃ=™+Þ€˜‘¹­€³Iúï25àaª–ɸDHp‰TI¶¤,%å6hý §‹‚^[öÚýò\ŽYßüÕC¯xsÓKòü¶&©·åŠËV¼±â¿0'îˉ·¸rÕ<^–ˆUt4ˆÒt¾|äÑtýt[< ¢ø…Ûc‹Ýê˜6^$Y\×\’~±]ï‘J:Š/;ú©ؽޠ©êDi´-ßïµa¯á‚>Ááç;[.òNµ°Òè5º’±Î}E`qQÍ01 :ÒØç¤LÐo:݆j@¥#9.Ÿ²òð{nûJؼHäÀוQsôÚµ»~O¥Dù,ÇHϾÛß“ô½«ß¦+©¼>‹æïx¡Ý“C ¯Ów,¤á½$b¿Õ²ÑD³6Ȧ¦ˆK1ym9£”m¤6‹gâƒHëì®í‰Ï7óÙw2E<¯DZ˜ãd)æ8ù!I0ß«D04¿s•0øM‘¤+)i_â„[‚°DžAÑêOO÷!ò JVÜÄë˜KyqM¡¼¦Ã6ƒ–íÚAè4\ñ¶Áõ›ö­Z7”Íz©e RsO»,=°Ðm¨l©„NØoÛrœv}¯#ÜÙ-¶Æ’”‘ T‘©øì */ßÒsÛ­ß»MztÃð÷ˆz5±ÍÞîX±Ê®ôôsªcÒhòvIèi’ª„(|= Kê­ž.…²´Áåôv»RÁhêÕÔÎÍ5Dùskqt*ø_ Äϼ•+§UO_âñj¶ˆÅ(ϳ8Ä 1¿ƒ»±ø¢‘š›GÞ%ß3îÞtRͪëæöM'±4BŒÜ®NGépMÔ‹8»»ƒÛìÙa4Ê¿Puû°êÞ‘zþ C„ó£iößEšÉ–ÕN3?64ó£Ñ:Û‹·õcxÌ<ý¶) endstream endobj 6879 0 obj << /Type /Page /Contents 6880 0 R /Resources 6878 0 R /MediaBox [0 0 595.276 841.89] /Parent 6553 0 R /Annots [ 6793 0 R 6798 0 R 6799 0 R 6800 0 R 6801 0 R 6802 0 R 6803 0 R 6804 0 R 6805 0 R 6806 0 R 6807 0 R 6808 0 R 6809 0 R 6810 0 R 6811 0 R 6812 0 R 6813 0 R 6814 0 R 6815 0 R 6816 0 R 6817 0 R 6818 0 R 6819 0 R 6820 0 R 6821 0 R 6822 0 R 6823 0 R 6824 0 R 6825 0 R 6826 0 R 6827 0 R 6828 0 R 6829 0 R 6830 0 R 6831 0 R 6832 0 R 6833 0 R 6834 0 R 6835 0 R 6836 0 R 6837 0 R 6838 0 R 6839 0 R 6840 0 R 6841 0 R 6842 0 R 6843 0 R 6844 0 R 6845 0 R 6846 0 R 6847 0 R 6848 0 R 6849 0 R 6850 0 R 6851 0 R 6852 0 R 6853 0 R 6854 0 R 6855 0 R 6856 0 R 6857 0 R 6858 0 R 6859 0 R 6860 0 R 6861 0 R 6862 0 R 6863 0 R 6864 0 R 6865 0 R 6866 0 R 6867 0 R 6868 0 R 6869 0 R 6870 0 R 6871 0 R 6872 0 R 6873 0 R 6874 0 R 6875 0 R 6876 0 R ] >> endobj 6793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 719.912 155.753 730.816] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6798 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 696.002 152.157 706.906] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6799 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 672.092 152.157 682.996] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6800 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 648.181 152.157 659.085] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6801 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 624.271 157.407 635.175] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6802 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 600.361 155.753 611.265] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6803 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 576.45 152.157 587.354] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6804 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 552.54 157.407 563.444] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 6805 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 528.63 155.753 539.534] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6806 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 504.719 152.157 515.623] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6807 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 480.809 155.753 491.713] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6808 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 456.899 152.157 467.803] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6809 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 423.026 152.983 433.93] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6810 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 411.07 155.195 421.974] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6811 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 387.16 155.753 398.064] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6812 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 363.25 152.157 374.154] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 339.339 152.157 350.243] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6814 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 315.429 155.753 326.333] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6815 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 291.519 152.157 302.423] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6816 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 267.608 152.157 278.512] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6817 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 243.698 152.157 254.602] /Subtype /Link /A << /S /GoTo /D (page.112) >> >> endobj 6818 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 219.788 155.753 230.692] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6819 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 195.877 152.157 206.781] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6820 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.949 184.64 133.885 194.826] /Subtype /Link /A << /S /GoTo /D (page.119) >> >> endobj 6821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.049 171.967 178.986 182.871] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.167 160.012 206.104 170.916] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.67 148.057 165.606 158.961] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.317 136.102 198.253 147.005] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [258.029 124.864 274.965 135.05] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6826 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.073 112.909 234.009 123.095] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.032 100.953 236.968 111.14] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.571 88.998 218.507 99.185] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [453.629 720.63 470.565 730.816] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [438.426 708.674 455.362 718.861] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [478.276 696.719 495.213 706.906] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [469.32 684.764 486.256 694.951] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [420.523 672.809 437.459 682.996] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [445.509 660.854 462.446 671.04] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.999 648.899 475.935 659.085] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6836 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [449.943 636.943 466.879 647.13] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6837 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [453.818 624.988 470.754 635.175] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6838 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.527 613.033 436.463 623.22] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6839 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.365 601.078 378.302 611.265] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 6840 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.012 588.405 410.949 599.309] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6841 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 577.168 373.34 587.354] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6842 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.051 564.495 405.987 575.399] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6843 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.348 553.257 388.284 563.444] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6844 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.385 541.302 378.321 551.489] /Subtype /Link /A << /S /GoTo /D (page.131) >> >> endobj 6845 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.032 528.63 410.969 539.534] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6846 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 516.674 376.658 527.578] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6847 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.827 504.719 377.764 515.623] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6848 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 492.764 376.658 503.668] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 6849 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.369 480.809 409.305 491.713] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6850 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.923 468.854 378.86 479.758] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 6851 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.952 456.899 373.888 467.803] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 6852 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.599 444.943 406.535 455.847] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6853 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 432.988 376.658 443.892] /Subtype /Link /A << /S /GoTo /D (page.130) >> >> endobj 6854 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.369 421.033 409.305 431.937] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6855 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.952 409.795 373.888 419.982] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 6856 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.599 397.123 406.535 408.027] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6857 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.827 385.168 377.764 396.071] /Subtype /Link /A << /S /GoTo /D (page.132) >> >> endobj 6858 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 373.93 376.658 384.116] /Subtype /Link /A << /S /GoTo /D (page.126) >> >> endobj 6859 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [429.469 361.975 446.406 372.161] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.238 350.019 444.174 360.206] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.369 337.347 409.305 348.251] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [424.478 326.109 441.415 336.296] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [433.883 314.154 450.819 324.34] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.162 302.199 443.098 312.385] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6865 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.798 290.243 430.735 300.43] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6866 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 266.333 370.292 276.52] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6867 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 242.423 370.292 252.609] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6868 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 218.512 383.024 228.699] /Subtype /Link /A << /S /GoTo /D (page.160) >> >> endobj 6869 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 194.602 383.024 204.789] /Subtype /Link /A << /S /GoTo /D (page.152) >> >> endobj 6870 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 170.692 370.292 180.878] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6871 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 146.781 370.292 156.968] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [337.016 134.826 348.972 145.013] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.124 122.871 355.079 133.058] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 6874 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.597 110.916 375.552 121.103] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 6875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 98.961 372.234 109.147] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 6876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.999 86.288 358.954 97.192] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 6881 0 obj << /D [6879 0 R /XYZ 90 757.935 null] >> endobj 6878 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6959 0 obj << /Length 986 /Filter /FlateDecode >> stream xÚÅY]s¢H}çWô#TmØn [™7b˜BpwLe§(£ä£ÊhVMÍäßoCãDˆ‹íÐ!O çÜ{îíæ´@p JƒDúóR3©šD# ¹&=‚T¬!,ÀìŽ;U¾'_û*Ä„>Wü€L3¿,¹‰ô¯„èUPñ4î©=ƒù“tó‚½þ@U7ûàGq×04ŽKKI° <ˆAz¬aÐÓtÌX·»ÙîeûGÁÌ(7÷%w4”ÀÍ…†¡¬kåï \ †tjâéÇ|›m6 ƲúpézðžE¾œD2ªHðXPé|™Í6'¡0ÔúYAP~=‰FŽ£‘ Z¶šÝ.³–I~³c*V:Ї)Ul˜\‰íy³k)YXì&b"ÚfgGt´U˸ŠŽeËIí0Œœ4‰¬ .&få‘·znkíwÈ“ë±ûž0íX15ÙŠ¬Ñ'P{ÓîeŽ'od)”‡Ÿ ö·|É#ßùDjÖæÝ)ïù~óÌú¨ÌGî(Œ‚åëä$Î LãП$^t—htmÝÏäßacZÝqè‰u§rìÉoÑ'Óîr'¶íÆ]4ð¡[i¢ã÷Y<âÖŒbŸ.ó@bh3–‰_v©jRwV”÷ ëNâ7¿Öô¾›'üBígS–Å §ù X᫨˜&Bt]%šq.|}rÁ’j°¶séMO™®y¾(:3Û:Šíú-B)«=Ï–|±hͱ\ûdQ–_…Äs•Òv~ÚÞ· ÎÉ-ª¥ „䤽ì‹ÙŽ/MÔ äöK-{ëp¸Q¾AŒ›ï±Z¦ùkÿ$&Òò»iû—°5.&Ö7-FRêí++ºÂà"÷2o"–º˜¤PÿVPÞ¾ à'-¦è‡.YŒ¤ñØN'ãJ fÖZ Ø$ð’8µ|Ïj PÏÔþ=CUk?‘·Ïs+x®MûŒ^VBÞ'{«Ôría8ß¼†~êÙC4º-yyj©×òñÜD/ŽYÂZ€o>—ü¶ÏÕϧ-tÀ]—®Ê]«É£ˆd95¾ÛdYÇ^¿ÏÏÄQLBƒOˇź‰èaÁ¹#ˆ#Aº†^9a:[.…p&?§.m´š ¡ÆCÞ=u4žvB[ÍØ ñê#tÞõ¯’¤¯š¨ÏûQrÿY”¨fOï—ŸE±I7Ñåæy˜­²Íl—-”"ŠõŠ£ýÁ¥¢a9»e'„ ~1ÐÜcgD;ºËï]oØ ÕÇ÷ìØPdG·¯ltÖ?_ï³U%cšé?½ÃR endstream endobj 6958 0 obj << /Type /Page /Contents 6959 0 R /Resources 6957 0 R /MediaBox [0 0 595.276 841.89] /Parent 6553 0 R /Annots [ 6877 0 R 6882 0 R 6883 0 R 6884 0 R 6885 0 R 6886 0 R 6887 0 R 6888 0 R 6889 0 R 6890 0 R 6891 0 R 6892 0 R 6893 0 R 6894 0 R 6895 0 R 6896 0 R 6897 0 R 6898 0 R 6899 0 R 6900 0 R 6901 0 R 6902 0 R 6903 0 R 6904 0 R 6905 0 R 6906 0 R 6907 0 R 6908 0 R 6909 0 R 6910 0 R 6911 0 R 6912 0 R 6913 0 R 6914 0 R 6915 0 R 6916 0 R 6917 0 R 6918 0 R 6919 0 R 6920 0 R 6921 0 R 6922 0 R 6923 0 R 6924 0 R 6925 0 R 6926 0 R 6927 0 R 6928 0 R 6929 0 R 6930 0 R 6931 0 R 6932 0 R 6933 0 R 6934 0 R 6935 0 R 6936 0 R 6937 0 R 6938 0 R 6939 0 R 6940 0 R 6941 0 R 6942 0 R 6943 0 R 6944 0 R 6945 0 R 6946 0 R 6947 0 R 6948 0 R 6949 0 R 6950 0 R 6951 0 R 6952 0 R 6953 0 R 6954 0 R 6955 0 R 6956 0 R ] >> endobj 6877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.605 720.63 148.56 730.816] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 6882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.459 708.674 144.396 718.861] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.655 696.719 169.591 706.906] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 6884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.799 684.764 181.735 694.951] /Subtype /Link /A << /S /GoTo /D (page.135) >> >> endobj 6885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.709 672.092 181.646 682.996] /Subtype /Link /A << /S /GoTo /D (page.136) >> >> endobj 6886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.444 660.854 188.38 671.04] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 6887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.268 648.899 243.205 659.085] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 6888 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.51 636.226 173.447 647.13] /Subtype /Link /A << /S /GoTo /D (page.135) >> >> endobj 6889 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.571 624.988 194.508 635.175] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 6890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.51 613.033 173.446 623.22] /Subtype /Link /A << /S /GoTo /D (page.135) >> >> endobj 6891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 589.123 153.81 599.309] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6892 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 565.212 153.81 575.399] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6893 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 541.302 153.81 551.489] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6894 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 517.392 153.81 527.578] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6895 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 493.481 153.81 503.668] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6896 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 469.571 153.81 479.758] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6897 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 445.661 153.81 455.847] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6898 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 421.75 153.81 431.937] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6899 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 397.84 153.81 408.027] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6900 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 373.93 153.81 384.116] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6901 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 350.019 153.81 360.206] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6902 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 326.109 153.81 336.296] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 302.199 153.81 312.385] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6904 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 278.288 153.81 288.475] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 254.378 164.321 264.565] /Subtype /Link /A << /S /GoTo /D (page.135) >> >> endobj 6906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 230.468 164.321 240.654] /Subtype /Link /A << /S /GoTo /D (page.136) >> >> endobj 6907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 206.557 164.321 216.744] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 6908 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 182.647 164.321 192.834] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 6909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 158.737 164.321 168.923] /Subtype /Link /A << /S /GoTo /D (page.135) >> >> endobj 6910 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 134.826 164.321 145.013] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 6911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 110.916 164.321 121.103] /Subtype /Link /A << /S /GoTo /D (page.135) >> >> endobj 6912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 87.006 164.331 97.192] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6913 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.951 720.63 360.887 730.816] /Subtype /Link /A << /S /GoTo /D (page.136) >> >> endobj 6914 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 708.674 377.216 718.861] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6915 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.317 696.719 367.253 706.906] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6916 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.261 684.764 382.197 694.951] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6917 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.528 672.809 369.465 682.996] /Subtype /Link /A << /S /GoTo /D (page.142) >> >> endobj 6918 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.366 660.854 383.303 671.04] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6919 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.937 648.181 369.873 659.085] /Subtype /Link /A << /S /GoTo /D (page.142) >> >> endobj 6920 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [385.584 636.226 402.521 647.13] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6921 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.41 624.988 382.347 635.175] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6922 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.086 613.033 370.023 623.22] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 6923 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.971 601.078 485.908 611.265] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6924 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.903 589.123 474.839 599.309] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6925 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.015 577.168 444.951 587.354] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6926 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.974 565.212 447.91 575.399] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6927 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.887 553.257 433.823 563.444] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6928 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.781 541.302 480.717 551.489] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6929 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.984 529.347 431.92 539.534] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6930 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [431.671 517.392 448.608 527.578] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6931 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [469.32 505.437 486.256 515.623] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6932 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [453.579 493.481 470.515 503.668] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6933 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.403 481.526 461.34 491.713] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6934 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.279 469.571 465.215 479.758] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [431.293 457.616 448.229 467.803] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.987 445.661 430.924 455.847] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6937 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [434.441 433.706 451.377 443.892] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6938 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.223 421.75 392.16 431.937] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6939 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.165 409.795 381.101 419.982] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6940 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.192 397.123 371.129 408.027] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 6941 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [370.232 385.885 387.168 396.071] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6942 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.414 373.93 373.35 384.116] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 6943 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 361.975 373.34 372.161] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6944 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.051 349.302 405.988 360.206] /Subtype /Link /A << /S /GoTo /D (page.143) >> >> endobj 6945 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.169 337.347 433.106 348.251] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6946 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.173 326.109 376.11 336.296] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6947 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 302.199 380.812 312.385] /Subtype /Link /A << /S /GoTo /D (page.143) >> >> endobj 6948 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 278.288 380.812 288.475] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6949 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 254.378 380.812 264.565] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6950 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 230.468 370.292 240.654] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 6951 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 206.557 370.292 216.744] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6952 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 182.647 383.024 192.834] /Subtype /Link /A << /S /GoTo /D (page.161) >> >> endobj 6953 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 158.737 383.024 168.923] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6954 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 134.826 383.024 145.013] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 6955 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 110.916 383.024 121.103] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 6956 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 87.006 383.024 97.192] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6960 0 obj << /D [6958 0 R /XYZ 90 757.935 null] >> endobj 6957 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 7039 0 obj << /Length 931 /Filter /FlateDecode >> stream xÚÅY]sš@}çWì#Ì4tØUò†@Œ) LÍd2ŒFüH#¶Ä6É¿/ºh‚tK^\ÀåÜ{÷3 Á@Ðä>÷õBR*ªD"À‚A"–ð‡à–ou ³'ÜùW@ub’¼·úC‚pù˜3}î7‡’§ ÕÛ¸&Öd îgÜíÃäù€¢¬ÖÁójÖ (’œŒÀã¾s0ã ÜòD’EH05øC÷. ;ˆæQ¸ò%S% ÎUœÎy¾š cc^œ|Y¹GýŠÇ©ƒn“·g†›sh-\9GïÛl:]Í0uïÆcj>„÷ 6I¸6-×¼æUûµgw]Ýd©é& xÕäŒ@·­n»Ã‚Éd`i«kò]KK2/¨¯¹Zûp®VT”dó|€“CæÛfÛv‚ùfuº–8v«ã›.3Ðt9<†^W×MÏ;±O&wÊ‚ûÿšNNŒ,Yô¹ Ù¾³= Q©K€È²H$eýw‡aYañÁæ[²¶7ÅGNhµâ6)ÁÛ5{Œ®®—0»á‚l".a:¥lìªÙ%{få)ÞÑÊ—zo­ z²Kq+œ²áêR!»LÌn³ë³Ãíá=Çfb»Ä{MÇ+(ç½Ì½‚EvH~å-d­*¯£T:°ù>•Èî›Ê¨<äµ ©Ü0Õ.l–ºÄÞz's*ßש"ªz©wÅ“U/)tòuVÕÍ<+¿>Ãú{¥ö9yuŸ}ªÿ2ïli’º¨¢zÑÍõ™*Õš\OO2±*bœê¨f…q…•ÇóˆŽíõÅ… a>ÐBÏtŽkôN‚H¢W£åÜyLo’¨¬Vƒ^+"‚ôjðJGcþò:£íHÿ`ZÒq endstream endobj 7038 0 obj << /Type /Page /Contents 7039 0 R /Resources 7037 0 R /MediaBox [0 0 595.276 841.89] /Parent 7041 0 R /Annots [ 6961 0 R 6962 0 R 6963 0 R 6964 0 R 6965 0 R 6966 0 R 6967 0 R 6968 0 R 6969 0 R 6970 0 R 6971 0 R 6972 0 R 6973 0 R 6974 0 R 6975 0 R 6976 0 R 6977 0 R 6978 0 R 6979 0 R 6980 0 R 6981 0 R 6982 0 R 6983 0 R 6984 0 R 6985 0 R 6986 0 R 6987 0 R 6988 0 R 6989 0 R 6990 0 R 6991 0 R 6992 0 R 6993 0 R 6994 0 R 6995 0 R 6996 0 R 6997 0 R 6998 0 R 6999 0 R 7000 0 R 7001 0 R 7002 0 R 7003 0 R 7004 0 R 7005 0 R 7006 0 R 7007 0 R 7008 0 R 7009 0 R 7010 0 R 7011 0 R 7012 0 R 7013 0 R 7014 0 R 7015 0 R 7016 0 R 7017 0 R 7018 0 R 7019 0 R 7020 0 R 7021 0 R 7022 0 R 7023 0 R 7024 0 R 7025 0 R 7026 0 R 7027 0 R 7028 0 R 7029 0 R 7030 0 R 7031 0 R 7032 0 R 7033 0 R 7034 0 R 7035 0 R ] >> endobj 6961 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 708.674 166.543 718.861] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6962 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 684.764 166.543 694.951] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6963 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 660.854 166.543 671.04] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6964 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 636.943 166.543 647.13] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6965 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 613.033 166.543 623.22] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 6966 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.681 601.078 146.617 611.265] /Subtype /Link /A << /S /GoTo /D (page.143) >> >> endobj 6967 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.346 589.123 161.282 599.309] /Subtype /Link /A << /S /GoTo /D (page.160) >> >> endobj 6968 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 577.168 159.071 587.354] /Subtype /Link /A << /S /GoTo /D (page.152) >> >> endobj 6969 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.346 565.212 161.282 575.399] /Subtype /Link /A << /S /GoTo /D (page.161) >> >> endobj 6970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.022 553.257 188.958 563.444] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.003 541.302 217.94 551.489] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 6972 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [197.486 529.347 214.423 539.534] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 6973 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.611 517.392 210.547 527.578] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6974 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.427 505.437 198.363 515.623] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6975 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [196.928 493.481 213.865 503.668] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6976 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.099 481.526 195.036 491.713] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.698 469.571 216.635 479.758] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.246 457.616 217.182 467.803] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 6979 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.474 445.661 188.41 455.847] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.246 433.706 217.182 443.892] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.91 421.75 218.846 431.937] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6982 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [208.007 409.795 224.943 419.982] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6983 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.814 397.123 217.75 408.027] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6984 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [196.032 385.885 212.968 396.071] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6985 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.744 373.93 217.681 384.116] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6986 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.063 361.975 209.999 372.161] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6987 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [198.592 350.019 215.529 360.206] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6988 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.329 337.347 192.266 348.251] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 6989 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.448 325.392 219.384 336.296] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 6990 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [208.545 314.154 225.481 324.34] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6991 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [209.651 302.199 226.587 312.385] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6992 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.879 290.243 197.815 300.43] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6993 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.16 277.571 216.096 288.475] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6994 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [198.592 266.333 215.529 276.52] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 6995 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [194.886 254.378 211.823 264.565] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6996 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.546 242.423 230.482 252.609] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6997 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.638 229.75 200.575 240.654] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6998 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.424 218.512 220.361 228.699] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6999 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [208.007 206.557 224.943 216.744] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7000 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [249.72 194.602 266.657 204.789] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7001 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.854 172.032 145.791 180.878] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7002 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.073 158.737 242.009 168.923] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7003 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [254.492 146.781 271.429 156.968] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7004 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.621 134.826 234.557 145.013] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7005 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.076 122.871 241.013 133.058] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7006 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 110.916 159.071 121.103] /Subtype /Link /A << /S /GoTo /D (page.160) >> >> endobj 7007 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 98.244 159.071 109.147] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7008 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 87.006 158.513 97.192] /Subtype /Link /A << /S /GoTo /D (page.159) >> >> endobj 7009 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.346 720.63 383.283 730.816] /Subtype /Link /A << /S /GoTo /D (page.161) >> >> endobj 7010 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 696.719 383.024 706.906] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7011 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 672.809 383.024 682.996] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7012 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 648.899 383.024 659.085] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7013 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 624.988 383.024 635.175] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 7014 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 601.078 383.024 611.265] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7015 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 577.168 383.024 587.354] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7016 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 553.257 383.024 563.444] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7017 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 529.347 383.024 539.534] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7018 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 505.437 383.024 515.623] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7019 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 481.526 383.024 491.713] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 7020 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 457.616 383.024 467.803] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7021 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 433.706 383.024 443.892] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 7022 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 409.795 383.024 419.982] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7023 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 385.885 383.024 396.071] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7024 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 361.975 383.024 372.161] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7025 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 338.064 383.024 348.251] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 7026 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 314.154 383.024 324.34] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7027 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 290.243 383.024 300.43] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7028 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 266.333 383.024 276.52] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7029 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 242.423 383.024 252.609] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7030 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 218.512 383.024 228.699] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7031 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 194.602 383.024 204.789] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7032 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 170.692 383.024 180.878] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7033 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 146.781 383.024 156.968] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7034 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 122.871 383.024 133.058] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7035 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 98.961 383.024 109.147] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7040 0 obj << /D [7038 0 R /XYZ 90 757.935 null] >> endobj 7037 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 7135 0 obj << /Length 942 /Filter /FlateDecode >> stream xÚ½™[s¢0ÇßùyÔ™-›¥Ý^ÆÎ®ÓZ÷2Óí8()e‹hí·ß ¸­¶r¢i}"Ü~ÿs#'L0 FÖÉÐú|N=äÙ§ Q‡›Q‚†ºmõú§g¿ÚwÃKäâ®Wï-oPLÊËÖÙÐúku#²|›uìŽÃÐ$±nï0 ÔõK„mÇë¢ÇåS r©£Ž1º±®-¼f ~a ÁjLêPÇÆœUª“éC·kÙŸ–ú•pÖ .,t{Dn†ë*tD*à!¶ÇžQ°X:¸å¶¶×Õ“Q“,DY“)4yžLCC=GñŸ_n¾žõ ¤Hq4n»X'%î:¿B%~ñ ÁÙˆø[?¥ƒ]1æ\õ z x#áæzÐæ¸5¤ïÅéõ¢¾«è¼×?ÛÛµ:?3ˆßS)‚]IÛê0‰fïm¡÷ù’]==é'âµÒóÌ’å åjz&³éGN†/…懙u3jê‘§ç‘:hQdJÌP©«Âèá]:²î Ë#YÜ7IVOh4ŠÎ.Š<ÞÐx6q»‡ßø®KÎhܦ¸5Û›÷¼"¸ôúÃóÑÕp`Èz¶m*Š÷MÂÊÛƒ¥-.ͳìG]ÁÖ:Ô+ ¹Ciw¼ÆêV€8’£ÛX…“Àô}»±þÅo%Üv»qDZ9uk°ˆ¡~ì4[Vvü=¼B¤±¿0FÈYb–çIˆÜÐŒ<-|ÃLçYƒˆy›2U·»Ì+Ìôiïx¬BZ> endobj 7036 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 720.63 166.543 730.816] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7042 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 696.719 166.543 706.906] /Subtype /Link /A << /S /GoTo /D (page.160) >> >> endobj 7043 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 672.809 153.81 682.996] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 7044 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 648.899 153.81 659.085] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 624.988 153.81 635.175] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7046 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.071 613.033 144.007 623.22] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 7047 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 601.078 153.81 611.265] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7048 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.73 589.123 149.666 599.309] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7049 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.767 577.168 139.703 587.354] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7050 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.73 565.212 149.666 575.399] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 7051 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.758 552.914 160.695 563.444] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 7052 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.462 540.958 178.398 551.489] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 7053 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.906 529.347 187.843 539.534] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 7054 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.203 517.392 170.139 527.578] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 7055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 493.481 153.81 503.668] /Subtype /Link /A << /S /GoTo /D (page.131) >> >> endobj 7056 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 469.571 153.81 479.758] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 7057 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 444.943 157.407 455.847] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7058 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 421.75 153.81 431.937] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 7059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 397.84 153.81 408.027] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 7060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 373.93 153.81 384.116] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 7061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 350.019 153.81 360.206] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 7062 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 326.109 153.81 336.296] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 7063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 302.199 166.543 312.385] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 7064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.011 277.571 175.947 288.475] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.085 265.616 156.022 276.52] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 7066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.539 253.661 168.475 264.565] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.601 241.706 186.537 252.609] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.073 230.468 210.009 240.654] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.588 217.795 184.525 228.699] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.011 193.885 175.947 204.789] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.011 169.975 175.947 180.878] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.011 146.064 175.947 156.968] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7073 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [125.526 134.109 137.482 145.013] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 7074 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 122.871 135.828 133.058] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7075 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 110.916 146.348 121.103] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 7076 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.315 98.961 135.27 109.147] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 7077 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.277 87.006 145.233 97.192] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7078 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [342.008 720.63 353.963 730.816] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7079 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 708.674 368.349 718.861] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7080 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.97 696.719 363.926 706.906] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7081 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 684.764 372.234 694.951] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7082 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.855 672.809 362.81 682.996] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7083 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.307 660.854 362.262 671.04] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 7084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.865 648.181 362.82 659.085] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 7085 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.058 636.943 362.013 647.13] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.413 624.271 363.368 635.175] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7087 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.97 612.316 363.926 623.22] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7088 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.689 601.078 377.644 611.265] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 7089 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.317 589.123 362.272 599.309] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7090 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.176 576.45 373.131 587.354] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7091 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.827 565.212 372.782 575.399] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7092 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 552.54 374.446 563.444] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7093 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.45 541.302 353.405 551.489] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.335 528.63 357.291 539.534] /Subtype /Link /A << /S /GoTo /D (page.34) >> >> endobj 7095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [340.354 517.392 352.309 527.578] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 7096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.509 504.719 369.465 515.623] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7097 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.086 492.764 365.041 503.668] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7098 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [340.912 481.526 352.867 491.713] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7099 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.124 468.854 355.079 479.758] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.856 456.899 367.811 467.803] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 444.943 372.234 455.847] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.528 433.706 364.484 443.892] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 421.75 374.446 431.937] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.126 409.795 381.081 419.982] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7105 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.703 397.84 376.658 408.027] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.587 385.885 375.542 396.071] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.039 373.93 374.994 384.116] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7108 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.597 361.257 375.552 372.161] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7109 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.79 350.019 374.745 360.206] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7110 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.145 337.347 376.1 348.251] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7111 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.703 325.392 376.658 336.296] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7112 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.049 314.154 375.004 324.34] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.068 301.481 370.023 312.385] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.155 290.243 376.11 300.43] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.223 277.571 387.178 288.475] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.528 265.616 364.484 276.52] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7117 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.98 253.661 363.936 264.565] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.086 241.706 365.042 252.609] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.298 230.468 367.253 240.654] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7120 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.068 218.512 370.023 228.699] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.08 205.84 372.035 216.744] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7122 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.731 193.885 371.686 204.789] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.422 182.647 363.378 192.834] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 7124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.23 169.975 356.185 180.878] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.385 158.019 373.34 168.923] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.336 146.064 357.291 156.968] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7127 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 134.109 374.446 145.013] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7128 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.547 122.871 359.502 133.058] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7129 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.317 110.916 362.272 121.103] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 98.244 370.571 109.147] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 86.288 374.446 97.192] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 7136 0 obj << /D [7134 0 R /XYZ 90 757.935 null] >> endobj 7133 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 7227 0 obj << /Length 1102 /Filter /FlateDecode >> stream xÚ½Y[s›:~÷¯Ð#Ìœp$Âô cÙ¥ÅØåÒ“N¦ÃøBÜÌÄ—nšþú#.vR×l¿X[ß·ûíjµ–‚a§çwþ`è’N0þ=Ð!Ð’TŒ€¿w‚åôé­øÕÿØ• Jغü qv»CýÎ÷bw!@ùjU“4YóUçî+ vÿ€’¬wÁSþ«P°ÌÆGàu>uào–ÀW– ÈæX–%HÔ‚u;ÿ'g-èâeÉë;àî«PÕòû–}Ü $éê~}R·^«^ÿ£Ýúxºˆ’ç:#X %é}üýBKÈ È“ˆ 01Zº•ÔÆE‘k¢Z\‹ÐZÙ„!lf@’x~!Hžt:«@•V¤ÏÛ(i'é©Bô8]/ÛÙRmZǧŠ£ûº|Õ+qžæÉzºŠ.ôª ÑSÚ2D¿’Í.žGgJrƒŠºxìÐ6Nó:ý—¯¥o5<w…Q¯’eK>¥Š¼mG$7T]Á±W|щˆ‘sˆôÆD×ul›Æ-C†2íf-%$ ˆþ3=/è…&µ©ç[†ÝREù Ê G¢¦†¨@Á¤W`.Týk¾7òÔ6D„à[~Чר;Ã+Szjúî©,z+m=_D]aü‘z×ÉÖ¼T}[Ä¢ª õ|ªÞì„Hã‡e=9:ßNY7o’EVݤL“‡õ¹Ç#ÀˆHJ"ËÁJ‰œN׸ººëÈ@Úb4Q‰T·`L¤6Z“J[CÉQq¶Í|׆Å6³Ï5¨HkR‰ù²ŸÈŸÛ­YúW²¾l¦Ýc”uÙ?«w뇴A½Ðš8úš2ëîyðvòfpoî'9(TGÆŽå{ÔuÞ(«‚Ñéídì„Þ—Q¯>µê‡$`ÇôjAÉy »Áz©72Ù Fá(°E³–bb[ÔåÍÝÈÏòK…!GÀæØñ¨ö,g<á¦v?ë gh[ΰ€æ¥C–¾ÅrŽÙíÓ[Ÿî$‹™á²yÈ.3óÇ./5¼À4©çñ25pŠd°Ãž[4è©Ï+^ÀKE¨ÃK†ÀñŒ Yê´M´WÕûÜ* «Ïs‹<<]½/µŠŽá\¶°GQ-–R×&”X–êíÆ;@™ï wHyfާ­iû–F[†ò-ŒÖ»/ílê ý÷¼´³ƒ‘Åj*·$åÅièäty¹<2Ò¦Ží‹ïx£:þ— 7''Ö-µ¹Ù†CÃì0æ¶Ë¼±mõ¹Cºûg1c^®ût4¡{ØÀålßµuüPš¼1irˆå`Ξ.l¦Þç¼ Ê>ÎÏÆýxüž–t%u›¾¦Ý¿(&’®ÉÝòE±ªKªZ>šFë(ž¦ÑB̭ج‹q´Ÿ DÌÎôYqAŠÁw z§jņ³ûì·›¸¸`"ØV¯˜+‚Ålö\ŒýÍÏçe´þÍcæéÿl}ü8 endstream endobj 7226 0 obj << /Type /Page /Contents 7227 0 R /Resources 7225 0 R /MediaBox [0 0 595.276 841.89] /Parent 7041 0 R /Annots [ 7132 0 R 7137 0 R 7138 0 R 7139 0 R 7140 0 R 7141 0 R 7142 0 R 7143 0 R 7144 0 R 7145 0 R 7146 0 R 7147 0 R 7148 0 R 7149 0 R 7150 0 R 7151 0 R 7152 0 R 7153 0 R 7154 0 R 7155 0 R 7156 0 R 7157 0 R 7158 0 R 7159 0 R 7160 0 R 7161 0 R 7162 0 R 7163 0 R 7164 0 R 7165 0 R 7166 0 R 7167 0 R 7168 0 R 7169 0 R 7170 0 R 7171 0 R 7172 0 R 7173 0 R 7174 0 R 7175 0 R 7176 0 R 7177 0 R 7178 0 R 7179 0 R 7180 0 R 7181 0 R 7182 0 R 7183 0 R 7184 0 R 7185 0 R 7186 0 R 7187 0 R 7188 0 R 7189 0 R 7190 0 R 7191 0 R 7192 0 R 7193 0 R 7194 0 R 7195 0 R 7196 0 R 7197 0 R 7198 0 R 7199 0 R 7200 0 R 7201 0 R 7202 0 R 7203 0 R 7204 0 R 7205 0 R 7206 0 R 7207 0 R 7208 0 R 7209 0 R 7210 0 R 7211 0 R 7212 0 R 7213 0 R 7214 0 R 7215 0 R 7216 0 R 7217 0 R 7218 0 R 7219 0 R 7220 0 R 7221 0 R 7222 0 R 7223 0 R ] >> endobj 7132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.315 719.912 135.27 730.816] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 7137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.767 707.957 134.722 718.861] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 696.002 135.828 706.906] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.788 684.047 155.743 694.951] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7140 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.912 672.092 151.868 682.996] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7141 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.595 660.854 156.55 671.04] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7142 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.19 648.181 139.146 659.085] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7143 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.614 636.226 143.569 647.13] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 7144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.346 624.271 156.301 635.175] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.356 612.316 156.311 623.22] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 600.361 154.089 611.265] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.084 589.123 138.04 599.309] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.941 576.45 146.896 587.354] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 7149 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.091 564.495 155.046 575.399] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7150 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.649 552.54 155.604 563.444] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7151 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.994 541.302 148.949 551.489] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7152 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 529.347 162.936 539.534] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7153 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.854 517.392 140.809 527.578] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7154 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.336 505.437 156.291 515.623] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7155 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 481.526 153.81 491.713] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 7156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 457.616 153.81 467.803] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 7157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 433.706 153.81 443.892] /Subtype /Link /A << /S /GoTo /D (page.130) >> >> endobj 7158 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 409.795 153.81 419.982] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 7159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 385.885 153.81 396.071] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 7160 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 361.975 153.81 372.161] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 7161 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 338.064 153.81 348.251] /Subtype /Link /A << /S /GoTo /D (page.132) >> >> endobj 7162 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 314.154 153.81 324.34] /Subtype /Link /A << /S /GoTo /D (page.126) >> >> endobj 7163 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 290.243 153.81 300.43] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7164 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 266.333 153.81 276.52] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 242.423 153.81 252.609] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 218.512 153.81 228.699] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 194.602 153.81 204.789] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 170.692 153.81 180.878] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 146.781 153.81 156.968] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 122.871 166.543 133.058] /Subtype /Link /A << /S /GoTo /D (page.159) >> >> endobj 7171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.787 110.199 147.723 121.103] /Subtype /Link /A << /S /GoTo /D (page.168) >> >> endobj 7172 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.595 98.961 153.532 109.147] /Subtype /Link /A << /S /GoTo /D (page.170) >> >> endobj 7173 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.941 87.006 151.878 97.192] /Subtype /Link /A << /S /GoTo /D (page.170) >> >> endobj 7174 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.952 720.63 373.888 730.816] /Subtype /Link /A << /S /GoTo /D (page.171) >> >> endobj 7175 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.97 708.674 368.907 718.861] /Subtype /Link /A << /S /GoTo /D (page.171) >> >> endobj 7176 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.653 696.719 365.589 706.906] /Subtype /Link /A << /S /GoTo /D (page.169) >> >> endobj 7177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 684.764 377.216 694.951] /Subtype /Link /A << /S /GoTo /D (page.170) >> >> endobj 7178 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.999 672.809 363.936 682.996] /Subtype /Link /A << /S /GoTo /D (page.169) >> >> endobj 7179 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.547 660.854 364.484 671.04] /Subtype /Link /A << /S /GoTo /D (page.170) >> >> endobj 7180 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.393 648.899 416.329 659.085] /Subtype /Link /A << /S /GoTo /D (page.169) >> >> endobj 7181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.193 624.271 384.13 635.175] /Subtype /Link /A << /S /GoTo /D (page.169) >> >> endobj 7182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 601.078 389.669 611.265] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 577.168 389.669 587.354] /Subtype /Link /A << /S /GoTo /D (page.178) >> >> endobj 7184 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 553.257 389.669 563.444] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7185 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.807 541.302 369.744 551.489] /Subtype /Link /A << /S /GoTo /D (page.171) >> >> endobj 7186 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.444 529.347 506.381 539.534] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [441.853 517.392 458.789 527.578] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.752 505.437 509.688 515.623] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [496.269 493.481 513.205 503.668] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [462.326 481.526 479.263 491.713] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.79 469.571 480.727 479.758] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.113 457.616 488.05 467.803] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [485.908 445.661 502.844 455.847] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.61 433.706 475.546 443.892] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.268 421.75 444.204 431.937] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [469.121 409.795 486.057 419.982] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [454.765 397.84 471.701 408.027] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [460.463 385.885 477.4 396.071] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.89 373.93 379.826 384.116] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.164 361.975 384.1 372.161] /Subtype /Link /A << /S /GoTo /D (page.178) >> >> endobj 7201 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.26 350.019 382.197 360.206] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7202 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.073 338.064 432.01 348.251] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [403.447 326.109 420.384 336.296] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [402.341 314.154 419.278 324.34] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.248 302.199 444.184 312.385] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [420.603 290.243 437.539 300.43] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.908 277.571 414.844 288.475] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.026 265.616 441.962 276.52] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7209 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.132 254.378 443.069 264.565] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [438.306 242.423 455.243 252.609] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.207 230.468 463.143 240.654] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.42 218.512 430.356 228.699] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.516 206.557 431.452 216.744] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [418.391 194.602 435.328 204.789] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.516 182.647 431.452 192.834] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.126 170.692 474.062 180.878] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [454.356 158.737 471.293 168.923] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [434.441 146.781 451.377 156.968] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.693 134.826 474.63 145.013] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.64 122.871 427.577 133.058] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.273 110.199 408.209 121.103] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.619 98.961 406.555 109.147] /Subtype /Link /A << /S /GoTo /D (page.180) >> >> endobj 7223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.248 87.006 436.185 97.192] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7228 0 obj << /D [7226 0 R /XYZ 90 757.935 null] >> endobj 7225 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 7295 0 obj << /Length 883 /Filter /FlateDecode >> stream xÚÅ™]wš0Çïù¹ÔsV–¡wX©¥G±«¸uëz£bõ‰Ÿ72^4¡„þ [ªç`¾/µèCL"z]’`]¦;K·ä„y1;ÝØ¢/ŠsxÌG™™ºN"í):ÇŠàÑlž¾Œ]–È{¹UB*éDš©^ýalîNS0rFÊÀM›d9fÞ TËyšMœyG“©Íœ=5Vq°*"•…o³*&•—4-’EËL Ñy æ¦5Ùóö•Å¿'Îè°ô òaOØ…öõ0?\Pä”x@8B ZÀ£tîþJ¥HÉY–ùÃ^$Rßl™&âÃü#règ½ãçóCVmZë0’’ŹÙÜßùeêÍé…€Iì2`ûç U¢²ÈøofýwˆŠjMRV‡ˆ*²ZG4™ÃÜÏFÕ(ˆ™ÃÛöºsh6ä;”7žÊè”Ôø†óÞ8¼væò`ÉÜ2ê¼/‹òÞpÉÛÆl±|`ÎFÆA¦9+Ka endstream endobj 7294 0 obj << /Type /Page /Contents 7295 0 R /Resources 7293 0 R /MediaBox [0 0 595.276 841.89] /Parent 7041 0 R /Annots [ 7224 0 R 7229 0 R 7230 0 R 7231 0 R 7232 0 R 7233 0 R 7234 0 R 7235 0 R 7236 0 R 7237 0 R 7238 0 R 7239 0 R 7240 0 R 7241 0 R 7242 0 R 7243 0 R 7244 0 R 7245 0 R 7246 0 R 7247 0 R 7248 0 R 7249 0 R 7250 0 R 7251 0 R 7252 0 R 7253 0 R 7254 0 R 7255 0 R 7256 0 R 7257 0 R 7258 0 R 7259 0 R 7260 0 R 7261 0 R 7262 0 R 7263 0 R 7264 0 R 7265 0 R 7266 0 R 7267 0 R 7268 0 R 7269 0 R 7270 0 R 7271 0 R 7272 0 R 7273 0 R 7274 0 R 7275 0 R 7276 0 R 7277 0 R 7278 0 R 7279 0 R 7280 0 R 7281 0 R 7282 0 R 7283 0 R 7284 0 R 7285 0 R 7286 0 R 7287 0 R 7288 0 R 7289 0 R 7290 0 R 7291 0 R ] >> endobj 7224 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.202 720.63 170.139 730.816] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7229 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 708.674 162.388 718.861] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.875 696.719 166.812 706.906] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 672.809 173.188 682.996] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 648.899 173.188 659.085] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 624.988 173.188 635.175] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 601.078 173.188 611.265] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 577.168 173.188 587.354] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 553.257 173.188 563.444] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 529.347 173.188 539.534] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 505.437 173.188 515.623] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 481.526 173.188 491.713] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 457.616 173.188 467.803] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 433.706 173.188 443.892] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 409.795 173.188 419.982] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 385.885 173.188 396.071] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 361.975 173.188 372.161] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 338.064 173.188 348.251] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 314.154 173.188 324.34] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 290.243 173.188 300.43] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 266.333 173.188 276.52] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 242.423 173.188 252.609] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 218.512 173.188 228.699] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 194.602 173.188 204.789] /Subtype /Link /A << /S /GoTo /D (page.180) >> >> endobj 7252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 170.692 173.188 180.878] /Subtype /Link /A << /S /GoTo /D (page.175) >> >> endobj 7253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 146.781 173.188 156.968] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.239 134.826 147.175 145.013] /Subtype /Link /A << /S /GoTo /D (page.181) >> >> endobj 7255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.704 122.154 185.641 133.058] /Subtype /Link /A << /S /GoTo /D (page.182) >> >> endobj 7256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.87 110.916 202.806 121.103] /Subtype /Link /A << /S /GoTo /D (page.181) >> >> endobj 7257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.003 98.244 193.939 109.147] /Subtype /Link /A << /S /GoTo /D (page.183) >> >> endobj 7258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.234 87.006 196.171 97.192] /Subtype /Link /A << /S /GoTo /D (page.181) >> >> endobj 7259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [387.955 720.63 404.891 730.816] /Subtype /Link /A << /S /GoTo /D (page.183) >> >> endobj 7260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [387.955 708.674 404.891 718.861] /Subtype /Link /A << /S /GoTo /D (page.182) >> >> endobj 7261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [387.407 696.719 404.343 706.906] /Subtype /Link /A << /S /GoTo /D (page.183) >> >> endobj 7262 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.645 672.809 383.582 682.996] /Subtype /Link /A << /S /GoTo /D (page.182) >> >> endobj 7263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.645 648.899 383.582 659.085] /Subtype /Link /A << /S /GoTo /D (page.181) >> >> endobj 7264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.645 624.988 383.582 635.175] /Subtype /Link /A << /S /GoTo /D (page.183) >> >> endobj 7265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.645 601.078 383.582 611.265] /Subtype /Link /A << /S /GoTo /D (page.181) >> >> endobj 7266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.645 577.168 383.582 587.354] /Subtype /Link /A << /S /GoTo /D (page.183) >> >> endobj 7267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.645 553.257 383.582 563.444] /Subtype /Link /A << /S /GoTo /D (page.182) >> >> endobj 7268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.645 529.347 383.582 539.534] /Subtype /Link /A << /S /GoTo /D (page.183) >> >> endobj 7269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 505.437 389.669 515.623] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 481.526 389.669 491.713] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 457.616 383.024 467.803] /Subtype /Link /A << /S /GoTo /D (page.161) >> >> endobj 7272 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 432.988 373.888 443.892] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.469 421.75 348.424 431.937] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.836 409.078 367.791 419.982] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 7275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.067 397.84 370.023 408.027] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 7276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.342 385.885 366.297 396.071] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7277 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.572 373.93 371.527 384.116] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.989 361.975 366.944 372.161] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7279 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.161 350.019 345.116 360.206] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7280 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.105 338.064 360.06 348.251] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.142 326.109 350.098 336.296] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.875 314.154 362.83 324.34] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 7283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.634 302.199 357.59 312.385] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 7284 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.317 289.526 362.272 300.43] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 7285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 255.653 369.465 266.557] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 7286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 221.78 369.465 232.684] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 7287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 187.907 360.887 198.811] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 7288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 163.997 360.887 174.901] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 7289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 140.087 360.887 150.991] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 7290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 116.176 360.887 127.08] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 7291 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 92.266 372.234 103.17] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 7296 0 obj << /D [7294 0 R /XYZ 90 757.935 null] >> endobj 7293 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 7303 0 obj << /Length 350 /Filter /FlateDecode >> stream xÚ¥“MOÂ@†ïû+æØ&²Îl»Û.Gä#5QšhB8ðQ0FÚÚ¢½K „OïÌtfŸwÛ)Âz¬±ë®Ð ¹VBA´(âRDs9ýûvçÙGð1ä(•™«ôweÖ‰Ø;#SE jZ<ð$ÌVl4F˜›ú{:„MÕµ_xFß`È9Á'Â㨤~¥Ùzã:W óé’tâÊ™!¡AĵÜ7YÉ_®*ƒÖY¾Ü[|ì15„D‡Hì¬sÂ/'}eI!ʳ ,½ ©&'^ÿä¨?p°§ÅÿîS‹S¤ùìüÚÌŠ,_] ùǤszºƒ*äšÂº+xø ×îWOj.¥o­öâ$Î'ëxîV¦ÒÄêÝ!èºÂìâÔ&Ê aÓ§¦ l&ÐìZ-v½in“§›ám¿ecŸÚhºµÚNËí2NŽÞ€¹é7—ÆÕÏ endstream endobj 7302 0 obj << /Type /Page /Contents 7303 0 R /Resources 7301 0 R /MediaBox [0 0 595.276 841.89] /Parent 7041 0 R /Annots [ 7292 0 R 7297 0 R 7298 0 R 7299 0 R 7300 0 R ] >> endobj 7292 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 707.957 152.157 718.861] /Subtype /Link /A << /S /GoTo /D (page.112) >> >> endobj 7297 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 684.047 144.406 694.951] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 7298 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 660.136 144.406 671.04] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 7299 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 636.226 144.406 647.13] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 7300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 612.316 157.407 623.22] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7304 0 obj << /D [7302 0 R /XYZ 90 757.935 null] >> endobj 7301 0 obj << /Font << /F29 635 0 R /F20 595 0 R >> /ProcSet [ /PDF /Text ] >> endobj 791 0 obj [590 0 R /Fit] endobj 790 0 obj [590 0 R /Fit] endobj 789 0 obj [590 0 R /Fit] endobj 788 0 obj [590 0 R /Fit] endobj 787 0 obj [590 0 R /Fit] endobj 786 0 obj [590 0 R /Fit] endobj 785 0 obj [590 0 R /Fit] endobj 784 0 obj [590 0 R /Fit] endobj 783 0 obj [590 0 R /Fit] endobj 782 0 obj [590 0 R /Fit] endobj 781 0 obj [590 0 R /Fit] endobj 7305 0 obj [285.5 799.4 513.9 799.4 513.9 543.7 770.7 777.7 733.6 847.5 756.3 656.2 804.8 850.1 449.3 566.3 870.4 699.4 992.9 821.6 782.1 656.2 810.6 777.6 627.8 599.6 699.1 599.4 970.5 849 596.5 699.2 399.7 399.7 399.7 1027.8 1027.8 424.4 544.5 440.4 444.9 532.5 477.8 498.8 490.1 592.2 351.7 420.1 535.1 306.7 905.5 620 497.5 515.9 459.2 463.7 478.8 371.1 591.4 499.2 736.6 582.6 506.2] endobj 7306 0 obj [399.7 399.7] endobj 7308 0 obj [556 556 167 333 611 278 333 333 0 333 606 0 611 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 389 555 500 500 833 778 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 832 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500 444] endobj 7309 0 obj [1000] endobj 7310 0 obj [1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4] endobj 7311 0 obj [585.3 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 892.9 1138.9 1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 1138.9 1138.9 892.9 329.4] endobj 7312 0 obj [569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4 323.4 323.4 877 538.7 538.7 877 843.3 798.6 815.5 860.1 767.9 737.1 883.9 843.3 412.7 583.3 874 706.4 1027.8 843.3 877 767.9 877 829.4 631 815.5 843.3 843.3 1150.8 843.3 843.3 692.5 323.4 569.5 323.4 569.5 323.4 323.4 569.5 631 507.9 631 507.9 354.2 569.5 631 323.4 354.2 600.2 323.4 938.5 631 569.5 631] endobj 7313 0 obj [777.8 722.2 777.8 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7] endobj 7314 0 obj [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3] endobj 7315 0 obj [639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.6 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3] endobj 7316 0 obj [500 500 167 333 556 278 333 333 0 333 675 0 556 389 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 214 250 333 420 500 500 833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389] endobj 7317 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 7318 0 obj [556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 0 0 0 333 500 500 1000 500 500 333 1000 556 333 1000 0 0 0 0 0 0 500 500 350 500 1000 333 1000 389 333 722 0 0 722 0 333 500 500 500 500 220 500 333 747 300 500 570 333 747 333 400 570 300 300 333 556 540 250 333 300 330 500 750 750 750 500 722 722 722 722 722 722 1000 722 667 667 667 667 389 389 389 389 722 722 778 778 778 778 778 570 778 722 722 722 722 722 611 556 500 500 500 500 500 500 722 444 444 444] endobj 7319 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000 333 980 389 333 722 0 0 722 0 333 500 500 500 500 200 500 333 760 276 500 564 333 760 333 400 564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 444 444 444 444 444 444 667 444 444 444] endobj 7320 0 obj << /Length1 1345 /Length2 8469 /Length3 0 /Length 9286 /Filter /FlateDecode >> stream xÚ­”UX]Û²­qî.·àÁÝ Ü&Llâîîî’àÁwîÁÝ‚?¬µÏÞYwŸ×û—ñW¯Þªõ½5¹Š“¨™ PÊìÌÄÆÌÆWT”ec¼½³²"RS‹;-íÀÆÎ@~7@ÎÅÀÎ`åáçâàçâA¤ˆÛÙ{8ZZ€œtâô%ñDmŽ–¦Æ`€¢±3hû¦ajlP³3µ:{0Dmlªíp¨€Ž®@3fD66€™¥©3Àha FdùË“,ØÜÀó¯°™‹ý¿—\ŽNo¦tÛ¤¼™4³ÛxÌ€æˆ,JvoÕ€o^þØúoq)%cÛ¿äÿîÔÿY7¶µ´ñøß ;[{g #@ÑÎ èþïT-à¿Ì)Í,]lÿ{UÖÙØÆÒTla0±q2³rþ+né$eé4S±t6Ìmœ€Ç`³ÿvòÖ¿¿}°(iëh”`üßOû÷¢Š±%ØYÝÃ`ý“ý7³ýá·&9ZºtY™YYÙÞßž¿éÿW1I°©™%ØÀÎÅ 0vt4ö@|»DoÄðbX‚Í€î û›cf°óÛÀ[g|ævŽˆ}Wn‹ø_¡¿‰‡ À"ý‡8,²ˆ À"ÿ‡¸, ˆÀ¢üâe°¨ü!v‹êzÓTûCœõ?ôæEëñX´ÿC|oš:ÿ¡· Ëblc2þy«btþà{³dúâú‹ìlmÿ±õMÑì¾91ÚüC€íí¼@{'K;0Û‚Üoe,þšÌ·»õGém/èø¶ÑòøÖ)«ÿ û›sc[³?…¸ßŒØœþ±åÍ­í?û–þ¾IØý9Ù[›ìßfËîÏY8ÞòíA,°¿²ÿ¾rÙýCðmýOuî7y'c§œè­ÄÛÐþ³7…\ÿÑü·ŠîÿÀ7 ¿ñÿ†˜˜»;€‰‹õ¯Þñ¾Ý,VŸÿ'ÑÔÅÑvþûçó6^ÿfsË·‰ݦˆ‹sv¦ÁVißCK}% &Ë`éˆ3ŠƒG;B2˜×0:6N¨I/1B0¬,ËÑSOå+YÌ̹6¾‹zx©±„,`  `ÓçeªÁŸ›ë@ æüèA³ý±¿H¶cßÈx¾Dy³îÚ[­pÈÆ“Op S:?÷|åkí7¶±ˆ”nF¹›Š¨ŸÓªÔ@þÉ”´ï,*,³†$õÃv\xÓ»ù·"@›oÖ{®$œr‘ñÿÞ6-÷½¢c]Ó@¢ž¤;ß§>ð‡Íü_G}QYìRâºkFmêóŒƒߺ $°*Â`ô𤤠¨šì¶ÅðÈ…°ˆpÐEõvÔ ØÅîi÷øP»7&×Ã=I9?÷çé'݉TÆÓbn_ØÝ "ëXæu/Þ3èù #IÞŠú!\Ú43uo¦iÖå¥ò¥¡¶|ïRÊøj~±Açz·_‹6õ›ç8ƪéäýnèPW\8£Ç«<æ1;~nëì;‚wªî½\ÙÛ” ¹ô,^¦…ŠU ‹¼âüÎ/æ9I" ù‘6¶ùì%=S}_ƒo¤]0$›FuÁûe«C–|ÛAí….”‚Ú•4BÕ=¾r¾ð“95A·Gλ¬5Îlâ—%NL& h\µ9ÓÏ¿`ƒý°fßqŠfþ)&¹S–d[j]¢¨:nmñEUmÿ™Ÿ ?ªœtuû3@(«D{V™7!r «9 •ðK¬òTýuyò]åÍÉÏrŽ˜zôe…* ψØÅ,;>‘!‰ßáG¿FŽ1ÞÉau9MÂá#˜3À”0æVr¸³„ÈÝÚº^.bPǦÌLÉ›Ù}Õ¢s¨R`Ë´Ú]ƒÂÚøÜ”Óë`£ZK7Â}§ÛîoDi¾~R¬ø j1ôç~tS¤:G4lÑh dR ÷ vRjèÝ™hšÓÓãy¥Ééªñ¡çç?´vl kL”"íN«‹š"ãÞl]| 6<\{Ï;ÕØ-ˆ®-3% tйĹÕ0•܆÷už:Ú}ÑnŽVr§Ç¥^Oy?[²¿Xy|xrh³1:8OÀ¦‘ç=bú@¸v®a¶fF­±œÉª¯b2é¶¾40½ùå t=É)°mvHY@{¿yÜJ­¼ìxøÈ¸•Äí}ÈŸïH¾hrR6J¼–HÖ3½TÆ‹§ðÚÜCr(Ü:ø~÷½™áÙ‡‘FÍG1Jp=§(Ñà ŒÕÆØ‡ôÆ’r$öJ²ðsd̤|aþƒú_‹Ñˆãt?d·=f"¥<å.)qJ##­O”q”P=<-Úy?‘²è%M† ·ìúÉwFãÊ ›Öö1žŠ7ˆÎï6Á ‹^±²eroY,m…˜`Â6‹Î& D“Ýb\2"W±ÎQÏåçDÙÛêvÊÎ÷Þ©÷aáI '9y¶qØÒ„â8ÙQó~×À·1´péŒÞ—­þMu6³d’>§0Ä,n}Qï„n*wæêwÌ«1Å-“ÜØdÉÊ…xdH»ß,lçÔmU¢:y›F7½Ãîû^._¶«ÆïòÜÈ#üL‰D6ñTŸÉaO>æ­™E˜¦·åYH§É‚vB$U£Ý¯úkÀXø2ªµ–Ê_e%s½P0AiNF!Çáb‚ë–M¥èt¾ê㸟°:C‘[™§ýL¼éB~P®ï Ò oUäØÌ‹€×9DÏ)äŽ7Ó8ËEàáo€Ñ1o’ä.ƒú1¼}m6ždH¡&(to¡‰óiÊOÚC72Ö|Gaæd[Žýnê·²_ù{ÜØª7F·FÒÑÚHšˆoD(Ø~®>ƒ.õ!EEéÅ@EW÷{‘€N]sEì¢ñÞ!™XÝT+9Æ· ÁAÌeÏ)²†I:Õ8b…»ßåÃTÖNÕ®^8U«9+õ­íåG¿7ÔXÀþåB=[ÆV9:Ùb%v)‰429±.Žô6në"Íõ)†• Þ³f˜h»Ùsk¢Ø âö@¤ÙV°rÇkùX´Ï7ÌËÛ{A4üú²”Ò0âo겸õ«Œ?p‡‘"íÞ½‡fNëàH‚`w¶´ Í¿;ö˜×òª2Áìîp¥oŸûŽ?÷†j‘ ÑÀ¥ÊŽÍ‘á' ~t_&P¯ç”Qw"©c¾ÈÓ;ŒƒûrP¦­ÏŸDF_@>gÙë<üÜÏd}ËúòÌvË÷Äö,ÈÜ §º£§±ýð°56¥X#©uËÕØáΣq˜¤ Io˜ÒMÉG/‚Ôhü»€óˆ±7†9†.üa&ß›C;¿Íû"Ê!€¿›í'Gú)‹¸¹½ÛôsœõäúËø±‹8ò;£§ÕnAÁ¶óºÈD¦¸gïµG*.WÖ°ëÕL4ê¢Ë~d„Å„¼QLµ²v§Œo]¦IH†ùŽ÷½ýÙ©Ý;‘sCd\=ñ‚f¤ö§Îª5«2IEe¡Öù„žj㮫f£íÍÊè1ËGÿ*ìÛ~kv5E,-‰¾ «å¶L÷SÝзV9?ñ~íûgÅZzé0f”³±ú§ðÒ?ÜЯX}t1´²ÖzÈ­Pöäñ.Q> Sûýèòʳ¢d¦Øu ±¬Y؆5í¶äøqãõ΀$°91èô`YòàK;د¥¾†lh 3ˆ¸ñýœá@%ÆOv´ô¤'\¹l£vàŸ]b>ÒuR|.´Ìû =;Ù‡Wòþ»Œ˜$µ×µ4Ùoå'—ÔŒº²Nþœ ÓÙjÕß…éÔö¢A;X͉å>—Ûæ‚Ç­Ëzá—=¥©ÄÐü÷´¢48]VØßq2s!Oà‰r¬„«Ôcßëõ«T\}ŠÈî¬WešÿB{mÊÿ@Ô©c¶5ïͧL|];å—$ÜéúM7o?»¥v™×‘7hN@:ôc/ wFE °ã ìKdkˆvì—1]&†-áÔ¶e˜ÂTV]~ô£¸_4±–L·‰‘²iãšÙ© ûîºÙ.Þ‹Ñ6S¸y<ýêÖUí—Ò0¶c¶Â]:.÷ùH %J± H9<'h}3~ ŒðÛm—p㛌óîûÁÒ½J ³í‡UI\æEi½g‘½ä„WV‹ÔÖëa{%Ç-~í}¹¤0ÏùH´—»a9B‘‡œ‚бñÃ!i†¨2z¢EŠÁha-Xx—.w¹Å›‰§1B¢÷Î4mÅv—W­kqz_{±æ‚ä7‡¯ X&ÏòL\Ï­ÐÞ™t¼û~’J¿Óø‚Ãךð5"çÌï@vµaÑ •1ªŸ%Ñ\Ð.P²s÷÷“$§eM’¯ý)²T‚ÙqRÒeõõ‘1@þ¼tBõ„‚Z¦i®QƒpŒjN©e½-#æk_¦ÎíxeÏ“Üìõ~]žw9Þ##è>NÌJÈã™î{·¼'^so{f£F#b ZGû²E¨I™/P ª@ÈsV·c¨«ÜÊ /H¿»˜º\ÅÏ€6©Þ7p[Ú9ÇŽÄÞ¦ÓAOó2pAá~¿Hs»xmB¯ëMŽ™Ù(ŒÝH#v1ÁKo~NŒ÷ /ïG òÍ.JÁõÐÀì)>¢‰§Ü,èÜ ¯pÙužYµ_šêFNøè_5»'WÒ¸\éÕøÊõk¡{{”ûM×džO.ì_wø'7Ðã8%ÔÂwUç¡×cäŠN¼]Õ|¯gïgsî뢓ô §t,B‹ùä²7¡¥ï1¼Ä˜èÓ1œqkãíJõ"F£©#°¼^b˜ÙQ4ç²lU^)á¥h ³Gб’Y·sƒPÊŠj¦¤l±ááÞÛB-©Â×mvî}¥ÒFúÐ¥ö)Ù2ÜÒÐgL0À3ž?góžû7QBþ"ûEJ•/b¯€‰là‹¼h qØoocº¢oÒ¦> û>ûáÄË­O?‰¶Òn½å¥W­Ïæ&<5dŠû‚¥ Pž¥u‰½¡®(‹Âû¾€‘!×£vZ1ïiï(”+$€{Ó|á½_*VÌœªKsÝsPãM,¬Ãðã×ÖÔ—ç-„Ø4‰ì ¤Wm´Ãñ–~„Û£x7ý㸠qÎ õT^°9áL‡<ç°_ÑrŒ÷¾þ‘IW‘Áry7Z}ÉW»1…è:Í\AD§0>eSn¹I/ IãÕ)T÷ ÁýtnÓeGšEòÕëžœ­ÇŸÂCá¢pæ\åD€®O¾{Ž.¼T `¸ä&£G!‰‹Ô[¸…T8øOØœÈíPÚŠ]F!ãg¾Ø ¥ÖÒ‚ä}îÝ’p¬éÅ­øÔ9Bh·¤¿ƒ\v}žs š©Õ+ü hˆ36ÌB*‘µ£Î>Jm)­ã1ºa% öÇeN÷nb…9&•Œgš¤@š¦Ìâ@/» åBŠu9½<$b# /z¬©í"ÅHè¥ñ˜Ì•H7¨y0ÑâÚŠÕI Z;£þ¤)Usäfh ×.|dŸi+¦Îq­Fà“D Z!‡g„Ÿ*EnHyAˆÆ+G¿¾;ì9ÆE¼ÈöJ%Ý5qÞi¼¡mkŸ t«`¬(œHwÖׂìX¿a‹6‚û²K’Ôƒ~„ÿ³¿kèVêñb:ŠÆ(O¦w]å›`z4k»Dzuik·±U]†™ØdÎR æy¬ß½º]b:2ÝwK–I΂ò-¥a÷‘pµ"¤ÖgÈx¦0\=ÂG–û Œä£f?I„-íݾ— øupf­%¥êÐmÀõ4µÛz‘JŽ{!ß¡¸_]ôžö!„<æÐöÈePÎÐcg´! aF6®'óú†bô7m‘¹Éɼ>i¬ô2 ±ÝDÖ1]µ#Ÿ)áÇ’q³üÚȈÜ4ì­ÞÕ¯ªyìÊs’);ÌLný´ÒZÕ}ÊL†Šð=+‰wD¿“ä]å‡E0ò÷Õ½µø(Ô¹€k“¬6› MÌ â4PB¼ŠÿW™L8|…xÛ®®’ òº¾tÅ‚è©6ýžØ%ÂÈôÂß¿5T¿|Sö-»XT„fYkz½‘Ušß{ý–%œ• l_²Wפ#å"Â{©l ŸYs.™o&ïmŠÒ±Ìª•Ì%ÔÉé´½än…‹×¡%Ùã]‚‘&fD8ñ]Uý’4$—k&©IšøZ'&­Io+`yq'hĬ…Q)Ü9Vµ<A“š¡ÓÝPFöɆý´U°Ç$œ^¤°ÑcäC=~°Zb…:6•Ý¿7¡Øî®ØiÁ4†. ÷7Ü|Ÿ}R¹w%PÐ?öw±øô‰4‚ÚÅ—m‡§ÚÞÒ¨*=Õ~sjß⿾'üâ•_ݤšù‚‹“|ƒ‰Ž|m´¶¡Jœb63ÔÆ!ÈœHHB©höÑÙA ¥ágè,àHÊŠ5ÝO½£;1*°¥T¯~_G|ûGì|V»÷£öÞç[Ï‹Îò?«4a(>3;›9ÀË?X_æV+vKX¤³@¨Ð‡ÈÕÝÉï[ãö×¥˜ÇÞråõƒ°ùä÷«a^­L[LíïlPÈGŒ²ë<ŒCúbS¥2ÌidmÕï#§ßŸŠi»)ÎÜÉ“¾k`©-Ù~œHî;àVð9;؈ÝNðÓ«­Ã”wÁ=iT"v (CHä¨$•â±þÄN³…!õþŽYzŒ‚Ÿ;zNJÎHÝ çýã× ÕúSg‘ÂGÕf»y =’ûßõ84¦éõ¥í24e²òW¹ZÕV*s· ÷Û“Šºðâ?Éæ öðÒ`GZiui‰u´“îȲ€Íå1¢'x̎ʇk,1Ô¥Ïôxü͈+®Ô®Q\û?÷ìú¤ì²Œ)˜˜p¦_?>ÈôÞ@†k«æÅS.·Ê½d„Þxa$=¥ùÑGZÂBHm1[ìòäכݽR8Ø Ý-aP;ÎâÑ1øjª “ë¦DŒ(ž\ËdÕ¾Š6f²4ºøJB#ºØiþÕ3YMFya´¾Þçt>Fƒ)´B˜ ¡±ºQûäÄ}[ûFXÀ×zHQÅ6ɤZüb—1—!"ò_£[u©›}ŧLOØ´jßìŸâNñÕgg©¬w‰«±3ÞY=ÖøÓ¶`KÎhêZÁ7/] E[ˆAKÇ«ÇÒ/¯õ ª#ÅÆÔˆ8ÐVM#R‚‚ÊîΞa3m?œâÇø·ÅáDVÞt0ßÜÑj¦›Âhš«…dmš>{K¿›B„ð¼ŽP…‘+®è¸ðOÂòüØ?ÔÏ»áŠQ?ÆnxјTËíœCÁNkp'û!WĬcq¢ÚàÑã>H­_c9öü„²Ñí Ó'šè¦Üe¥¼k_þg¢‘ÏÚ·3*swq¿§‡qœ©}L3v¡.¡uÌÉzCáô­‰ÀL+FKãŒ)õ…›¹%ÅL8窲ÈRw‚°N¿ìQÕôDæš\Œ¬¡*þÖ2X ‘šÑè¯Ì+\°+Ë\§ÖI<¾ôÒélŽ@P/Ñá])3‡è觯 ‘-¼ A¨M‹zS.ûX Ýõ:•ß§Ö—ˆ/Ó9v«NìåRˆ×DÞcÛ7ÿàù¤¨Ç§Þì9r!1‹c¯¸öïx4Ò“ŠýàÏó}lW˜3'°ÅÉl¬Tšõò°,(Ö yWÅñ×·Z9‰Jô8>p?o’1Ü!aÇéùq]XŠ(J½/?‰Ç®~;9ì'¤`ÙÚæ‹×ÝQ65õP¨HN­ºØù‡LBÕØü=¥+ž‰ë¶‚G#Ôç å»,8§|!1¿…ƒ-L|¥¥JG  ˆ|=d`aNü¾^²ópIi’^1“Kzå¦Û.¼ŸLÅp•›2ð)Rfñ$9-ŸžsÎr Φ=nèê=9¦}è‰Ý &æãLŠ€ƒKíexɉ|3fv©Å¥)÷Q´Q Ч\É¥‘ú f–Ü/1ò£û3~JJ°RÔíÿ°ú8€08z Ù´ ;¾ætñəͅNÏ®ëú.šUpÜ€³>û•Þ¥~x{Ñ @¹vècsÌñû6ÉüD—4ýZ&ò‰qšÔq¤PI{Ô“W¾+™Íu‡ôª•ñÔ£+ƒ‰VI|™.§±!o=ߦÝ}Èî‚g¹ÎB†9j«þÊySl4œWCj‚êË—Ž@¼_ø§³ôϺÇÇù§É) õaUU!1îÛÕ+‘VÎö¼²%ßMƒÊ%ÂÊa‹™áž‚݈Mi&…²÷(pÓ¯9S£'„a]tÚøËKiÔa¤É…œÒ“ü¼Ø)0iÚBåóY[µ?ÎIú«*8fžo_º3ˆCPÕÓ&jµcwÏ ] 5Æ¡Òr¾Ê¼G›Ëû.ª‚³úÐaiëE”%ì±v·í\²P%#öC62`®èÔˆq­ßdN(íUÅ€¯Ip‚l^áUÖSè3˜ºL5;=E,AæÔ#^j[BØnN%Bl…æ›­|T™];äˆ iùñѪL„–Ëy²½ÅµHÂTø%9]MZÀ‰žŠ+zä[¦R >þS%Ÿ–WÉ¬ÒØÆ¥l­Ž5t”ìüDÆ‹/I=Dô½aYQgÉì4K2!Bº~®ùfftü†¼Oŧ´ÜyiÏXÏjI¤©Ìø«€c<ÂöÄëŠuÈDÕ¥òjµÎ-״̽³Ô`NêÀ!XŒS]Þ c(R7Ô…å0R²ººT‡5\ÌmŠÉùaà _jC:(Ñàê¾lñ«5Èá!ƘZ\ëFâ±¼Óû G¶Z.Û­…#Õ^êôZ³ÓLÉÏ«B¦­UŸxÌÁ?=³ÙE.:Ú†Ÿ5åÛG=Ê”F2+¡Zh@ \ÐÄ¡·v>½Õk䨤瓃Þê·µNÑñàQj¨ÁTnf_³f†6kË˚ܺ>‹#ºïªïüm[v²á‰ëyKwrã&çBõµ†1?'I±?5Äzó¯é³ÔÔoÜÿ±¿^(+é ›áB¥–WÍ­Ò‰ï€}%bëxÕß²ò{†fÕá߯×9vWh}% (Já¬d½WþŒ|‚Úhyª§¦©_yú•ÔûKbÎ6ÝB^ùa+#NòhBtŽ ^±fˆäaY!hO°?wB²ŽÓ3–³é=äox sÐ¥w<þÌ}ΰ iQ”¸;{àª¢Æ¨ÛæL0Jý±Ýx¨Ðµ°<‘Ö< V…F×Þ±Ë|[–‘¼23T3?WŽ\¹EÍ–¾xü–>:ŠÄè3D’ûNì`µ°‷ŒìYPÐ/6ÚÜïµÄW73³u¦AÀ´™šy¦ÁQ;?ÆcþÖñ\<¥*‚óf’ÉItmÿ=Q¸¸²4Nžó&,v+#Coñ+"r¬в£ôºœÂòZ{ä2±äÝœG'×½SE$P£Aá”b?ßmm5ȼôv)Â)Ãñ;#3 åÖ9™›©Y 1þJLÄŽÉÝjÑ­Â#¶*·Œ=­¯³§Mb1HreÚŽ/]Ïá1í P ®TÐ+¢ú"†8¤Z$&áÙ H†ML~ç¶ èpâ.ˆX­ià ÷ðrdèÏëÐßžö¥ÝÞ ð‡6D?éú†–DFÎî׌y7{7l|”^XÇÕZ¡¥˱ZüÅ´þ¢Öëé&ýÝ¡Å,!Á%CáÙiÿ*aë¢ñrd“jè2œrôWyB”ÆÑïržRÌÌ~¥¾r}„^:ÝÁ/!#RnŠ ÷g†=¾Iˆ5tßN¤²ÉX 3¿ ~GIE+é1ÔÀÑÖò5“ í³`:ù“‰ó»Éê©ñ)Q„Õ±)Ú÷å§×Тe¤±˜þPÚ„ ‡ôû„¢¿¸ tëºð«I.l]rD¯»¤k!iªùmæS6<ê–Ö^·¼ÂåGÚä¢ÂE2­ž½–ÉC)Ö¥ÞÍ¥9®€‹Ò-fbóÍ d-gbD-ÎíAt†1ã‡~ZZjÓcã çTjÊ~ë,%vQüB˜Ãå_ ˜ ~g"b:5º›]¤¸|ÔuÙÇ1ñ–ÃKǵš°ä}L¶Ü‰<Û˜7"’+G¦Äµ†kcZ¦k÷§d°TÆÐ ÝX@)¶ü½cåL‰)C->Zh,}ƒÊêA¬äÉvŒéì¬óø) ÿ£©§*1;ÓPͳk†+Ø ÄŒÁ#E´Ÿ·š+·‚—º2¥õKgÌRG¨d 8ÆYüO]W,³? c ÍqÎvŸ ï#Ä<Š_ª¤CýGbNV»Ÿ”g–¨7U¸ppŽeúÞ«\¬gR¯É‰âÖ:¾@ùK*ºêј@ÛE,›6g¦hS9Xë€Q>˜&*øìZMHÚ÷$‰èþ¡í§4—†ÅoÓda$‘V~k kœ)eçú©Q. ®ÅY«iìõ‚xaÂ…šb5®V¬™Ä`=¼×J”lù¸.À 9Õ¡º/‘Oj[ué–°(ô]E7Òwîs+ÚÔhsò Oˆýï–A´ý+Äõ=TâFîL0c„sÿKWfQ˜1‡bl÷Q»ê.ÛaÒM—R4ã–¯Ôr@;½œï^žáêt‚v·ê{LJüú9¾¤ŒjÛ"ì"!<´R£ã(l¾U«ßneG¦x»³•RÄÛú]!’céÆiU'ú„+z6íI5-ô=á©]Ñ u'/—R0žsNŒ ¤Ö£¬3?Üómiüäî€ÊSÊ_•¸H&»pt¤VÖZê)x¦´oÆ8~ă² cT]1¼'$°ˆ¯iš””×ÊaC‚»GS¬C6–ò(q·ÕOV`´JõX«)¾Æ‹!ú «Ê endstream endobj 7321 0 obj << /Type /FontDescriptor /FontName /NXZXQD+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/C/G/I/K/L/O/P/R/S/T/W/X/Z/alpha/beta/c/comma/d/delta/epsilon1/greater/h/i/j/lambda/less/m/n/o/period/phi/pi/rho/s/slash/theta/v/x/y) /FontFile 7320 0 R >> endobj 7322 0 obj << /Length1 773 /Length2 1736 /Length3 0 /Length 2280 /Filter /FlateDecode >> stream xÚ­Ty8ÔkNC|ã¨F„’~Yb*f±L“¢iˆÑŒ,É^¦™ß0ÌÖšIäÆ'JIMeÉ•å”(•-»Œtl²V”%9C_W××ù÷»Þ÷÷~žû}žû½ß÷zu¶Ø9êã¨ìcà~6‹§2@íð$H–H$TGÏÉ<:›eAæ»kØ0´!€Äì26”L¨€gs\º·ÐÃ×Hǹt ™È<)©A!3G6…òŽÁ–vø ?È ©P  Ò)<àèMgAK’,À|S8?R ×_" Ð[– $"©lCPAaË–t%Zþ²~-¾?€Á°%3—Ê/õ¯4™IgþK`39< ØTËú•ê ~×F©ôæ¯YÌ Sp,o裌 Fßãtÿýt>Hµ£ó(>Ìð—ã ‹ú«‰}Ë:Ü!aû÷‹]ÎÙ‘é,Þ!?ÉËõK,âÒù€;Ò‰DIˆ’ñcåùK/K…M¥³¼´± @ærÉ(RR ml ¡:‹ ò/Œ0`±y’-€Ä˜`€ÆæB—nƒ¤¥Ð2B!±‚ù¢Œwþû€ûö±ùAH@m,é‡Â Œ12øh”.dñ–_Ĥ˜F—ø ‚|í³)¦a¾É%Ù!–i-92põË·Â*Âï]65ï5U|Á-m>j|„…Ã|é¹k/¾; ÒŒûÕJp§j‚á/a5 Jð)޲”q#+kEÕUk˜W£†»6rJ·O¼Òšé ¬¹MEanª½‹–Îî/L…ønìï’¿DÕzsê)z@¼éKxþå­;Ý•Q«â‘2³î[—ZUO›_·ÂelŒˆé Äö)¢ÓÅZ»RoÓ‹ìûÚÍ]4Èc™U–åëøîms>güf_ÎΖ'—HKUßÎ *ä·Éˆfž†¬h¦ÛÒ/¦Âk6x\‹LÈ9\Tî5âó*,2ÏÂx¨¸Éh,rTº£ŽoO ±ò›KÞ„K¤(zZÃH‘¬žîž¬ÌÂ…ŒæU1QÆ ¬éøÖ†"u}Þbæ·/_«'ÝCÕÕÑEkCgVbWƒ‰S³ES‚dH¼ÉŸ¹U£!› úºY£"³¤“Vë™ «Ìl}¯8zÖ}¨h…?SÄtˆ…ÂŒØÄ¢ŽWNE`ÚûÔÁê ÏÈ>IæHi©ŽL»¼¢.èêN×–B+»2¬ü‡åðnÍò|»·ÕiÕ†-‰']G\ߨº}žñ–æÄU·ûïËÃ?îNZgÑô ¯›²°{ý©$½¨4‡‹¡ ÄÜÝq‚\‡,?Ç¥yž´QÉõäªì¤waJFî°x/DŒ\`)üÔ+Ø6º}¨”á©û‡øã—ˆ=š+ ºêÏž˜—×âNÌ4 WsDÕrm1»¸rŸà‘M”v _±M 29zƦœ-ÝŠ{u÷ÿt=)ä!l„¶Ò\bGÉÝ[ïu‘½½¾ÊÉ…©:ñ2[7VÍEa'í)2­ç9³®u ö=—Ķö™ˆ•µ§Ž•¹¹ˆÝÎ1\Ì>ßJÙ¯•p½{nœ?]œu5¥-C¥ßD…àdó´’Õº´Øa¶×NÅÖ[è‹qZ3'¦\·T¤kF͹¿´ˆÚtÏ æ™"¼ÝlxÄT1a/Qpå\ld²°±&'f‚³åîãh(93¶)KÊñf“m%‹ŸQÍáí½M}:ÑâæH\‰©ïö‘%é“Ϩ%¨x¹áçvZæ [6´8¾f~Ô³¿ÜÄ]§¯€Dö[R®µ?¾›]¡G6.Hù}ðý7äyÔh]ýÊM×LëÒ)åX˾óòïµdM©ÏVçɰM¾3Ïa÷­‰óÉå¹ÛǬ`˜‚Åâ-æáÞogo<äÀšš$Ô‘TsFÞÕu zØò€0Bl8qawg°Ò½Áå°”Ÿ­ÿ»©ŒJó “R›‡ 1º5­¯¨†fO[§2õ?ûT¬jà =§ºö÷Ô­ª ‰ÅÚq•s ö· ¹4µ7¢ø<Ù­&ãïuFmµ;¬;jT?¾þzn+¢±;§@`íë\J:#;x0úØžÎàA ÿ۪ϔ˷z5aåÞK3¿ÑÉÙ;†'Ê+ꉛŒØ'+xµÄÇ>R®ÀL>kíú-Ïìäïšç“]…Ã.§™õuDq܄ɸÚÈ»xÖ­‚?z_—9Nº¨Ïy¹&ËÜ×Ê}L™Gû©ç8«l9Kµ™…ú ›é´OÛ0AëŸÕ[°Ï,¼Õ¸¹lËÅÐåêùUš¥xEQV¤m]º“çÓu•uÍ}!mOªË¿‚ÝùcÛØ×öóØZ¸³*nÀYã„ J·0ù/Óîªé´ÊÒèV1’m꽆¬2ÏUïæÎsâÿÎ7û”v“kü+(ÕÍ$Wß~äTÃUùËœâ½æqœê]{ZX 1Š”¬)Ô·òÛm*ÿ ››9¡-‡•TªÍzHsè,z?&\$ím†µë§;Ì(î7ëÌÅEeöÒžM&„B¢²v1‚¹‹·å"”òùŸ<¤6n#·†ÿµíÌY´ýŽÔ= õµÑQ׫қeF-à ŸS¡ýê¥úV4žCæ8~ÎJ7±”…wI¾¹G`ïgñŸ`•¸7ש;òæ §ÇñÖ#:ìëù‚ú ¡^›ïןe]ØCùB›Æ(G‡ë˜ÑMǾÒJuòâwKÚ¡h@pPS»æ!;ÆJ÷O\©Í^Ø— –qÞ~Móšú+U‚WÙ©‹äÃbJÔÀê8ä¦iD±[kSYpÈ8 ®v³›RgyúÁN<¨ÞãÇ2B‡ö6AóW¼ý"´ÖH]ÿ5Nö>Xf§­û–$ =ˆšîÔ.ÚÐeeËs¬Äf‹£×æ6UsÛ\œ?ç¼²ì¨z‡(i׎/|×$Òx¶($5þ>×Yc endstream endobj 7323 0 obj << /Type /FontDescriptor /FontName /RIATAI+CMMI7 /Flags 4 /FontBBox [0 -250 1171 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 81 /XHeight 431 /CharSet (/M/m/r) /FontFile 7322 0 R >> endobj 7324 0 obj << /Length1 779 /Length2 1486 /Length3 0 /Length 2034 /Filter /FlateDecode >> stream xÚ­Ry8”k.%5"ËA=BÉ,Æp ¥f†ú0ƒc ƒj̼Ã0ó¾Ó,Œ¥ÍåjAYr¦£S[RBZQÖ”-(%Ñ™§Èò ®ó}¿ëùç¹ïßýü~÷s?™±§·‰…„@[Xd…Cãì…Fs!Å‹E™™QCÄA`'†²8"Ñ¸Š¹À°vö¼=€2„-à„†‰€9ÅbNdHoÓ(L²˜ X…qGÓ …—ÿ‡­›os¹î Þ\û¹ þQfð8Üè¿/A@CXþQê}óFƒX1ïǪ‹ˆÁå0Ip(V84ÖæÏnåH –'GÄ lWÍóÌúщ"¾y7:•B¢Y~{Øùš'ƒ‹|¢ùÀþ-žÇ¸¿±""G±h,§*Ö÷]ð³œa&ÂâÀ¡Àš` #…U´²&@,p`$Daƒ†‘âP³°jîU D€a"<cŽžgpÖX€‘üÄLô<üç%ÉdDkeMVÖÅT¬Ø°{þGÈ ,šÿGЍ¾c6G‘.I &JÖ0ÃOV&îu>Ó^¤l!4Ì9ŸxïfREŽzø…ÃÊ.AÕhõ¨f’f8§XãÄ{·R ‹MèÓ¯$Å5Æzc’žh6ªi[üšë­"gíPj’6Ô©óòSekøU–ò“ñÞÈ›ÊeÔ!œ]þû´Å…»§?íØ×Ö'SÍf™¼> –^£fAÛßömÙ†œAdg›tƒrǵfdúuÏ;"ž©åIi‹ålšZ†µ°ûÛP¸¼ˆ52ÿ_ˆ®ÞöK m»Ç[v¾÷Èm.X½xbÊkпyŒ~ü¦Œ<ñ੟8³g­-%/!%k4Dd¼È2¹g0³Jù¹ÖÑò¼Ú̘…WÂnæ­_Á) ó%«/(“Þøpª-´óÒ2ªæém!3‡k‡Œ”Pæ—k×v¸½+ùb¢5¶Ë#‡uyBTJÞ@p{WüÁ4fØðtñÒY;ZÎÞ¶ËH–Ϥ¬ ó¾³AÔ±z~~šÑsùÄåäâx]mv…úª‹Uk/ §ìKõ7:7™~ÎÅÉ÷ç…Ã:Ÿ‹UwïÕ>›ýäé´p¹WÆÞµóƒôú¾¸À3*Äš©öÑ ²øÜ£Eãñ·¿z8å0ÛK1e/ð5›¢®>ìMIï™*x¹áNM›¥¹1«ñdÝWzeùž†k`6:¦X|v”¶A®ìô6­9Xä4꛺À¬ñÍÀ`ƒÿLÕ/>zÞÐj± ÈâÎl©¥Äî§£&Ü2ß]Ð+[tøs³UÜÑQ |»ÓºL²èb÷K×<$w¬±¯ÉË-ÅHû' ×ÿ®l×óÎÕ%ÝHwQÀª7³Zg¹N² ›UÝoe¨§5<ÔŽJ’é»}¸$,ÙB’¸‹áûÿö´¼,‰Á_Ee$>ºShyŒâG›¢TïÛRúç9ÔNͧlØ¿/¹…eÈ_UþBýI«’y}¼uTeȯLõcñ)oZ»UZñÍKÈ×-•v‡šðóš¯F•¦˜§w<• -¯&fØå´-Þr O¬Æ84!¶=ãgœ½c9d*ú¸C~··€j:¨²4s%¹®(‚ž¬ÁÔæ~"K¦:Ø”#÷½Í¢ ›©=§~óö©Øa TÖ8»ÒúÙïN¸¶-²¶ïòÂÈú»Ï÷éÖyoníܘ’|e×–ÈÅÃæ:»ðv¯4:‡ ~*Ȩ‹+qXKýøˆ$ÐñÞXøXÂCþ¤x_Ô Y¸gÈðÈbéD ËÈdõãÏÊcåÞª-œ¦êêMqƒwgs"zåãÎÛ}Yö¤±×‹~eãºpÁƒÖ"íEh]½JI¶Aì“Ïi5GðŽwœŠ›´ö>³l:_Ö¶bëºi‰”é©íl›Ð¹nOþÌ:ÍÏÚØ㯊>õßïïÑq'¸]Z~ªº†}°Q8HqwýØ}Ü´äýUÔúé~¾¹âõñÖ¶ +»ZÜK¨¿Q¥!µò ¿Vy{S¥qçÈ—¾iǨ++Žë÷[ôÝטû¢£Dõ„™‹;×4¤ß¹1Ô×þþ‰©¾Ìf:ë÷åDþëH’Væô éŸàãÝ endstream endobj 7325 0 obj << /Type /FontDescriptor /FontName /KZLCAM+CMMI9 /Flags 4 /FontBBox [-29 -250 1075 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 74 /XHeight 431 /CharSet (/comma/x/y) /FontFile 7324 0 R >> endobj 7326 0 obj << /Length1 1020 /Length2 4167 /Length3 0 /Length 4840 /Filter /FlateDecode >> stream xÚ­“gTSÛÖ†é%:DP M©Bè]éM:XЩÒDªt0 ЋÒ0‚€€é½Hïr£Þsüι¿±÷ØcÍw¾k®g̹6‡±’5Ò ¦ŽtB o€eA*ºF`ø†ˆˆ2€‡Gƒ áH'U& ËȈ‚ÔaV„á••—•ð€TΞ(¸­Ä«Â÷Ó$Rr„¡àPˆH‚¶ƒ9j@!1 ‡¡=o€”ÑÏ® #˜+ å³¾ƒAÖp(d³…;„"i9Ù AR¿ek7ç¿Rî0”+ Äû “D€´F:!Íèeõæ“ó+ÛV=×+ßßp.p8†‘Û¥ãÂ?Qf~ô6™áâ<ùüÕÇ'l®áõ>†Õ7ü]ž'þ˜w4ŸìUÃf¾•¬ë9ç̹¸BSW9°³*A¬ÿy¢;/Î"»íõ÷ö• ^U“Ê1¢¦{” I)sõd„iHpÙ51#ÚD—¼PññÇ´q/ÈÆ?bìC¨ªF7‘õnôGYTé±?îï3EÓA믊Mó3-Ü\Åf‡ÐÒ”žµvßJÙ£@óä_©Œº´Sž¿öbU{Ø÷¯ªë¾!XSoÎqÊ#ù`"wö¡˜ÀC»líá‘ï/²‘ש¼~,ƒâd2ëubŸpOúmøÐÄ¢3"ïÜç»KÎq¡Æž‹ån[rJ/£øâÎ+SV% €ÓùfÜ™·Û­äJ¾¹®ø 푽2ß FßêMk»¼ÁR*KjûmV#”0{Ô­Í)å(ÏÅ“÷ïô?3¢Ó=ù¬kBâóއ~œI¸eô¦Ð¸R)ã?ëç„—°aÓbº™‘ àzÞbúÔEDa¾ˆ{QOí" …»û|Ž?™» ^±¤ËÛKîVM¦çØÑä^Y}kª%s‚5åÛ×q¦ˆïTÜf)vD•c²ÅAçn¶ð¢$£ä”Ñã]’ÅÑPõ&6•T·°‡ Îq¤KÆ›ÛÉqkD±9Ç0³I7Zâ!Pâjqu‘M¢Tüœÿ&£–á·{nd¢™"§Ynw¥+øß6qQ¤³&_»Tî¼4¨]~µYãó®£'^+ª'6‚•…¶Òæ»Ä•k1bÆèÍФpå]˜9lñ†–=W!V;?YÏ´¾L4ûì#4tûDn*êHP:ÕR$Žs@•½á=&ú€ökk Ciuš%Ð$ê,ë²Ôã: «Õq£ Pïc+¹/Ñ¥ÄÏkº<ÖôºÖìÔw!œ:a…bøöq‡f´® X=¡ äÀü°`„K8!"= °þJ‰xU„xÊ>7ºë¡Õ¦úFåš"Åð\æ@mž¾…ÙÌÑK6oxã7ÃFMmdFȳNtÀn;6èFÒ:B–é)¤˜óÔY­ÍŠ%áøž3¥×¡æç«—Ô/¯8š¤õµ½mû&_ØéÌek8²ÁÉÚ´ÐÀwÚ|‘ŽZ×èqZÛûÁÑ×òQª*{z·¤ .áìi ÔØñ%ÆcQU¥'Q:þnÎ7WM’ýŽÎE0Ræ%{o$ѱ½­[«–3èrR%uÌšÐv¨"ÚÈä|^>æÏ0Ê&­ø!:Ðv53H °yC¨NJ[ÒrÁÒC0ÅgÊ.p¬3ïëw¤HKW\´ÌOt¯ï.,Ëh.ÌŠU©¼æR]ä‰ÓžÍDø—jÌ\—Rüä1l{vw/ãˆ% `䩯–ƃ‹ ãèšHcO:8âöÀÚu*H÷b˜¿(-Fí17S×6é‰èºIöu¸jÃ2YØRÑ`—ª?fÿP0çY_u22Ú”{kî¸L}ÅßGâݾ0¯ùâÂ6ÕÙ«L)@ù‡ç¡µŠ–I&ÍÑ&øoüŒt©ŒÅ7%¿=š%ÄÓÞ¼G¬6æPˆ°\žäf•^ŠmSGfÅ>`´•*=À‡œÛ».Vh±k¼$rÉ TNy9D=’iÌhg4üÎÅÒ¯½£§1º1V˜cýú†‚]£„z­Ö¿Òš£ð¥C'Ùê1ÚJ(-܉ÃÕЊtòzêieèuˆæwø>EøU!ˆí¼¸ÄÇ ¹ ÙÉ0ÖV¬FÐ~¬+NOûˆ¿iCeW57f¸ßè-Ó+c>†—¥b ¥µåp\tÔQ6ïu&Öª!ލñmâpr°ç{>ÞøšÄÄl>7Æú±‘%¯G'3o }e'»½tÕ½è®.K à#Îß „o¸^JN;dõ+_gÄ“ù$Š>€g(Ô”V¤ñ"vú¡|ꌗ(²t?paË|Õêa˜Ë¸’.ÓÎï;SÊIÒa.‚}w¡GÇêáBÁÎvŸªån¶Îö–‘€½Æ|¾ êùüx¡w°4 ûõôí›—ëC±ZB;²­×›Ø*ŘÇÉ¥3ªÐ0cú›HS²b9æú=š"M¤¥L–­£;”ôÂ|õÂÖÜ@s®–gÚóÓñRÕ;¼¸MõÕ0û**Æb¡øJ·Ž*û%Ù„@˜Ò ¿Ëw<“wk’qÎ[¯Ùus„ÓNø>W(Ö0W`:=»ºÛwæeÛEþ`S¬!jüX¡s˜Íµ‡­@Ÿ_^‡$ð…‰?ÉlÇ*ü^Jµÿª~vR äßSx¶iìв%W³è¤{‹ý“UuŸC%|D//8ïœcH×îv˨.»лhï>)PE"Ÿ ¨µ5™e5¶7ëTïK£¾})Dqf‰jÀŽ(ŒºçGY‹:y¨ç}’õ°*4s¸Û?ºÉ«ÂA¿8ƒ÷ƒ´%G>–}M=¾kõ5Ö1”nùü$cTƒò€Øî:ôR/•o‰k-°\6Ë32¯­ô-¨~I9y2ÃmRñÚcòK7¤Ëëy¿0´úÉ>šrð›xÑ!¨u\}d@•è–*ižmn¿«e‘Ï5L¼MÎpm§ŽäÃfw¹({Ú¬%@¦.Ágt1ªûûs·4 Ù¢Ú©ªB™ç©BCŸ_¥"?>YÉÑ ss·ÿô¹DÇ2eœ‰²™s}ý ®väŒn“v}ß5ÝðIE¯b!òÂçòb}³ñ,]›•Æ gý\-/OÕ·lbÈïÕA6¬]ßÑl ·_÷€Qß–\;UøÓ±Ÿµö·wxÇxhzö½¼½Õ¨”º§äSÔ9¯Ð3^LgËMu¹<øÊV…"¥²y°eDjQ-{ ¶É8Ú~ÿ!‰Î=Ü{u×Ä󗜔ӦCêP(ÞBýýfð;|åH _¢ƒ¸L2Ï×d©ûdùé"r?†bžÑÞ¹Õ›!Á/´:bGWnÐ.›óp‚­»ŽŽ-howWå0Çp>©×.{Zï—²ep—ÓÜ×üÉÚH¾{ü®@$PGêü!P`XÓlË]i™R¦çk̰0‡ÏPïá?cFý{v]0§,$¾µ%m~ ÌŠ¥ˆçã:Zø5—Ц wqo·=ìÞ-Ú=«ªGhÉÇÓÕAîÎkmÕª2k“džõô^¦ûû>ðážÌbŸ»¸BíK¼´éZk;G‰7¼vÓ“~š£7õÅ3:Wo¹B+.:|Äûím¿-ž|lâ,‹Ä™þû%zÿI¯w÷\²/î~~çÀÿº;`íIçØœ²ˆÍGñÚŒ§zo3ÉŸÞÔ4›Ó1"6ñ%ͧéµ0VX8:n0Ü5H7Þö¸šáhÒ‘óa—²ÈFºÔ*ûÎh9õä»L¹€¸ Mn3ÅiÜÀBÆÑÚ‡kéË*Ôâû€jq”ÈUðàôÇݹ+×Pv¯™,Ù£iµYS…Ì 1®kc…3§¾/Ú,–%:êĹ²rBcÂÚ¥LåñÐ\Fa…ý¿´Ò«zÏHŽŽñÍ”ëWZ ™´‘^V9’ø¼"Û^óXñÊî3N»ÑOél:Pk†à…oVçªRÕ4•Å9µT?`/Æ?¾óÍlÁܯuv||¾´ç(²ŽãGÿã¬BM¼FG@ÄÑAÑ9µfPeñëô!Éü˜ƒLæ¡+Á/ü‚ž6Üö}vŽŽvt–*bîôIÃÒôC°xÍc#ó°Èiªëc¾f~÷>%h›1ßrÌú€åQ³Þ"÷4Õ–õt;â¹±aóòÖV—8q¿M€ê®#žÓ±¸Pæ2´€¶ ƒkǶ´—ó^Í™I É^a)N&JYØ´.-U¶¸°¨å3B¿K§¼Îp÷K­‘Ç­ô žÿbµmA endstream endobj 7327 0 obj << /Type /FontDescriptor /FontName /JODMXR+CMR10 /Flags 4 /FontBBox [-251 -250 1009 969] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/Upsilon/a/bracketleft/bracketright/eight/equal/five/g/nine/one/parenleft/parenright/plus/r/two/zero) /FontFile 7326 0 R >> endobj 7328 0 obj << /Length1 799 /Length2 1702 /Length3 0 /Length 2257 /Filter /FlateDecode >> stream xÚ­’y8”kÇ©Dc'§Tƃˆˆ™1CdÉÈHYC*fy†GcfÌ<ÃL2¶A‘cI©^å8•% W’&‘´È 5ö¥¯¢œ¨è ½õ^oçß÷ºÿ¹¿¿íþ\ßû§¯ãá½Í Þ†6E[Žn^–Ú…Ð×wdDbÐwaÐ@[Y¡N€Ah ks+k ¡82˜< †ŽFKE–€C8È‚ÈD:àF„CÁpÉ 2‘x3ÈóL ðZê`^ dE‚S P 2 ÀˆŽ0[âq¡S€å·0…ÃüžŠYl `(4$ˆÆ( aæÎ¼JHþP?'ph4wbøÒx‰GÿÈÃ!ï?yF8“ƒ,ÀAYôŸKýÀohn â„ÿœu‰4ˆì@¡ê[b .Hñ€`r(@%ÒØàr¤S~†Ø¶Œ`æ»ËÝg³ñòo.§<ˆöá1 ]ª]Öèÿj‰7,ˆ ¢LQ(´¤Pr¾ßþô”Ì @tÉ:à,"‹Eä!${!Q8  @t È@®„×̔΀%-€Ä’€Ê`!–>k˜1èàRpY£ÑÀŒùCâ°€[BòC£38ŠñCc·fG@Ö·À?=ÀãÜèmK`FÒ)™,q¨˜ÿ)$sX,/¯—ÄÉïš I|A.HFô>cwÂro$ñþh/–Ù*©Îp¯¼Û)”Oìù]švé±kÄÖþ ÿO%yêJã2ãÚQ_6²»}Ô³…ð6>"ãt÷âxdðxÞ‘šþ3yn¼1¦îÇD±rí®“8é½Oû›‹² ïŸ×$¾èa¸ËgBö¥ŽT}`dUýY…¥?!æ›’Ta`®ã¥r:¢è6E¥’¹JÔ–ÈK‘»iübšq›£öé¹ Y‹fo>®ÍÿB»7ýº 3ƒ/ÆŒ¸ä\/ýê…O/PHïZ`dw))]eÞ=vÄ ¹qÃCç²~‡ßŸ¼H%bƒÚ™ ¨Æ÷œ‡4‘“³Qgå_ZeG%lÇ',íËXÝ[ÂïùÀ¨ON ²µàDG™Léšž>Ÿþ®­ú2£©Ñ©W©î"[b´µP\Ë~ЬÃk447z4Š›(D®ÚÚ~ëB@åIWéfßÚcî¬u«Åy«K‘mä½eÜdeŠRy.­™‘^W§”i2x*ü Úê¥fßT5fÅ¥Š|ÉWÎ 9±ƒxTk˜äxÔ¦Ä*ÃïØ;ÃÒ£<×_6ªéÓk"¥[fؤ|^|R.!'?…YwB‘*çFX1Ø™îk]ÜOŠH&¤rN0Ò±³È˜ÒñÄ¡÷Ì÷'ÔxÕ!˜Ч¿*7§«ª‘}ò`B„óÈnË+MŠÆûV̦·„Œß>ÍóS‘'x.äÌGk_4]ñÚðö¨(’?Ê¢†šÎœíU¬XÅØ2°k’\;Í)Íé÷aÖÇÍw ýsêÕv_¼iB(é]–¯¦WiÐ’Ôâ®ïŸË7„{µÜÛŸFktªæèï-Z“Ýé¹*¤zvÈü»¾±ÌzÕ{_•aEÓxû±µ¾ÏbÙ²¾­æ¤áÞdv…«šÁnMé¯-év·åÙΓÀj¯ ½xýö£†åH­}Љ‰Áª^>ä®1¶N×1ßÝgP v†ò)hùŠfŸ6AΞ^Ÿæ­8Š4~»KüäÒ:ì{Œ°O•ÏLIž3Ñ^1!Ónü²®ñ—]ê8üÀX}Ä&±¶¹¼£ÅÛÕ6P„ ¦zmXíes·<áÒÄå…Õ//œX\ñ\¤ºóÍ”ÜÔg»aÏJ»´Æè“CQÁ Êgo¹ï¸zŸ ³´úípK6kšÑø×Ég˜EÔ¶j‚H +]÷•ÿ2Ê%¤ÚÝÃ5(—unÍ~-xØ@{|\w>ð¤]›MrÌNª‰¶JFL_ž¢ñ‰kižq“¿¤‹ù(½‘°Ü욘¾‘æê§›«†I¥oÇG¤>î©Y•Ôeqký¯ CA ª¾ò·åÇ]{ïê*X»ÚOiѧºs5lg×=ÜÊ×0"àÌiÍK™Jáh` û‘á:¨aþÜq×ÌTðjô%ÝàSôÃg;jJ«,¬ª‘ ¯¤ãF.t­žèøÊ½rGA©)k“(‹ÛÌ‘î3.§`³ v$eîãGNŒhZ‘ý0ÝþÓcok«_äd\{s¿µycË tí¡SÏüÙÈ Ü¯sÀדŵBïz-¸c®1‹Ÿ1¼êƒv°&ÿekgã÷/ï”+Ï6fÉ3Ëã"Á´•¿öGš¿Êü :¸9ô\•Ä»Ûf™µ‡ ®é°z¡MÇ?‡9Û|p^ùY²Õ“ýÛä$©kàÚßÉ÷Mý endstream endobj 7329 0 obj << /Type /FontDescriptor /FontName /UDNTJG+CMR7 /Flags 4 /FontBBox [-27 -250 1122 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet (/one/p/six/two/zero) /FontFile 7328 0 R >> endobj 7330 0 obj << /Length1 764 /Length2 1209 /Length3 0 /Length 1745 /Filter /FlateDecode >> stream xÚ­Rm8”i΢4ŽZßÊW÷Ô;…3cØ#Æg3bùÎ2Í<ÃÓ>óØvµßãþs_çyÝ×uÞçu‘ˆÁ¶L>¶òÁP‰-•Lužþ ’)ÉS q%0†zq%  2TÀ”Æ{  :¹Ð.Ž  xb"¹Ž‹—KO«¹$:` !1Ìã¢ÀŸ+‰‡„x Á†$r2`"à̽H(Ë >™@¥>Ì“€íPŒìæô°Pè 0_*úHÉ q". Xâ"­.‘¡ˆð!Á.Ã{A¸’ÿ‡¨ÅÅ}¤ÀΕÇ=úˈüФH ü1>$F§†A Òü!>,.fY.ó˜hÊ'úÀI?–ð​$Bó8„ò‹Àm›—`èÉöÛ8?Íy* £’­rÑŸEçrçcê_1îNQ2…BÅñóñ½¨•7ÊÃø0Нƒ£àŠÅ\9ß $$soýz‘£s$¡*Ë!sp§NAžÆ`oÚî™Z—7LaÍR½wåZeù³ÛÞÔå5¯¡q[pžºŸ>™©óiÝ‡Ž®Z÷",£š?iq~`¥•ègÔ'›xÇÜž4¾éå/{iÓØNT‘œ¢‡*ŸÄÐ6ÆÄŸd++(“yåXMƒ¼7üŠªoÄ\ÕgÐhbxÏêè iª´?+vŠ2hQoöq&×f0ZclK ê1‹ëÑ6%õÛ«k`µoëôÅå™+m"øo‡Þ‰—^]ÓµŠZÅœ^ÙÙ“«AXN)š»®,ºdL‹ˆ|ø,6ÿm=ùðRí)ëãI=¥§˜³šæýlûk=!§ãyº OÑŒ½M÷xVQÛ©uÝî†ïÙU„ŸŸ é;ÛTõ®Èù š¬žP)øMnþ‰d3…ñ¾µ_3ÖDíŒß–}b}ÞtÛ±pÅØr¿åY ¨Æ‡Þš°"ÿçAÝ”€ßôüF‹J 6àVyÏùLë·z“%g­#zEÿÏøk¢²áÌyg¸+•»©òâx¨ï—¡«,º']gÂ&åÏnºÒ>Çœý†‹Eç®FØü»—Hß¿õôÅ7Ýy©vT?Ú왛ϸø´3J}ÿ«&–›kÛ¬-¦ä`£^÷cêÑšb›Maô "Ór5"hç¦|kpwjn¾¶yak’QW”©ª¨Ðeµ)í¿®ŒU†5SÝcŽÖã?. øò%=W ƒâ®2/@ÞÜÖx@†\ÍëäN‹Ü²uJd<%³ûOͯ>×YdŽúêW¬êèôsGµilwFÂ/9ªåݯË.O—)ÓgZ‘býÕºeåꙉží)íÈç×o°µ@ûßWê^£*v[¤Û\ Cw­˜íÝWÞħÜ?E¼¬viD1å¡/*•Î,eO´i¥Žì1½©íËêREè Ë=‚~KÕ-F/àï+I~2KØéBgÁ¿Ž¾öJjJ«Ò°:®SzÆÁhÏ=×OBÌ‚¶÷Wl¬h9%\F¨<éµöñ±©+ýV†·âø#¶·ÕÓö´Md ~U5|ä;ÿkV;În®Ö*%Ô稾Èù–6ÑaÆ|¤Lx]ëN£¾zðÓΡ4×´} ÎÏ+VùæœØ£WÒª)U×i»Pbù "Îy›âœÂ«D~]×7RëŽ4t£B­ô³û·÷澌݌µ f=5~|ã¡Aײ&Ù$ý:I0òΧp¸m¢¹ëŽŽï]Ýå¥me½j-Y\÷á_S7ßz²ßµŠW[WíÐ2"$IÖ³D¦7´o1†õ&gÝ‹{ ¶¸ûfŒ&+„†'ú¶°óJïHyú]_Eßû0‡Â¾’‘Þ²¢¬+tD#Ü>圥²>Y­¶Zã{“(‹Íf5ë‡Ì6u?´&³÷f¡/¶œ ŠŸÔÅ–½Í¾M$:Vý\F\ endstream endobj 7331 0 obj << /Type /FontDescriptor /FontName /NPCZJK+CMR9 /Flags 4 /FontBBox [-39 -250 1036 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 74 /XHeight 431 /CharSet (/parenleft/parenright) /FontFile 7330 0 R >> endobj 7332 0 obj << /Length1 940 /Length2 1886 /Length3 0 /Length 2513 /Filter /FlateDecode >> stream xÚ­’y<ÔùÇ)EC‡ä õM!d.Ƶ!×8BZ› 3óý_æ>×ð+!Wå,•kg+µ¥ki©¤¬c3’kc5„\¿“®µ¿/ÕöØößßãûÏ÷ý|¿>ïÏëó~¿ ¶ø’ÌA"²˜|3g 8{“¾Ãa‹20pæBd>Ìbºù-€³±ÁŽ€#X+[<Ö–`…2œYìX.L‹àÛEV€#âÂT2ð&ó# RƒJ¦$†ø±hÀ‘NüOðˆq£!Âá¦ò Dƒ™(Ì¢#f8 °úˆAûs*âòSÀvĤ1€XYLz,Bá(Œ ¹ Bœü?L}]œ( Ó}ÈŒÅòK]úWžÌ€é±Ÿ,[À‡¸€7 „¸Ì¯¥ßBÍyC ,`|õà“é0Õ‘I£C€Î5'|LÀ<",„@_˜OÂÉt´Ä!&øµ¤}KF0žnAûö¸˜~šëRÒ— 3ù±lÀ~Q/Ÿ/1Ò%.,‚±h,‡‘ïóßþ¯.seRY ̤x‚%@ærɱ(dƒˆÄ㘠BB"Ž1h&‹Ö$á,.jq¬æ–9ÅŠ¡°ø‹©ÿ‰Ò¡pþjþ‰~îß¡<¤Û0/ ì—"8,R›Bæþ ðXC‡x<ˆ#@†ÿ™"3¼/2è|˜<ñ3C*±éÞ?…8"å’Á¥]Z„ÿƒ“Ko†·Ìl,‘¶àp–€•!ñBª€Ë…˜ü¥MG†ù9‡‘€ !DEõ÷°¨ß¤DU§VŠ\è<¿³êmËÅgýŠ·‚jE'a0‘D(ñÛBã‹'Ë¥?ç4iFI´<©ß¨q¯kgûd…ÌU¨ýôsFÙ™ £É„FtI3ö`FáêS£I&ÎÞã§Iul¹#Ň·îèŸÛšÔ¢RN8íû¡a~¨Gy½‰®‰þF«þsŠƒòš±ƒã7¿¬M*ºoGíðòðÕä3Œ$áöÊ”9òëQÔþðh‰ÄÔoÌñv÷„4F ü°nOVc°pZ/]?ÍàÅ]Ò¡,C¤ßÛÊVÔìJŸÊ.—%ìY…jÔsjìlJ¹/ÅIvkÐóÒm1x¿±ÅÔ§p ;d¾ìêX­v[ähà•*\Ú_н9CŽ:U“¯ç2Ç9[o7¨™ˆÞ]}ü»ÿŠë›”{êÕqjÝýÎGÞ–®òi_™÷üüº°6"g £ùtÆ¢½§ÓM<’ÌSÑ>à·¿•½‡L\X™}ûéPf3ÛbÞu_5Ǻ¼úVùð5µŠ kfñfš4\.sUÅ¡ÕÁ±ðu:-.|‡¬Ãô Ó3œ п;ÉÄ~uºÀúÆ‚UÂïî“6ñ³®%+[ÝëFwzYˆÀ1{e˜ÒÀ/¶+Üj—¿óßÙ£$Ó9<ùN¼\u•ã´Êò­Y7ôµÛ‡q?y6yLµÌBê ÇïhÔvÍì¿“jô¬ßÀy´˜'cõ*hÕå?ù]ºWzÆËÎ}H÷– ìjßÙjo>}cK·ç­9gç;ö} ‚ð@‰ÓËôÎs“>ö´4;UbÍñWÛrÚ;’~›‰ŸÔ·VK»úÎàò+ÕÆ<_ mÙítšœ{åŸÚÕÁ ÛƒÓG:;*Ö¨ôê~/Ê]Ѱ¡%Ѥ¶O§.û€næÐH‡.MÃÇ›‰¨V.ïUô;säVÞ÷~?2+šêåVýò«{>-ºÓj¼ÑyïP¢7s²6Ȳ~yX1&u®œÒÕÑuý!£`S¯…ƒtîÒNLԸĜՊ¶¸ëQ/F{e3³ Cµ*¨DE›7ãîjùr)ÓÙ >ÔÑW%…MRÁiçÊ•òÓ_,[Ï‚!U5 …ЩÑõ›k3¨Íð·KÞ¶n¢+2EzBÙÂÃĺÿœ÷%W‘5Õ¿ûÓ…¢[¬ÛjIzž’ioc´­.rDóºHûN½Yý–ñpÜÃ貺èÚUëšïlkYÓú溧íª{T}]Lz~¼B@(ÕΜ¤6p¿ßDX—஫T2%uŸÍÃnZÁ‚ý&í ¬#”'Õ™>¾L~Ö¶?E•ŒË ßSUû¨½ZNKUÓžUeÎoëê°“åÞàjìÕgxÂW‡‚ŽØíðÈÓ±{eOñéps©Z(ÑxM áz•fâ¦8$¿ f‡ˆþÚ¥ÃçïöÈ9¿U5“ÙÉ`@OÈXUíd´ž’‰5^¹£u~p={øÕ‹VMTŽËè³·„þ¸#ûP‰ï‹ [ÍEQ»V®Üv=öÁÝc‘^bJ^çIx„Z·)Vã—3“°™M7ÛtûÖœyæûÖd>`Z¿¢â’†P^ 6x:’Þ÷¯÷FIÏ®¯$æÜ4ñÉÓJ™ƒ׫jn=H×’îTø5?Iï¤iÃÚ¨c ¹¬É¡È¤ J•69>næ°´w0Jú$e\V[jƒ`èÍ#—sq&M'æ—+9Ü¿\ïãÄ›X3€PJÞ´'àµÇQgöaÛûÎÇ ·³{R;®?‰Œ0ÞÚÛ\±ÕãYq¯nVö©ŽmØß6>RŸ·fv½Î'P ²¼Ö<*r6`G™a‡SŽ„,Ï»«¦n³w3g×¶BQ¦~MÇ}¯¿þùòñGvÒñ2ú·÷&®‰aýò Â÷­ù ’ÝWžiœ|~n\us”“;uwßpœe.Î=ÝóâT>2ùb UT˜;ãVïš¼îƒßc+´ËõHÅÈéÔP¯>àÙ¥ºqlJÿ×ãÝ®¡­Ý /ñ%Ú1ÚÒ‰’ §j@9?7ûHÔ£•dâ|Þš¨‹u6MÝJníMWÿ *t~âpL÷a)¾ÐÒ@œõß—ò]¾RÊo½¥àŽÓ<…&‘ñAbƒ5¿q†™])™·¿3¨½Ë³àhФDx”t9cSpÖ$ ]ê'-8o9°öEtNe;Iî9óÖÈA–í¥üe}OßÂçFË«dÞ&˜ºé Vÿ6+ ¢ w¦ä­w¨;pïͱá…<éÀý“ñØSÕWk'6¯àsn{·>[½Kåç›ÑªzóIžQ6~Zùõ*ͳ]íÂ.’0Ä ìÓ8Cyr¢"Oaòf%G¼©«öÚÓ4S“ì £2 ]=Æþ•‘ŽZ ^eNòÍYÛ‰¾›íø‰ùÚ´Òßå#ubd.jÃuyÄÅŽªã™Ý3}˜§oƒ~O «TéÕÆÆ¨ºpÖ9›†¥Dô²{…r?ªì†w‡Q8}š%ý¤Ù]ÆO‹/þŒ Ó endstream endobj 7333 0 obj << /Type /FontDescriptor /FontName /JGXZOD+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 85 /XHeight 431 /CharSet (/arrowboth/arrowleft/arrowright/asteriskmath/bar/lessequal/minus/multiply/plusminus/radical) /FontFile 7332 0 R >> endobj 7334 0 obj << /Length1 769 /Length2 714 /Length3 0 /Length 1246 /Filter /FlateDecode >> stream xÚ­’kPW†A‡±¨…LÔ)Gh$Ü’lJ„‚((!*­5ìžÕÍn\6”gä"TEm‘‘`AZ™–¶:jÉ8v ̈RÁV° xo£N»:Nñogÿì÷½ïùÎsÞsx«Tê 9FeÀŠd‚"ŠxõGR€DOAC ƒSd´†2€„…!@n̈ˆ¤21"“ˆ9<   &ÏÔ1€¯ð³›¤@®‡4ŽjH¯atPÏÎ@5PS(“È $ÙWd$˜élˆ 80e@ÌÄIŽÐKj) kcFÃ+)ÒY,à³~€EÄ(’0 j9B%ÅîY’ÿjþð#A(5zûx{HoÈ=N˜þ5Pzƒ‘4ˆ§0H“ó­©pŽ-b¸Q?_e4ŽÊÉL‚ $X ú@2'àY1xÄT8ƒê€VCdÁÙ>$±ù(lz³ ÂÔuZ²*`îVg5•'™d“Ñkól¼®ÙŒh<¤‹"ÂÙïÕß'óöZK¢†“™@, šÖ˜8"v”X"fà$sÌa…’bØ%€M&h)šc¿T$)$3Øp!c×fÛÁ¡@h qööΛ§‹Š¢rÌAìK “ KÄ@*Îý5Ò4$™Ù÷ÃfôªÖâl®æ@”34H¡áÛ*~.jÊ[[ß÷“pñ3[ó­¡EgÓÚóªp,W-9š¸*“9>Y7Úz {Ùö~84¼œKÿä¹_¹oË# ÷dk鱆´ƒ»%‚+êe¦=¥G\g|'c»w¤|U]8ºBÖAU–ø=òÉ·¹ÅnFm®·>¹6èìîŸtØß{¹tèĢǥËL#‰±ïuÀ¦}µ£-¿í§7øž±eq/ÇCO5´øõ> ¨W ,—~PŽ»wu-QüþÂu:À#2ûZ{ýÞž~&,¹­2è®9;/L»Ó~C1îfåÈëžÚªÃ;·KƒßRÚ-'·¸œó®¹ó<íz*ŒÚx¨Ú72ßò¡Õ,(_ÞVÒ~ºma¤ƒJu[àÞbûëa³Wt£gjs`OÄ!ó‹Å>)Žï¦Ý éë!wZ¦ªÏ-èÍ¿Ÿ|tkå¯î.·qeÙꈭ_çÕ¬[ï\QúZT:Éû="™cΘî®(ðºÕWòÀŒl 0”‡z¨#ù£õ7'%ðv¸ûx¸§¿¦ÒpÿL/>=R²²øZW“m ÿÂ÷Ê*ŽKœySœ¤aà鄃Sxq§W•峩ۘWJÞ>…v÷í»„kÉÔÌ ´^åo’…[Üÿà%9Y‘Pg‰8—fÜÌ5?V û/Pöö>=³-ÄÖý£öIc[Q™<ýýëçç-µVδýrçȉ=—+¦Õ©âDÛJwÑxÁ’ÉÚ8nU]§cû]ë ïµ:‚v¥ËØD’¹üF>¦ã )ž1Äùšg3[×ltnlªIÝ««ºzàŧĊSñé]}'­Þ!|b1~ß…è/¯xWú5w­Î^s]_çXWæÁCÖsßùÓ)ÌM÷òîÅ« µÞ{/ý}pe‚Óáû‘Ž»U8¬m£гÉoù©“Ÿ÷\.”ytúëߟnpîËT],ÿô&U» endstream endobj 7335 0 obj << /Type /FontDescriptor /FontName /WFSXTP+CMSY7 /Flags 4 /FontBBox [-15 -951 1252 782] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 93 /XHeight 431 /CharSet (/openbullet/prime) /FontFile 7334 0 R >> endobj 7336 0 obj << /Length1 789 /Length2 1194 /Length3 0 /Length 1739 /Filter /FlateDecode >> stream xÚ­RkXSW…òN U¤hÐc Zò"$&*O¢@y V¸$¸c¸` L ;*¦  *”* "Ïbä%ƒˆ´ŠÔj¥Â "¯‚Ìêt†þï~ßùîÞ{í³Ö^g›oöð¶´ç C`'!*¶¤‘iàjïíO£™J¥áÌÍE0$F„èH sͦƒOyb@·t*‡ÆæÐXÈ ŽA¢ÿ¢c`ŸTëÿGa¤L„„…‹ÉÑbñ&Ö'ËPûX„ð ¸Aâp8£ãAà-ä!°XFöðZì‹^p4,Šùdø¦#CPeQ> Örš/‰|_ŠE‹Òii" €Íâàá8Š»cƒ1Eÿ?q+)œ$;‘,[û§:d¿# øàJ€¼,Ì æ#’ˆ•U® <{4LKƒLµ²^. ÑNˆæ{ b^8…ÑðRFù+`æ-ÑSœöûp}·ÿ¾KEAÅ>²HPÿ@/Å´?bÌ"ÔE‹1 ö½ÿûlÙ^”'ä#h [3$A2¶lXd âhAù°ÀRL1…Œ ÅX ˆ”ˆå T(Â->ª5P ìÀ’¸?Oáà ”ÆYÒØ˜Øž² ÀÜa%ÿO"Á¨xiK0+ÞÇ¡f Kan OÈ‹ÍóÊ.<Å44´´kB7Œ’]ÚªJµRÏŽP¯$LߺŽ$]ݳ÷ ^ æ¿£Þ:´å§@+wÎkÇèò¯ÙÇL|×w̤~ôèãðëݼ˜çúº‘¿‡WµáÛ †;Üåo´I•rØs†ãqÀÆûaC»Jƒ‚5oòì¹ ÂY“]‘A'ú¥ﵚ ên$µ8T+¶+ðMÞrâ:½ VÕ§Ypž}®¹Ñ©Ò¹Æ?£YŸ9|lõ‚ÙÁœ4'âdìí×Diá7šˆÁ eúELÙ@þ‡.ENiêî ‚‘)Øß^7>eý”ù*1ÐnK›l›ÿÉüœcJ¥ÎÃF¥*FYWtëŸcðêžîjKAV@ëÖm…ÅsÖ…§ŠóÛÝ]…;@Êw,霧¶yV0z÷Z…ؘ¸«ÁNß0c½.75}vhʤ¨rÖ¹ˆ9úÜ×[Ó¼¨þi`bb¢ÂÿÈß"4¬°8ÃR®8ßq%SÚ£:3†õ³½Ÿ_]À³ñ¡É»36±œêe—o/dyÆÐÂÈD~Hߥ—Asw´«ýË‚¸fItgîЪ¯’ ŒcÊìý/Óù­>~x½Ð;dUªXng_L‡rGb3~|jšù29?îÁÍcjk 7ÞÑ$zðzÆMß”MZh<ùG€œKüÀ´1ßükF•‘Ú¯_}ÿ—)çï;‚¿5è™ÓH/×Ú”p¦+þ˜|5·mÓл¹g|×Z5ü\–5ûy­ ‚F.™Ç³(G›ƒ*j7f WÆo­ç~¡Š´ù¼å-|"둇öý·øïÖûé;<õ=_Vª•‘{Z·8ª®ôÂŒܺS_µ× ŠÎºæ‚]õ„·µ”¯Ÿ¨ìÜÖ¬gùãÎVBñÚÒ›¼ÞgÃ÷gu»ëú5‰ÆÕã·ÞÖã/Âéu½ÅV²Û¬AK‘†bŸcBÉeD™š”wY‡"ϼtwƒIÞsOàŒ»—®3us²æK cináá!?ügr´b¶‡ÜxbøÅ!\»­!yW#9Îsn$çšËùþêáÕÚ*á®kÿmýéí3ñW³$vƒk~Ú®Ëh|8Ö«7ßÀé,7VSΔ?¶ú"ñ¢É󟰉Ö×C²jy7#¨¬¸žF÷…—êßÝ|¼*ÎmƒMIHõñ†U±&-µ½½“yÌ7~ ‘Ñ:DU·ñÂtóîÔ³—ú^,ø¼Ü—O±Ê%P *šú+€ήI}(ߨW³°.Cù¨§üHã,rÚ6Ŷ…¯[%·éÕpITÁíJ5ÒdiBN¨ÊOxÀîÝõœ{³Fý 9y#™iŸ¡³c2ž5c¿g|Zyú€m»[ÿ[© ï ÛÔÑð¥`”’u}γea„Ù¬‘s&áÖÑfJÖ¶>øŒˆºEOÖõ°Ã‡¡¾ñ8N»`⯒Cý&ÁŽ.äšóf’wR:Ùe¿é;Ì”~øUÿ´±EA endstream endobj 7337 0 obj << /Type /FontDescriptor /FontName /GBKTIV+LASY10 /Flags 4 /FontBBox [-19 -192 944 683] /Ascent 0 /CapHeight 0 /Descent 0 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet (/a59) /FontFile 7336 0 R >> endobj 7338 0 obj << /Length1 1612 /Length2 18797 /Length3 0 /Length 19636 /Filter /FlateDecode >> stream xÚ¬·ctfíÖ&WX±õĶS±m[OlÛIÅF…Û¶m›ÛÖ©wïîþzìÓçOŸïÇcÝ×Ä5ï¹Æ"#RP¦4±3ŠÙÙ:Ó1Ñ3rä,lŒ\œdíle蔀f.€¿B6X22aG ¡³…­ˆ¡3 4ˆÌÌ&...X2€°½‡£…™¹3€RUIІ†ö¿$ÿ˜Œ<þ§æ¯§“…™-€üï‹+ÐÚÎÞhëüâÿÚQ8›¦Ö@€°¼‚¦¤œ8€R\N ´:Z\Œ¬-Œ2Æ@[' ÀÔÎ`ýïÀØÎÖÄâŸÒœèÿb : Nö@c‹¿n@wc ý?*Z€=ÐÑÆÂÉéï;À `æhhëü·Îv [ck“ø+7µûWBöŽv-lþêþ‚)Ø99;;ZØ;þFUûwžÎæ†ÎÿÄv²ø«Ø™þµ4±3vù§¤éþÂüÕ:ZØ:œîÎÿÄ2L,œì­ =þÆþ fïhñ¯4\œ,lÍþ+Z€#ÐÌÐÑÄèäôæ/ö?Ýù¯:ÿ[õ†ööÖÿò¶û—ÕÿÊÁÂÙ hmJËÄü7¦±óߨf¶° ÿ Ф­©€‰ñßrûÿ©s:þ«A”ÿÌ Õß$ Mìl­=&@SX9;ç¿!”ÿw,Óÿ÷‘üß@ñ Áÿ-ôþÿ#÷?9úß.ñÿßûüŸÐb.ÖÖr†6àß ðwÃØdÿìkCÇÿ—¹¡…µÇÿÁá? ÕÿNòÿGÒÙðo3mÍþÂHÏøo¡…“˜…;ÐDÁÂÙØ`jhý·Sÿ’«Úš­-lýW3tLŒŒÿ¡S1·0¶²ý§õlÿVmMþ3ù¿$ý+uUu5MQšÿÜ©ÿ²RøË½³Š‡ýßÄþG)²v&ÿëð†;À‹îï ¤cfá°ÿ ÈÉÄäóˆö/¦ÿ:Ë:;Z¸´ÿ–ÌÈô¯ÂÿÇó_'Ýÿ€µ5¶3ùgV” mMþŽ×ÿü£6vqtüËê¿nüß‚ÿçù_ƒºaW—ìŒ[þÊHs®Áü=4!¢Ý×Ã>b_\¯Rç_e×í÷+l‡«Üà½:„¾aŠû³ÕcñÔþc_Šú`¤Ú¢;x™‹çCBÕ›‡¼IÞÎAsÈ WŒv¦åuµ ³ ¡ÅΨv°;¡¨¤Wô…?ÕÎâ}õDåOâšçFúhÿÝ×8µ.½©¥&ÿôŒ<ñøé‘b`txh°û²w—&;†ì‡+y¤¿C6.¿–j¹W8TZ#<îMÛÕ'¡z——^)i„Ì«‚Yîšm›Ì{dZ?O¢¬£DË~…ÆõÜT$`â×ìï¯u2Q'LžF¼É ¾Û+Ò éŒouC`×”}Na^56UÔ¯½ßÏO+v×¹5Cí“1Ò ‡»T|n±w"óÔY’6¾—d…ÙÆ&<.¨ñ¶÷ÌZUŸÉ˜üÖu¬ÉÀR ?múy‚~ÒÈžoØp#Ò?)3Ôx­%7.ARx¦èÑî{éÚ‡K_êýÈ©¡ Wùëž¡¡Xµ£Yf^å)i¤«°±Õw18K”Ô—+>Œ4Žä;†Ñ|æØOí¯Óþ£t÷-[”_å'ž'¡.İ3óù@ÿKj̲\RkA‚A†vò²»¦' –êîÒ¢èêB‡·á±ÕïS™a<¼±Qz¡í¯ˆ°:õ¶ltûc9ÏóÄ~ŽƒVoÚcV/CßÁ=¿‹˜ÁFót¤cßyŒE×Ã9*FD¹Xá Ë]ÎUåû‘DÎt¢,3: ןåߤ%¶úFp>+H$ú&Çâ­¼Ûš"I¨²©µ ½>"·š$CãA¨Ð=}^‡l aoDO¨›óQ¢f¡9FäSìÎêS?_³OW¯œÊ$¬uï|7DêÈÿ=¨Úeû,±ÏѶvk‚sáël »ù}Þj_Eµê…<<ꎦšk‡K“_åKÝßë.±qrbŸ²k‹x²è’žYˆ– º$ÔVÉä2;dL…~ükÍ žòéámtùå1Qš7æ'~¼%ÖªC¯QOÏËÉÄëËÞ”¦ºMç¸ÍÛ¢ÑÁ?èVÛ9,ßR„ûêÐÂ(uYoó‰òj§wù½ šñÓgX” ±ßè)é{4TTs½”ná,…œŠŠ•­[*üõÝžöŽì^~N$³ŸïžzRéqù©j†ŠßКas~+›Ÿã°Y[ép¦œ—ÛÓ÷œžM2}'±¨‹a°ùE/˜«ðÉy5Ãô‡ôñ,ÌüòÓ¢!%,sUÖ¤dg+Öjôm&ÆøÁlí—£ tëå8<¡]ô“A#Çt'•bòŽó»”Ø[íèÚÏXxL?UšŒ¦_¬YNU½©r£pTÜP"Bh8"CŸ1<”<`@õŒ[\åÙŽ4ks Qƒo!ôrgâ¯úKNÙ„0‹ƒ›4ÍŠZ2S°D”øLªÆášŽ]Ç‘Π]Ù€q 8«‚ SŒŒ “ˆ²ãRIíoTÈ2Ø‹?’·@ö ¸æ{2yðˆ‡ aù$|ÉÛX&¯& 2ºj[QÕaë^léŸãy¬šàTžN¥£r-ç°eÇó‚¹Î˜JExª¡ðdÃúhÏ£³¢C–ˈõ—¤_8,;ž‰Û&¹v’À±Õ•ÞÁ œ©WMV]âl—¸Ç%µª˜EÀç;r±0³‘Ȁ¸#²â;=$rçðJdZGA‚‚ar¯ëÆÏä¿\¯ac±O¿^AD™Ás\(žG\ËžÝÉÛž¼æÙ¿ú$G‹ ä8Q’DÜŒéÒyD¹ÙÖD{-A=8»$"õ@—Ÿt;•ߘ^ÔnŒÀæW¥¡M¤ d<\eú´ÆÕoYxßïV=½—JÖ®9”S„)­´Uv83 ßÞ€P/+¨Î}Û"9ñÁ4˜ŒPE‹áØÑ7?ž Ê¾ \fJïØ.ÈóX|”éC'ŒÏéÊ Ì×VÖ²Ò¼³°Ã#e‰2[EÁÍ#´ª£Ù=OcY­ÆßJI\¶—Aœ¢Iõ{ÀBI³Tò7G¥¬Ýn¢•½haøÞV~ÅbÖÕ±À,¶(Óäyí…!ìœ •ÓüǡҶÔÙ"ÂߌC–Þfqt{q}Gí—WC‚~4ZV |0»o÷‡ˆ‰Mzߦ÷“ÙÜFñM½z˜8´N¹Ç W'm÷.gÿ[¬…ö´Q_`M ÍìÎ}¼%ˆB±åîrÞ¾Ð5‰©Ë=±1AéwmÓ ö毎“ëBІ΀Lndå%ÍTE\ìŠg_‹ÚÜb<’—LìÝœmTÇ—7ui¢ªöë¾ç„VrÐôx§è#Z¾†Rl*¾Èò–IûLoÈÞ¼#2øJ²Ð1û7Ÿ_ö¼ý¢;9™è•S2‡É@HqùÐÉ;!DŽŽ¦b¸ô„}ë³KÔG<³Ôß¡;Jb(óG]f¯u¶'÷dÒlnãRÓ¼•`·ºT¡[%ZتÍQð‹[“D<ª£ƒAÅ›Ì Ùǘ¤¹éí>9n¿qŠŠ}t™„¥`†~øR ðV@0hlPy“À5Ú@0ZU UE†~.û=óŒ‰d'½ß_›¢½+ÿc…ÂÞ+ŽÏ øjÊhLÁ'°?PCŸ8ݳqÖ“°CÇÔyöûP4öƒI'öö¥”ÕÉSIpŸå|c¿`ìÒn¤”õ|¦’Nð:Ç ÒêÓú‘9{«ÀSåA˜èä²ƒŠžBšo¬¥qüš´ŸœXê `Oë°ÝÝï&´ö5Õ)-EWߤ^(“ñäFGz¦»zÞ{¦W” º¸ÚWî\¥+¶W(â|bæ_e ÆáÌJ á!]ÃÚÔɑȜ¸ºU®é±~´\Ÿ9~¿åÛtéŸßŠqO׃šƒ‚ÚÞëítKµuØH¿Bêì¦En/—z(†¹£.yå¿°#y“ÕãÅT¬è¼œ qPŒÈF Ë$Æ-T‹ª|b|Y³«aÌÓûye‰*!k»‡‡)ý*í?Á‰*ë…5¢Ôp#Ëã goáU†Ãå¨T!Þ䵯k…Î6£*0b•œ¶—¤Ý¨ æÐ§=¸˜²F-bËփݸUéE™‚Ö©²= aÒ4‰ÓhRÊ=:~ÏùªÙõ„ǰ®Î žšŽô¹(ÉAZHuo÷©:5²Ô^M¨>k¢©˜{%´7‚סڭ áÊ( ˆÛ¶É"‹"h.¨«_óÓvP¿ŠÔ'©†Ý7An$°EH™"nï [­–ô ‘Âo/©8~WÜÝ­I=\‡³z´pgTjò€‡>H·W}¡í›îcLÞ¦¥8ÝšÀ-”µ 8q*ÆLÉ=?R¶¸ÏÒË–îfYÈ¾Ò (Åʆ¿{Vù•FÞ%ï¾>”Ë«}W!d ­äâDòêxø¼íÑéSîå­°±’ÌžÀÍôy—ŽJ®+Ÿö…úu†Géê@\RÎq\çæh kýÒK) Ö£áÀÙÓ!·RZNÏÉdÚ¹®¬s ¹?¾÷3àÁ˜]­>9u‚´j(ýèᢄC¯´zœþD“©"//“–Mt+>¶7×`Ùí•áÃ4Ž “ë½Ê«Õx$ÉÀíZz7ÿ20rÿÂè+Z‹Eü®ûž¦B'i‡#¾4AÏ,¼»y2å'¬åó†ÍšÎˆ9%Òâ3ÔvŽÅ&ñ]êÝË-„œ0Ëfvÿí⎠M;¤œƒ4+Û¼_ˆÄ–‰Oº 2£â‹Âeë­ËͮƭmçÑc¸Ù=Iþ=Ç*c‚–’é U,fP>Ë«€?Jäç;)\UìBYI?œ¡Œæº­^¯2ÎÕ(ô€U¢`Æom:¹6X³6ᥜYiáf›ƒÑ\BG˸7ÎtV"á—XI¿Å¾Æ_èF«$KÁ ¼c—Ô SFél¢G¢Á¯"ð‚g‚åØ2î…­þ3DõgIÁ6)?ÜÏlÑ2ÇÜP{ÜÀÁZŠSG'fú:í×÷å^æœ ¿8I/YÇ…1_%–|âòîfk[$ ®ß.Yñ”[E[ab“Y6¯ÓC›Èa$´ rWÍ ½®YÕ¡ûLªˆAÚ†ÂXÏ%ƒÌY0ÛÆè>Ãr—Þ@2’G_à C|¯îšÙf‡1÷‡Z׎ܜ: mz©Õ “¼Ä.yåwÈïµ5ß“(•›.‚íÛÏQR°7÷—н™B‡ê)¸@Ô:ødõQú2®³öÆÒ²ˆÁD)CJ6‚HJÊR2rÅÔòE˜'õî(ØÛV6Á·á¢î0Ñ"Þ±^ɼóúÚŽð`dzYÊ6svc°ÈHx*Æ’ùX¾³kɉš– dÊ´ºU–#:œ/à/qÿ¢à¶’úµ£›ÊQS‹ëóºï$iiu°ã‡7§¢r_7!¼Ê. Ïk¦sù°¦Ì[§×ã¹9|̦Ñ£»i8ŠŸ·~Ú£.—=:qº >šº\P:\”Ÿ <ÇÛÃ8ì2Ç£RŸ`,Ή•¿¢º‘Ûƒ'7Pˆ‚ù(׌—`v5ºun´ª§çÍ–“¢D¦ïØü†µ)Oì|ºŒaxÁ"Óá .©9VB˜¡)¥nC=«ÌÜ©DÄx¢œ©”쨥ú…¼2†«õ'ÃG9Q€ ÑŸ®aAÒ»Røtë|ÈùžH¸SFI{™½Ù§/òÝÉÉô,.þrÍÀTÊ 3p\PÁj{.3UF k-¬Á©J#ïæíÀV5"‹¡9Y›3ïm—/Eï†Ô)£EíÑóQH Ç–Ñü|[»uÒ}ŒL¿^Z*Têï n+j½™þ~¾PMÏ"PAi­¢Æd­âñÔøÈ{B8w87c^HÙrTX#6Ô~n¶f­…Ýü sû6)½ïçP¿4Áž1“’ê$!ðÜ V6„gSžÄŸv)è|ðZßvW"”MÁ#‹£(°ó?IŒß`ÛâP¦9·°¤jN{óäÃ2ÿý¾KŸŒOð]r—h;üV³í>9& Cùl•^ÖÂ4<9Ù­V3‘ Ô ú‘¬ÎJ!¤GšYϯ©]ô²ëÇèà ²\½v¢+Û2Ž#Wx¸«,Ò¸À!Ü{ä²X]¯é[þzÎ5YžŠz&m3½ÐR7%Å´<œ[‰\R„Kó([×RÅŸ?1RsOM“'*·îЦ·ì ²=/fדWIvܤ§¼‡]!_Ú”Èß<(©j[Ns• ¿ÜoârÔø—p*D”.q¨ø,T0†ÌœtWBgÿþy6¡nf´¤ÝvºÜÞ0%^KNþ£®šþ묄¿Ð$Ž›“S&k\$jn‰ŒÞ usÒ½Óƒ$’û¼ÈªäÒ¨{úg™“P罇Dw»~EÅ@%çpq…@H…“%¤M“Û‡;RwU7uìï†miB>\—Ž6Gát!ògÚImƒÛ*vbðU-HiÅe–ÏÞÍ®|,ñ²Ç?ûöùð*"²K±ÅçæMR²Êùò3ëf­Ýs‰ÔSS>>ZK>> ý.Õ2VÚ)YšVrÉkjKÉܺFpï2é*iõÆÖõfPãEDÆQ¶‚[zŽ&p.²♄þaîîKG:H²t¶kg64mÿñޝ|"‰`  ‘úwÞ(äû@|^ ˆ5æ]¬¡ÁÆš0Êwf¡SXÏfá‡s&Œ€({•Bì”3Dît„Ÿìbö— ž ¹ûÎÑT¾ ²‹ë~eOyΚ7èθ÷¯Ó¹õÉ{'ÎJÕ/PÕ™Jƒq?%nvyFt1´G{ÏŠ)E#íc#²ÃãŠn5:s~¥WÂh1Ûà[M4ÂË—£òt%9Ê÷Åbʾðwß㬷.¼ö È² ãC¹ðÊþL¸Ñ:×Åëi.=6|ŠËµ­ Ä¥öòZºÛ ÄÁ÷Rj~u™šØ¦ÑÏE0Ž$Ò Ì…èù#/g^´E^~Ò.RÝ7(Þ³J›C?½úö™.ù‘r×Ù'€4£³òôé(g¬N*“4¾ÜîaVûã9–5×Ì\v2é«eNLsÕO)ü;öH“ÄÔyëùÇÐAˆKX@¯/ó-4k¥©Ó;NÓ3VYSœ$â^Ï0œóªB®¦%”žÀ?Lylžþsž†hð´ë„"cWKMT¯¦hý†›G*¤ìùV¸w{`!©™¢æµþ‚n¹ Éô| 0„ŒAËZy«H0[bk\fIë”1Ôô†ñó·ô,ú`.w|é·è2›£h™6ž•~[ë$#שdMpzþ£ÉÜlîu<$¹)wÊ,ùvå´¹É{©ïLÁ¬'·Á²˜í˜áøëbŠt´ËØ‚µ‘Þ„¸»6‡] ¹@½jcןÀðîäbX_UQ?Qœ·“Ñ»ª‘Yç`>î´ ‹ÐpÐì”q± vÒaâûp5µŠ!ßI3lãò«ÏÒ"ÑÖ]r*¿:áÍUö§>®B€«"5õ/¢ν°NEô/yYZÐeÁg¢ŸÂþAáa½^«.ïœd:ßÊ'ÎøWI ãd© tlaÑ7„°0º•­£j Û‡6Z-%]Ãy-sÖ8o ±é¡ Ì‹'oÐXˆriöUÏA™éF´‡Ä Ð…=ž¨ki>ÎpݽË]Ù·C6ÜöS #„]ø ê qÏØ§RËÀ±¬˜þá8®Ä*Ä ‚(µ5áv+ô¡]P­ô:e›¶mÄиyÕ‹I&çéÍœT9j–ñ7j^Uß¹ÇÛàqž4xF‡æ«!÷Â9¬sl”ñ²p„¥ö‘@¹Ú£ CŠ"_s¡Ø³C…‘Ñs‘Æ8µ)Ñý‚¼f‹€  Áð€GÌ ±t5[î‹)šïÍmBϯ¡Y‚$Æs/Õõb6+¢ro½ÕßBžØk÷®ûá‰Çj#Jó:¹íõtšSæ1³Á¯Ù¹F´ŒÖËaK´ÚRI5 7¿ö˜aÚ5Ū žjLg$µ›ƒ°ò£òøFK 4ÔRBõætafóÂ×^Ê)Ø:ï\áD¢ôFö_ .âÄ‚ Û¡ÙÊ–íµZEyîrÝÓGO»Ñ6:A”=¹Þmb·­¶Ý¨+€²Ìt{n™BÆ Y¨-x\Û®9å■̱  l¿FPÎ$8:ºùÑ~uGyÿ:¬; | Þ®vid‹p*ò5þfïWûƒÄàkCMó"Æþ¼­yåwPÈÎÌÉ ºR‘«–¼h¸+’Ìþwñµ‘Ö·”æ™Häë_-ˆ9jæUñò7öën.Åü!Þëéºð(tâÀ±’ÕyU4.ø –ô)wVz,[Éõ‚ÉôZ`C/בUØÈ· iÝæF(† G {IOР!áÁbØ:]ÝH3§‚¼ù ž™eã^ú¾” îV  ÝDá2úÑÚpJ¢Ô:asŸm9‰‡%ÜL·öX •˜'¹z€ƒh¨úPj€úÅŠ®—Š·g¶ß¶§™èÏmûß°Æ3!ô93´¨Çà?¶Ù)¸¶²·¨LˆŒV(m‰”Ę̂¢~? oáCgqþX呂²º#vŠš›ÆŽÜúT³¾À‚^{Õ‰8qDvsÕ”ËT°d&Y˜ZH^"ÎÌ8ǰwÔ÷—`È«j³DÕ%r"“ݲڻžJ÷ 8§O¿¯\Q­ ‚™—s‡ÝFôŽ£š›BÐ÷÷½¾TFÁ…l¾3aUs#“¬èk³ÔäÄüpSD»9·(Ð_E†OÉÞ̶‹”~Kæ¾ðÈ]»÷väüI «ì2°ò ?0U®y[»ªm.†õ'‚Òª§éö°ºÀdQxoŠ â¸ìüÁHC¾çøou¬§¦ü93 Ùç¶²NNtYŒ^£³ýâüç„PÐb—Á`KB—ÐXg‘0óÁ¤Ïº”¾ùÓiñ­*Ùÿí0U̧åµ'Á@/é£1ÔÁÚ†ãXvqfÓ]ƒ Û¿"6£ÎS„UãdÛq]¨w§ÇÒî¡”]œ Üt©ïõ¢ãϰ!~úŠ[Wè³N‡@vt’ÝQU]p+uïÞ€›näêÿA©È*¶t\ž éKDðð ”2ÛRDgX§ö8oÏû K @»,m[b"Á~^×ÊË2¨#åZP7pÁ†xØÒÒÉC®Èbl͚ѻ̸N½îりR”D5ˆC;ìP0æý>í&C{éíRØÖ'gÀ°?#P‰»Ð)7ÜšÁQ¾”4n&Á‹§»Øë§rêP˜9ÚUN>¤Gœõâ¶zËÓâü—ÖÄœxŸdÌû*®Š7¯m4Ë0S¡P= ¯Oüù¾Z»òÜÆÄí¥aBÈ:ÑK¦V‰‹ÙÏo@Pl9¬wØPuCû %WÎ+¦¤°“Ɉd>R¹è' ‚·Ÿ0¸YT}ýD¶én&ô{c#þ™a{’Ö0·,UWá¨^³+Èišc¹¾*ˆ¾WQÿqädÛ/T¡þ;n¶:…¶´'p{9µçàÝðîÀ¥pña} ˜1‰s¡¡Â8›Ò—å-æBÓ¢ù´Tõ¯F•öÙlϨNr•»Œèðb¹,A¢çRBqŸ‰‚®Õîy×~È)t;xxw„ÝÔ2â™Èem¢Åž/ÀÔ›ÚÁ%ꢑP»úÁ%Ò³ž~åÃ—È .œ(ý!Çÿ_–œìPLî÷ËÙQâ™×OÐù×o_錀'Óhh~Í¡Gd¥ïµ^™rlwZ…‰yàL~HDú¥€BýÛt³ãÛÐk8]3ßÚ‚Ë=m-÷ø* ³Ò™”ךÇÓ¶æS—è’ß}Ú†«¯Ð0¶Á’ò;¬ý‹×zf_auÊôo¼³ýÒ'ST©(§=ûã—vŒ'£[9胟O“"ßK_ð¾%ûûíøQ\n]¸{»³-ÀænÂÎÕÏ YLx‰ Ö?ú£úèTÕ§FñàDŒÎ ÁPˆE5æð˜é£‰ñgoʰ¤¯ ¶I["–)bDŒ;¼’f6pyÕ£BM1o3d§è˜ûÌmÖ?Z8½`¼A«®šÎ Ÿ¨´÷¾‘0$8á!õ³@9Žj :$Ro;¦|Ýtëî;ß P£«V3`“û¾©íàÖ“Eúä«dk'2½Â²uj²å §)±ê¿SûµH°›’paªÇpÇÜ®ÒÙíÂd-Ã5ÈÉİ$y<`”&;r#}­ö ±å*.û}'xÏx¤úÒŽž¤Y¶µç¡Ð ÝAµÉC¦|½Æ—r{ˆ-o"•°lc3R’€òZ¹Zí7-xNfâoJ³¯˜öóoý˜¹Í!´ßì51v 8xð†› M-ÐèÓƒò1~Üö‚ŒÒ›@^ʪÀÌqk?ÎnÑzÎ Wš¨ø˜³U¤;¹ƒó„hRó¦æð``ï,oNƒ{ßèø±è©ŽSòr z&nU™ÊM‘‡]öÞóJªcÆ”w|`8ôëÍ+‰¥À¿ÙŒ <|Hâr›‹öÔ]Î>Ž“Ôº _ÄÉRNªõLäæÑá7Ko^¤‰}^ðzÄà¢f¡[’¤Ô m[Âö‚ƒ Í)-Ø©¨bl¿¤UXnõô`Oô· }Œ !Å~çKôtºGÛB‹¦6*&8y/w@°é‰X¨a‡ ?Ã/[ Ú~NÐKxéOU┽Hà8:²„=4âÑežÆIX·¾x<>\:DKI^ÄÃàlt~÷â^5fÊÜúéjZ,4­àTö”DY£ÿëwï«Ví2é*-K/³d~IKɶDÍTþ5ÊoUM]L‰]úò—cÔ±”W¥#;×ï?Gî¸èÔÑ[[‹Ëx +‚Åh™dæe!„x{䨾cµw“ ]už…Ïá…ÌhNhQ6Lx%'\I$ö?Ë|#Ã|pŒÆÐv;Ý‚hšÖŸ¬8sÄ!… ¡‚4³ðœî¥)vÑF°À°C;©“ƒ•бq˜¬ƒzbTPo5? f[3¯Nˆ<.cl…FÓ3®ýG—¹“ð;ç5n‹Õ°SPâó~3шšiÏé»± eÛ‹—È|J-œö/²±˜¿îS(÷L 2Ï+eKYªAÃÁ·ô¤:ÞÝÁ1|Õâ ÍØŠ<Øï»r%¸¼¦k£ÖÞÀ±è—‘˲v†GàHÇ•õÁ/1ÚÇecé}Wè½eXd.¿Ϋ‡{VQ3ø—ñšªä!î¥,µÁ%vLðñûu.¬žÌ¨Ÿ§ŒPåJŽ–ž&q  g+¸$ê?9*ˆœë—(´•ðO\W¸’MëºÐ£ÞùŒŒ7?±4X8rйôK™·Á)‡7WU¬ÜQÚ V¨Ùž‘T_9|^ÍýÈEÃ4Äcäöš ë–‘*;fpì½ÎòèAÕ›èøwŠgn›~á‘À°›8Gm3**+Aõ’yæuo–ì)öºPc@`,ý°ö9ϾîÁJø¹å’âz ©j}1äͤù`©“J£KêG´ÒT®ì“€„%ˆaã°°¿Á6ÆIEWÁ—Ÿ/Ÿ¸±óåz…Â… «¾û£AL‘\c€›xuµ¨ÍŠ5žÕ¹õàǪ¥Þv|BŠÖدcŒýù¥ãØÌžfߊ‚Z1ã½o|…³‹Îh™úJBóãd<ì%2#ËV4ù†U×+/÷²Æ ¼Æº£Øz…áãÚ*å Õéü|£š =¿ »mm“"û:Áf~Áo²«)T•éá+­Á y«ØÃDOHc{Tpè¢@aéLÔð€öAÅ=OS‹‚ÂÚýÂKœºÉ¼½éëUŠ)ò”õY ¼tNºÛ\õqx\8<6NRÔÒAÀD$$þqB ‰{kÒ·k3>긑ý´ƒS|¶ï`ʧ¡R^ñòüž˜¥åàå‚]z¤õ•zb¥´ë‡%и¾σmñ 2ƒÑ ž«ÿàÐyÒ“tˆ$v¿­“9 ÕÄÑkˆ|Ï.·ý•>Ü›8!sÇoÉÅkIe'4Ä¡Ì3^ùî0øükºø@ü—ùÙ\fö ××B:%J[¾j—Ð/¡²!hÌ¥`·H‡·t§£ ùño‘µÅZ d§0•!!åü•B‰D%/¶ô„`•ö>º.´XkºžÏ’ý¼ÕÒ†©øÄ× N—ü@ÞšFÌänž3×±ÓÇ2çÓ Ê§)¿.ÎÏëJU¿º²»¥×ÔŽ&MåÊqù7…QRÊLp~&€XBüž¯Wp.Ž‚[Ùf÷Ù”•EEÅ$q  ÁÜímž'Ž…kð´ËÐo?³û§?*Lõ¨ÉVz‚ŠvUìǸ3êû{_q¼{î¸û%GÙîSLúæåXàG_…ÂÞKq±07 Ø4o¯áŽiЊ€)@IªW`T©8Ü­¢ë~\™Ê²á¦ãñÚ˜øØ2 +D¼2hû+]UE¬S>i#ˆ$áˆûç %ËšÙ.“³_¡!–3ÒäÛkêGýô#—Ïœ1‡„†ÞÓ¯Ñx⯰AžÚŽm~'ñÄ|MÄÛËýŤC²!‰`­QåÕ€uÍSb©)õÞ¬]¿*Çê½# £kü¥µR¸ 2Ýèº?jçì«ìF˜ÙRQáÿNáñGJ ;< lÞša ¯o|„ ‚f&WÞ³Nì{ tï¥,ït*ýÉ4ŠªOªžKšÕÁnç·÷Q­}+… :p±®¹cÍ,à“š›À¼!¡ÚdʺŸùá5'¨ #DZD.w¨B•@êt¡z”.§+|ÌŠ,ZEQØÈ†$.¡ÃÈ.Œö!TéܲÞ%vÞ¿øq~^µ%eLÇ9‚‡¾n±2õ “HR®<Ë+¹ûA}¥Âæ>*¯Ñ/k9v¸c2Æ&ÁdøÖÎÍØõµÈ©Íè€ÐFÛRýd„*m‡eZm,ŸK5¿_7ÏEn EÕ\^ÔòKÃV‡mHJZìSÊáL¬yXž;«fmˆe!˜%àE[¿zeŤÉÑy~Õ$¬H>Æ‚Ë;N›Ãš'&«ËZÅþÈõ+›¯Ò.k˪ˆõ·¾gHûPc’5=õa¹‡UœþNùÿje¶€æ¢Ê, <åÍBy6b¶O¥G1™ÓÏÈ‹Q/ƒAGeqú0ܳ÷[ù¶/ö)'¤/¡®W Ñ­ÀžSè=›Š´?©Û¸}EfªÔØ'J™ÑŽpDy¹¢ðÆÜpæÎ2í¬›®È>Ç“–(ªnŽ\— ^r–EròAµx»vÌ3ô›XŠ~°édòØ8·§”G‚†];ÍM8Òo Á1B­£"dƒɦQÞQßË=¾øQ™$Ñ„¡S2ØrÙÅ9dš¢ÞÛñÔ«º·ùºò´ ßýYOá<]¦–´7iì´Û¦ºlüº<ÌSgÐÜ®˜³Á1[0н?Xs;6ÙV†JF!¤[üžMHEš!á’“wÇ_˜$!ñZ åŠê(w”u!–MRW7GÑ] ÍHÔÕÆ¹”§f~ñµßà]8)‰kKÆ6”¤:ÞN©2ÎÕòa.üFޏ#¹29],ÿ­îcùJÜÎu/<ˆµ3mîj-Ô?zHÄ3ä¾l»f©üëÊëÖT‡x?þ½g¶W»ÁK‡Š}B'&!A¼ úí¢§ê.DlXXPœjFhŒrŠ˜ðù(EkŒ¿aäòWwêÎnÀAÌg.ž–V?j\u_r'T­Š§ƒÁº¨°[ÂÖE—8+T{ÜÁk‘EÓCDšÇ®%iSû=’ýÆ£Øà‰éÆ´š9Î Q91|_aÃdVÜQg*“ˆ¶{íD?¥Žû4Ô×PŽ'‡i—éä'f€½­¸JÛX”¶xCŽ!Åmùý™Ÿ¥féäk$ü„F%ù†¥¶k¡ÊŠˆÉÞÈË( $°Ö¬Üä*³½UÂm;ÞT‰‚¥Á5•b¢=hotÅø3}Ÿ³¨ÑÖ,•++rñh†,BûÎÑ¥ c]û¿ö;TI¦1Å ¯ŠMñj– Êü‰Á_îS‘ÊÈ~ð¨äpàI®xâ ÷§¹"þ³Ý „ŸsÙ¼:6P ›Åï‘”/ƒ3@úýø¶x ºªf º(£Tò´ÄÚD•éãÜñ$8Ò °«°òÚ‰EÄÃ¥Q[\êmbf¬Žl‚±–³cb,×R%i(Ôææ*OLN«.nsÏŸùSú tÍŠ\›Ÿî×Ñt§‡ÞC8ñ¨VËJ¸ÇŸ˜:‡l5ëmùë}ëßbOa’½Gö?Î[3²FÔ‹J$ØÌŠLÉQãÇv¶2úCT W Èûh‘ YÕ¦V=l1iù ¼ÂhôJM­–ÌX¼^ÔõO–”qÂÏ3ã/c;˜Ï0°¿DžÚ§ì¤™@e\+Xà²dµªÄòl+³"†=ö[i4”èÂæÕe)Hæ : i4FE^=bÔuÁüÈ+¸³sšé’æ˜rçÓ›:S+Og¿…9|+Þ«z’·3íU¢uÜ9oÏ/3_»ašƒøÆvW(~Z·ö6ðáÝWÇüŠ} òªç•-Côuw-d<¹Gs艄K@7ÎfZùÅÀe 1×ìÖË{UžaÅ(¹ÛP‡/Q¹|Â1iÛY¬Çw!GEp|²›=¿Ü¼‹e²€…:ß^iíåÑ4üF4Užârç nÎoɼô%ûE$k×Ä%YYÈj¾œáÑ”ã î¦*iÝ—îžoÖb.;ÚZ³Ã´Ñ6Ñ&qþFD wu§EðS=Å©¹3d'ž§ò¥cqSÙBdF]aϺ5Š~)>nªI ²ºÐm Ö<éaÎ¬Ì úDUbdû\³¾‡›™ª\ Ø ÒÅÝ%¾v:TÈ»îc—æÍ¬ †ˆ/«%Ècô"ÓÚ'B;Òˆá7$a æbJ¹˜n‡Ãz<ß$Õz–Û÷/ÀìA8 H™úgß­ ƒä€5Àɳ)³ý¾¿þóGTi{Ø®IñEé$¥¨² ò'OŽ(Ø·c<)(ñ>–ëüù]E”q*y/Vµ½¬ÔÑê8îWO*ê?¨â¦5ôE Ñ®øº²ðÏ•ßÄ%d„ŸƒM &aÛ±·bò˜:ë¿ÿØP?ý8°HEâOè\¡aÐ?çƒ!· Õ‘ „ : ]¬¹_TŸ»Êú]ºû=¶ÃK2¦åU؈!]J8íÓ¿ÑÀó:0õDp–çðFþ²„|å Ò‹Ýr¾æfP$Þw£v.šw·6Št¥éŽ É ¸€âÏKb†Q…у÷Š~ñSͰâ\^Ž!0Þ %‘… dÅ›5û“·ØnÖ«.Ù±Õacp`V‰ýÞþÔ¨¦Ë:qïÑFßY6Ž+ÈÛÔÌŽå…Çd-Ë…äBì“°Ð#ðŸ—q#§—çA×u”–‰Ëyp¢”Õ™Leø 6gufŒË๴‹™*¹–×l­¿˜€rÉ`½Z^Ó¶.*k "èAàIPÇÇ«K>9N¡¤üúfä÷Â$(¸=(ÑÖhvË5š_Rˆ- ø4uc¡ÌŠ“ôfî.ºQÑ›oŽ0 `U½È/™#é‰ð ¦5°ë™zB8QÕ°íS ž˜’š;ZUcîK}ÃݤR])¤Å‚ÁRÔQ!ѬÌóóÖ—¢JVäîå/sò‡{¯QV4tµe£øåè`Üï “ÂÐw ¤s¹â äºèP´Š‡}¸ Î6×r:œæÏ]„©ßEwVïÈ q¾âÝæ&p [ß'm6¢E"곚Š"Žà&Ilðrc-¸häDè¢Ï²Ä'®±+ÚŸÌÄMí'åÚp::QøÖ¬ò£P³Zc˜A,žÝÒä9Z~~<Ó²­Æb&.¯žùíÁü¶—þh²žB_GêáeU‚6‡zKé$ô?ƼY JͧùF{šÝ fÛÒ »¯­PµC£—û¼(lX }úü“vcƒ:S`Œ.ú°}ÖãX µle@–˜´4ô‹JÆ“¯Û¿Ô+z s tz ¾ jO³ùF¥–¸n3‘“ŸˆçÐIø§¶Š´àÇdý]GËۛ܉–ðÈ>R}ÄJ Ì% PŽÇ%¼¯r5„°eu<à1dq’9à5#°óû[à«?n×0,Gƒ`!ªAlÒwPúž¦çyúk_¼¶ãÃ&Ï„ÁÆŒiQUå(‰;š»yy8ª$Ê”®k¸ÕDz[8ö’åæyAÿ8 ÕÄ×Ma‹ú¦¡Ã篤lîÙPuÔªèÝœz³¦t\–`Ì%QZO¹R¤2ìCÈ,fGmAø–[!OÎÓ,£G¥´c‘¸¬½‘ˆüjmÍ6…úšy“hžÓâœj%$u·b’…¸Æm¡úüúQ¡”×ÇD߯{]ÔäFGê­ý‹‘¿$fZßëçð±_àBð?yÞQAN›Á&kbÈC÷ ˆ q;¡Ò?5E|vÝÂüÄê·>Áã²w¤P57 ~9@¼Üª©µ6k— ò{³R:îõ<_Œå«å¥DÂ8*nË]6é/Ä$k·íû“²Ïž³®­âD¯m·äe ¹ˆ ®A&$èC;å¯(ÂFiô;Pô³oDJžK´Þ±¢õP¢Ì›ý‰Li„š7Tíí¹+¥ï–/ÞÆ†0:¸¡Û*µRcì2ïgwF¼DWƒé³ûJâ[ óÿ4Yñn¶D3¬óÓ0á¾Ñò˜B¬Œ«ç@g {)V[Ž!˜Í²a?´¹¨ ¢óÝ’V Ò60Í[E âç#îÍZDo<ð>¾èöî¯ÉøZö"µBÿôb*ÖŠßî•]Í ¼î/kl"ÝÀðÀ,Y Ò‚S¡qƒDú‚nËæ•…µÁ0§±Gs{§°c¨9¢hR¬PËDPVtpaþ¹H?^ºç4¢59«Gb¡7£Çv*šÀŽWý­!e¶5…9#û­Ö¿ûkÜòøõËHüÜÞB^TXE€;Ñi“0·qqÍ€ÈäïÖ @Cx@‘ÛEyçÌ „€–TCÍgØAÙOß–ÆzBÁ¿“Õ5@J 0.“F1ƒ-Ë8¢Å¬pÍèż°jLmñÕÖK¾°šGêØN‰­f¤È–BºâÝdø‘ú0°˜>€§ÄW|²Öãz ÀS¼.Ë6¢ñ®9>3ò ÑU#LÅ4˜¾ëš×ù¶9Œ5¬œ2Òû´îE\g,"ˆæñÉ?ª¼ú$KŹ«!?'ÐÖµä)à= Ë'ÆÛÊ4oªx=¸ RjàÎ&/¤7w3“ÖºÍ Ï½¯v̘Jìñ’VþǧNò3¦ÁãÒ®‚}ϵbªÇÐÅÄ:iÕ(G-ÐÁÿKÚ’IO»>&úûum]:CÁZC—Ηtš÷e¢¡ßgj×…kþØzíûߥò]\÷“$ÂSR§Ùˆˆy~_O-ªØÈbpœÊ{þ´M©I)7kB&5|Q?Jff\÷ ûn3û®ýÀ9ã{½IàvÈI{±"©Ó¹®2‰ùÆ´ÓÎùÓÌ98™ÕŸj1K+¯ˆÔýœ ”|kd¤M½Ÿä§­^aMÆ··Ö5®ÎXW ÂÄdµb:` ‡üØ®|± Ô•;“àPålh—ŠÈ˜f¦aOT@'”ù× f’…Üæv…‚æ-±¢V?iwÜs<ñu¡~òÑï˜úÍ8|•…†Ý „½z(†ßËu¥vº)Ü“G†ûN2Ï0=%Øœ%TiÏy‚Ÿ!«ÇÅeç)“‡AÁ£¬SS\V]üymHûñVêh£ê±û'Ãf’²ÀdW{ e-E®YÒg¥ÙÅ¿?ä@D6C­5 8›Ç2(ÏÕ3éuõFôtw9æßQrãFU?槬§À+B½ÍÆ(Ì’ðj&3ä•—ÍÌèKŽãÌýMGAñ?”ÔóuùÏ(³°¯¸ð´#åšm s@ÞE„“n³F£ú(zŠ}ív»`‹XC+æ@>R8×+ùˆ.S¯/­ªþÅŠcÄuל‚xw‡=çyÁR\/Þª65-ÙYŽ™?e<ÀkÜ= ä2é¹(ñh'e>|¸I+<šñ#Lj{j»øõ&‘¸Æßíµm>Ë彿¨ï‚¨¯·D¦NØÈwÜÄ®Õ3m'E WMO`%JK¢îq$å÷ê*já Æ=ø¤ÜÀó*àžŠ45<|èü§¦?£‡Rˆƒõ‰!ñürØÿØÁ§VçºÎúí\¤–:T3?¾¨&j# !DÓöGæ±Ä¥Ü3Ù‡Ze'Ç’¨¹L¶DüÏ€¡Å6wf“a‹pOõ>+ð@?ÒV£2rß Fô_W^»ø=ÜÑîT¿ö¾™ë~únjAHÒÞ'Æ °¬îÙb‘Jeæ¼é¼T‰Áh$‚'¸¯áqì"^½·‹›®Á›‘g]˜ÒùO—?àíŸþÄ ž‹G‡ÿ2C‚+\^]Q—øˆôÚêÆ‡ðl3î¯Ú¼Ê/Wík¯OÔïÈâK`ßïñB0²ü.7»¡Ü½ÖHþn5ü®žù‰r|E$ê÷L ¼Œ#¢x¥Ïg7º‚ô˰Ý^ˆÐó ÞI¥÷l›mÙ<äaz¹|ÑЦýÍVʽfÌC­L³FȾ¦@ú¹w9°8–ñ;çw¯—6vh OŒÓ…[Jœ³Y?„ÌŠê‡rK·¤Öò¤âÚÌÈDfrV<¬þ“^õðØ@/•/¢°¿Ç98-`ùzjK¹`ŽÚŠ…&ÄW£/3ƒ–àqQ¾ŸÝ­ ùé%ƒ$€k:±J¡F|iðÿËØ5†Èúˆy&›í™€„´D×[‘oÙúп¥Ã¬Pp&õ[?dÊw”TÄQðÊc¦Ü¿{5k£ðí[ÕLÖ(ÔÏt3„E²‡(›*Ò•×ñ²"Þú—ƒBåÊMÊ&â^xºXÆz‡Gb?:«c'ó™ ¦9œÄÐK¼Ò8<Ž1^mÕ“<Õh´>úþN3¿ìIÉÓð¢ˆKÈþW[È„´ÍÛßtë…°S}Ó@Ù³§/.ßd‘©Ù­4GdÁ.÷)\:ÞÂ’hjÿkk÷ENMMG“êq+Ø*ý 5ÑùPÙÍÞ¢‹Ó8¹};ÔÖòz¶ÈÄÂ=¨j€³±hwj,m£}8EaDMߘ¸×² pÈÛCès5W¨&»“Í1Ðâ¦?Ee8¯#µŒ©ŠŠ2‰’àXK=Šph&óÆhqˆ•»»ð`jX?ÈÕ+pÓs0Ïš¦»EÅ Iç˜R/|Zú::ŒÞ–¤íâúB±g?Ì#ægÿ•ø„ÞÀ¾êHÉ%úÝ}òz†05ø‘ê¤-4I¦o eP"õ¡EK^wt1³¢Gæ‰ÁˆÀ.4³q5’Ò?Än,òNûlÔö[ôT|,z©j\LÿøM%“·c5EWð{O&ñÏY¹ß¿/£ßàwoƒuÖrëXÁšXfשÅcFIìÈÄ9U>,Óî™¶¸¹×¤i þÉd'^²Âý}k0˜ÂáþH`ó4}Œp*…«JÓ<ÝÑø»¬ ¢D_m­ŸÑîžç;ëp8»î{3ê7V²þÓê„°Û ×h\ñ7f€£—]úÍú¤Áß§f]ir}”IvÛšb2k"ž^ŠÛív5®;L–”L'˜ÛaÛ¾à„tAˆœŽéýœÆœÞ{‚¢Û¦´¼?Ìöô©\?³ö!g‘¹L9œ«m+Dâ^ÃŒ9lÌÃEßæaFCó Àã0í‚=1wLÔÂÒ›øÛ3>€^>L¨Ä’ÈÄ›‰…!„™  ˆ¯þ¤õñwäFªþetÊT(L(¨¶‹ï¿¸¥V>4ìWF|ú£˜ù/×ôè»Ô™®9MD×H2 ‡vÔ93vÍÇÝp‚9°5Üí¼:%Ó›øwÓä»fÛLòÐB†ÓW]¹àD ¥ùáw þÄ'#P]¬Ç’’¾IžLÆÔ*¬òúk>æ'ÀeEùS¦ÓÓ·´ÉqE$ëÄ—ÓÑ-$„ÙŠ ïI¨Öã+ø¢æãgaÿî((·q©¯Û̸–ühïæ[%–Rë{ûM@Z]³`®u(õ`¬IŒ˜‰ÎÊ$Ú•¦V¿kØa¦o8vÄ Àô_Ã-nž Å–ë(Cü_•+¾«þ VŸÄÖ< «Ü@v+ȹ“¹)0†Iñ$p›€0Ù÷0€jHur\VºÞŒ²waœœ)ÇYçšš“3d&Ò¸L åc3¯}Ûö‡f£Wóµàˆeù.ãnüÒž©=ΦdÅcPP??ù  q\q%¾T%ÅÃ0«˜‹0DLö¹õÇEjp£›;snÍË}ÏdÈÄàæ˜Îš‹/ óð›nƒŸ p±.ÖJ“-GÂÓ”r´ëƒ/npm­ h™Žû@Ö‚ÓœŠ ì@Ø‚-„zî²ŸŽ˜¸n.Ó“jhÝZIä" /ö?ÄvÖÅ»æî/çøÿ]«úàÍþ|ˆ—h™éá1K;‚pƒÊ¦Ñ2ý¯X‹;œY;,yÔ}ÚÄ·"½ª=ŸˆöùfV%ŸÄ-l#åFQ,Lý]1{äN$ %êU¿¶ëýO8Ãôû ÊïéÍ5þ%fqb!7u{³m«ÿÁÍÆkX)’Áè'øŽÿÁï¯2í WV™Ä©†ØYêÖúÕO¦?꫊€šl[j]χLÉíØ ÑÍ×Ô ™ËHiCN›ñ?‡–Dûg€TéK­o¶§—Ou#å>6̶[ _Fñ±ynCÆL†C ¡ :ѳ@éÉCž{¾)ÊiìM².f ÊŸSÒHþ>¡[Yö®XÌÍæ¾!tSAÇŠ€*ÙÆý£»SÚc{ÎVáùJÞ’,¢ËûµnÝCFÀ~›+Р߀Áœƶ–Û1³ªZjoܪ“£ËVR'8¥Ç;9–Ý´»E4 !Mû‡?ámtô¼¾¡¢E¿Ùªc¦Ý~®f—9ð><åt° qæá¯²Â,FÊ à“¥½PV‚bdçÞ^ºÊeæLHÄ>^õ”R#…圽¾*üÍ|êá©&)© m šwžéÞÖ=ïÊ5iƈÄ`ïfï7‘c˜ûpÈYPÙ8Ó”Hëo]*J­3Ö…²:S‰¬YZÈΈûŽÏ©ÊÝ´ÿ† #øíø:ß·gþÕ±Á-µé¹1‘¤ñr'^DöFȃ·& >içéAÁÅž2ÀÖä?ÒÓ8X^1ÄÓ؆Èb³RHOž3¸ŸÅª´Gß`Ñ}ÈyÁŽÌ?µn…d×`釮Zô÷œS÷ïg¸=5]±¿<ˆžlƒwÁΞØtî+kv>è(þ•[“Bí™ÔX•iú}ЦeGà·F×j›é¢…Ççü?˜w'‚w¿…×tm†™±Ùƒ , :ôÍÑ¿?†Ä3à•O¯8 ¤©ð€æ¬TíÂË.†,x7Ow¼{ÉzQ( ü‘î²Úµã3Wܨ[ƒ´|pcíÆ ¦P»‘° QM CjE!Ò‘³Eôލý‡f#ÀêýÁâY ¼.Kr¢Ø•¥Ûi½È‹¢&ˆ(V׊]ºô€f^†"žæ•é¨ xþ‰ÏóÍžÙæé‰ÉMÑþ¦‡xXÊNÖÅ™uÛ'!›qà+fvÖbrD¡¿“0A)¹'pÒòØî 5( Ncs[p‹ßÎüõöÓ~2?Ý2Vp[ëdÄÏÁÂih  Ž¿VeÄŸ ÕÆÃ%:¤ƒá Q—†aGIß­þÀ†®,<7vÛz¯à'Çì»r{2^²TÏö_ܯ[aH³³Q%¦1*¹?(¢Ð6í_ ËØE4ÙÄ š±ÞA7ϼ$m¤Ø…ð¯W¢Üœê`¯„E™éу€ãÜÉå¼îâo¨Y~v“F FÛñyaŽ{˜ ²ŸA~<ú½Ÿc…rnw`fÑÏã…Ømóªû‘úÁ ê=|MN?/¨Éƒ³YÄ…^6ýî®Z³Àm©r¿ô¼….0Æl*+Tqí2N>Øá°BÁApwAç ‰~=xGe,›Vý8Ív}ì2Ò š[Gyß+&?Û¿ø]ªU-¢DÜ8@!rÑ Ü•ç³˜¬Øä(9ìܘ!ŸÅÀ“¨?Ût>óE6«âOXµÐñs&ÞÙØ’AEÄõ€SÁÀ i'YÜÄ#þÒ›žì¸V˿˜¡|AG„ZžØD endstream endobj 7339 0 obj << /Type /FontDescriptor /FontName /UWVYEP+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/at/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 7338 0 R >> endobj 7340 0 obj << /Length1 1626 /Length2 17582 /Length3 0 /Length 18433 /Filter /FlateDecode >> stream xÚ¬·eTœíÒ&ŠCpwiÜànÁ‚»[ã4Ö¸»·Á îîîîÜ%Hp?y÷ž™oÖ>sþÌù~ôZÏ]zU]UµVS“+«1‹™;˜¥@`fv6~€¢µ½©«‹ªƒ½¢ŸóW ¹5à¯ü3"5µ„3Ðlí’4ùZ@s€$Ð ÀÁ`çããC¤H88z:[[ZtªZôŒŒLÿ%ùÇ`êù?5=]¬-Aš¿n@;G{ ü7Äÿµ£[Öv@€„’²Ž¬âÝE À èlbPv5µ³6(X›A.@z€…ƒ3Àî߀™ÈÜúŸÒ\XþÆs˜\fÖÝ€f@ÇTLG ³½µ‹Ëßo€µ ÀÒÙþÛ°Àdfçjþ€¿r ‡rtvøkaÿW÷7˜²ƒ ØÅÌÙÚ ø›UYRúß8ÁV&àr»XÿU,þZš;˜¹þSÒ¿tÃüÕ‚M¬A.0ÐüO.S ÀÜÚÅÑÎÄóoî¿Á­ÿÃÕÅdù_˜Î@Kgs; ‹Ëß0cÿÓÿªð¿Uoâèhçù/o‡Yý/ Ö`  ";Çßœf࿹-­Aˆ¬ÿÌŠ,ÈÂÀÎöo¹¹«ãÿÔ¹ÿÕ ºf†þ/s'ÀhȪèþ›@÷Ç2ËÉÿ ÿ·üßBïÿ?rÿ“£ÿm‰ÿÿîó†–vµ³S4±ÿ;ÿ¾1€¿GÆø{g €«ýÿËÅÄÞÚÎóÿËé?­µ€ÿF+î`gþŸ:Y°Éß–ˆ,ÿÒÂÆÂöo¡µ‹´µÐ\Ùlf°0±ûÛ¯É5@æ@g;kð/¯ÿj)€™í?têVÖf¶ øüodþŸðÿRõ/ð¬ÒººòbŒÿ‡ãú/Cå¿CV÷tü‹í”òÕÁü=þ #.îàðffçæ0sr±ÿݽ¿€ø¸Ù|ÿ)ÿˆý¿Þ_MÀÎÖ½¿u³±ÿ«úÿñû¯—Á„‘™9˜ÿ36j`ùßIû_‚Ôf®ÎÎ þ×òÿ­ú¾ÿ5ó@ Ð quÉÁL Ä&=ó;¸/ghBR¯¯‡z(Ô±¸^½0? Ê¡Û?=b›¯Üøµ:”¥aŠÿ½ÕsñÔñm_Žá`¤׎¶;x‘GìKIß›±AÓÎÃxÄjXŒòýL+ÆûrAa F—›Mó`gBEÕðç+ÉT;§3Âå}¥[~6Õ½#ªŸYZ]NzfMÁéMÒñÃ=íÀèðÐ`÷5lï>cvÜ'j7šè§l"]rïX¼pŽJT,#w œS¿æS7±y¨öT“£šcת¬8†j¹°°aá2Ƀ±KwD!̓:¹ØTZKãÛ;ÒaLA‰‡oÓ¬²6 Î" &oáðfl¶R–pj¥h·Ÿš¹¦‹0'q ¹ÄSbW’^L“¿‹Êc¨v³2w»ÅCÌâ.^Ð(@‚öv¨ÐñïR$'„uÏ1î3¾úúªNd¼ÉZ TnPºh/OG%֛ʼnÙb6·^íÙ§™žß|%¤5²ŽGEÁ¬Î$¿VÓÖ?ùŽt!ôaöi2(5¶]tµÏzR(WnÉ…ƒÁ±)– Oú†ÀÚnÿZÿö‘M6ò-98ê§¼65=ŸÇ0rvOJm°j÷/®†®¬¤¤=:¢ [|„ŸM¤ûÞMص°Å¿mN2ˆsëg‹úÑÚ5†´1Š&á¨Òê@Ï’~€:>ñ<ĤøìêX™vþÒð¤aIiîߢZ2Û4þm3ßa7ã®›ä­ytmâNöËÆƒ»_8Û³ohÒÀê ,¨²:µ¨ E"õàSnèÉ(DnPbH.ãÛ6â©%{,{ž$‘•Mq˜%_Cût‘¤¹¨÷ %Tãºæ<}˜Î¬Þm^„¾ÉZ[ž¬¶¶ùcÜü~F§œ?¥.:YBf´¤S¤•ñÇöÛ 7ÿ*°NØ~$  2t²¼Gm&iJDYÃ_õ«ÏXæ¶ÞGJZåÝìG2JlßX·•žüÍ.º^ä³Ýpx³Uxjß-¯s}÷$†N˺“le$7bD>å„Yôoj?˜øŽÊbåkgÏNŒÈ~ŠqÃÕ&2½TWí¹UípG%Åå’u}]ÌÎÌx„Ñ“åL!¯0½ZÔ3Ö‰ÌW—l_YßÓ•{“/ƒ eßòŒi ¦j"ﺃXB™xõa®¬ŸEÊßÉcý§%¬º*!M¦BUŒ ×ö&eroh%Žò"£®ÆÚêFþpÃ|œoóŽð~a*DÜìFøRN"… ÿ´ˆO7gðë§çÞó4W×NQ±·¾.S­9‚î°kÓ4í®Âò{o³EÞh\ðDÓèï=øål>«4´írrhPÉã1®Úß½Cö»íùW‰ûÚ‡¬N"z[[…}ªG`ß 4š\‘LI¡²ˆ Ëm1Jè _õ°üŸsö–°äòêžíܨ´Ó[ÅuUgªs}4È&n›È‚ß ½•Ò¾z÷óI% 6cÏÛ•7-¤w`²¾cîRªYcÏÍß¶±¥gù+Ö»¿­ö%Ií¼“š~¹„,°1Ä£î°#€öEÜôµKOŒCæo´Ì?yܵ×-øF—0V~b¥`þóB%Ì4nY¿v¢¶ygÛçç"ªPÀ”SrN²zþlèJÍη۞\LÒÕÄŒN¢ÿõüPÐ2˜"Þ!HÇúúu ¡Ü‹¦Ðáiz·@5ÓE™ý7’ÈÐQɳÔùJÖÀnuPy·ÎÑ6iSñKáÃî8<­Fd\Ó #´ÔÁ|¥Ä'rÕy~è+my÷ jÚQæG}ö.½f )òp{tþ;¿™»¦ª”\ŠëaŠ÷iÓ1‰‚Ø%:MéêšY³æ«è‚ÕQIU3þ‚²_G"F!šjÕN±È÷Vuùá©Áì›ç„bÁA°?P—¡BW#Èø{éÞíNaI±¦˜ßшÎÓMFƒYªá«,„1y)Ð6ûÌ/Õµ;QÄ¿%çn¿eá+óÀ§µÚ[’sL²|éšHöUðu'tªÀ•ºèVsV8ÊŸš~ÕŸ–£÷ ¸½š† R ¿Î±Ãë× û¯m±C<Ó’%övÍÔíuVÕhõÒZ »QëpÙÌt4Š~X° È4Âf2 é q»È“ 9šößíëÃV‰ÅßÄÅíÿІæ$5@áT4‘øŠàŠl–Övé‚ÁÌèn¹mü:òÐ#1ccîç?—Ë{ˆ"±©ÿ6lÎúð©×ñÃx—  ²›C‡u7ùÍ9g/^3Á-ýÝná(RÚJµ³¼lÃ6DäÔ—Þd)ÉYq ȵ¢ù³5ñ‚ý1‚Z©ØR+©„“èø=ík³<ÞEm³fB{H„ňlX&ƒF:¯=JlZåHd·×Zº}S.C;jýÞ†/æFÖ#Æzµ†¨ËâǸ »Ýi>̶ÄÉ0Ôq!qßÚê˜apêøkTDÄÖ&K[×b†Û„ñrä8‘™Ol;¨+4îý'•DI/ ;Ãï)ÝÜȵĽûÁ57©~tdu]8cé€ÉcÏÇŒHP6ϰ 8N(y;D05\Ì{rWìªO-Úƒè`ò}¥pä ¾ T“CÚò]îb #º¤èI›œ6K’Щ_PM­á!¡¾K-½%1A?ìZàCûÊã1-Ö‰vµƒË¬õŽ¢°¿sÏ$öm1<ÆÀ"ÿ_‡Ó‡.¾¼Jhå¦b¦f,õpµÿÍl9uf‚”`˜W(µäIØìHb=å»ÕMƒ| $ãDuä˜HmÅ3¯AV…–¦‰ÙëTŽ×kÜJ³ˆýجyôÅúF‰ÖÕàì¼´ ޝ¶,¡ÌxŠ*ÞL€RGm—¢·Ü…õó«Þë FWú0È—§øò‰3<ý•äyu¹nú{ TœÑÒoÃЛñ'IP\5ù±Z®ìÉðgtæ'9ÒCÙ§œ’GØßŽÝ³$‘hâgˆ_Ñù²j™£ìkf*Ýl¨[Kà{¿!WÁRÖ(CuÕø[–Ü`xQ(ŸToçÚ.2ZÄ:ú¨f¢ý.Ù[l36cû0j¯»ulKTgÄ—25ñ†®é˰–›lä¦ÉO{¾$BXÄmG+ ©ñø h‰¨‚"ÓudȶJÆWk&¾)0-èL>f”–“Å@ÍT-&ÛXc-&ŸÐS^*2wgrºÁ¤¸^žqç±~Þ×tyÁ¼#`Ç„28CÖ(Ùøç—hv×D쟛ݤ¾4¨ :yNŠÃ=2TVc‹Â}‘7¡Ñ6 ;y»ep’×EÙÝP·¢õMœÿJñ]É6ù 5td‹6ƒrÚ¹ò°F㡯vgçC‰HÛwüØ-üÏ s$‚¥óã·ýFCIÄu¢Á«~ûðïú²¤œv9þá–s÷·ÔÚ$x¾fÑ‚¢’GlkQáÐ¥3ŠËyòTüïÐé_ p¶Cè"ÛERì·Úšáˆw_šrqX)ý-Έ,ÕrÀ~µ¥S Âóî”px;¨·®w¡u‡8ßí0:GäWO©©ÜÍÌŠr¾¥—E~}Þ+c‹–µµ^gU|ZŒO¤6qaÿøæ<²h¼CõlbR²ß)õ†îüy©ÆÇ9ÎBâà?wIÜdŸ—lõHÈ-Š¥ãˆ%BÕ|f‹Øõ¡¥c”´dñXÊ^öœC»¾ª“í €õ¸ù1¦?™ ‘QÜÐ_Cë!Ýî¿>zt ê: Lï|òSC¶]R.Ó6ìJ%2Ùgš sáÈÏÉqÈZÔ‘•Ž•ª¥ð†Öدš†ýê3|¼/Ä{Õ=ÊɶÀ¸ Ÿõ‰÷‡`¤*ò('8b?¾ì@T´çNU ü]§ÝõÉûЏKx’L´f½˜4„ñŽúüQ«Kš¹Â¬}RzÓëô×KiÆû ÷ÐH(™(•àú“øÄÐö#X¢·rŽ/äöq©g+ùÕ {ÕÌ^\Hsá4Ϫ¾—Õ„†Ê˜Ñ‰•…ü9;+ÓE:£|À’/{F¹³„Í‘îôë,o¿„:Uí·Ñß&¿½™¿¡—+÷ÿæqùí@Í »eÖ4`jʲʗ¶²UV1MÎéeNÙ´cR냄Œùù¼_Ý4ŠS„W—DrÙ MH &!ú]×ína 4)—õQú÷ Å*Ê–¶º-RƒœÖy:Z=ó½¾dçò€ßªjžõ£þȘ×L Ò^pYëE*š5Ðß¿"¾ÙÁ’^yr{Úë¢å¬7 “›H†ô95¶¹XNhžùï';.Z-å|•³¸u‹·.xt׺‚¼“’D,,S¸«Gßg–¶2Mʧ)ªâ°{¬4’õRûîxY7+ºñzß©&Äj…—,ô)q9Îkøƒë©÷‡/æjs4×£òÅ©ÚMÞœQ}Ùà)IÏ­b÷Û\¬ñå”¶°DC"·®|ÿ§ŽÏù8¼J%PžwÑ"*B* Š !Òk; I½rúïbæ¬ÐíªûEƒMý¨´NÏI³p/G; HcPG:³LKpyÅôþ¸ã؇ µÛ&)Ë·¦èd<ù“Ž—vYÃ-ÿº¢mH`¥Îæh)IúI̲Às¹µòTþðk*µàSÁð|GÛ×rÍ+gæùFí¹"L,z:/ôk:Uy,”ùûgNŸKé5ž~E-ÙUJcž~g¤NX< ný=éÏ„nè'‹9uzÜQ±¾@.Áâø¶«¸k~][›­wªö툟[Â*ï§‘C±Ÿ?}d*òËr*C…H ¶=ô6´©ÑéTõÌòô_^íÐÐ~m«4ãÊ¥ðäð úÎ#„Å"e.²ÀˈF¥Ò”‰âÓ…¼/‹R®;ã5%XëA~=®lm^iJ‹?> f¥n J‘­®‘bÁ[5ÃPaWÕþ¶ø´áðͲöq¤i>y*ùÁPóЧ•xƒ¶£Ò¬ÿ»ÔÃKTžYsS¥"»qÜW•¨\.›@ôï¶ ö‡X«cN9]dƒOÙó]N¿¬&mýØ–öO¶eÍfî©Ê^^½ElÔ1Ïbf™Ž‘X!ÿô˜ÿql]C¢ÝDÆ _¸/Ÿhjâêp¹¯œPu£¼îWJgˆJ“­®‘ŸŸdÐ8¨¡o¼tûâá¯MGbR)¿ŠÂOBâÉ·Ü>aLô>ñK Ûmýú®€Qñ I|ZÏ^Eh˜Ä+c½‚÷]ccFËà`<4æÎ±ˆ.NæÓÀWm’0Ä(>.·mêĬe¢£{ îf aÏãœÊ¼Í“BLùMºöÄÔ°Ôt\ÃîqfÛ@¬fRÐVàŸY†‰7š›M°ü8/þ͹Y¾‘"‡ÖþêÌu/ûé›÷ä>GÍ !ϹX®‰ÿ¶,˘ŸVzÔ]ß»e­‹Óo’/ùÉO í¯Å&þ´’<(w»­ê6ŸOþ„|Åkÿ…õQ³Ù +ÄxñK6A7*CbnkZ™¯¨Ôàv!gÜ¡1"%Àû‡W©ù°±¶ß{cI+‘DðFxS¶ìê9=×EË–®°¼ 2_Ø9¾“¬öâCz}X‰Ô¥Õ»@JÙ¯Òç´š¶ ⺠À_¥Žö¸VùmƒFnÏ©š5*q6¥58 h9ýÕó8¿°(ñûxSSù+|(šŒ#åýPÄMQª£\Yܬ‹)…1ÎXÍÊÌU^ðÂûÙ”qÊì§9wÒ ù ŠG–ákdÒ|å'kЛÍO£ãi«T eÅVÏíл7*£³÷_™µX’Oø#°d÷ rÔª}¨Yx×7_¾Y¥1-;>R˜ó‚æÙ|¬Îb°ë /ì<¶^t Z³?øj„´|BûÖé7nª"\’ôBd‘þ k&¤²…ÜW¾ìÇ}6P©Ü627™ôšô@X˜P§ëœwvúáÍnj¼¶ÓôMKç ºd)3 I—O¤¿LÆAÓ!‹2Oˆ÷kB-^`0ŽT0GÒ@fÝ*Öˆ3oôzÕÛØ«áÒØþÃÌ6g¼ûwK÷ÃJFÈ[]E_OÓÂòV’M®Êøô¼iÝ=£¡^H­±óïê5Ñf—aSpÿ|Öî<ö±>´‘6zBÛ£Iõ¡+Øæuž¥U@"× ¡@Sýþëï›õg3d0ÑÑŒCÁ!n[w2~­+ÒÃj½Ál™kÂH¶£Œx­i@Ž~#‚C,`”&„ [kZv ×±[ía ”¢†è¨Sø|àÂ500µkTFÄQ…øSÌeI‰ªÅ!›Œ&È >¬nÕâ³PrýÞÈÔúCôà ­AÅä¤Arˆ~%"^ô}3¬{=UˆöàrúV÷¨}dh“ü5û\|mÙÄ´6fE?Ój %²ÞTÍ{¸ â„ˆ¡byïÙI¦¯uýÊN|ÉÝž×amgôšþ&ùühýS¨Øà!ÜDàܤ@Äù‰2õT¨&+³ä#ŒZÔ÷”uèê…æž”ð³3®ˆB|sþ)ÔÞ††È*vÛäÉݨ‡„µ «x•ƒGT™%~q É·Ÿ¤;M2þe7ÞÀ`gø!ÒûYsU×Óܳ^ š×Ÿ0»ôÍÕ¿Í©å«t¼§­`‰c¯a¯K4¯pDºçß­.ñb•&ç=¿©¯á6½o®ñp(9Âùõ­©r"fNGé?9ݬšZïïãÈÇ‹ôO€.ojðǨǡq[úá·[ͬÚ)?Û¯8ð„h³#ç¨m0Mš˜äOÉä¡&>FŒÀCy¤Ã‚vŠ o„û´&ʵ Ñ’ôÓ«.qâAöÓ} ² ှBýÜNöäp(ýRãg;“˜Kïµi7ˆþkEl{s’t.=Z–¢BÛT?e‹çߢö…ò±æÚ›âµ`¦G‡8EÕœ¤Ç;Ãã˧³í'è.säKü,ª„=H,»úqÄKó¤˜G¦ «2ãpTèš±Zh5P«½"‘ #¾à2IùŠïÞHðÂYQë Ko”zY@<€¢Ó£ÿÇt\ï³ÅÀ>×ü†ÂSå–ðO‰­4›¬ñïpU~ájA¹Rø…&¼ÛÇz²ëéל&rËÓ‹O MŽU¦–lGÎ%À/õ„œ!û¢øìLéEi·àZËš$RÈ$$Y ¿º[¡¦oUtÄ]º(w×JrÅ­%:¨KC"ð¾¦Õ3»ŸIdÌ{_žréˆÄµM“½œ¤&…º ʲ]’ »p$ŽÀ GÍõM—Eÿò…s¢{™è»êsµ­’÷r/^y ÍC£*Çìߥ–ÏfOhŒ‹(¾ßGêWá…ÀB~²Ø”ðåEÊ63ƒo=HE\—…þKŠWiÞXŸ¢·hÓiãEöA*ö ù+N¥¼ú-ØS€£j~Ø­ðsŠò€Ç'úñp´¥Oør]=³|{˜Ö_†`Çc“’Ç¥îïD1{•¤^›L%â8…ûµbG4w(‰_Žv`ÇnÌÂt]]Þ ¾o0øxÔïFÐy]^¾6>­~’~…ü¤,¯ª@(dr'/=»i JÛWÑd¬ßR)Ñ— [JHT[e+SÂÁ ¥eã¼®5÷Bè"HØAs„"bA –º“ÎoíºÆÇ¡2íÄ / beÏw·U„£xIWÔ=›6”êм^“Lì9ÅÜþ1‡áñG7ÞO6¯ù©¹T3±ÊC…µœaŒ’&Ñw”‹ D•½N¥W"5^IúbÅ7ˆ½¨‚žQ’Ь¨pp]Rvòc¢ÞaX–ú…38ûEÑÞÞ!î I°±d#DÒ\·¬çßtjEžNë ¿ô+Õõ×—uæ®$à5<àÝÓ"Â~Æí¡Üˆåî§“Ï›îŒ:*sZ÷„b¢ª:5’ݘÖŸ1°²cú dqR­þî MþZê’gÔÃF˜ŽKމBuo7ý¡Aþ¹L(Y¬ä> W#ßV¡w2¼ß«iês·Ÿ N–8JÎG ÍDº I†™d—Öóó÷pw©ô4“G¬nChŽ$MtŸw[¥hQÕ#’ÅÆã„Ã7iÖfÜS÷êJ[IΈqùk–НUƒ–MEÜû‡NÔ;˜¢€Oż&Ïôøñ2Œßöö0<\а%É“°xc¶+*û±¾’ñÞxC©Aå=Ï£@ý6kdâ*X •pÏ6¯Ñª„<–;sIaMògí…¿xHޱMŠ'«K=u³MæˆEÙCã{laЬgÁ³8†££pjóÃDßÜRÓK¢Žò(¢glpŸ¿ªQ¡«½ôD‘G9£*o $Ô'€‚‰ÊEW23[ì«/Žå¨Ç}‰WJ4þ¨]µÞŸ˜´Aß.Ý®…¥ÖÊX[öB<‘"8ªçLØá°‘½µUµÁýé“^ÓלL†}b/­oü*¦-b¾ÃÔÇ} ¢Š Ñk…ޅ螪Üé¿^ ¨CýÖh|h#s±«n’ì}²Ÿ^IçyÌ »[ÈzÆK`a|ÇG"zS­ {ªÔ´¹Gut"D#çj=Ä ‚oq ºšÁ׬#£a†QôNâßü³Â…7Xµé&ðÄ¿#š¯&p¥-PQ#RJ3Ã\͵ÛO ‘ïêiø¸ƒ6FM´|æ«"?uÔOIätî)q|y5?…æfÏTñV±LÓˆÏö{¢a.&EÛR*ùƒ#ÈQŸ²tçžÅ¤þ1Éd"›óÞP2u…⚆k}ë æƒ» ŸÌ‘ÏVÛWâá7fþ­4sÖȈͣ·…šãÕ\)LýBѵ ­>ù*Íu¥K7›†™¢D™1äG]§IR±íÞYÞ&ªq÷}=_û’p ío‹·ª$×Bvl£”£_…¯ùîèuƒÌ„‹!~¤I~Û‚CðçîÓnR߯٧ÖRì?ÖŠD‹l·À]ÝNF-¨Òø|Oºê>Ñëy—j TnË›?¥ÛŒ¡ósõGùY!ì´!Œ/Ò $Êd§šéš½à/Ssóg;h/xÏ]œ’»`V†É 7ïd:gƒ=ñ÷ßQÐU½4³ÍYЯu7_Íî‹J0­›[¤àOò¡Oþ\ðš—¥æ `;÷ÇòIsGâ=ýfnÙª6^KX?Ä•&=—$åtÛ±=ÒÝ òãt¡¡¥ÍãIZQsHŸ>œü¸,9oA¸Ï‡ÚUPˆéˆöS|2¯Xß‹Rƒ`•»O³ë V{TýSÜFÇ¾Ž±6ŸuV­^fa·³~ãªÝز75¤FIkÐ6J}©„”r ¢ÙJM†*gÛ~Amh1™ ¾XgR¨«YUÛ].áŠvª•Æ;P4«Žb)S1ðñu=K´…"Ny(™ ³›<_\n¬(éôaêMœVcO=oú=Êú3rÞu…Q×€‚[g‰¥Oæpºš‘ø¨ÖôNÛ’õKa)<Å>tSwUÜ,*y“ΡÖE,Ü £Äµš{½^¡k˜;جáÉõw„D˜Â,8<ÔY*ë0"¼£MV^€t_×1ôÏì’gƒÚ¼ðˆIÇŠè³éÃxާýÙ‹•œr@+N%Íȱt)ffγÛ—TÎuýöŸ;† úbXÁL€igéuJ·MWÙ„5…YæŸDS¥sèZ)±¨û/ª’dZMc@cò?!^xsœ¤)ã¿Èï~¤–àÊÎ!*Ä6‹˜UÖÜ=Év]ÜÂH]ã©Ü½¹wI@ o¼²oHÛsæ6ŠÝ¡œ§1Òö?k ¶¾ ¦ fý£ÿÖúþÌ2#øÅ¼·»OJ0B¯[’Æ‚_¬¨ ÎN20=ʪgr tóð'¤X­+?ò¥kÙPø¸Ã³íQKsÉ9[WO[­Ì;3¼@‹h¸AæCœä¶É§nÓTÓ~„'?n3›l{hWrˆ(å¶$9)³ö€¿À¡ SÍÌ7ö»ÿ ì_9Ös{©…½ZÛ<¨èl—ø ă;Ý"à§m2¨ÿYû¡8ÙH÷“*Sëeô‡””qxñá¾+çºõ´í–uÞ¨°éga R1G´(«Qý¾cÇÚ|œ¹yYökåca±hÕì$õoª„ƒ¶«¨Ø5~ÌŽW!EÅâAÒ¼m - ݨ¶È:AoØû'¸óf»@æGJÇÛœñˆ,ȵ„A¿m^#Žº·šóž7’:ûàWL…slE¶Ø¨àÆÉ¶™Á0‘c£K×»ÃÛ1¹êŒò5LØ#›¬N´ws6ú ¿-‚ž¦~ÿÎ`ÀE–]$OöÐñ†íC]·TØ ·ôý‘3›Vý8žEQ á`‰ïäwÍ¿wÄdô$yºíFr-q â7V CæÓCíhÍÔ‡{•%°bþÁPµ´ÜVõT@da`|[8Ö×ûÒB˜4ÖP<î·»Mb »Â*A>,Óì ò'¯µ~õB¬`¶»1Œ­ÄŸ²4Ìié?2¾N2—²Tólm—5ýc"£æ¾ØÀ.Ïù%٣ׇ×f°Í³Ši[ÕL^H@Îê1Ý”]ªȈ j²Ò½(áëÿ%šiKØ{@”HÖÒ ¦ Ù+ð®hL¨•çhZÑ2*ÊO<»øGРξ‰D<ü†˱V°ùóËØÉŸ¯çC_v¶ò»eù'ì¡Ð,¸j_´u j1Tz߬º©€X^±³ÓÐPƒ¶ë1ej^sÿl<ˆŽ¶œuIë¼Þ\8²WËôH‰L´üéY›>X°H8èŮӬn*ùEIE$.á·<ì¼HíuŠrϾƯîꉬٳšrKÆù|²|ÄIë/&ŸÑ ùãX”|¶U!pDC”Uù§/GÕR&+ªzÍ= ¼!-×elÜu¼êæ¸fÜô@“¿5ZÝ ÓÔÄóBÖ4"w¯¢dÇÛ 'Œc„·iŠwÜûSyõ>¦föO‚wæ}3g¿ä/÷,ásx¼G)8™¶å,–§¿b4Ñ`^dEš »2%Žc7ý ŽDL0ç,zuÉžæXÔ-8$;H²µÿ#Ü!t(Kn Q*_Fì\ïEé⃤v¥€‹œ f¼ £¹Y›‰ ab&íwOƲô–1hÖ·j¼:V‰ ìž‚ÙB¸'wã&ƒ=àÙ%<¿m »ÿDUó)ÂhjXhP(øF€Ïì©2cE5Jƒ&ЍP‚MX=1¿m!P³–D(E—æ{õr;-‡½B.Õù²÷–­¥ õ)Ð3÷¼8ý`×ôIÓ½ŽÝÙ/r‡àÅÇý8?’½B¦Hú³2qzt ÊÖý<3ÌPà3ÎJ˯ÍÏð„nÔô) ÕólE2YÈûË#öIkäŠý+æôæ>%YÑSÎ|^.â °¥žØ$Y¯Š¦>ùø³ƒ½?Øö¡Ÿ&•–ê]{û8®Š÷š_þÐî=0Û»s.AÆywO]ûœ­†’)Rê‹ Z ƒ2òŒ ¡^ƒùõ¹&´4—·D‘„Æ¡áC@oñJ6í'Wë\·éÞ$‚eS{Qüœµk:qU¥:ˆÓ:¸÷×ÀSþˆ(óâ4QÞ¯Ÿ&ã¦î·ƒæ…u%.¤= 8¿Iãö_´ìU¬¡ú&yæÔõCºÝ7ñ丌Œ0æè'í»¾¾(T97Ú@j¬®Ç'ûýxÅá2?,í…“^âö¿Épe`iæ ›-µª[kè±U25Ò[ãÙÍÉTT =Ó'4¡Òq%œ~?ežÛëšÆšA49òž‘¯H¤E¾©¾Ù¦Z2õmô@ A둸ýÂîÙ+‚5pÙ–D·‡¼4ipEtLj2pº5§žŸ?zm£OÏ]xt™;&üÐå>Ìf”âŸG°÷°zÿéT¿õ’ Ånî-sT+[&VÀ2D¡þx—UÂèƒY¾š OrT§ˆ1:ü·iëÔã¶ŽO6íOZ”Î ÍU“òr|'n¿qV¨%™ò“œ*³oÔYà¶x™ûò[ÒN îÆhx÷¨.‹IG—›®º`ãK¡r#éùèÙhòɄܿ¢¨c©–%$=Ýáë£/^qAúÔte‰¯Oâð¯ÆÉlôí‰F]q2i/‚í…Ž“;N„y!Gù¸Ü°ÂRÅ£Ö,ù¡À{þz($–5éFxcúÀÉ#ÞÖNqdÁt½ú¾¼~ãy? 6ÚSmöWŠ@+ÁÌÒ¨å½Ó%Å!ohJÌÜ£!öÂR°Œ¨hÉùNN—‡¶É§(¾¾3$ë• ©ºòz{êD·[ïùÁ„]¸’8-‘ƒÙ²]¥Ö’5~Ôõ¥ã­JËwuשnÚÜÞo%…üë}ÍÞ«¿†‚$UˆùF'{’ö£Æ£°ï.vÒø‹; üZ¿s*ÆÕ¸ °œ§‘Òýjy¶J{>߸?Ù?_Èì°9æn¾Þ¢ÝoŒnÝ 'iω㻣ý°7S®(5Ä]÷йb…ÇþSoჟ³6rþ¥ [xé> ˜þTð•$Ÿï ¤þaNÝØ…=Åæ ~aº¨]³=®ËŠ,®’ 9OÿKtg«¾ÄÀ›¡R–4’WvK|]h‰B’cåÝïyv­·¶Ku7_X&í‡Æ%ÔG ‘O-¡ø&òJr§/±Ùr^u’E6ëAûˆýO²S³¹G ÆÔØé˘}#ŒÈ@šBìÛia,üŠQ†Ef¹‰9ЏSýuÔº›JþÌn}¥RÒ˜V¹øì¯kÅš„?ò3w¬Þšœ¾Ñ­u*´_½ãЃ„¥V<Ö%Hf÷™5Ï1£ÄŒ.N~0óoÞe3Ç÷ИgÆÙd‰Ñ}–â‹£«½ÀZ¢Â wÚ “’*7ÈXËÃ$åL<áKÜk“ºýio©q*[ýÌôv¡ŒÌ¤{-î”f;¤ÖíøÄ½Õr¬º†vÔŸ`kÒ{ì]ÜJµµ\îH‡3åµýÙDU—2çŽùÒw oáXÅÏÿÅŽ¾$Fœ*Ç-ªúÙö'‰Yº…wŸS˜ n§÷{VJÎ.d´§³¢Wí%°Ž¹i†n¹kr‰¶= h/<6Þ|àØúÞ$ânMVÆóŠÿ“!)ˆ|$ûî-_nØá‡c¶JÓ4,ÑFN¢ÈKÂWóV¿?8sam´¹æ†+ŠÐj„å÷°Rþ§¯»È”é9¼ŒvÆ0“‹˜xÊ” H,¸ì5ňn¤hžX;l•ƒ¤ þ`ržÈµWò´ZlÏÂÄ2Âêh–0¿(É­,…[¬BývxOÞ£Ê+²,y–g­Ò|ÒÊèÿ›gÏ<ùòCÚ!_Í U×Kº¬ḊÍ$Nÿ|Áô]ETzµÈû°väÂ+Á½ Cš‚ãOÅZ­d±ÍŠžÞ‡Ë·{±cl+á¡o¸·+isã§~‚Ìp ûø;sŸa“+)§›ïÙ·³ÍBÅLªjGË!É1#79K^!/悞ïØÓ½±¡~Œ!è€Ø&´Ö${#¿³e=Äò'H’OóÿÚ,òSõ5ÇkÜnâ%œA¦LŒ”ÃŽYÙæ‹¤é®÷°¤ ó‰{™ÁÁ?ö¤P0ˆµÜWRÁÖ¾ýaº‘ÆÝW´¡ñ’˦½Jê³ÕÔ‰O„f\I­³÷1G?a„^Éä³yfâ"åI »pGˆFòNñm›‡áìl·l|î`ú>1]­Æ˜€ãˆÕõšÅ,Üé­¡²Ãðr šåPF´DF„ÝR7×G³ÉÁc‡Ø|Ù,¬@‚}ÀÚë…ÒxZú–BŸšþN©–½ræ½9Qm–®_IwµUˆ¤‘lûtvÿ!wÀnœ»P4¸fÔõĸÒD÷d–pL8¡. áY¯ ~ÊâËÕ’Á¼ƒÀAWôi]ÝãvU“¢!d %I ²`kK²…ÿžo¢?|ÕÛd!Š0'<[H£O’»E§Ãª[“•õ¾É蠟¡ñDüPÇãŠ&·aS x¿©1Îf½-%þJ¤{-¸NïúR£~M4öP¬Ý©øÉLJt(¬1pü1³2cƒ _ŽÞO‚ߦ®>˜8¶§¨ ºm±Å¶¨B‹n°Öe÷±î›É7C_BÞèßß+I&16‹ÖÙßÊ+Þ¯’;ØmTNöíùŸÓ›‘pb†Š“´Ó45‰=ÉΈÉÃ<´¹‚|F3ÿÜ ÑðoÂ÷äE¡” vËP¥Üx¸w]<¥á-°dQ¬Œ‰}»ñA:†µ;=åœ)ëù¬Gý~¥ÔËB¢ …ÝL‰Rz†Úڤ݀;0·BNÊ؉”Bç_a¿ÖÁ‡ *m*åË^Y ¢ä- G»{¿' ä™‘Sí’M‹îþ^:½s#ǬÖe!Û(9ˆÁ•!LÄŽìp®ˆZÏ!|NýÐpk‹)Ù;ñ¬ZÖ¸`¬¾—ˆËãûН¥b Y"à^IdØ JœüáL6›M`zv³\%ß Ñ^­œgsS[ÆŠêõԘὠM¯¹õ"yÄ-CÁ@ß [¼‰çK£Ý[£é/ˆÁH`Œ„"‘ Áß’z¤ZçÂJµ4í¹2ãK¬è¨f;_½ð$øõ4nL¯LÅÅåââ}% ÌK7t"©¹J?ÝŒ@}2ûÍÂõ"èÝ¡D…ކ{™kÄ×ü¥ì7Mñ SÄÃ÷Œ[éùÔrƒ=Z.ìycŒ"Mú^Bßšó“ ­²’ç§3a´Vß9õ=Ö­cüCšô­”ͤåKšê¢Æ;å .Z­-¾ã›úå¡­ä•.‰ÕÃéÛ:>IÄ€®›ä„öÍÀ_G7^3ÅXBXƒH•˽$­5Êô͹20Q~LEð'“|rDä5†}UÏY£qþ0r6Á¦ÜØê*Ÿ÷³âtè2!Yhã"Ü-îm72É´U=ªB(Ã|'Ü åÜ÷ú‡,œ*šgRœS%ÒV}*OЏõ‰ƒÓ^c×÷9\°yõzÎÖ´õcˆÿ¸ƒÍBÖ­P•à vPXF !xÚà~K‘¸] Å?Œ2£É¿AqDx6Œ­%/[ ¬¹ÿ@nïjgå%ô ò¾;=^8¤²g­Û/¿Ö^ï.x𺃠ÌBªNtYRø´  a­EÜå\ØJ½<éò9;~Py/¤SØž,>ÙnnÀ<ÂT* nÚ¯?!ýàK’¬!¢0›}1ÍcëRâʾCØ0 /{`µçÆñ”Ñ_µ"î5ÜT¨Ð©¹3P7XseTˆÉZ •õ)*ºo$ÊB2¡j§4„Kã³L¼âNEm}2·ujèÛ€pòQ£y^/Yf’ ßüìL¬lN“+Gé3VB9£2ÄóÓ‹¨K!ͽÌ~ËŒ§·®§?9o]ž…PYJúAÿ@Õöm'sl34øfíå<9÷ ÚF0¡vJO•o˜³Höm>ƒOº*áã‡q‡kF!—"'D‚ð‰á¸ÎnËNŸŸö­dÄxÝÄ6±‰hº’ÉzUÆ J¥çêýÚ!’ØzÜðg Ád_™æ²ÍŒÃŠ-3߯1~ÚËñ¶<åáäÄF´ â­mÚnÆž­¿R$¾$·8òŒÜìO–¢u»ï>m¦U[×…X"K&Ñž5¨³°ª#QùUû~¯®¾?ž¿\ 5÷ÜKlžkèä«­,Ò«%{Ú˜ÇwÈD&&›ñà …x»ºˆtrgÈjô_Ê¿hG’›‰žøƒ¥Ù—@¹8Sb[ë¦Èò‚œˆ„,g‡á%ìð­Ñsî7GŸrDZµâ–¥¿¯û¸Œ€4=çÑàÅKÜ";˶úê»ëÕ#®_kMõž°ŒN‹Ú3±›6Û¯?-exö(ðÙ£|í­5(F†´£¥©ß§-u|9åd¿ÿQìÂÆˆ¤CÆúª¾ AŽœQOûÒ-1Îô!t”ÒptM…”&ïKܺ`!îxjAÄŠl0ê…ÝÚ­+3D¤µ@j±>gý†:Ì\ßè¤ÆT¬î];ÚpÒ#‘CWö7ô`ŒúŸ³DÐ]0š/p*ʲX½ÈIýsBPÃð—„²‹]®kEœ»²‹@¢ešZD(Ú‡yþˆKMn2vøI»öGEôÚ[bÆ:Ýn=E,@¾¼Ádþ }&¶œw˜HèöÂ*(êâš±ʉðO‚±êküÅEÆsºq¥¯é6Ÿ´íµž$_,Êùì°ålZÚÑ2jXÛßú^¢rï”s”.²exÞvžýtþ ׺®nAÀ‰–òECO/un,Ö*™Mó†!#V…ëmΔ0°ŸFšA:òš†öF7éÙâÔëU:ôbo0Q¡öjA„. Ž©wxwƒî^Qp¿_‚’¢º|ëÂ8ékáLýú2¦5Ô¸Þ‰A~¼ð¡2a×›²Ÿ_¹ÿ§mÕêHËØ‘é)²PÛÔ&Bd£†ÆÔ‹|Êe|G⻜j½úO„®K3˜Éùp™ôÀlê‰ Ö“ŸÐ§ p+`öyÏÁÃk»è¿ÿ¢ÂMc·8Ь6 »w”²‡_Í]Rýß"Øó}O뙋¾ßÕ'£É+•|šé¿cu”Õ{üXÉ8 £-DÁáSÔÜ—yt©ÍÔ([@4Ò0aW,/´­Œ{èV©¥îZ™ïÈ”ƒ+m“¾ –}'y™w< UÓ¼|£á$¹?ª[-º©,`8ë jâû-ÑÝéx ÝP‘-U ‹èîÏ~Dcmæ$¼Ó…ŸÖퟓÐ_ªb:R~æIuàÉk]"t3x0&3X£x­¯S =(éÈÕl[¶Í‹Éi7`ü£_Ý.iÖO´ød+{iAPÔ´ú†"Õº1,‘ëÜyAß,œˆ|“êìü„¨i)A‹7WœB&ø6©R‰~t7ó¥Ç%™écPðëëôµñÓb¾ì3@…> ¦&U™jGc®ìL™åv¦äÉT”fñÁñ}¬F(Ê€!ÖªÓ?ó>Êcºq®Ýç-Í3F,ûIb¢Ú®ó tŒ5Ç«¹+_]Ù¥Â71Tô©¸O&W-–rjèºá*¤^÷¥Î‡¡ª;‡s?–ñ\/™ô"%cª~ YÉç>uˆ=Áx”›²à)ÓöÁùÀ…w>µsóZبÎûÃ[n•¥HbÑW4y©Ö0AøbYA3õÄi¿4#°ö b1 Ũ‹úÖ9[ëN^&e”êóP†<ÌÙ 1³ÏJ~ voEC½M Ê'ì/åºï×ÅO´±ŠÚÙøºµ›±¼û[Hç4Ô‹ÑÜû?y‹XI¿^'Ïà¶eëÉšõõMãçy©«yÆÑgûe {5\Ï*ã –²·ímű-e_Ÿtǹã>ö]ÿŸûù0Iá8¿=ÐS¯ªÿ”ÞMŽX 7½HzÖp;–âøA_ì¨ûPèš'KÀω4tßµˆŸ[›º¯zWöy¯AïC·Ô¸ï[bªû¾ñ›Ùªg¹EÔ_¥ÜæS;_’AjÅñ;ðA|Ô»ÜÀ¬Èzâ©™™¶Ø ÿê¢SYÕ(€§Yhe8)\sn3G¾ŸÀŽÌ?µn…dNÒ³¦é­ñý½íÀ´wUÌw)êý;Úw½ÒGÉo`0•ÉymÓÉ2Å{öR6$WêXåÆ(h¬“‰{ÐyÐ~†–txj[È= ¥ á ¼}è—"xz× ½qE{“íÚ8(Hªì¡¤T;‹Þ{"ÜÀ ½wµÚêI‹¸•¼Á£©9nè œi§·Iú¿“J)uz//¸VÛ^‰ ""q (êéüÛ¦ÁÒd㡵É(ö7Èc dñôØ!sØÍÄu@¼.`ÕÓî0ÀÞøä/·ã¯uÏõï½…ì€<A~·Ò;¡Î!ˆÎ˜À¥¯ã.¾·lðgꕜ$rwì™(œ„]­T×ø=Ò’Šá œãû„ÒË`t`Èô“!IJ‹-ç§O·j¯‹DŠ"0³ZÄ ²å‘S$üÃ>o'+(~#•¢c]*z ZÇ;ßÈŠ£=3iDmêîÉ»–tÉZ‰ÐE Ù&³û(O+'+¡×'#Ua¦~4èx‡O#/i‡Ý¬B¯\Ñ Õ‡ªgìßç;‚;9õ¯b—H%«Ûqú­´ã CBÔÆR KnÍœ+¯ˆ"^Tq©z}=•ìBolw¶Þ¸áøz´¢Æ+#à2Ù ?\Ø“döLB´j}2ÄFø™QóúŽ·ÍH¦(ümû—œµILÑ•¡iÙbAopï\!! ;oØàeA e2H=çx3m„¥ÍfzdeîH¹)HÈ`qSƒVXk®´HïÌ.soÁÒ†1ÇBz¨÷™6úâÄP5XŠ• [ˆÍM`Æú:¨+ä°1df;Ücä=õe«èæzb0‚Èù*…o×E€ ãÈë6~8ü汕7è€OvJR!„.«îï6¶‚ãixÖ/_¿CEÀÆjw¾™5MIƒ'½5‡IæîboðåÃÏßÍÔÎV±ë§åW5¥h}…+B›û3Ö‹ /7µw•Ä]fPW«žæ8‹ôí`³'*hžÑϬ)4Ñv¿|Fe—åîM‰ÉŠøÝËcÖ3}ÚîRPšµ$%±iº «’~BªÐ*£ÓRtÖ¼sb5K]:©ËÚžWæoú‚šj£k-Þ÷·I4e˜¼¿Ã\à´lg:³s•b™é` €@Þ°Æ„ ‹–»ýœ0ufz¿Jÿ>¦€3õ—7.ÜH)T˜ÕC¶)£‘׃GDµ„sLÙé¼Pî‹€=ýê†@´•[ÖÌf*®"jS°š×u+ö)AýµŠ‡XSí-!¬7š"†}¬¢EÿâfQáíO÷?íCù?ð86^à.$瞯F6S-Ú+£ÍýHçBH¤‹çÿæÌŽcàTk𠩝®;%¹­D{bjDÉ$æÿå§ ?ˆHJ<]Xõ†Ha§4jª’ég^~Ú_ Y¼½ù2­SxNõ†F†…&íøea>”áÄÿh‰†§#¸h6—‰Ã{qEãš÷­Øóâ{˜ÖΈۢýÞÝ©¯ôø*P4ä{ÑÎ/£;œÇO³Ô¾éYÁÌ™GÓ¸IÙÄì¹[·‚W›H”.”fø¥­oFJ&ÝK˜ ¶E%@›ta½¥Ã·;ËèiáåNWøÉLhôsìhµqEüm'‹ äîGkGöRøGÓœt ¸&ô˜|/³ó]|öè¹Ø‰Ž°«éUßõÑ*\$„fÉ0a«7ïÞvk:k}Tó×b݆¥ß—÷ÖÓPÇÉY|AÐn9c@Ê©PCH:" =á×H~$­0sõéÑ]¸Ë+¯íÀ,£“c¤ˆ}HS,Uš‡õåD›_áÕt”ÏF¹Þ5eJðþáNØì=³¶ßÿ ö2wSx}ÆÑlûçó3òîüŸ-4CVÐ,À0¾HÏØ!^ŽÈN±°©bŒ¨ÞüÝ–‡†qÜsâ†0A‹øNìgþt°+= k›Übm³C*%• M†&Jø‚#¹Â)Xìâ·ï"õæk(Þ6WVÀGÃ`Puƒ "p÷ük}ÿ™gž>=á]R':‰Cxý˜m¥½ïmnÍ]Â]üdû?`…G\¬ºRö'ÌZÍ6o«(Æù^ endstream endobj 7341 0 obj << /Type /FontDescriptor /FontName /UFZZKA+NimbusRomNo9L-Medi /Flags 4 /FontBBox [-168 -341 1000 960] /Ascent 690 /CapHeight 690 /Descent -209 /ItalicAngle 0 /StemV 140 /XHeight 461 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/b/bracketleft/bracketright/c/colon/comma/d/e/eacute/eight/endash/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/q/question/quoteright/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 7340 0 R >> endobj 7342 0 obj << /Length1 1642 /Length2 13516 /Length3 0 /Length 14369 /Filter /FlateDecode >> stream xÚ­·eT\m³-Š»K°@w·àîîî4Nc»»»»;$xp œàî~y¿ïî½ÏØ÷ž?çìÝc=5«fU=³V±(I•ÕEÌL’ 0#+ /@ÑÚÞÔÕEÕÁ^ÑGžQhn-6±|`œH””bÎ@°µHÜ ähÍâ@3€•‡‡‰ æàèélmiÐh¨jÑÒÓ3ü—å€©ç ‘.Ö– ÕǃÐÎÁÑPüª°`amˆ))ëÈ(Jh¤5R@Ðù£ eWS;k3€¼µä¤X88ìþ}˜9€Ì­ÿiÍ…éƒKÄ`pqšY„=Ì€Žÿ@ G ³½µ‹ËÇ3ÀÚ`élÜØ` 2³s5ÿ§€»…ÿ rtvøð°ÿÀ>È”\À.fÎÖŽ`ÀGVeqÉ× ¶2ÿ“ÛÅú8X|xš;˜¹þÓÒ¿°šlb r€àr™æÖ.Žv&ž¹?È­ÿU†«‹5Èò¿*`8-MœÍí€..4ÜÿÜÎõ ø_º7qt´óüW´Ã¿¼þ³k° Ð΂ ‰•í#§ø#·¥5‰ùŸy‘Y8XYþm7wuüÌ èü¯ ¢ùgfh?Š01wÙyÌHÌŠà”šÿ3•™þçDþøDàÿyÿïÄýïý//ñÿíûüß©%]íìMì?àß{ð±hL@€]ü³l\íÿìk³ÿO¤‰½µçÿ.ö¿{kÿ]´¨ƒùÇþÍ/²üP‡‘•“‰ýßfkIk ¹²5ØÌ `ab÷qqÿ²k€ÌÎvÖ à‡ÀÿºÛ –ÿ†©[Y›Ù‚þQ‚óßdþßøÐì_å3«Š‰¨)hÑÿo6í¿œ•?&¬îéü¿™´Ìÿó𕨨ƒÀ›‘í£Fv6€‡‹Ã÷ÿ'ë¿xXÿë¬`v¶öè±0±°°>þÿã÷_'ƒÿF#2s0ÿg„ÔÀ& ó©ûOÃ?°™«³ó‡ØÿZÿÇù_ózÍ–ÌøBl2²3Á xùÃâzý½¬ÐáŽåÍê%Eu=þ›<ÕÆ/õ¡LߦxßÚ=9¾îÊÒíö~²£îIž~ö%§í+ÂüCÕÉM¿ÄlXŽšy¬ã}>/¿£ËÅ¢¹·5¡¢jXöG<ÕÉîŒp~O@îV€Cqçˆæg–ÞÛ…ñ «¡øè˜*ùàþŽzpldx¨ç¶o—ˆ>/‘’Ï •*:À)HHW£Ú;ŽØÀ…áiNm§i©ÿ8•@‡€J^’l‡`™°æ¥[GÚÅáê4LפXA“ô$>Ãò!‹‰Í<•×eŽÁFqiÏÀGô锞°×CÉXaÇ”85úÖ01‘…†:³l»”rþ2é~UÇìåQt´˜Ý˜«G)‹Tøx››ò=€T ºybŸåc댢‡Àœ‰Ûq{^’‡Q™0Ó¥:½Epøm`¡ÞŽÃZ‚(/©£Z|Qß[.ŸäöŠñúdŸMÖËæÏ]{ËÜÜ ×èC5-I™Ž(<@•Õ/˜8›Hæ@ŽÚo•øÎ¥èºH)•f'çg‡MRxÿy†ÞCÉ»Së¯á‹æ•`ûvÚ<¥&€[#Mº_`;V2Þ$DˆüŽá‹ÀÙÎñŒ¶ýoÍx-M˜êT®„»>·‰¨Ïá‘T³³ꈨf-ûÅ|êtåk!¶“Á+ퟭI(ó½Îöš¯Ô9q@q[¶†’'þ¦{ßh£fÌ ¬Ù3§¿Ëä¦Aˆa~sô½“¿á¦ `n‹ŠÚþ.@ëæÎxaÔ Ìd^@v~RV·Æ—#ùœhƳ¿lÞõÛÀÌEÈ#ž=Ëiäyáë øÌûYZ5ól#Á@W5äh¾Ý•÷•ØTðëˆÒ£às9zçt9'0B~›§ô[˜¢´jËYů£¥â´AŠosø'Q59ëøfì>ýY‰ýç,c´gB|ì;&çWÔ=“Lþï#—7¸a1H áŽV\‘Žp÷ç•ÃÅîP4@³8>þ-ÈæzùYm>‡(¡ øÉJÏmµÔ×ðªW1€Ø#ÃÁŽ;mEµx?ûôtö¤±K/|ïp«õ-µžtÎu£B`=Ÿ%·abY@0/Šÿ+œ3!(òò­‰c4CŽ4ãÒŒ)d3xÏ•V^NíÀ¢ló—3òäLª[œ´ÒÐ6H ê²YÔ'AL¼,nÛï›[KešuþäyÇ*ë÷béάl>Ùí* @9JÃm3A¾°ê‚ø¦¤Ôf›èYR´Ÿz¤BhY£O®å^nˆ¡FŽø`´©r-GËÚo9ñqÿš„¾Û9*kPt$æøaZК] ·Åb XÜñÍàö˜"—ò„Â!‡svÖ«j’ïSÎÓn\ðó~ÂÃ&µyô1"5¹;!:zžþ“Ín¥KÃ(È %`ˆ®É¢ó˜š…ƒ=ºf"mÔ‹Xg,º[Ÿv²àê0Â(v¨x×üü³Û´íÏÅd„.0€0úä7bUáÚ†‹AG²kë^7 %ûd`ÁÖaϴªEJÝþ[oÅHE!…fe”5µÛ ÊBãñVÖ$^=i“q”­ŸæÕ!üý8ì@@ñ}“È𲱚²9Ý­ ‡¯Sãd·.5qËk=îóWŒ/løŸ€É¾µßžŽ¿*Yh âMaÙŠA¶ÎÏÒ+h^óµ+…ü¾ê¸Ý„2TJç9ìqìÊ“8²¸Tãšñøv/¾Y,ƒ}ªÄ‹µWVìR¾;]%v>jÀj)î†:Iì]ÞÛh•TL>»Îè=¤ãÕQÿlj3ÌZVÔ‚ú¢³´EùïÚ%‡0‹JŠÈþÆVÀJ‰il6bÃûç‘õ¤Ü%õÃÕg)ÙÜÓ•¿ÞJnˆŽá"éÆ"HX”m†xÇ;&³Ï*‹k¬%ªmºŒ”ä;/{Ïšûkn…·&oyÃsXLyf0¥6 É·E†±ܸAo(˘—ó!š3mìrZ„Ez¿óz·› xy5àzD(ÅxJt°ÏN8#ðê©«+¾VÛÞRX8‹pKxØÕ=šnÊݪAfOÄ¡yÄ·aÂÞý¥ù¦“ó­*¡ßZcK“7×sÆ^-iÅiš_*ç5·¨­”0T:c®åÛâaÁ%¡Œ£ä£ýÑ?‹(¯T ÷J³*í2ëàß;2ß#Õ”Ú;¼P>µ6í:Yý=ÊV†ÎËÍ…Sx–I“nÔ0[οJî)JìbwcšWyLäÄ`,/8ùAÿPœýáU?íñ½jŸ° ÒT°ŽCð ÏĈNLXÉñÐçvu<1ÀÚY=6&N‰hÝ]%û™É«ð«Û£©!›†À\YÔÿÁ£!®2ší6šÏËÐ '>è•4ou8Ï;¡”߯Z!‡®>2œÜã“×µ‡1¬Ž =…á{ôŠGJ,.ò¦Oe|»Á Y€ŽwÿC°öÓœx£‚¦D q¹á+CeOÔë)Á"G?HÓß Ø:Bñþ3ƒ„Úú†RNv\`øZ½X¬45ƒ•sÒS¯œ–ÊX´q&áZ²%6’Þ¯ÏØ3„I`<ÄNÙ^×4¡¶þèzÅ-ñõæü1 ËûÄ ¬ÁÏìÔë“üI´JxÁöíËÙú¶>¾¨œu^í<ôÎØÝB”YÅ Ó`Zf·šGÐ !ƒýû«½Õ“ÒG‹?¹]¸Ü/8^bõó0† –ß:Ìå˜õ½·®”¼µw.d—tµ,‘»oÈtðùß;éjv6óz"«Äv“"¶¨ÊÄP=¬Ï—žQü5z‚üsÈò‹Ô¸šP­“ð‰áØ}õ #rÝf8FïR«k3=–U!aƒx‡Iþ& `¸×Æ® Ö›QÁSH´ÛŠ3{Ë6ð¦Ni`=˹u — ¼èEc¬.Ïxx±½˜J¨ª¦jˆ~' f.pø5š!œ×èy“c;’éaüI’D1€O¹±Ç 1æd;õ2?àY›É¶<÷ƒÔs•»dѺãÚ5¤'‡eª(Àƪ÷mJþÂÛÃ!Ëxý„VýÂSÁžÆû·7/E.Ú ºbõDæMÑ^ ÞœòtÕ)?ËÔ”Riø»*ö]˜ÞŠŠèP(»ÊzM¨9É#Ò¬"—+L¤. Ô‘`wŒ–œÃö¤:~ç4E\Ï믓ɗJ4½0WÀÿ¹_NIG÷©ÔŠÙkª–!U¾Ç¹˜'ªPÏöW"=Ð4—Mï˜?}.S¯›uïÝÌ6°^bHðV× Ãœ}É[/_’,ƒ)¢§w(3‘l'×…¤h30P¦¿0{\Í6&ç`«qJœy2pá6R+:ú\Wô9èlí~Ü2©¸ô)Šm]Žɼ›_དྷõ.jþ< h¿­áæ°¿x/§Q‚ì—„¼ºô9ÏØ,„-ß J¶ñ;ÔßZx¥. Øwó{lW|âäÉdéS9Ö ß ô°ÕuÌ»0‚\_Õ-=‚˜À¦Á^4ºÅßȲ lÜ]vŠú„†™WÅQá¦ÉÝV+ ø¨op!gdH,8©yA%× µÍ³ÖcÄó)ÝˆÞ ÝÉ·Žw›ºŽ„@¬ ^ oç1ᯆ$:¯Ü>râ®›O~®()Am}™`~‚ .//ºI˜û¤Ôé3èùRx ÔJßTÍÕnŸf¾E"ïüÅLvü7Œ²Çð6aô¤n9¸ ÃÉ$nÎþñQG»îLB‘ìÎÈ  P_¨7Ž@$´Ã7póQ—Ç—Íê¿úÞ)Q{š,Û&óm’&Öî“Ü pvVúDun鈉tD!Ajü_Ñ­§¿B>E&Z¼øùƒ»;ù“ÝòjUÄü€4(EUt.™‰ÑçbÌNùÄþAìæÆñë௥z3·É?cßs`²¾ IÑõnÈ&«Š\bþĤ­Õµ=P8ÕN>D0·rOä­Œs»õƒVé`©èØX‹ðžéœZTü>Y­Ñl‚œ6“@¦üµžúQîªR›P›ƒu‰wÞ¯*QÏÒŠ½oª üÛ‚»ïJ«æÚÉ4lRïüð?ö ì‘oI>m/²"fßͼ‹Ë ¯E œ*xã–1¶ÈÍJÜ[ »š Lùl…DG$i\™øy…ÀVa²#€:Ñ2äQ|%Ú»&ýÞÁˆ½ï0—¤Kã¹ÿë5Í¿Bçs_Î¥z  ¥¤„FttÁý½jÁe[wÄÄ–¼ŠmDïðp*ã{Í…xóAïé\bœ«qø'µ[‘Ó/Âû3Ìõ)Ox üÐ÷`¸ÂćžŒÃª±ŸZ,Â0‰ýÕ=9ixý‚þ)ª®ã²’IÿYúU´Äõ:ìÃU5ÔW¾È©›ˆßZ#õìÁpv—…g¸/sëé˜^A¯é‰±¬á΀ ùöâÁÀ”h”x4FòMõ&aÛÌé‘Äü˜Ô¶]9 ©Ã뀅£ÊÌ)Ú*"÷MQ¬uèþDÍ^GDBžò9Bï!>Ý&=H·gk*QÔ¹âMŒÍ¶1ÿ jþ·Féúîp)¡‚žéž4-Ç»U’ æÐ’äïÏØ&ÊT&í¶Ó9’ÔCr–¤[š¦ªº[$îþF<ˆ¼¼’×¥1·¹'yüŸi‘ö#?ÚTÆÄËI•••À•úziI%À–e8ëX=ÎT9ªZ Œ4Óû»î]ˆ¾ƒp½ã¥¦ŽñFžã‚tH8@9m§—ÑÄŸiïX m¿xÃùKj{¾öulHCç*Žß)Hp˜8øJ„]¿’ª½!莇Ø"³› ²Y¯Q5îÃ(£ì}­ˆn~H ®©BÜÈV=º€è+N¡–1è$ q¸ÉH5…رä̺„CØq=ÅÖ4ŸÒÎ!43ú¯Åê>Ý:H(önG¢vne'\§CËpáêÛú?çz'îC¬òȆMV?ýŽ¥V󢈎s¥I)í.ï4ƒ¿qmûnqÈùªÚnCP°¼G“È5ÛéÎË3U9k½0‹v]Qè9h/H1¹aè%;E<ª”ëcÒŠæÖÙû fñû(¡;N4ø*lSÌÍ9Sö£J Í+òÙw‘€ƒÏ»‡¬E†'ý_pæ°÷MA]3Zưc-"¾§^Y×yµEyª‰‘¨ã‘CÞ$:N`Z%¤îп²Kã8ÊåpDšÂ5þÁ´¯UVkÔ‚Åç’ø{GD[W†¡³>äê‘fáX_£,ô®n;›2ó=ó̸&ÆÎ>'åOµ:’¦J>»- ä-¿ùà0õwʦ£öÉ~¿Î š’©Ãâ~iêMÏTdÂ/ä*˜–ªz#F›A:ïÐ¥ó¦ù…•e¨Ö”OÔ4OîßÄE;ýõ4W•ÿ>dz€ŒžØ«|%TmàtĤ ±/ÈÅÆÉJ´C¹É±hR§Ô:ÒàÜJCM$ˆÂÓº*)ÇI3s­Ùpítèž`Z1˜è:`tâ1Pv3:‰Š^¤Îe)‰­äîçŽøƒšÆEûª±ÓïŠêÁtìäNJ¡Ê7Š-U+;‚ØÄ†‚dÛÈ ˆðÚ au5Çÿð‹Ê„ˆv¦{t£0ÏÒ¹ì£/åŽ1¤M¾?󹃣9)4o4‘|o7Xµj+œÞ;œá®–ˆi&DÓ,Fî]þP7@>B§·¬ˆçÕXÜ}rj(Ãb]’d_9¯Ÿ@ãåŠüü6ÃŒ î[~{Ë1Íüo¨->À=@‚³‚£Aq­žA~ìBÅÏü{³ö^‚Øaðï“¿ôþ÷ÛH°Mó÷l‚ë‹JhêR®‚i“ñxâ`Þ2¾H&ëkñÉ¥ìh=|=ô!»‹‹Ãƒ ™I…±e­Ÿ[}·KÙ¿¶yÓ8ËÈÔw¶;a¯»–Û< OV£U/O êyÀ0 c=¯L+FÒ|íNÞ;ØS²ü›–uüÏ— Ù%’MŸQ¾ê`´Wõš-ç_47s¶{ü…Ð,>>lʦîÃîD„눪íIñ/¬½oßRÒ†Ï,ónJÎ+¬§ÙV#±Ž›m“;ü·F»i®²²U½4êƒG¸ñy]¬7%IèXÙwwQÐ)çï‘J<—GÓš;%n5ÕùZ1žß Ìåõàö/v/ãA¤¬Ï~¤3L¦…=¡!ø«úçÞUÅYK˜§8߇ì¾6¹*«%D¶¶‰7Æ×&—#¦ZœÔ)Y³‚O¸RÒk vV_ #`­ƒx*UµUòë ÊŒè ôÖS_4ûæP¼GdqšÒ%î£ì£xk>Ÿ<è›Zé¦tjU?tï†áäÀcÏ„l4´–S\DŽçî‚ö»ã¦eññ‚w#A¥{ó»°Q]N™h]u -Ý/›c]wm¤ûµï/1Æ‚4‡%”WꘘÖJÒ©pgrÒ¦ñW3£•ã[Z°ºÉüUŸ>ï)UŒÐa§ýå±Ì)[!U×9‰ð9ðèN‚ÎE0´[–ÕºFÞÔåìôc1º½pÐÈhú®ñ^Ô‰M¤Æhñ¡ØðÃYwH&xñ]™¯ñ _ñRŠó‘FÕŒà;XG>—ÎjÊ<²’†·k_9±Rx±ØäÊþ}?\Ô¤nþÆ …¶xK9Ùþ5 H±®öÒé{/X÷\Šy»g“q %èL¸“óÐp+N;, WÒÚM`çøû±9l.J¢gn«ßs¡ë¶8~†´S@µ@ o¼JBÎê¶Oatöª¥¸\Vu2XRc–”§$þšÖA»bÄ”÷ýR‘ ²ÎôYŸÕ·¢ò«Ã ê³Ù¬j_ê|"†°é1·§¬lç~ú=Á¢‹À54ÈCæ7ë7+èòØPxRc5»¾½{ö®‚QbyË Á=òS5¦¹½´JâYN ¦1.ï[#uaÍÔFJH²K/T0Ë#†éß›—R/KâRêy|á¼µeÊ€ÇGø>–Ô€ß첪_¡ÛÃE‘„ Ï*DöNؾ8ù³VÊÔÖ´¼UO VhWWÝ Áœ¶>àÖL’OÂóʉîkiëÑŒ Ü*çîFånONŸözoTº>Û­¹ô÷râÚsòGSad5b%D¢}õ*[]¨¬²ç†Ððú!©r«,&Ì,(;¶¶NB Ìçˆæ)Ïd™àwW#N Ë5¶5 £“‹Az°/”Ó®Á5+x[_ë2ôJO•~ ÊH…þ'ÄjáipמRóõ%ÑDæÓúáë}‘Ôð·ü—þGóÕ¸bŠj¦ˆÔhçóâ;]`åI>µ­Ø³ù9{ºÈ#úeC/V8ßé12Å´ªŒÜû¸ ;ù‰ZOC¶š‹dミ2s;€Tü¨‹¬î=¯ñØÙ.&“bÀB¿^H5õ¢,S²%0•nQ8™=çÉ/0ßëÃtq7Ä(eóO|Ûæñ \ìNgp”hV)åŒú\é-òçÛ”ü_æùøÒ”_é(ÝoÙ_x)ûjì˜~üH”|‹ÎJâë5(êºÊßçŠ1<¶éžíÀ"~ëz e¨SQÕ©^'ËÂqInú2чb“ÌÞ¬Zç0—&£‘ÓË{GÞ*ÀÂØ¼°e{Â"y{'…W¦÷ÙÑFœûi-/øm°½ ¤niG0)*à¹ÉùÛÜß¾Eù3?¶Àô4ócÈ!ºc Ã*ƒ…©ø&p¶©e¸i‚‹ðújžšù“f݈èš[Ü_‘Ù)y½à·àÍSÜÉ\`¯_… WëÑ͉S—l¸:Ö²gQc~,e,[]=Àï ýY±° 1ð|#±$8 ·Ì¸6¾˜Ââq Ây¨Ïðál~Ïãt–õ½jݑٳìK8‹ðW1´¸”5[»{¶BæR}!ÜʘåA‹4ð¬éôúì5´ØÐÇ-nøí“ƒéR5ûõäò*•Y¢£š¼§Aµ \ÀѬl§q»Å¯b¹æÓõö°þ¾œvqÁ¨¯æ³+=? €5Gy®Ä«\Ñ JÝÜ+åm°4²ß|D:óŒv0Ð_~D¬ÏL“¢áÍDÝôÂH³ 7óÑ.ºN£ŒKòWŠéÕò ú" ÅigIeç¼#ivBÅ…UÍ*yüg­ ÈtرéhÞÒ1 &”ÿÓ¹ØtïŽÕÞ M<#kØV>¦°"7Ù{×~#”tdvI=WiuÜ‹à*ñÛ½·~Öœÿ𽓠WÑ~`Ä!îÂÆˆÕÂ_¹Î –Ó#$P":Å:¯·uõ$–‘X¾Ý¤æ ›àð¯ðš&w¸«ÍáÊKsà>?ÇÿÐÑ"\°hè÷™Á,¦gÜz‹—=ÁKF¾çÕ›¯óÜu·u2„$S§”†Ûœ}òˆëаbø‘q®KòÒP«c¸Þ+¼ª>1't9 !¯§çn- 94ÈŠÝL¤(–'4=(]ÖYìL6O—ŹYä¨ÎžÜ¬¸uK\ÖuÊ“Sõ—è˜{› ˆ7ù,;õß¼þT‡ÏiàÌÎÞRñ·*±‰d¤ÉhÌû[+ºe¥!Æž¬á ·Ó¤È_OawžËÉ¥ü‘–‡å±Ð@¡"Dc·;ĹﴳôÚÛ¾ØÔ"¢`¤­¨¿RÜû *¸š;‘±;*Y'ø âßR>‹±Ì è&žr˜B§hK!Ó›uľ£#)OÛšexe‡lûÚ¶&6$2•^ò=ƒ\s={ù÷ÝâsŠê” ¤,Là¨ô!´ª>&…’^‚AÕþóBås1ð  &q?}ÐáÎÐ%yB€Œä˜Ó'þW¾rwß̵+þèº`X_Ñ—N6) øS$Øýœ¦kæèí;ÕL1(9-ÑQ®ãÒ˜1»pc°@C:ÎÓízo€=à!5¤¨YyZØŒ:µl(Ó¬ëÐÕx]€§Œ›d…ÈÁiîª@.ÅYb×wNFšT²Öì•++V¥:õYSµ½—á[ñ©ñŸe(X02í íõ‘~„Û¬ úªtŸ½Ix;¨·àÐzrê]ÇtûôŒgnH"ElܶìTйµ^c§Š¦Ä¡‚Töb÷8Dàl馒$Ç çË‘—':g·XYµ êauúœ0Uç"‡xœý:Hyª×Ú£“x7øå7»h”`J!Õ?ºÇÙ‘æð+IˆN´¯0J¼v/[­”¼â7zv^î×N‰ëE3òòv‘Õ û‰é$a‹¸ ¥³§Œ'ǯŸ ÐAŒë³*o¢‰x³K¢Ç{_¥‹M3§© %lqjY 5…ìÚn7ˆ“VÊrîLÞN>§;éˆ ÞSöpĵr’µ[µèÜØÆá„:Ϙѭ‘÷LY¬$Ç Y5æ%ßV cª"J>5±7r’‘6Kz2¨LåöyÄìÑ7¶(’ºVh8?Æ!¬Ì3L&Ø¢+/0v¼.öæ«”’¦¹ ×e”SD¨fxMJ«´›L0´wÑ"à+¿­Q@éiüþmRç}ý¢ì'gŽŒQAÔqû~½±Ÿ@ž÷™˜ã5­c[¯‘µú5cæ–¹ì&l|þ¹3F{žV:V;ßÊÙì©áóÅã×fê—7™ƒÈTÔ³¸cãçº]®ÛÀCÀvÞð`i®ôû ýË2ª¢ƒ¾—;%õ«Äþï½7KZu­Ñ‚šQù-§oæTÝ‹ÉøÈ˵ʠ˜«·9¢Xí¶ŸÝ4Žå+5sýW±¬ò˜E«>‰f½¥{,Ô¨«ZÌ Üí¿ˆ°õ’gÁ§ °ñùC»7ÞêfTtvSÐÇ6gZ ¡â/‰L™SÃáig¯‹íöS΂R·5}&ŒêBÝ]“Z~v—¢;W#×U°ÿÒ&;VÕëünÏ0“ËÊZ Mx’¥½QÜ0§?,ΘƠú7¢ah°YLµûÑ;£éWÒ¢3ÜïØµ¯Ü•Ô^0•Ã}¯¨äBó3ßã ‰å.Xø&hôö©‘Ï3ƒ¬Ë™w“Fܯ“Âìà<{Ž¿èìx˜# !2sáŸ6¹(¾Š>Ù ÒJ› ³‡îÃFìÈ1K–ÑìÃ6]XÐ'7!ši(wÿ&¬y˜j¥Œ8‘"æ]Õõf—xÒ—wª‹7íóôp KÞŠ`?·m ³ÛK꺯v}*4´xã&¬r÷Ë{ÎyÖêáçÛn8"¬à°é´éYÜ»KT|aáƒºÔøþ9S†@iM›¼MÅŽ‚[fôîá%{’Û¦ý¶´×Ÿ–gú»X®Q6ÞrÞ¯ƒé±¬º¥u6AEt‚fȹqÈ,9ïIkÛóõà¾ÞÑ¥[Õ)UV¾×RZüŽ?ck•.vÜ©j )ͯ Y/‘^`d!E‚gˆÑ)æö_²Ji · M‡núͶô,É÷§ãZ/7ì4RŽÌvú™¿äöá;«ˆö)7žv‡TßÃdF±ÃèCitª]n™ÿŠí(q‚3­  åtˆÍzñôš;Y„ ˆö[äûoosÕ¥^JAÐ?¥ Y‰ÛÀÄ„›*µ»…çÖáßF†$âúˆ.¢·™ n¡ÿü¼=tµð)F1 (…RàÍj¨…^xYyˆ™¸LƒcĤjiXÜ3 `äÉöjFf_£S/èò ïuâvÓÈo5ÂÒææ!=úh1ýÝòä¸!Lçûƒý×Á×9¯?wûØFUÎ͹mÜÑß9&ŠP6_N†œ?CÑF÷Fi%…*ÆZåïsÒ‘tÙ(Û)L9ÝÜ97Jy'ørµ)ö#?"LÐ'ºdvcTåÿR6ɨ{¸ óör8pùílþ¤°û† ˜3JŠ“2–âÆÂCy]«Í ræÆÊwã¢k«×v”l*´#’•Àé¨ãUÒýžی̅­ØE†}ãž,Žƒ1Y¤ þÅ|ÒžRƒE]S¶ßCÛï„»$Åóõôì2º;¥09‚Á%”z>ÚD™›žÀG çï,7Ü 4''ƒ¶º›W6f›uŸm¼:lc½FH ª+ƒö¶äÉÒ ^P“—óôÙ˜Gõ%Á.¿kYâCPwSÀæ%¥’ºŒŸE`\É,žó¸Æ4LyKˆHú^¢kC÷Pø ÿ•úêók9V'¶ÅÊ+fƒ V¹4Ÿ¿Žfœ5¿5­[¥M¸>0Qµ©±›íÌttÞiÉ+Rq7sZ¿»òÜEµ%Ô@Û„ý6’eËRØÏ•‡êµ°<r>ô‡]»”³¶üpùíIÐu’v÷¸ž÷¹ÊÊ âÑ5®ËýgŸ­Åïï¨oE”?GSkÇ#¢ÉˆbC ×xg*Ë_=»¡ï»«À<ùQkÙ·æHÍ!êXUñt¿Z/ͧ±çaDa´§`m¸Å }7R?µ¤SŸß¤¯et†µò'Iæ¥8ò(ÐÒ¹0øR¾èÁArã¤Í’¨'´Öž=á½Ó_oUÀêô u;ÃGW JÏ™âDÊwv¹U•t©¡lcFì²3 ’®}‹o§rÆÅlØ{”&™Ìð~'ûƒÊQ¢Â+ ‘ 3~ìØ· œNÐØ%¾„ •5È·MD?r´ß¥ZÌØ1?H|‘ÞRëß÷Ó% þ¥§3hM ¢g4avÅÐ"f ðΧÏM¡¢¯)u­tS­Î³E‡Ým)ÖoJj½ˆ•HætæÎÖ‘5Lº“èyÅJBªuS*sˆÖ3Šô¡zü>Ñ&N;ÊHÂ}4p”)ƒ < ëX<Œ“e=¦ÌDŒssÝ__ ãQDETXšþõ)º–•*X\½å{\õMÔûî˜0¤xhû*ã§•Êi&`,Ò²À•ùl‘Ø%s Ò¹0ô»E¨4.1ú8x–Úõ]6IöUF¯fY˜õVôÉûñBâX—@üÝþ(ÁêpàsÔ{‘ÎØ-¥‚ÄW›ëxjgåJcö_ÙˆþîÐSnüÅ?VÎ3$öÛ!ÿ*ËÈcg9gFæŠÎf÷£œúÙËêóøbÜÖ¨wÓ–$}â\Ù|ä,¯÷WÝ=–ƒ£X*bØ·[·)i°ù™%nÔ†zÖº«€wò¢'EžVC‘²@GÄÏ Aµ°ÂªY&ˆ‰3‹xHkM©—¶¯N*††§ŸàÓü8ää>i³n’íÅ„ É»[ó5Œ‹2¿DŽ|}ਡÆÒ›"³’Òn0C¹6ðéDAUòB¢²²»PÍäAÒÚFFÿ,Ïd¶Umø÷Eõ€ âzQÎŽ5ªY·[¡M’ç"'©±û”_7‚ta{U;Ëh^¯‘ÉžsŸØ¼ùÕBL,)Û᪪·@M²Ô>ñ«—Já:¦ã dWgš* Qµ÷8&1 ·FV u}¸Áô˜}Ä^îýï‰b€¯ùçkbÖ¼CI#¶Aþo¯Óì:Óž3¦¹Ðàç½Ìp<3¨ 7‘ÕáPQ<’JçKÚ ©ÊCA·.*è_0­Áh®y+‰ðéÑÕxL¿½²h½Få®$¿ëa›.pŠ‘®y(ªr…÷Q½`ÖWZ,uÙéü­rK?t=ìU YœyRö+Í„•³fõ½DæfL±± p² ÏõE°*¥¶Ù‡[Ìššu"…Ï «UÑ?û>fÁiÿ'ŸãZ'© á ,>¢UÆ'¥OséÇܘŠJr{AŽ—m‰h›A†°$¹¿Ôг4ðS™œ¬!¹ƒ%±ˆ¶D3,ªK?L½/¨½KþcuyÀðbKGOE&AMoÆu±fs¡¹¤ÏÊ5@ŽeûBPºszJp¸>¥!†þR[¹Y;\¦ÎÕó,â.ÙCåVu6Õ¨ÅkíKR–¬¦ŽŠOoëb!E )ejB_FñŸNŸLþhg<ìm,ë¦$€+JÐå¯ã3Æ”ûÙ~çôÖÐXóHÜØ“À•^•#à>³σ; È f³?¤¥Fɪ]µþ8”š†p>)ùŽåÈjùE;,†Ÿ†ª¨¯…%;Š=—ýu㌚ŠÐäKË´½Š^,©“I ÕOÖ°Qå 4]î°@(G×ß¾<Ù@Dtý,4Û1MË¢˜‘£ ˜ÝØ~fÎÉß½.#å´Ù5©îŸµ*ÚKø÷|S¦·÷Œj å\3Þ[úšañŒ–”‡/?•Í›ïv+wÁÚ~9r{aû=@^ÜÁo•YÙTV¢¾h84JÚ;ûB糃Ìe•†iªFã_E¸ײ¢-‡}e6ódþ·è ‡€­¸W„×½J·ºxþ•ûèÀfB¸þXÀs§(hz·s¯ñGpvÿX2AÀóUÏVȃï]Œ,}¾{ÑfCKhxŒâb¯pÜQ7A8ʼnjø&/ŽÀµAq„Ÿÿÿófà endstream endobj 7343 0 obj << /Type /FontDescriptor /FontName /RCASMW+NimbusRomNo9L-MediItal /Flags 4 /FontBBox [-200 -324 996 964] /Ascent 688 /CapHeight 688 /Descent -209 /ItalicAngle -15 /StemV 120 /XHeight 462 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/b/c/comma/d/e/f/fi/g/h/i/j/k/l/m/n/o/one/p/period/q/r/s/t/two/u/underscore/v/w/x/y/zero) /FontFile 7342 0 R >> endobj 7344 0 obj << /Length1 1630 /Length2 20187 /Length3 0 /Length 21022 /Filter /FlateDecode >> stream xÚ¬¸ctf]·&ÛvîŠm[Tl;wl£bÛ¨ØVŶU±mÛüêyß>çô8_÷Ÿîþ±ÇØk⚸æšcMþMA™^ØÄÎ(ngëLÏÌÀij°1rqR²³‘³ã–¡Wš¹þÊÙáÈÉE†Îv¶b†Î@€:Ð 4°°˜¹¹¹áÈ¢vöŽfæÎ*U%ujZZºÿ’üc0òøÍ_O' 3[ÅßW µ½ ÐÖù/Äÿ±£2p6L-¬QyM)9 •„œ*@h t4´(¸Y[d,Œ¶N@j€©#Àú߀±­‰Å?¥91üÅvœìÆÝ€îÆ@ûTt{ £…“Óßw€…ÀÌÑÐÖùoœí¶ÆÖ.&ÿ$ðWnj÷¯„ìíþZØüÕýS°srv2v´°wüª &þï<Í ÿ‰ídñW °3ýkibgìòOIÿÒý…ù«u6´°u8Ýÿ‰e˜X8Ù[züýÌÞÑâ_i¸8YØšýWtG ™¡£‰5ÐÉé/Ì_ìºó_uþ§ê íí­=þåm÷/«ÿÌÁÂÙ hmÊÇÌò7¦±óߨf¶pŒÿÌŠ”­©€™éßrûÿйÿÕ ªf†úo†&v¶Ö )£œóߪÿ3–þß‘üÿ€âÿ'ÿ?¡÷ÿŽÜÿÎÑÿt‰ÿoïó‡w±¶–3´ù;ÿÞ1€¿KÆÐðwÏdÿ,kCÇÿŸ¡…µÇÿÎë¿[«ÿîÿLÊÙðo[„mÍþRÃÄÀôo¡…“¸…;ÐDÁÂÙØ`jhý·gÿ’«Úš­-l¹ýW[ôÌLLÿM§bnaleû ìÿVmMþ{éúWþŒße¥Ô$•iÿ ö_† ÁYÅÃþonÿ£Y;“ÿ<ü#"bçð¢gæàгp1ÿ½âfaóþ_„üóe -ÜÚëfbþWõÿãù¯“îƒùnklgòÏè(;Úšü¶ÿü£6vqtüKò¿Àߪÿãü¯¹ÝÆp+‹vƼA–i¿œk±s†&Ä´ûz˜Á‡‚íKêU óýªíº}Ó¶¹+ Þk‚¦x>[=Ní?öÐŒô`YSv§/ó¼I©{óQ7(Ú9iõJ©Gy]ÍËlAhq0©ìL(*é¿CNµ³:Â\=Qû‘ºæûa=Ú#ù§ÖÅbv 4€ ÕœžQ$?=RŒ vß@öîãÓfÇÂ’óºB RDú9dã j©VxÅ`ÒÄ 'HÝî÷j>H+“™ïY BÄÝñj› Ž?PÆ Ó·zÄgÏ Ömq•˜1%‹ «¢(¿]=Ù³ŠÃ9k'X‡%Bô¤*÷-ÅÖŽ%¯Û´ ’¹Ðùä8m™B9_k-ó`Ù”u…ß2žvJSSí;XbИúÐ3/áYQóœ"P=wQ,°–OôÉë´¥‡jjy=*ZuW#… “4P i0X{D|^ÄYä?IõåmJ##ã«“ëå`„"ØÎc*MÕäd!>'³qæÏD¢Ž÷ð— ‹]—²/j];Aq¨^$uo.£\pz€è°®ºŠÈÌ·›¦ ¦{þ;I¢1¸üf¯Ážù5Ðéf{Ÿ«o>I%/Á(ô”Ëǵ°OW6­øñG‘¯Gæ1(õëéÃ?7%ÊeGÎÝɈ4ù)Î= , ó«•É—8N²A;Ç7-Ôs.ÏI¤ÍÔ/×MJTTÛMuïidŽZ3îŽíbߣÐ_–ò¾<³ôŸ*E¹Í÷ ¤ëQikó›W#Ì-ð[°Ñ©_;NÇ•œ û}TiHY¼Vp|*t ·îœåvŽt¶k·xª5õDšâ_¿"™FjyÂxÏ÷Ô4¼íÏÖ«Ñ$ÔP=Öx[BuèͺÅÜ`˜d¸ëÑNbCƒ=8£ù¦¹€íƒvq¬ië)ÙH]UoöB{’žžÊƒx¸ÆËjn«ok¦ -iê–?›ffyÖ¡$¨@¦l¯Ç‹£“?¢ýÁøv›9é‘I›”0píÀj“¦ƒÀϨ¥áöÒô ‰º±UOˆ] Jv]<¾š„kã3Oaˆ$ï„XÃH¯ÕlÖ"ݲ1ËWVƒXåC‰“ÆÑE x\ž5Á÷ïcbM Ó5 t‚1ïÒdN?š,Yìïë´»4³C-ï9w•§7ãUìj±…ø—“HŒQY‰1žn’˸ÌÑó94~aH¸V?Óθ$]-ÓQ×[­IKYì…õËÍú»d"\䘛p†~á—[·˜»AÈ¡ôÝ„×íájÑ7µ¢;ïŠ2V›Y@ó ¤RzšH²×ø§éÄÞ\ùTa„:_,4èI€(gÏ¿ÄR‚ÎèÄ,ìILßþDÊÀïƒHé‘xeÖø…ÜQ¹Ó•PËþ˜ì-¦ÄÀà‘ÁO;Ø$\Py+†tÀ‰Ð¸fÿa•ýàgžáž;¢¨“«ÅHå÷ËÇdÙWeümf&(||ì{J¬žÙ‰X©&À>{ör‰"°gÊ)ðîÉúH/¸_×ÄãzR§Œã`µfø€¯F8ª˜PüN2£¥uÍ››¹UleŠpO“åAq”JnªYûeÒ®×?®C„ã?’pÿ¼²†w›kÜY±ÒÏÊ(½fß*-?ûݾA¨Ú¹e…l?æ'ýU­r^¶¶ì]z·¼Ý¼þD.Œ Sü$øÅïSB¯à€°“8¼DÚEŽÿÙ,Ac£Ã,žÕ>¸^Wê­¼vÆ,ͨÂ9OÚw?ÅRgꟋÝG̃ èþÉà¨ÄĶgojT£ªïÕKvd`SìÄnû3£„UF¾·ŠÌšnú/¬º³ÑÁyø7ª®j,õ?xò¶2AÑ¥—?|@L˜)îöÎ9V¾3%R¢õoòù°ë±ª kaâËQríÂÄŠó¯0Á× Ûi™ÔuæíÑQfê6¨À”Ólâ  2¼®8/-^gRò‡Tñ°^\„ïY³ŒÖglHÉð·ùq1§^ˆÜz˜IüpqŽ»=‡£„ñÂ#"þ–š×ßPY9I×ÜûúBÍt0ö†XSNÀ‡¡Õü9·ÑD#CNglr‹l@+O–á¾L¬ —©×¯£§/ð°çKFúŠÆÎ¸:KÁ-¬*°‹fñ†D4"¨¿óE",˜C)cz<õÌÀåt‘Ë•¡(Ñ'ë„l,&¶˜Âwb×Õ žª×`þvDÚT¶wîqD@ý1(ó½ñd†‡Ü©=AÔ$W-ó1ö)F¦²rmu§²ŸÛ‹Õʹ&òsWOo8¥^‚ÏÒM»í­u >zÙ Í…âÖw‰ÑÄ–ÈœÕôpÕåÎn«§iÓï» S+[Òòü€‡o†Á\”?}YE4ãü#“#Öû«==ˆ¯eËY>U áÊæÄ¡n¬ÝŒ7ÝúùÒÇ Øeµ(‹CÇl‘—~Hë|nYN·…¶Bõ$€~§¬à»Ë'ºTVäCO ¨t¹„ÏŸbáˆöK¡ÉVyäçsÞÊM»ØÀò%áìb{MØx8²iÃ%>ô5 -Ù†EÌU¾Mñ«sGé->ÖJ}Üå˜Û“š)®\‘ ú5,¯V¸D.½z—™CAtϘ¢Ò寄“äÍ[Ž(ßwŽq>}úÍκ«€2üˆµï –+ì ?µà†µRÊ8KÅ+ÿÄ3uà,13ÏûšªÙ;‰V[ãï«™¿‚ÀÛe ¬Ó"a8Åí-1àJqL(é‹dSÃíD‰ôX TÙ"ÁÒGTä­Ê<´*8ìu hiÒŠÕ^Žê»%¤7x"³w·üZ¢º@¯S7šð ›™›Bœ£{Ï#;'ž’™ŠB··Ï‹…œtòK’êØ¬­$[äð˜·,­/,š^{Mq0ÅäÜ*)[4Ðòßhpgýø g¿½†xˆÙ4‘¨š’_Åw’q¤Ç€J¢š| SM2ÀÐ÷ÝÏNÙ†”ùúÒ-tŒ¼Ÿ" (ÙãK¶k<œ²ÉÅtïð–Û‹NýHÍ ¿pv•4c0„>ób~&x æ  9Ê*ËU]+ƒ¾ÞÞ•jºÑñ¨è÷AP£æ\#§ÔÈñmürÍ‘åÏÀŽY?¿©ú*·É…(CV>‘,ÆÌ·zªeX‚ï3šžä„Ž9“!µÆòûöÌ'XîóE³Ð¶žçÿùþ´VûYž‡Äþm±>´‘†©².3^ÊC7懲÷hºe¡ê×lB?æoR× â7œô@fu£1s Œ'¼r˜–lqkgóŽ\ü•HãóŸý•ÂPƒí«!$žï½OVú¡áâ½ìÝ%ZikøêÈ\©öÕ¤iv¯ݦb[ùJ}é#ßî5¤S7jÊêóÊ‘g|{4±\xG†Iù yœ» ”ÚÜAOª4FÑ ´8 f(¥aRìnŽÚ"rqð®ÚcíK(ú‹å0Ž“ë’ zÖ¦^´ öÒ­Bá„"U¶~ 'oUàˆ´m'ÛÀî…Í æ¿áØ’&˜‡œøYÛ£è+i¾éæ›éɡʅ0XР”Í™üžD_/˜ naû5Œy¾¤jZ‡ Bª±ðÎ1Ý)Ép2Áè~Ši˜LQä.Hƒ™ºÄKh”W>·PæÂûy+è%`£=‡3`\!gœ{, `Ž’C ˜ýÝË++¥fØsø];¥¸Œñêfœ—À¶2`¥8´…ONd‹¤«šy†4ÇãÊØwÿhø÷g¬<þ2‡·ë¼YWrR)ntíØå%'ñŽ·åÔ൪„»†ïðRÄävéÕÖ£z“0>OSlÊÞÑ$ žD ¨‚Z…H²£ {—yp7eÐ]×WÏ3Yô¤¦,[AÚ¡÷¼¹kÿâüüØÏíVP.iÙ?=é(“+iz¸t[ra¡ÖôóGÙ¤5%p .w Ç^A˜-þ•˜ƒý;3žÚ)Do<Ñ£¡››‹·dˆ¦×USªDÔ jæk´L:x“Êa¹~ô~71ÈÒ#PÚ5Ü‚¯­…‹ÎÌtÖÙŸî'âĵtåöSõ5EÎ#C–Ô5µGžèÔJj'Êæ4ÆíÊßý’¦å|ºÎ0»êgƒüǬ‘[)ã^Eú{øÝîÐQpè´k]tßòPòòD~a<=8°$kæN~ñÕ(Å1º>éZ7ØÌÂñÁ#~¿ï&5cø½­Gév¥úßkµ9×ø±_Ñ®a=Õ&"ZÙþ,yùS·UÅŸ‚⦡KvüÖ¸]Ûu2 AÊA8m¹AîêÎÚZbïÏLlUí¹± BíIáøñø¯~‡‘ûkù4û'ÏÏþBg>¤O‚z™U7ÛÚÃi’ £oÔ ?²wÔáó+ ¢¦°‚•¨ ihûzV%/“f¦¶ˆè©ÛEC~46Ûçɤ²T¸öz¤ÅÉCÒ(\)‚(óý©“ ZUÖ ¸”}T»^q¨bâDLɼ'¦/Î$ ó•\’hƒrÞûÂ&“ w9ê WzÔ}? Õà,!ȯBª«ù˜Ì3]§y݆¥zå>¥k…8f© µï÷ÃcW€SЀuÆl».}TpÖ`x:üƒ~¨ð ,o§LöØ2~äœ|ÖŒm p¡rë-ØÐ9BÚ|u†Ì[.ñðºÃSn3þ2ó•GOœqÖúýñÓ1ÊÍÕ’áÛÖ5Xö÷¢AÓØHy’IKë7Hëë{°^:0ÔMv†/søÐŸ{`2œ ,½!wóe®àö2=u:• Õ  ˆíÔTù+RèZw,É@£I Ô”õºÔ¡ÿÀ…¸7ÊÙò ð2|Á73Ùüü)¨ÄKsNá©O$ø 3ZA¹¨Ñgg¬CT¡%ûMÂ|hÝM{ÂМ 3=Q{…ï=’>жZoÞïÍfŒœÇ(¯9­»*Ò<¬Ù†„µé ÕCËHeœgäO“‚HšéÚY4ìá4Wxxº\ä{z°^¡)rB4\u€Äe¯iTŒG`Ú‚€R‘¹L¹æÀÏú¨XØÒr´|‹¢PM.ç¾uwø²pèp”»%0T 7Å“' Y[“›Z” 6Êvoh1Û¶3äÖ½›Þ^iì»3q12‰‚kTv$Ž¢\‘ôzŽ¡Dj7j9{¹ä¦ÕkŽ\Ö¦N¶à3Ow ÆVNN,tkãÓµ r7§XUAt êÔXéOÀ¤".üÒ ö|f¦ ”5nÏ ®œþa,’&á“êå®Ç^hSæê^ð‹;uü)¸2Ýóí'¤Ghh!ôÔ'h2ÎÄFI•#“>TY(öd)‚nyÍ Ÿûlã²b×¹¸ž5õÅÆx\ø¦NßFSÊ\ó&¯Ùµ©’ç.]oµQðÞ< ì%ПÄ|6Æ28Áè„#‚§ä zÞûàT5>ÁWO-0d®˜xüØ1I‹’Î…KzçX›¢VÂAW}“3ÿcWÝ« æ=>Z‰a5 êbægó"9¦Î™s~yƒÜÈ;‡û+ ˜à-EjÚTRžqvÇÙŽ‰ET~R³òÚ>òRð$)šgGØ9CÂRc‰P“’½wÄvϥ˽î8…<ªÎ´èÅ!MKòÔv\Vé P(ja _ãRÖ·B†³©€ …z ­nâw ¬÷9ÙH&º$…*äEnýצ*Aq"íþ¬Ûu‡¸-útšpãJ‚ôþ©æIß÷ìS­¾!÷½W¦Éw­Õk¼eNùT‹âF—¼Íƒòò†'¬õ³mäŠHxUj™=,ù q³œ Ï/íû8£©¢XS¼p­#å°xeÓga»‡=õw¶ ¶Å¦ˆ.ƺA¡4Þî¸Y3b`œ¢vÊäL'zJ¦_¹Ì$ßn ¸¡þºnYXh]VË8Ù£àLÊT¢)´ªo£Jý«UH·O“vn8Îð²†þ“ Ö•ÛjKmšók…ßµ£GÝh‡DÜ´Ûô6ò]À —+e›9ÿ‹&EÉ*h¶Ø°wn™óàeÖSgëÆ~äTD4+«þå•×°DsºÓ»õuË‚ãÄÛ,ü§Ý´Öªþ5ÓáO¯ÈI?^™ìÙ1…^Ëâÿ¼ü‹=Zp¦óg#uÍBˆ³˜)øÒk´ýPò–ùdʀ˦\Ê®’K2¡é©¦«âIH),èÛ(-¿ûN>:E½Æ.Ð`A_¢Òõ“'( T&`¿§‰:(½·fۮ䣱c©ñµ^a÷e§îE‰´ÒÈ| ¡Æ‚èb¸Q#3÷SˆOÃÞn¦b‹ŠýHžý½ÜR'4ò÷a­’Æêe³¨6fÂù3‡šBu¹¡Òòsô|ö~”¬·²<š¡âê#QB€‡I0ìDOžý¥:í*ÆrçÖJÑ<ýˆDnò‘ßúç…í᯻‹EtÌ=ø¤, çùNWG ièý+:Œø±F.Ý?½@r›nl4*Î0‚;•g‡Ö¹‘¤ ÷œÙ[ÔË{Ö†ÏÀ¥]‹ßw½ð¹'ÓÁßÿ8ÁL*êœþŒîŠüÃâìkæa™çCñ:óÁMÌÀØWro„C)Q² ®–xáØ÷[êK_ëøbÉ"9¿„.U¨!nÊdÒ£’a×í±ÑËB;¬¥æV¬DøäËz%ÞÛÌzo/KSj>íg>rô‚u„‚-Û&^ÇCP»ËV#Èñ §¤ÿ^ëÍ„át‚Ç5ëxHiœ?c*_É$¦YOyÜü!ã›înÿå"lž­/_í %!~¼Ë¹,<ýÌ,O?k©æSŸ}ºê;ñgO®­ægž±LWÍ®Z£ææ›n¹ã½Ä½Y·& On‘c95Ö=!°…×@U2ãŠÊ™®2-™•ïGÍ (vcß#ÐÙL)ÑK§JÓý{˜gÍd šž¦P‚{bCɱxQîIrPÜ5idvE¬ö¥t_t®`Ä› Tˆá³ÚÓ]Ž){ é/ÐÙ¢YœœÆDU1yÊýx+ÑM?•½ü ®‰Y0eI(ˉ2GyÑ!vyEžÖµ<îÝ6•HIö Cšý°, {–eJ`Õ߆Ì'ÀÜ?¡dkuF˘×GÃÕ_-ÅÿÀ‹yùñóKUPÇ_OÍË×]g1Â_{Ä’»²äÃæî¸‰(š˜›z {”ñ7*é…ÜqzYã†Ñj@‡ltðüŽ¿ ׿Íe=ú¶(âUtü!v®àÏç9: kS–+¸Üè*C¤ci:'Õ ¤w?@ÆÏA^'Šˆ8ÄHtœàŽ‘K¢SAD™3lg¦Ìœõ^UÚ÷]KPµâºU)‘þºí*“GÊYux:ØÊšÑ£C y[<² 7gžø¼rÔw †û—^ /@¶A³¶½´%’«¿•½^ÒÖk„‰…ê.‚Í·²jöcÀW#°Díûâqû+ñ.QQ™+±f‹mÅŒîWÈ©ž¬\Kø‹Aby»ó0nà ¡½Èž!òµ°UæÆèDX^®i7Â4©zÔ,ଇÁ;à¹aŽÔA=îѬ^=üÜ úîƒ0ì«*Ò1áͲ©ÁÂÞ¡úr”‹÷¬–æ¶Í3­‰Ûrb@½”S~d¶¼§mʲÎiˆV¡‚buZ„XðD€‰ÍÊ"dt“?{b?DÄ×ßÑ®¾û6n’Ú/àë,Ê ³cdJ`C½êË}xN`….AD#Òpÿ¦7|ê7Aã˜ÝBLH^ã@¨ò¾pÏj—H ªÍЧ¼ÙU”TK„íÛOŽHðëÃÚèø e'ßAø Jîȃ¨…bã“>©¿ÍHZ^éS=®H丰äÂHâ÷ŒÚºsçù7M.Ás¿v‡.ù=^5Wwð³ËŠã°caZ6Ý$µ¹ÊÆe6]ã$BÓz¯§U¹õkšÝç ªLÓóšð^³=$À/øß\–éÚN*ØL?Ì+ ý/½ú-WKnÑOžd$sd=õ"âN>GÕ:ÁòrˇÀ wâ$¿QžJÒ|%Ó7ª“%&À?ç=¾çÈ$[ŽFAÌⶤ§åö„…-|xëLÚóö&" –d’=¾œÑÍÀE6fª€í’ÂQÍÑz¿þCÏb¾Œ ´&Ë…Ý·JCÐÚ¢¼774PS)XæíÚ_äÒw{óÝΪp?‰Ù‰†^‚NX¾’³¾@Ž(3êÊ4Øqô5ž˜Y\L²Ç>e! Ã4›¥Cå%¢Ù joA``Ìžy²–¿wÞܘª™yù#0 ý’ïGS9„`kn+Àô§)FQ"ÁmmÙî MŸÒûâ]7z ¹6Àc2¡ªëÕ€,wô)ô0ýtÚ Äjq)‰SZÈÿ<ȾK‰öK¾Âs,z´”y Ÿq ë2»·Üˆ`y>G6‘?–Ên1u-øU\K³çøí¬ñ°ÆÁ=¨×¦£Ù`‚ÅÌmò’9¹˜Á½Ó³ÈÁSžÛh7;%åĨ!,úfG±ÈÕ¥«~ŸAspZ2•ìSi]Öâ ytæz¾Í0•â”—˜:KéüxHŠŠî«?Ï—¦h™ñùE~r÷q¡ò¿Ît‘²Â¹CÕhGk÷\´Ôòݨáë@ÝWå!’X¾ƒyÞzô²:ñŸwJìÏBõeê?úd?E3bÛ-¬Ò†@ëõZ›c~Ùï2n#Öö ðåL×öùª¬LÃ]4ù¹Pè»=Øt÷ý¢k¿Õ\Vëv‹j[V³Ú•ÿsÞÂáÓßðËž ë2sXånfH‰|RS~öê×ÄdF|M·`¥v¢üÔ “—“k B™QÙórz‡ŸÂœ’ØmÙžÁbö¶(­²V\¤#ûM ø%‹dÈÖa\ö˜b¡o˜xß° }g¥OÑÃSöžk)Úy_œ%yE4à¿Ï ®9påÃÚ!߯"m!?ªk)º×]Xh$‡FB+¹½W{°-Þ5'ä‘{å<œá´û‹èu)˜|× +)§œKëÊýˆ}ËôÀ[¸ n©¾!ž‘”¼··7Ïǰq‘òö˜¹Û®¼°†©CÑ“xÌÞLY¥w+F»“ –TRá2Ç n\3›÷×ç©9s ææ;„ì2M¿C¯8L¬™»™Ôpþ’H¼¸Y–^!º‰ NÊöш7*‰Vˆ‚¦ÅÖå¾ðG_v‘µõV‚ÈIà#EmxZèåL÷M(¢³ÐÑJoº0ëî'ë¬ó—Bß!Ñ÷ÛyÑ‚©2éý&`çÄôºÂ+LjAÇ­aʽ¼3€³-!ùbö#ZÝØãVöJ!”§Ïl„m°nвúƒÐ¹gbY’a¡8·0ψ‹0@ÿ{/᦯oÅàÌÛ‘`ØÓˆpŽ™€Œåíº!){É Z¹ wgÒ-á$äW˜ÓLûÒ%×sÓ<"U­Ô<ò–|é-&K/ú X42{-1 JÐ C\Ÿ(áåè ‹YŠ¿ÐÇ™’È‚œFꫳN¨Àó*¿S7XÇD½|à:(–‘E…¥T;…A0z²òýÞ²†É‚,‚š-) å*ó},n)†:kôLxŠIÓPÅœ˜|±ÒŒ;®™úãì»Fa”Sœ¬Œ/È:–®jØRüØ‚*oñ‘¿×C‡‰Áùω…n’«ßu[C£Ì·Ýpì뎚Ò\´&¶Xéþ¹™,Ruðr›Dî5ö½çIÉpµn¨Ïì!ýY[õTÏ:”e×ëÒ>ݛمŲbÚçÃ< 6páHQ? Gpj üidãÈýE->ú¿ÌqÝù¾p‡ÄKA¢“iÇèm/µ*È,©Âr“ÄWNʉ7 ÷gU™a2¥ÝX9±X‰÷ëÎ6dtó¹½pÊlý ÂvM•³Â#zZ¤2óB<ÑÀà‹TÁO†Ï» m¾ . šX¼¤2¼@¾é*H(å ,6iªÞow}C«·H¨é¶?Œ'1Ä^|Ëdé6”ÓÝ–¹a§¥±? JVá›™ƒÃEbýY‡;‹ry5vt ©Š) ³‰Ú±ò65œ¬§pý?š¸äÎÑE'^ÄHPµ\ÌeSۡܬs é­Mç^‰Cc¼¨Â!¢¸âž\p,ãÜhyöðÍ…‡vÄ6¥ùL§a4dTa]ûáC$Nå%l®ŒœG¸=‰Ä-ŽEWr}ê 2s#24b8é4q"ÖÐö¼RJé´ÙŸV§Ré±s×_O½®2ì¹$2ð‘Fâ®6ºàãOÄÌš¿WJ~•ïEØ”Zll‹;訶ˆÏ¦÷ Ì,5=Czˆ9˜ÙǾŸ¯~’¯L]•b/Ä·éyßp:´›MÈé²Ç}.)o x$lŒ4¸™ßG†Þ¨ò7FYy êèš<¯Ò¤óš`ËÈs,ìJI¹“Ñ2¶˜FLÕËXÖ¬B \Ýš4ýÈ7ëÕÏvßÖ&ï¢äy¬cgß§ÌÔéðœ‡SRƒ\”?OŠû”!åðô¦ñSÙLg=XîkÐñš‹Ñyº¦ŠRWë'Ì#â1¹PXÓ«}üƦGi_ff9Ðdá s¸<µîÖ.LÄ¿„·­XVf~¥„ë¾9ÇÊ÷ÍŸ HíHТn¬6Ï“X†æ(àÞ .B¨ƒlVмòta`—Ôärî~º6¬ï¬&}«PEl~òBÁÙÆi]D£Ã?`yÝà'ûLèdS¤àæ³q¯ \NC"Øgj±sˆ]ÎÑVžé|ƒ°µÚ[x@zM†HízNg–ßøv(o%Ò“gOVgôb Â×IE•鈥iqt£mùòz""Ä_mG+g·/†{· 3\.+•%ZÚ„è‰ØÊE¢µõÆ|¨º!Ðux±¹N$ ÁÁ.:su‰ë'Ì­p)ÊY5±g`…שÑñ9²MÖ_cŠX>$¬ÖQá 8|ý³¼±>ºvß:DÆã¥£h@‘¢S^I ¥d^|-pÃŽÜ~¨Ý;!€/D¯äƒhšR9q5 •lìR8 Y:¦"µƒÊ½ÞšyöÌVª+#ÁÛðÞOû~e9ʦ³ ?ŽÂse3t— Ãõø??‡±¼æŸŽ ÿœu>2ŽU=½§µÌ#©p_ µ*ŽÔsÂôü,#çé)]Ï*h‘/}‡Lv”G&¢úØèß#3}yv4mïl„¥‘%i˜Ü¡ëù¤,´:>™ }D®ˆ,’ѱûÝ•éH–¾†ûí`&²Øý¾\'å@×Enâ1o~Œ¤µ"ß ¢Ó*Çé´UÆù©j‰–. ùÂ1‡=R¤6´»3K›Úà4ó|V8£.µfl?nâÙØâHr¦¥Àˆóþ(Û‘ w¿¸¨.™ÞFQ8>c·â¡î\Nÿ×°¶+É™Rœ°aå¡K@ |Qß%¸<ýrH{”r]̼b$9øÆ·i¤²í~{O;Û?‚yÕ[1¼àºóƒ¬$I\“µ4¨8|Š}m”BC€çÌ’÷§b6’hÇTO ¬cém›VXÓ˜,å£ý¡òõH­>M¿G( J\fg‰=Tpç…X°ÜduÆú¨ÊxƒŒA5F¼ß÷£6lŸ6b.XŽ—V°özÝúö661ºgÜÜN1Ã…o=(­§Co?ܳ[bã‡Þ=M‡¹ÐéDœÚšf­1IÓ™Ík:nƉOpÔjAs¡NF,wá—¬ˆ4y«ˆ,€Y5I2Ñ®Æ%””Åülä/wpÐ@ðq»íjÔÜè¨SH7þPÎ1ÜM¨– ±6Q1”“@Eì.´8@”O¹Ö$¹b…/ÚjŒ£¬™êôÌ+žeG‚RÕ¤³¼ÉGMšÊ"¢5O÷ÿŸÖuã¡'Åýý6NñC×(còhÎh?AØ]æ§e»’M5ò£Ä<3„]²níz8\À‹2zFà?äì.Z-˜Ô¢EƒKCЂʃç2ùŒ˜8‡Þg† |a¹£â¡x°(hg¥”g’ÝHQ1œètÑv¸ÙŒë3v”YÚ>±‚©pSÉgb%{Ân‡M8î?ÐÁñ£V9­ævœÆÄà~GŸà¡ˆ|eá[7ùÞ΋ü Móðí«Nê½~ Wv+jx*æT¥^çpOʱ:ÙAÚäF™¼%î,Ó¤KQ…D(µ6[‹KÍAe`ã'JìUs=Ûóű¨»ŠŒ˜wåߨJãkÒ 4tåÖ·,5öÀPìÞÜfiÞ¬fE£7ùØÿ¬dµs›,ý“‹¥ÂÉŸMl¶ÇçxU:aaŽjÉí{ZøNJäƒ1^!”Žr^-²Tâ2ZHß‹µô’ä0©Î!ý!2}öM™ëˈEz½·²9•›älä ƒ/Uÿ¶¤œˆ»¹+®n·°üe޹=!Ò…Fîhìzà`7 +Mƒsi“ß4;ÓŒÇ0—¶Ó° ·|hÜΦXyj1ƒotà7™éÉh…¸U€).;𩤭 ãCš0:yÖOFî¤ÝšÅÃÞ›1F¿A€zý¾fÚ Ì-Ã/IJr©üG}\}¢toýýOâ¼ÑS!öEGÄJCu û«6lvŠj“.}Šû 7Ÿ]Ýù5×›¶‘3—ãjÞ'¨äœfr'Ê<¡ôgáê rÖ€ÄuÙéâF‡Y"?5Ú6Áúž’ðÁ7‡“µ¼ßºÞ<‰q… u?³ÜAÿü ñ<|fÕÀ¦³þ²Ç[IVU»KÚ{>Ã¥j½ ««ßô •| 98CÀ^\ ãDÞ½+1~êE#VòwñiQ솃-zæ1Ä<3™wn8ßÄâJ÷ƒô‘ÏZÆó1ؼjÔ1ià*¶ŠIšÛÔ‚~]»ÍZÜM§¸‡Ë8ØÜaÕŽàªàè™ù ×ÐA€Š£Çm6ISˆv5ã0CÞ6û5ùnpÔ/Ï%§ßÜÕIm1:ï2ÌQ\H¦Y[jÄíÜø›×ÜyÛXµ'ÕgС5A ç.D_ñâö1F“äÎ,x=Á—J¦— ¥ˆߎfró‚,¸®·w¿êÒæ]ÏÞÇÆöšÆààWï—×àåøŠ¾|NNÛ•çÀG"”áx4YÈŒ fö—ºÃ]9:rAf¤Ÿ(ñ¯µ+Ý:M4¢p~·(h ¶èÓﺘVùbÁ]¬Æ`¸U°ás&m¬ßöØ?Wo¹Y%™é«^¼`SŠ–$M ˆ/¤âN§Ø»$™Û!éùYXA¹š8u&þ<(þK·Ëáñãlv` t泟àį«äaâ![Véx°èŒÄd¢19•©µç'Ñ™5´¹¢ö+UR™¿"±JÚ[ؼËy†€ƒúj v‹/ÕáÐeXwÛ„®n_ƒHvíOÉ‚é]Õìãn†xö„a!xÉñ'6¶8¯ä–Tb•xö³G‚R‚7TcYg«h7´Ñw]É‚Æzá¤H*O¡ž’ó$¤F¢ß£~ ‰wÄŽ´76¡) Üö8A‘ŒI¹‹ÉÞ~ŽäÏ;Äk;Û3åéÒ--£šïK^üMÿ•™@—•ڟ𚓌­rXª¹ÑÈ £!>?p›¤®¶ŸACçäK"BÎ6Е^‘ùc'iòñ+k¥Ù£P.e{gèWÞÆ‡—Ä3[#?]²%€Ï«X“aˆ~8²ÍÔGÜ;éô¼Ý=>ÿºè0áùÆ@mø“î“f/ÎvK=Üú“äZ“ö¬g‘¼ÔÇ×§.dÉyYw³fjÏ jo‹Óx.ÏÔSNîæ0èÈ(bJ:ÈI¼µ½ç qýýmv¡¸Ûp +«æR=ë– ¥V÷¬>‚ tÀ)Ü_cÍLûBGrà»t5·½ê5žšOʵŠõ[¹ÿÍ\wÔílabãúî ¤ûiN¼ÇÈâÞïLÈÔ4·ß*”S%½R‹]峟Að°~¶â$Ïeå­Y íÛdKÛÇ;\ƒgÑ•<ÊÝï0-D@¸¥~ÛÅÓ®[MBD¾xu½¸ƒ_›*uäL§";柫ÙoÚŠŒ–Ý÷SòÉöj~<>Y¦Ç¯?-£?o“èˆFª@[ Ýš[âd”¿¾ÐUðeüVëâw’ÖZ0¼bü¹¸É¢b8—¶'À+z=¹µ›­m¥É1G¼W¨`R๖Hwá…<æ…X»¥he®Œ§k$†Á¬q¾ Cyü™·­+fuOõ‘ž“À´ÈžÊ¶Â5RbêZ6HØzcô:âjIÔc“iN}l‡m¤6¯ŸL‚ƒì 1¾$RÃV$麗\å jͪóÿ´kì‚…®ÿ}õÒ`Òö!îºH BçÙFx´#ë\Òjœ]R×gìÃäh‘ÈcP<}ž#ñÊkßš‚õVƒù]SÅÿzQçø[1Íw7†WKpÊ©ÿ)¾Ú^5A‘Ûi+i‚žó…ŒBG +¦Ÿ*hQŸÖº¾¸ra¿™óA>¨%Ïés½û×òke÷þôÖn¬”⻈Yõä¦kóÊ1Ý$ ucàÛíç·{Øw6XoÇgå~Ôr7ì\Mgõ5Ñgdx¨[¢*¸9úÚçK˜¨ú>£"&æÈ“ð ?°Í$3#3ÆsØPˆŒšëe&sJ¶ðH@ Wh(Û)°\Ÿ >•{:žYbbözOÞùn*8³ß%vP•ÂÑÐ#š$EÊØ‰æi¨±Ñ’ÕC”(°ä궸4?¼‘3kkq¼®> Ø?d¹ª‡ ·yk6-aŠnài{JºKùx¥'PVùsðŽÕß!W2¡Iû+EZ<.ݵ!“th rŸM’Ey;š±Õ³8_©\c>Ú¾ñXè”PzÓ353@¼çŠ0±¨ØEĵuš|Ë _³Öå8ÁìuúLÔÄðî˜\í®q²ßQÍvQêìO–µp-J®Á¯Œç$!dEkµ(/QBó{ј®Ì® t°9ã-ÓÚX@ÝÈ6åv<˜IS9uoKà8ÝÏávF)o)‡sꙦÃI“ß–²é8'±yÓ#÷UÑèÜÌŠFHJjo[ yXÞ•_µ~9õ'?«ï뢧­eÓô”Ÿ<%Mà½üé¶¼CNÐ̵”ÝI¥PB‡‡…ÀXÚîÃM&‹äÔéŒÝ§F¨¿7{⇨G ~àðmüdÀïË«‰‘Õ2Ørx7È ‘{ÛÕ©ªB8©îd=me2°0æ8y÷(é dlJG/f9DÞ;ZìÔçè[ÊõSHäpšr¯ÖO:‘kèÞ›kn×`Sxv  e.´/k:!|ÑsëÈ‹9ÎÎrÚY>ø*&]HYÍðËp"”]: é~ç,ˆ^»c`Îë_Z–¡ßRèËüRB)FJºÎkÚ’hD>mÆMcÒÚØoª31mCfì”I˜ Ýþ‰=~žÇ'uæ¹\áûmÝ@m«wÔJGAà)EDÈç‘¥WP¸jáßwyÔû€צ¯Ù•ôG}L50FBÄj¾EŠý±&)¶éÙZgû‚YÚPž¶tàÀÑwź³N|?ãæçmOÇ€B{•O|BÐrõ”fqß9'TÄAs¡ôjœ•^š\ä‹{ÅŽ»½‘¥IÙè Á1ÍiAeÔÑñL÷Î`¾åwƒx±{‘ð ÎŸd±N3ŠöxÄ›^ý§dG D=Í!"F R0"åo9¼>acŠòûËRˆ!]Ê-aQvï7Þ²NäTi÷þ`¯f HP ›õ•q³>Ø£³Ï¿yf«Õ™aØM9ÃÆ-ÓÁ]‘£œ:øpvääu–W$U{º&´Öb—|J$±_zŒ~IóÃöç’G¿dçƒó.¶fÚÎÆ¥JoÃTí–bùƒ,ceB©Ù7 %ÔäÃ(F;ðUá$)@‚ÛÖΨÇßË0yš'ï)~_Vµj€j=ß=åWs/¦—×ÉY¦©ëß–aˆøäkp~<ž­Ù©.3@KÙ‚¼!ë2†Ø| ¢éXù² é®?†‡ ~Ò²Šð.›u&Ú^‰i & ¾ÝˆbAtúÿéîµÊVPF;;iÀ]5‘—UÂðçöØxQ»2ÐŒL­oˆÁÿ£ª?ÇY¾!s\æï!%ì²Ü¼•”(9_‘P ~¬ý´qyÍÎy2u§G¤Yá  kÒOc47dRðµÀÅê|ÉÍÚ…§8¯zR»ˆßPp?Ye¯/×SV¦$y.¼Õ·Z;Üj-Љý«Û[bx«Ø©¿CJ÷]F‚d„¹j‚ 'oeÃa'ZxF™ñQ/C´ˆ&Àµ²0´Oº(Ãõ·÷uÛÜãa ©þÒZ«@+)JÞàžÉœªT¾þµ’æ`Õ´chôa‚ËHz`6Œ%©‰f^Áë&!κ¹¬yOǘ˜êý£KvpèWJ tdâÑû\u=ò3ûpIÍ\¨énlõw†ãЂc,µ*òU•c“°'Ì ‰>wÀJdjz4tC¸tOV„¬éÎô(nÁ“!äY§‰¹—‚òö&û6AV8ôÔó“H¹nÆœ Sïî›HRUL] Ö³,HÙdõƒ.<¾îb/áó>ˆ¢n®àq%´ÈBOÍoïiêá„x€ÎmÝå#~%‘X÷ÁûÙätú›ej–¨ôSú,ãLùºdšøz¥Vò„ßìH J›l¹ySü8³ŒZ—; Ïbüéñx°o_«Þb”˽æ=+& »Å Žé`ªC^y+¼‡ áªúýz],PÓ‚¯,:à`JvÀ{Ö”¶L‰`pŽÔ8`]B—6ªf.ê¦ø£a¾#¸'‰qé ˆ?˳ßVùé’Yì=R†ÆyÂ@®ý*´X çæœwˆRá4ºªù¾Õ0DÑh‰Þìâ!Ó«ðtÕ›êö”Úù%<"yÓ¢½iè¿€¿†‚{h¬éÁé%%=&1Ò­èZ•rU½™ïÝ ‰&ìéh®ØVô{§¨dnÉ»>â΀¥nå§½£¬'®eÀç+0NqüŠ]í£É3/.~±é—1ðè*àµÍƒB`÷:Q)^ì°á|™Fc0T°ZºØ§ApzO}½ÂE§Lóæ>ä ´‚:_õ~Ž¡šúr˜í^YmCŒO-"x‘f7KÞÃ6Â|9jà¡Äòx]!BrøQ<õ‰†>Ü"kbAßòó©‘‘N=ü¿sËÈT‡ÀWu@Ÿ0 ÛÏ:›å»hlŒ9ÄÚñò¼ùBKWU{äÍA1Ýä« Ý"n66[ÿ}`×>}εe÷©[÷þ‹œÛ€ç8wˆß&- hŸëšCbô ìÿèÀ‡ÎY82ë%¥]&гù+’=ŒÞå]3 fh/K6 N¾•@ÂÅ¥Nγ#ëÞîG–u>;7=öŽô&ü¢ù5—Ô§JzšiÅ]9=…9ô›¦Ñé†%ˆ•'ÂOkD”®“[ÁЏ<üOÿÈôc*ÝÌÙÑ^üž¦}q9¾¨°žTU0]°/ÈæªœŸ ªî¥{ÌyÄ äHkWÍÎÿŒ‘bRÈò¦ÝI;Öt÷¥ù“š)³œÖaRhK{[¶MG*# 9)EærÄ6Ým"ÂÀA+ŽOpfíú€yºðŒçˆ½ŸɈrÁͧ±TÂwýfYË€ÅýcŒ]}`CÙ¼:å%ÒËÄ&¯Œ_KµSÂtp´°¾µöuͨ­n!Äh× šcÒ ´=MXOäOĸp÷)Ù¼Œj7ÁÈ—åù¨^2+®)6mÝC+UTGº×ÙT"ñ<ÈH¨&!8HlAŒö™Â°ê#d÷tôÊË?û±*AˆÏh½@`š¸…j )Sà:è Xâ4AîÓˆ£ixç8óE„ϪåÌý=†×55^›ÓMZâ¦Þ0o-»ž°½Ž·2Rú/ûÿç׿elõ[Ÿø6ÎöSƒôsXÊ“@LÏ+³uù¤=ócJ†Xc `…–0ƒù³Æ,JÖíj¿§*Ôý{ß®àaŠaÆój6QÛÔµÓgòh~ú›AN*U“>ód MÁŽ Ô˜Æ?Uûâ`ä„Á쎎xuÍ®¥¶y8 R^­Èëžú.Û›E„Ø®_ï(|zùS¸Æ§5TU31°sîz»©ùý¸O‹rØÇˆèó?ö9r½„6ÚŽ=w m ÝÛ€ø0hÕUÂuüìRL? šÑ"O™0 5f„&ÚWuIaQ2GÕãÇ%š·c2X(Ùê_eÓ@>áCBØÀÞ¹ÏqtÊŒ±7E?5ÑâêjÓËÂ`WrlÝJ/þŒamiIVl”2>Á;Û™&‚Êt¤ZØÞLMÆ—j¥‰øí ]ª>6¥ß¢î;®ï¡…¡"ª’¼Û›ŽY„W#åþZ¯9u)‘ö®˜£ÝaÙ2 Ãð‹ŠÁÌc±²|µ"ˆ>ÿ¥¢é)T’é~†‚uIÎB|–'è¸l?añâ—‚òAå’öÅ;UZù¦åõ±˜ <½6PBb—TŸí€LfÍ=Ñ(w™Áùñ0°†b3áÆ1§§¸Þvg$“pWÈ$mg’©_·á ë Ò}4B•êʺ.EW.—VhåþP¥2 Bè–;±œìºtá*üTšõmDÑbE…#·êè q"ºAÞî©z”‹Š.˜îQ}êpa±Ôq~¦"\ÈX©Ð÷!^óUsc¼DPJÐÎq•7|´I"~¥ØE1¤9éÕ9í%Ï<Þ%ìAe´X¿8þÓÂüb@,¶W}4n ±z’½ébÆ‹Á¼,üó´íÜò½‹©ÇS:€?”fÚRëþ£<ĺk ŸÆê ‚yá)u£6(Á^ÃU”V{8 å‚ݪ5Ó©-ÅÔFÜöÁ¬o»Õ °\¸oh > .(²‰À6Fö û† 1æ©Y½TË\ÄïøÑp5»·“QiPL>¢tœ× î¼È V÷ ®„0±©‚«Çï}Ѓ^5A•ã8b§cS¢ÍYoòOÇT&0xºk¿Lì’PôZ*ÎÔÎÉáª,B?_ûÐ'Ôý0ßäA®7ÊŸ`ÑÙ,Á8­B˜²,t9­K2Ôÿg Bwî~°=€ýAQPy1û™¦–ÀvÇ#JmïËÅû*êíëjgå¯ ¥ïrL2èãÀvOjoìKÐúy»‚¨PfvE B@úÓ̓ÑYãµôÞé¡3Ujòv"ŽXü|Æ»ÕRgÎM,MEbOÓ€„È•!ÒèÖîdêR¤f*†A¨GnòƒY4³v•«ö¥2x8ƒó¬÷k‰í›6 ¸ý½ØN??ÁЋz½,91­4+81>Öü$é«Ë³"°:•õ‡qÛ­šÂj¾/A˜÷Äãuã©2s kAÛýzD”T[hÿnÜkçV>‚OYÕíSœêч@ã <@Û D×zÿsE¸üRÄf”—›1×b¯*ºw`Œ™+ýÀéÃ㮄=•Ë✲x†$¡ê ¯Ç{)jO†%77o»Æuü­I¢Íª²‘×ñ,!wk¹Ü“ŽybôùÐtõxÈËÙD™Sx"#4âë¸ú·_p†è(æ‘Ô™ðÓ=ƒ Ûª}G X<%ܾ¥ŠvÄn À 4‰âP¿ežœ÷EeRd{«!¥Ã:ÌikwE³p]þôÙ&1,ÔÒ˜ób2IQ`»gû§u¨Æv-ù‰ë$+#+`j£V"ÎCÊ⛩c¡Z¤~E2¨$>ÆH}<9AÕ_FK1‹TtwÇÏ;\S[wJýóÜGStW|šíHêõ ÓónîBØ‹gÁJ܃&)Ëûã9€ü ±2zá:\¤<Ôé4#óÆ!Î,²^¤1,×ù¹¡01•K„”™¶6†Ô·Ï &Ý£ÙÓy¸ðÂä¥ù[ž­ïóà@;ÐØ½–îþÐgÖhã'³@œ:…˜ÚˆkUålQ“Cdº?ˆq™¯AMLOT n&éJQÄm$£Nï1ÉDŒ°lÊŸYX3L 7z$ Š‹È¹oh > .(²Ã/÷§¶ÜåJw¥•Dt·jcªû†:Hío’^17 ž(w¦Q¶YFsõƦt;@pí%†îÎöA.… Âm~ˆp<ŒP<¬Žãrùè˜ò9ž+,ztÌ}…­7ÞärpæH—¾ÿ™Ž½-Ëùeäµè® Mm ¸ðoÑmú!VÛóކÖTŸÜoI1ûk2ð6mø¡7<Ë[åé]¸Ñª~½âPóTßÕS–¡f°=ÍàŒÏÕïþ¸¯g¶%HÄÒþbž_àª0Ây­ÇF¤ß4H:**IÄ´/Ûs‘Jû‰Û=ó‹5Á¾@£¨‹£¼¡ûhàÈ#½I“ëGIç5Ø^FÆQGÈyÇ­Y7îÔ1xEõÜv]¿j>×0”¼¬³zË^æñ´”¬4úA9TL¿@ ’(“‘&‚Š5ËÝrgy`¹“m“p²[äÐô ½Töóº2on® ¡HÏ OyI•W‹qÖµüü jC–ÊÃâ¼SáYï’ɇÑ)Ö‹±½¤›<-”.àFœ¯’“à…e¥åkIîŠXø´U¤1†[ÞAçRPkI Œ‘ÚЄXéóãÏàîÁì@¨o¬ =$¼º@4 0Íz±gø%\r¶Íò·Ìh+EÇ–ØÂ0€lWÉN˜8]©Nô›ØÝzÓ!hù&·Âæ+ëtúåâéÌ#¬êµV÷Û{„Ç#úœV׸oèŒå¡våúÔO`¨Y):+“Ù_ŒIïÄQè*¶Ípeü”v+kk:¯¤NÅ“çÕäf[þ|pqa5ýçâ¸|ˆ£T(çÒ4ÎZbÊ,':øûOÄOtŒ=‡Ù'W²iÙÜ­Ë^.&j’·;;)dV,òq}[r›¦¾¬¼»Ð-œ»Î‹30FOF7>Ÿ е)_æ±ut9Æh£ÄHYkÉ.äÅ`¹™+ 2°×=„ç­ˆý¸‡àÆ'çÊdŸ¡¡irhjÒÂì€ç¥’cGÃVÀ[/1-›“¦8”I‚]MÉî)»v•û‚eVúóŠNx_¨×)Ëcóü$dª‡ýñ;>”=(^FG%òv YŽË¼/p1† C3Ã.žƒ-:¥-¤â%µJä‰B!aÝVölP„”@fÙÒMgÞÓÅ­õÒ¼ÏF•ÆÅŸ*JìÊð=¥Î/1XA„ÎÂPô*¬óÉ tiöà([ï„§ ˆéÁ;gØ{nÁº9ê@†f£ÉÙ;DñÞ–Å®­Jµ]Ýnë¦Üv†÷E‹»Gé]Uz¼œoi Á¼.²~õˆ° endstream endobj 7345 0 obj << /Type /FontDescriptor /FontName /EMIVHS+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/braceleft/braceright/bracketleft/bracketright/bullet/c/colon/comma/d/e/eacute/eight/emdash/equal/exclam/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 7344 0 R >> endobj 7346 0 obj << /Length1 1647 /Length2 14772 /Length3 0 /Length 15603 /Filter /FlateDecode >> stream xÚ­¹cxe]·&ÛvíØ¶Tl;¶Q±“ŠmÛ¶ÍŠS±+Ηç}ûôéë|ݺϽ¯5Ç=8ï1ÇZkorbEzaS{c „½ =3@ÞÒÖØÕYÙÞVÞž[–^hî*åbdøÂØáÈÉE€F.–övbF.@€Ð 4°°˜¹¹¹áÈ¢öžN–æ.*5e jZZºÿ”ü£0öüäËÒÙÒÜ@ñuá´±w°Ú¹|¹ø¿6T.@€™¥  ª ¨%%/  ’”WHí€N_E(ºÛXšd-M€vÎ@j€™½Àæß €‰½©å?¥93|ùvœ€&–_f@ Ã?Àèdkéìüu °t˜;Ù¹|í‹=ÀÒÎÄÆÕôŸ¾äföÿJÈÁÉþKÃö ûr¦hïìâlâdéàøŠª(&ñï<],Œ\þ‰ílùì;4MíM\ÿ)é_Ø—›/ÔÅÈÒÎàôpù'–1`jéì`cäùûË™ƒ“å¿Òpu¶´3ÿÏ èN@s#'S ³ó—›/ßÿìÎÖ ø_ª7rp°ñü—µý¿´þg–.Î@38f–¯˜&._±Í-íàÿé);3{3ӿ妮ÿ¹þµATÿô õWF¦öv6žS £¼½ËWHÕÿË ÿ}$ÿ7PüßBð ½ÿoäþWŽþ—Cüÿzžÿ«k Wy#Û¯ø÷œ| #;À׬Èþ66FN€Ž¥ÉÿÏÔÈÖÒÆóÿdü_µ5€ÿÎúøü¯ð¿CÛ™1DÏÌÎÀþo±¥³„¥ÐTÑÒÅÄ`fdóµyÿ’«Ù™l,í€_$ÿk¿Œ˜˜þ ¦jaibm÷ìÿ†€v¦ÿµ†/ÞþU£¶˜²†°0íÿaÚþKYñ«+\T=€€ÿICÎÞô.þq%"bïð¦gæàгp2}ƯãÈÍÂæó¿ û/GÌÿ¹–3rq²ôè01011¾¾ÿãóŸ+½ÿâFÜÎÄÞôŸ>Rq1²3ýj½ÿ)ø6qurúbü_Óà«òÿXÿë@¸µe{Þ`«´Ìt—ZìÜáI1þ^fðá‡ÒÕ¢ÿû¿´ðßÜ•†o¿B§y>Ú<—NÞ¤iG{±l({R€—ù>¤Ô}¨[œ´‡Œú¥ˆég?½¯ew ´9˜Ôw'•”õKÞ §;X`®þRû“ºøc=: ùš¤ÖÇbv¢4‚ ÕžžQ$žü}¤ê¹ì;À§Í‰…%çuƒ@¤ˆòwÌÁÔV«ôŽA—“mªœ^Èf_!JgëK+}n»¡*ÓÏø A¼³zZØÁ+#{ H'õ^Âý ‡©»¬ç¨*óÎ}<;jK*{Xþ1)Ò¥îN­Ëf×8L»ItËðÛ§bj§…Mí:þŽ æÂ”©ÍÛ‚çÖ Ü1ÓNÐÎÛN!À]‘o•~ã^Í‹oæ~T³ÆëïÕ…ÍqAˆ¨u²€„b“'í‰~ÁsÄ™mš%dɷ¨”ÝŽQ¦1KLäÚ¦´Ò¤wÿ9é0'çrE:6õÃ+v$;ÞÃP¨ü3­×° Ù/G¼ÝBÄ•|‚>k=—À¬^ØbHèQÚëÐ’ñEv$ì¹@þ7&0²_€~AŠ‚ÓMurÇõà†x9Bÿ:ÊáOI¨ëNôß•I×ýžš\ŽóN= €—à“l½ã޲IØv§ßLòçBeøÌA|×ÂA¨DØ9áÆÐöˆBð^ŸÐ°t¢ŸÑ¦ð@(¿Á³yš‡ÙXÔÈ C_EÎÝ8Ä£€ËšqKg§â[¼¾¡2ïûõyœ¥öÕç=8W¯­ôö$É©åžJ¯T¿ërê å°Dˆ:óu±Óöé@ê¼J§¤‹ÄÐ Õ¿‚"ã“Í¢´öÙª>ux•n}$KýjA ŠÁ0ÌÝÎÀ JØGsU˜g›nÊ èµ®ô:@ŠÝ‚Ôjes æ&p… ó§WUüAo@Bÿ'ïò×%îJÊ'§6ÑuÍþøà}È[Ín书^¶ÿ=ŽãV‘ÁQMàP3Nš÷™\›.åˆpî‘þw•FHÎU’}…›ß]T¸óDÐihZ'¹(B+0+\š*®ƒÙ÷[Ûõ°†]ä0Uy÷VdÍÊ#=øæ–¢Sƒ&R¨š¦MM%êYZ³34?ß©h=;ó™"$­>5×ðßMæÚ;YlZ"EÆa$ƒÉOÀ°6—ƒ¡6ǵCBüqE¢ûÖ½üDÐÑqûk£¬L…yulCT‡3îûÖ¢Šhʱ ëk4Ú×Lk2çøÇÅ6!{âþîöê&KÒ$nV«»ÖDÈÓ :ÉÚe—]c%3Côy›•v@K¯˜Ø&£suq¦«SÁâî>NÖ˜³uWzd2 nçq ¤•<èýtœ.ŸS“÷ò†jüx‰Ã4GæƒÓïs¥‘<†¼¿,¡ˆ!%ÝàÈNe×çeà›Èå>¡jmeö•W|–ÿXc’¸‘Adê|§µ’*ˆ§ï: Q†ëék_[É?–3'KÔð3üMë6Bh[X}ÎbÉýæûÑÿ‚eK @‹°G£¤TÀ["Ú]mÐï?ªïÇxG¢bMý”ÊÍ1uµ–1 Æ­GÔ™©¤¤ÊHlÀJ#ªb54øL™E]¼Àû}~TÄãE½ç Î']%€SË€«FîsùÍ4b3"6™ë|ü¯Ð˜åÛê›aH‰m0Þö,[Ìu™èìµîþƒ'FtjPõoœ z¬›õ¨•[x–¥Ôj‡Õ•’$$Ò÷'‡½Ÿý…LÜ2*&×Õµ” ûcÃÌ3!È"´¹êQ9óäkË™À€Pyv‚2+e²p5¬þ‚ø²"tF9rðÖÁHÅåq¾]±ƒ~ sN$2$M¢Ë-›X(†2e^vÔ 1§jFæÉk\ÍîJýÎwyTÕ´½MúÛFœ¨ú uÍž¤¼t¤vÍ 5ë›oý€É„h÷qU¤S}Šà7ò˜š¤ìÏГ ú¹¼R€²Þÿ/“gšy­´ó‰w•55u˜ŒõÆõçVŠN•5o¡Ž!åmfRÎnS…“‹Vâ²$Ï(÷Då‹ïÜ©({ú( Û[Sm¶wòòT»tß´¨4xõ#ìÖy^G[G…–ä=T}êv—ùƒÁé)ãK™ìmCNôðD¿·XÑ1KÈà<·^Õ”¥©–Ë(–ËóõPáï±y÷ÆØFFe¼B#ŸÝ ºyšÕ.LrÖu7³­‰·¢i@é× Hé¡eîºav©ÉdpiFAØ—kÑRÅS€sö  ¢•¢’3d¨|M7ⳄꖒJçä†~SmÍKbn=;õ“›†"²nÍ>Ô—©¡d]ÚÊp¯&Q•@Ør÷ë´yãLf^/LMAâbpeQòîA}$&Ãçí…ä\òJ,`ò§ÞÉ1ƒ#ۜСž €p¹Üs´§rkÏ3œ¯ž:‘6Çb»ŒON.M”‚É©†hm«6ÚYˆnBãùèñú«“QžRBòh×÷–á¤w¡ûøö@Vt fT *fj>Lì Ô¹áz/<­@b¼ŠŽrÏ@é“$¢!å‘UE2ÖÊÑ uB†,+t‰ˆ*G'–\ø~h‹<Q,½ì¸í†EÛݬØÂi‘É /ú.5j¥ySã§…ÚB} w,PÑ«±EÎUæï¯Éê$Z÷´™)NWÆ ’DÁØœí°‡ÅŽ˜~èÞ®&jÑñ2×Ú¤Cð5l)»Æ)•Âß³¬v=×å–ïb;˜9²›ÏaÛn7ž5(žqzÜzÍ£òž³ µ J¨Lû«E†ŽY[Ö¥?ÏüîÏGï %`™À^»“’¸Á¼Ë$q>d'8J?ëéb q™Ra®< Èâh§ßR¸£pkYöè„J/µTF7ÍXÄÃÓ¢?Y*X>±&ÚÉ´ð8jÔ³2IÝöLžv•\ÃÝ$ÁPxfW¨ü›Šw?¨ìÚ¨ƒ[@¡s¬zI — ðŠˆ›wDš¿xÔ$ø;†Ž­ì“¨åòÇÙ‡mFjæ÷rr¶Æ©òå ŽÇãUZÖß*èÓ®›Þ\ä¬_-VcU{C­I¿“X~8é‰û)Óþñëh åldb¿IÒÜ7w­ï+’»q(]>.ÐÜS;²KÕú—•Ñzx0Ïû«ÅïÕ  Qº5ææ¢ŸÊ}ãµÔvaÁÑ4‹NR2–@F0þ<‡_¤ÌÏvŽ`uª¤HØ*¡E@B<æ¿U‚‚¤an_ñåóÎ^‡eÿyìðVíu«oÑÿ¼ÿ¸’|ëoã:Ýp;ÃÛbbï~­MÏGôÜH¦Öôg/¶ËÉŒ»Ë^!ïúA³Øë(bßjéÏŒÇ ̲×G[˜{žo–,ùò²_eûi9íqçyñR &´Z¶n¿=9ùõ€èX‹ûcÞÎ.¡“Ò%”ÏdN¿°ÇAL{q×FÇÉ’Âé×§èŸã¤Ä³N*jì´/HŽ3M»E°˜%ä'Œhw/×´çæaŸ…ïY67|Ÿo|ó?Nˆàï°°bX‡¼Ÿ‚ܽæ`Rá;;afõ¶äŠFGʧ îü¤Î=Ƴy7 ñG5ñIÝ;‘~Ì45Κ,Òð¯ß^NwàãP!`ýîÐv‹¥µ‹ˆ%·ÿaþåZ7{œMp`Jã‡?°3‡ÛRÉqЋܷó[I#JË€ð8£#;³Rbä3ì 0J[tenï!Th‡úÁ™n<Ûæ‘øyWT!Ê{åÌgèÞ$ÑÞ^~a‹‹RÊÄ·)³`º2_:¢b¤KÙæz¶Ñ؆¿¼'FMûHíÞPT.É6 ¬.ã?÷£ÃŠšÃ0ìv°ù…‘AcÐCuÙA+'½ ØÙF«|6ì 5³ ›£XÑ@ÐñóXw9Ÿ`6?Y¡„ìƒ#¹°‡ôáKÊ{ÛØØ£’16åjîŽUéÎ; ‰m!ø>rlôòÛn=éyиë/ë3,d2ð!AªÍ „·oÎG’6ßwÞjî“ÊàÉô~2ý~È»M¡‡N·&ÛÉ›ÚÓµòãTÓ#7jf‚l¤F|>2xÜk >ÑëôbC¡áþV…t˜óÌË>Ù~¢*Q3EP¦¿g“{Ž¡ìt ß>_¹V¯ÝþDJ¨Œàmpc¨®²î¾8 Ÿ$@´(‰=œµ} YÎÅT$á£LE›HWDéç(¡žA.0»ßoéÛt¢^&¦šÉp·¿bújŒªvã2¢µºF=rÚØX uˆÄUÎB¯É§@+÷¡ŠWìo¬‰.-Bq¤’ƒ’ãpún\moäS¾´ÜÝ>‰|,7^ìç¹¥uq5èÝnÍkQ˜\$dÁÀ¡ ê–åó¥_\§™8Û¢ð~‡*º2??ªwœcQ«…\2¤KZs¾‡ô.¹|PS–þjÙ¶×gÞ&l%ß&äÕëc–%å;hÐçŠ Ñ•z¹ˆ‹(/ÄÁ²D5¾YíénnÔ7)žÖ iRÍÛc¨¨\lpš`C¤]›¨…ÀëºðÍ#%]nný´¿H¥JÑ:3èÌÍGþ¶B»Jýð„â^èªI1ÌžHž¨vF«õ:“)‰)èšßë2esœÎ')­ÃÔŸ¬WÈ\—’×5å ŸX±¬àâwŠ9vkTÛ{‰$ødÓWî!´ã'}[ÏéG³§jXaPq6‚ÚùÌU6˜±„hÁJõ:Ù_‚çâ—dÑ\ÅlÐöQœþ÷~ìHÅÃøJã`ŠÎ;·{í ’zÉ#ii¸¿âÚlGV¬’n/2]½$ëfxifF÷$èâ=e| m{C DgÍÀ¶®ÃΤ±k‘Ó}‹õje}U¸w$ Ï%~Yv(E>q/ øFp(\¿ Mj¼,á\ ·ÍommŽm‡ß· “ñxë*R¤èVTQýo^?¤èøÉ<(¬èڥēèëÆ¾ù&©ï ›d@ì­×Í"Òj»Ž&¦>MÖ6Ñ¢öExõºùôË IÈ®GC»ØX ³ìÒeV- <©Ì!¯]¿eXKŸ+ÕÓg:ð´m¤UÐ|kÁÔw›EbnÈú}zĸzÀ¬Åòa²©€¦;„ï,z`V"šø¡ÜÒ¼è Ro­ë탶mòím¹AÆJÚùÀOÎë)oóù‰cN8¸üö’û¢U‰v[q~CE·¬'>Bó]јÆ(Qƒ€ë¨z7]q!OˆŠ§+ή ßáŠô'X°ô[%¸¼Ð;›ˆÏKìîp‚fðÅNÛ»ƒ”õTd–ëI!×1>¼|™h§G•ÆûŽÛ+ü‡¸Ke !DzÔjTg® þ—/ňò4wÚ‚éX2)žÃ*D„&A/}}4Ûö¿>qÓ°Ê`x½ÿÈmD¿Š+¾ówà8j¿\— y7¿«[[”a7Eíuß1Š™jŠ·ôEÜÁEÇqPIhø™5jeWPŽÖÛûsÀkwÖü9 Î:d|{ßÎS4$¨Š•¯¿±_3ê7ÛFÏp}káI™¸9®±*Íbú ¼k‘viŸ"ôQBï±ä0õ\æ);æðL#ÿ¬~‡§`ºÑ`¡ÌjØyÉ䇈3Šè…S+'tÞz‹%Ú”2¶³8©Úðý}Ȉ´ª# T|’éoâ5)ÊBŸ6tlâ$ù3l„£ á3v{3ª/O•…v¤ñ mÕТ/q¾·DútM”O ÉÔrª2ú¡ðãëáôPÌ©¢N}Ÿ´á÷E>}Dª¢85Þ·ÇV3M7 æfQ[‡‡á¶ö㶃âöJ«êw—ËèA<»Ûª£r87Ue‰/Ê(ÌÊko‘»ƒ“‚¯×!ïžÁ]µ²Ókg±2HUøcĬã#J ýh½•5zvzêÕoÏ4ƒ+m†‚ïSz]Lkà÷12¼D_¥ˆF–Íã?úÒíû޵dÅqND£eáN€/#Lº£m Oè€ÕàÙ¶ù_û„®'¡€[sâÁt=!ê·Ê6Õ˜A¯Hþ츎¦J`ÿxy¥ƒoõô¹^nÚ’äž_¦Å&±ní3ƒ(ªn,Jì ãCž6SE* Æ!¡rñ –{ꕟh}ÓçਪhTõÁJÍ1É”~k‰Ü÷[aë:¦_m›ïê„E§OeÚ¹1ùGÇÓl—Å(t‰—mB¸È¨c*£‹QNÛE!ж8€ïØy©.g8¸£a}¸z•LÒÊfC–·òH‘| R± ²‘¶(—Dø AÝ"߆¹Î7±«ýÿµ‰3;˜Îß´?·ºõHã=¸Þ´l3!ÔùŸ‘c:=ŽÛV QcÉà4Ñ<ç5Á®vETHº"Ì…_Q3Òs->½óä€ "ýy›õº;h~½Bº/ÅðÄ=s?++RªšýŽF|É«ÇtàÏ{ ‘ogß± Ë"—4Å!+H"¦ÀŽ,oöxCâ’dñ§{UݲÒè©ÌZ,|\´ƒ€M³‚,>îR¹!=š‡—íyš_ðçüÂ¥D­iý­;–Øâ –ÄOŠBLEË—±78K?z9­Ñ¾•â|f¾d_,¥Ìlv<³¤lÆ¢‚q#¶Tp$Bý}pš{Þùšâ"ˆñÛ*0?i¤ ‚á¼Ìžp·NÍ1¿yÇ5ǨX>»U”c5,ƒ á´lb‚3!n£ïÆý?–èÜR\ðtƒz]=”8|áä¼"┄4P/šJi…Xš&;àvIaл‰M«%D9q¢K¯t~¼~*NsžžïBËÛkˆQR¹ùç3޽è¨-«§Î1·4¯ŽO`¶SGü?Eç›\½5J¤®üñ;b±¢qÌ5£Qú×…€…0´£7Í!B°Ô½½otƒ"<¹õã“¿SÝ;¼Šj ±!³Azågّ䊂»Sܵ[Ú¿Ah½r}pލø-Í«74ðz)•ÎîØèã™Êeឨڦ™¯1›ÔÉ·êèöu‡; äž÷–›¢£ºgÏuݯÏ/ªpKì­tû³ØÃšéþ^kå³Òw €+q™ š«{XÓûZÿ÷ö’ ì׈Ÿºùº¿(˜|[yíÇT—ÀìÄ&•¾×g°¼ 1i¢šÖÝåòåÒ.JðïU-ÏÆÅ"{¼>$Ìdö¶×ñO ãš]b ü_wV¡ïÙSiÞr¹% {ò®GÒ#àÛ*ßvoÛè¢ózV_7Mã@(À3‰ˆ.BuÉ2ÑFJX÷GÑ ¼6|’³¤åÆÈ=L£Ÿs!™¬¿“>E!:$Rá“•eÇn°ÓZ—ePü3+˜aœ“¼à¶“5-Jq|X^­–êÞ¾ˆU<ŽðÈOͪñ§Ó>‡£eí£”Ã(a$'ó„Ȩ9TÆä ƪf¶I‡s‰þ Ñ·Tß>Gܶ„¦Þátì¢S]"H [5ASv¥í;S±¢Ç›Sq»P óΑŠÝÍ{|BøÇî"C#ñ·ÀÊ8ýøÜ~ ]Ù£1›`ƒú)˜“Á¶@g|=9….äª –v‡ŸØ»‹ö¦#1ºI›¸a°…íØ'¢áñûÖŸµ®ù.´45=´esˆEÒ?æ×¿‰6çX€Ç¥á¢O+63SvÔ·§ô»>VßSEˆ¹·tkÇ1¢]÷2ÒWÍÐÛBz¸ÓbJ£déAýD çK¹O)ƒÝ; Áߺ”õ[[-{£’ã7äÇËã/$z¨nm@k[ž®Ìq¶x"E”·¨8¿§ Ä€by—’9Ž–¤[ã‹`æÒf…(©íõÞT ‡é&h­®ä¼9Z{NsÄbú+&ŸËB]”è¥$cÖ®XÊ«j{Ltzƒ#˜•ï@Ù÷±ñžkî/€o|Õs µ·º'ÈÍ{^4ÊÊ©8T!žÇ¡'§²È@FÈzg V=ÍNÛÑŽÈg3ŒB§[¯ž rEÙ.úNã6kegƼ§Íz"›%é¡1B|—ua’ì_q‡p=C¨õùV; ¡ï‡Gìaќݸ ÓU;˜õ‚8:²CvpûDUüì…Ïl?é_Q5:¨Ê\F*Õ§‡$c^3)‚Z¤Ž™†F‹ÊØÃ™¾qª…V‡J x’•þµl³‹$Ъ-‡‘ëTŒ…ž÷»'GkÜhpê¶LÛîS¤…•°i·}ÈèóÐ&©¦Ÿàà|«ã^YЇ Îðh%_ÊeI¼¹wyQŠt/4Îå|Á<µ?—bÒü¢ßIÿ:Í+š”A@œ1>€}²C&øSÎ×'ý~yšYÖ—Jmö·Io$&œ†x^!Ü£B#C?BÐt|÷ŸÑ‚41I–²Ê5r͉ÕëHjÉ„4ï(ÞÑÍP˜Yö6⌌Â:Ûì˜_ *¼&3•Â1)ñ^œ‹*„àÏðtV¥~)—8å0…,™N»qáÐ3ã +Ãå® Ãñ s±@V%5y¾ŠÆ ~W@®‰ö’ç`²1×øfÑAw+þîÐ\?ç“BÉ Â}òTžà¾nÎpÞÐŽ‘ìk!ð­`†÷µ«ÐU¡tåðÊB˜«Ötëlw l,Ü´DX|•:“¦Â ò áO=Ø$"ö$–×_ G«Ñ É÷:"±‹»Ñ=›2ôdTFc HuŽ6—§ŸÜvqCËr£Ûgš€yA&Ü‹tzóÔb¿3J7ÍŒt¡%brÛ_ˆiéaù ŒbØÊûÔ(¿1å(„ÈY¤7aØðÐwÖ\‘§Ö(µMkɹ2_UÈÏ­dX‹ÖËÕÉß1£hÿ°uç,1¹“ÚaÌúÔØžG‡Âröí9ã]Í/=²ÆLlèkG½cñ(ÇF¹@øÁ Ñq¥ä˘úåpûï/ ˜¦ohîúð\ïoÑ·ÁF¤äD$Éø_êg$ð e7þN]C*¬òïËvÂe9¥ÿ¢qáÿ‰6å¼?Ç-HƒqL–=Ù'ú·#ÙåÁäxuˆ|Œ°‡Ô‚Rsý»Ð}„D£áêô3D¦Ÿ@ýf_I{'“à¯ÛÀ\q'‡²(RÉ;*Ô*ùˆ,6·9Õ4þžØ Nþ=³ÜÚ÷0cxeGçèYÆ6*À“ÜX9¥ín³}xÿï)µŒƒî]6®¨:ÇÙ„þÆ-ÀÕtÁ…X9Z³–tªÁ>\8FVððÙx…–°ujÌUÿ|NáðloŒ»z›¾¾Cð'Ò`ÔâÙxR’?ʯ~¨õ{`0¢2/Umn6‹‘'·‰ZfíØbeŽa´ûr. /|*]ã¤Ò+jpî/ígœÏCÂN1ämi`Œk˜Î² œÑñ#o¸,x®Hhb§ÃŒ©V‹õ¦ù²k”ÏØ ÉËÓ ‹ãs󃟗áN»ÉÆ;Ë·M‹©•ªj/ír˜WÈGÁ'D{¿pØ ¥¨ÉÈh6°¨*Žð徘Û÷¦sEá9ˆû{E71™ÂÜó B¢7,¬:Ãø‹*µ dj¹U›Í¦Ž·MqÅëîJ0V+ œOŽãOj‡œæ˜z(zôËì$E¼T™ŸL̇[d`:Ù'7*ÀË9ë««ÑÙ«Ø*ì.ÓW%C’χOÁ 9-[Þn¥Wµ(:žÿ³ŸúžŠP]sè'3Âw,ój Ææ°š8Þ¨=m'ŠÞí©Ác/ZN”’ýãÒå¶B'±;alQ°ñ³ÎQ]Ï,3yûf:ðª$âl §P| >Cö}¨¹B—èïûR0I†E´ÕSôͯÉÇ—ëjiü؇h/é±êeé*“>¤ó¾¿ÂI§|«H³½nÜhípýçùÓb›RÔ¡pj›)Ŧ×EûDì¹Y§.D×y€iœ¨- ó?lmO£;ÔÉé[7ó?w^ÉûôbB™ìÆ¥[Õ ±ÎS#ae‰!þãDÌòH×÷£ü [Wn8Ô¾!Cbôdß(ZÃæ³J°s?Âb5òÙ_¢m"8Kåo¾+N`–8]dw4a‡—{tõB9þ3c, ±x/ÉÈöž}'sêz¿93‚žIñïITq"ޙܲ§tS‹C¾lZ»€{Ê Óó#o"Ö›°»Þýmø¾’O!&Îü†ñO¾ôÙ³*dì5ì0Å;OVv(0ÜÅh/Áß$àª"¦áÿ…:‘Wd9„d<¤ª™ Ú#æìé´Y1w~˜Í6'|üȺ\+–?2ü‘¯ ¦îîÓÜHw" .qÍžªá28 ÿ¸ÐewfÂrßOš€B×SÐÜAW VæT,¸ Ó)úW…A§LݸÎßP7êØf)!q½›k㪞åG]]o»émlÄ]—+ç-$Tœ¹ü¤è/¬ï†ÉÙ8ŽÝC®o+ï{TäéZ&“#G ?T'ãþ@¯R@Ù%kµÌZ>}jQ}WÐñëEÜ•ˆŠRë¦/áâ;¹ß›åÉRã n1 ú xðg Á$Ùí&2…±K™ðÐÔö‘?h!¼b–°ÆÌ¡åoV„ƒãp)œ2åüһ׋7`¢ÆCL;eoå,h¹èãüリâ—ÙÊ—yXŸ=·xÓD'·ŽÚ~-Š;L:Î⤇7-§? îh \Í*Nÿ+‚ ÁÍ/¢÷*¢Jª1}ü›|Ü%”ѪØM÷覞±Ù4Ô€c 䡽(¨6´c¹Ì¢!H(vȉšõžÚ'ñ_ùNµ |âsE`P¶/^2·Aná¾3&1:88ÃÛO²Bí¸m=¯†F%ªÀDk+ÇëÑwÌÁ Š€$¢5¬›t·&QÕ®øÛtù»W¢¤þ=—<ª£³¯òc,øpïUÂð80ØWT]¦bSh‹ˆÖdð±“ÎÍÚàLý>¬tw4âÜT˜fÕˆ+~ï _G-îKø‘rì°cöR°úx-#Êyb#ïRÉâ‚™ƒª&Íò*ÏÌH'‹ê‰(Ár„‰ªt[H{Æ‚î Îow¿Uµ¯N+õ<*ð\Æ2‚6ÚM¼ ³ÏQñZ ááÈHÕç“`Åݱzt ¿õFùøGÍ3€¡Þœbù¤±éõú9iåÝG}ÕLþÜz%¸:'úN-¥#Úz^Zx{gÁ™n!‘•Añ9`ô¥²©šã\ º¦Ê8+ï`0[ßÝQ³y|n"ÈÛ8qE\•æšVí€'J¼ßÈG½˜8ÝÏF%*ÅÛ‚ëÌÚ.[æÐßÕñG`¡.÷±P(‚) ÊžÉDt·cÉ úºâR‡iX‡ëS•v{­ÏÊûó1 J¡Æ¹d+ŒÎmc²»¤“æ9á±ù.¯ÅµÖZ?uÿâsC“|ƒÞ‰t`·Îx"ª¬"×g <¥´iÆ„:ÅCÐç#^ÝŒˆL¢`á9nn¸yÛk¼›ê´aI_:ù®þÒkµ¬ý|­p\é`µçÑÖ€a°VrÒ²fÐN8úhÙì–WJÃ'Šf¾â†ÑUŽ-hÙðI¬}“ÌŽœ.‡‚çw*u®Yø%Ze^âR‹ÝL?«Gyñ·Gt‰ —2£GÙÜÆ=v/BØÌ²-&§mÂøó¤ÍMBKBw·Ù«çà p æ$äŠP›’˜R?Á¡¶âuâ" L_OP­ÒÕ[Âa¯/ÿe=CϧNñ»;¢øÈ邀콸ÝÖf•9zI®×U3X (|<€Áj{qJ3Ú“¡üãé7qÖ—í Öõ׿Ã% ÆÓ–Ð-ÝD¦iuªmíyŠWM°ððô‡Ìš(#µC@tªU2!ÅImpyŸ„±BÖŸa&ñ”ЍŠàÉô?¤QDÜí“¶Xa×8p×F‰” o9}pó^7xUjS„a2§Öåi&È *÷LÓàsf?š¢cjTæ9gÈ{*]˜(Õ³Áñþn!Áiα.Þ¢ÀåJSž®Ê.O/̸‰ÌUÀWôsÿäò!mooÕ–ü|æˆrFm>úFÔ@6 ò-øT~lèƒOèuuàeäPHôXîJ&ÉÎ,1žWí·Æ %ëÖ·ÿ·C-._“ÊÛ´™UdìÍõd0~q¶A»%©Ÿ4°5 •z‘Âбœ²ÑƒÉŠ’êˆÒ­í‚‰Ùžå9Z²$ñõ®q+%Ÿ}›¬‘è}ñ »¾åÁ}Üd8eÛ¹XV'\Žâ|Èí%Y˜áQ™k9i< ¶9ÐÓÏsONKV[·#]P¶V¼oÖ¿×ÙÞ„!6 æ ¾¿µ«†9ãf­ÙbÑÕÔÇ’ó‰„8Œ+­‡¹YoÖTn%­÷ª¸OÖ#âOÞ}ï×ËT;Ú7Uþõ‚7ç'ZjŠ`(ð8ÀÕU × wCŠ*•Ú)Ö0h`é¯xÜ|“âµÑòºä°Œ¦KÚã¯ïÏ{–ȹ±iÑSç©®ìÕ1­{“¥m¦¥æ»:ÅV ™ùyï0’VgƒAs€{”o”Ÿ1«A?”a§Íy!Bî8Fº›Ï±îpφÀ Í%)ž˜%ºD»kccíãŠÒ5(áÆ«úé&²}õ—‹É§ìØ©Gdnè¶”)K©@êéÜP;¨ÁƵ?ýKÏýÜGÊÂ<’…6ˆß“¸åz鯭ûmOñ Çm{²ÇÝj”\E¾F:®Ë‚ŽçÈ+çª4z‡½ÈþßünÁ”cAøóÜznc&õˆ)T·MU É †*ÐíˆûO²%O&¿±åi­Ù—¸dŒLbߎïwªïTN‰tÈT_lM²Nx;ì©ñGe†§þá<—Šþ¬0Ðçq \…üNõ…-mÁU‡¥£¶ùv:iyãE÷¥S¬Eæíµ§½õWïì¹.˜ QÏ,gmók$_ý$¥p©ÌÓ"•DúG§Ä*ôŒ™ìºùœ·PLê–fñàŒ‹6ÂG¡]Mîh'ßäî¬=)h'!T¼¢~D¢Ã…~êÃQ[£pUÓµT ÈÆãf =-V öfõ•¦t—œÅÇs:Ž{ì Í™yÙÜ-G æ9Á‹µðEÚ®ç÷Ï|®³›øòBU©­0È\7H:ÊPŒAûi2ì^kg[v1ÖM«´É7¬ šó#X+Ë'Cðü.O˜@éyç¨tœ~FA?rÚx´¾%týÌm¢ g\Ú%Õ2¦v?}pSËúŒu­ØÓ|-~ÙŸÏÖ ó5â{ꉯ#Z5ç]·½-²7¦âÏÃ.ó%†J8–íÄäfòãzW½iƒæ4Q«ÈuZ/›Y-b`sã Ù‘`§ëÔËs<Ú)õô¢õ‹O) z ÚœÄSfN,‰(ŽN¸¨2£—Eþ`;À^ºƒGÙ•Ð Ì©ÀîÓÌ.ëáH[ñûqrãÔ"ç!èTËes…-,ÔŒÒd†Mº°’‚Aí%xèú™ð[JÒÍVƒK›®k©ýGÞ²ÿ ½W×_§€ê'>VÎÂf€·*òò¾ëãòýáýzýg/tªÙŠˆ"*Äქ#Y&AT¾©}ya ß̹շÝdúÔîCODQFïC [”7GB­$õ¼FQœWdÉVÙ²‘Ú£ s7Ë+·)íÎí?CHË ¦¨ˆ ÔêD¼B¡"ZÄ"iõxì ÿ‚™;€ A2 y(°µT}òiü4I$Wz3Ë_Þ±hLù¦°eÙs Eá TdO=R‘ê:NÙ w5™üÖóË÷5qð©ÒÁNMs`H¸}¯Ñ>gl×5ÌÄ6¦I&_­©k쀛?IY〻˜mû¶ºZIxîW¤’{e<Áú–ÐcèÐÆ­öµL.öZݱ®­pUwxï½Ü¤bð$çí]º>J¶Ah¦þíº qEè;?Ýx×L©I&e´z ZuDø<5u‰‚'’[íNgM,ó§ÏUb¤'83*%`ojW„=ΈÒȇf·£9Îà³@oÐÑÄÃ?´¡™«ô¡G”Ö}FQåV|—>, ªæªî6ΈzØch W/ÑŠ¹ûTÍz§Êûw¡ÕA‡Þ&ÆÎNlq™*üƒ”õ,^îj"IY†B]ZF*~8òt¥ £â§²Ñ›¦þŒNùÃL3–€ 2P€ÝBwQ‹S„)Ž>¾p½jd[ìÆˆàJV“GØV—ÒÀFc¥?kMz½¯ð»u@(Œ¬–ëäš4·Rt‘µæt‘‚øòo'¿ÝŒCÇX„Š& ~dUSosò¼µxö×+qЕ×= oo (]’¶$×VÂ×íF¹-¬¨ã‘ü›dlmýýL•ï*<­4Z5|ä`Ý·û0Ø,ѤcγÞÅokÝ)i¢P ÔhÆJ@w¬™RnKNç÷æ·^akškQxÓ•z¹¬<¤ÆpåEZ¼û^§¦.³%C¼îg¢X"aÐpÜÝ€)k_ÄÚ…@(¢ŒÓ_gFåZÉñJ(i?"¢ãú[Ù_øÑê“p;Ä‘ö”Æ®%»òÝ€ëô’ Ñ–` ‹aËË{¾ûÖ^>„‘õ”ݾŸüü¶ûH>h,™ GéªZµ€ù]ÁgáÌc¦&ŠK–Àª)_õ% lôÆ\G"!ëˆÚ¯‰Lä˜Ý&ô0TÊ;uõ·‡ŽêZ†Å^Ê–ÀFŸ©Ü@“®;ñá{©“wŽ/î¡}zµ:¯¼1½Y¼ì¢§N,éÙƒYíuA†/Òù”pbŽüœ8|¤ ²÷åO†0òÐÖ>º³w]Æ+á@ë:k¼Öê«:›H¼GßÃ9ΪäUŒ‹ YK>º„ñU§u%†{;ß•&–ŽÊi¯xdègÿâ:ƾã%vÒoÇó®ò‡ÍRáýx}Bßg7ÄÈŠÏ©L¬?Å3r»{ 5T©)h4Ÿà Mò‘Ùf¯H’¸Âôbg‡¹Té.æ]϶1=ªÁìQDȲÜ}O4^Z¹'}~® 4øíÁèlDª|÷FæØ%¸³ÇRqVêÙ“ù<:„õ÷ÛÄÐÞz(úßÅÙ4'¤]¬uÁÒàáű4Ъูmæ›ý ç¤tB±h­¢Û²‚k£#>¦b¾¶7ìtôŠb/»¬J$½ˆsëòYœ(©OÓ޶lÏL X¤‹håW( ‹.RŸ¼nâ*ƒÐRÛèûqø*KuÍDÍZŸ‚äð<“¡]‘õXãàÛåÛëo劥ô’Yß—O8«€B}ê¶ß%i<†Ó°Ë4GI Ô$æÏfÛá” ±ëUÎ&ª,Sñ©è&W Q(–à<Ä/iõ pX¡ýì?Î¥v…´y0ÏØ/žPÖ4=oY’Ô`_aÆ~ܦmƒqq_œä%¥Î¯µãÅF'ÄBZ~ø}KÉã"ªüLLQ=kdzƒ1ö·«Y—Ñ ì6þm’(;úÓ&ÖgMëë©û™'õ 4qßjÊÌÍr‚ rܘÙAíRe®»‹pÓúg5=çšS]»¿v”#aâŽÇ÷c¤–âé…±84‡›?|&¬ýü,•³ïrZlžê“ßJÊÑD&õßÒÀè„ 5~6òDÏ„.g»Y)Ö…~”sSæiñÿÍ®SØÚ~¶»ÄPÂ6^aâvÔ€$)Ïes¦?ÖsüÐ#¤(œV³è ÄUwxôýÉ,Ò[˜¢CJ”äŒçö?óÐ? “†s{Ôi@ýžGdÝ|ü±‰ÖÛÈ„Òç:“®½[áû¹¬ý„rÕÇ.1Äî‚ )ñUçPòêEôL.Ä.ú¸eʨ@Ûê·”ä/FöäÌ–Aóæx8+Þ“è–Í€t¾Fè>¨¥ìô³Þ(7Á{¨¤©mAâŽQ–g‰S"Fñä­eþã¤÷dÉTƒ»åý¬Í à<®®z{²Ñ{« w·tñ8mg #W>!O ‚;—SG½å­Ñ@Z[¹¿ƒú!ÑŸW3F†|f¢öÓk ‚æªÝŸ‰*@ÚþDBg]O©×ûÛpýKÐä_ï”è”&îíÕgí1ƒ+fCíó»>ãˆjŸ*ùF¨)]@««E2”b>›h{œ$üÕ>¨ßïçáu·33 ŸÉSŸªzIì…nuon‚¤ÃÝô]¶=EÅ¥ä{(&èÜ/9Ž[ÊaÊŒDÇ+R'/µ›6a2Ñð®ü¾ï4nLKípiNÅ3nB:öÜ ÑB$û PaWr×lÁ,•‹Ðs-êjÑ^²Ÿ›\ãŠùþ*n !éì5@²}ø΂]=p€<Æ„2¦ÁTÜÅOÕäÔàŒ;n·¬0öo"'¼ÓjduÂÜ[³ôI ƒºfþji¦²5ò.Âóô΋™6K¾}‚I?|+SŽÃ÷ÇuÅ…J%Ùß}ñhÊZÁY1 ·…\¹X¨É‹Q¤¤ôå-œ~™rJXšX°)Ë2R¦K#9#çô‘ÑŽ4¤^R.ž¤æ:'ìÒo¡²ÝF²¹»W•>”×F¿49à’Wˆc=òy0{!T+9LK|ƒÂ.aÙ„hݱ M „)¡ÅIƒÞeÕ~¾]Ç4tdê;ªµêoCÏT1ÐßF@Ÿúª¡+Ot®Ï º{—aD?zð‡ßþj'*'aÈktt$CEϹ_úJÄá‰Í¢ûÿdœåËêpÞ ¯XÍÕ¡e!àžm[ë®tvKÜ›ö5ÂMËДíÒœÓfƒükí'óІ67ÉÓ6ù2]€,ÖƒíúºBüé7 –"4ã;|ðYo y”÷³Èzxûôg5cÕ,«‡ ²‹Ñ<³VãÙê*Å£ñ­JÙt:YÃ12,M4H§‹×âtŸÊ$!@/Æ)g•)}+n¾D~³÷ (°“Pß µDX:KÑ Ðõcsl³[@cÏþk¥t5í+åܘ;[W0¥ÃqJÖæ* (rvY. zë?­å!j&0®&o~fô†tÇn=—¨8 Œ*9‚ “uÅÿ‹• ´úö Hb鈌7ÉÌ{'1òÕýk¦‡è$÷ÁcY#&ÕðûdÑŠ)ŽL­j)oñ­ÝÛÉŸ’ý= ñàïw‡IR΃ïcâD:¸š½;ð("'4}ï)5'0 y]‡u?°ÃZ¦Ï_ÊsÂá–,'Õdsb~·²z.FR³&œi7<ø}Ö~†ØŠÌM¦×>¡Fãm¤À3噃©Ç Ë'.U²·7!ÞF3—£Ê忪$á–àà"[FÊ­N¥¹Ô9-l2Š­%†¯$IFy¿v¼¢âÚQ~¿ë–kó °Á.~½'Þ¶ÁÕ{ë)/‘ R;W°.õ/|2xÌÁŒ°© “ký@iFÄ ð]èý;c½”JÚwb‡—„B7qWeêªQ࡞úZ;‹0$=qô§ŠM¦I›-þ ÚÃýaWÑáçL%Ô:g/&=[Ê#÷aïp0oŠ^S— k„’6~¹¿cÛ Èýk_óÿ¨É4 endstream endobj 7347 0 obj << /Type /FontDescriptor /FontName /ZDRWAA+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 669 /CapHeight 669 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/P/R/S/T/U/V/W/Y/a/b/c/colon/comma/d/e/f/fi/four/g/h/hyphen/i/j/k/l/m/n/o/p/parenleft/parenright/period/q/quoteright/r/s/six/slash/t/two/u/underscore/v/w/x/y/z) /FontFile 7346 0 R >> endobj 7307 0 obj << /Type /Encoding /Differences [2/fi/fl 33/exclam/quotedbl/numbersign 37/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright 148/quotedblright/bullet/endash/emdash 233/eacute] >> endobj 1076 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NXZXQD+CMMI10 /FontDescriptor 7321 0 R /FirstChar 11 /LastChar 121 /Widths 7315 0 R >> endobj 1521 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RIATAI+CMMI7 /FontDescriptor 7323 0 R /FirstChar 77 /LastChar 114 /Widths 7310 0 R >> endobj 5436 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KZLCAM+CMMI9 /FontDescriptor 7325 0 R /FirstChar 59 /LastChar 121 /Widths 7305 0 R >> endobj 1123 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JODMXR+CMR10 /FontDescriptor 7327 0 R /FirstChar 7 /LastChar 114 /Widths 7313 0 R >> endobj 1124 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UDNTJG+CMR7 /FontDescriptor 7329 0 R /FirstChar 48 /LastChar 112 /Widths 7312 0 R >> endobj 5435 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NPCZJK+CMR9 /FontDescriptor 7331 0 R /FirstChar 40 /LastChar 41 /Widths 7306 0 R >> endobj 1078 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JGXZOD+CMSY10 /FontDescriptor 7333 0 R /FirstChar 0 /LastChar 112 /Widths 7314 0 R >> endobj 1145 0 obj << /Type /Font /Subtype /Type1 /BaseFont /WFSXTP+CMSY7 /FontDescriptor 7335 0 R /FirstChar 14 /LastChar 48 /Widths 7311 0 R >> endobj 1537 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GBKTIV+LASY10 /FontDescriptor 7337 0 R /FirstChar 59 /LastChar 59 /Widths 7309 0 R >> endobj 780 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UWVYEP+NimbusMonL-Regu /FontDescriptor 7339 0 R /FirstChar 33 /LastChar 125 /Widths 7317 0 R /Encoding 7307 0 R >> endobj 635 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UFZZKA+NimbusRomNo9L-Medi /FontDescriptor 7341 0 R /FirstChar 2 /LastChar 233 /Widths 7318 0 R /Encoding 7307 0 R >> endobj 2400 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RCASMW+NimbusRomNo9L-MediItal /FontDescriptor 7343 0 R /FirstChar 2 /LastChar 121 /Widths 7308 0 R /Encoding 7307 0 R >> endobj 595 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EMIVHS+NimbusRomNo9L-Regu /FontDescriptor 7345 0 R /FirstChar 2 /LastChar 233 /Widths 7319 0 R /Encoding 7307 0 R >> endobj 846 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZDRWAA+NimbusRomNo9L-ReguItal /FontDescriptor 7347 0 R /FirstChar 2 /LastChar 122 /Widths 7316 0 R /Encoding 7307 0 R >> endobj 596 0 obj << /Type /Pages /Count 6 /Parent 7348 0 R /Kids [590 0 R 632 0 R 674 0 R 714 0 R 754 0 R 775 0 R] >> endobj 859 0 obj << /Type /Pages /Count 6 /Parent 7348 0 R /Kids [836 0 R 915 0 R 1014 0 R 1073 0 R 1118 0 R 1140 0 R] >> endobj 1181 0 obj << /Type /Pages /Count 6 /Parent 7348 0 R /Kids [1170 0 R 1198 0 R 1220 0 R 1243 0 R 1276 0 R 1308 0 R] >> endobj 1335 0 obj << /Type /Pages /Count 6 /Parent 7348 0 R /Kids [1320 0 R 1363 0 R 1396 0 R 1408 0 R 1419 0 R 1444 0 R] >> endobj 1486 0 obj << /Type /Pages /Count 6 /Parent 7348 0 R /Kids [1479 0 R 1511 0 R 1527 0 R 1576 0 R 1627 0 R 1649 0 R] >> endobj 1682 0 obj << /Type /Pages /Count 6 /Parent 7348 0 R /Kids [1666 0 R 1686 0 R 1733 0 R 1774 0 R 1797 0 R 1815 0 R] >> endobj 1860 0 obj << /Type /Pages /Count 6 /Parent 7349 0 R /Kids [1851 0 R 1938 0 R 2019 0 R 2053 0 R 2068 0 R 2104 0 R] >> endobj 2134 0 obj << /Type /Pages /Count 6 /Parent 7349 0 R /Kids [2128 0 R 2138 0 R 2150 0 R 2174 0 R 2193 0 R 2209 0 R] >> endobj 2241 0 obj << /Type /Pages /Count 6 /Parent 7349 0 R /Kids [2227 0 R 2262 0 R 2293 0 R 2336 0 R 2379 0 R 2395 0 R] >> endobj 2418 0 obj << /Type /Pages /Count 6 /Parent 7349 0 R /Kids [2412 0 R 2428 0 R 2450 0 R 2475 0 R 2500 0 R 2509 0 R] >> endobj 2546 0 obj << /Type /Pages /Count 6 /Parent 7349 0 R /Kids [2538 0 R 2569 0 R 2613 0 R 2653 0 R 2673 0 R 2700 0 R] >> endobj 2728 0 obj << /Type /Pages /Count 6 /Parent 7349 0 R /Kids [2722 0 R 2734 0 R 2751 0 R 2768 0 R 2797 0 R 2837 0 R] >> endobj 2892 0 obj << /Type /Pages /Count 6 /Parent 7350 0 R /Kids [2889 0 R 2937 0 R 2987 0 R 3034 0 R 3074 0 R 3150 0 R] >> endobj 3206 0 obj << /Type /Pages /Count 6 /Parent 7350 0 R /Kids [3203 0 R 3219 0 R 3238 0 R 3258 0 R 3275 0 R 3294 0 R] >> endobj 3329 0 obj << /Type /Pages /Count 6 /Parent 7350 0 R /Kids [3318 0 R 3343 0 R 3366 0 R 3390 0 R 3414 0 R 3438 0 R] >> endobj 3473 0 obj << /Type /Pages /Count 6 /Parent 7350 0 R /Kids [3462 0 R 3487 0 R 3510 0 R 3547 0 R 3585 0 R 3627 0 R] >> endobj 3643 0 obj << /Type /Pages /Count 6 /Parent 7350 0 R /Kids [3638 0 R 3656 0 R 3678 0 R 3691 0 R 3698 0 R 3706 0 R] >> endobj 3718 0 obj << /Type /Pages /Count 6 /Parent 7350 0 R /Kids [3714 0 R 3720 0 R 3731 0 R 3747 0 R 3756 0 R 3770 0 R] >> endobj 3803 0 obj << /Type /Pages /Count 6 /Parent 7351 0 R /Kids [3798 0 R 3840 0 R 3887 0 R 3892 0 R 3918 0 R 3932 0 R] >> endobj 3960 0 obj << /Type /Pages /Count 6 /Parent 7351 0 R /Kids [3951 0 R 3968 0 R 3996 0 R 4040 0 R 4080 0 R 4103 0 R] >> endobj 4130 0 obj << /Type /Pages /Count 6 /Parent 7351 0 R /Kids [4125 0 R 4148 0 R 4161 0 R 4179 0 R 4224 0 R 4273 0 R] >> endobj 4336 0 obj << /Type /Pages /Count 6 /Parent 7351 0 R /Kids [4332 0 R 4352 0 R 4380 0 R 4396 0 R 4421 0 R 4434 0 R] >> endobj 4462 0 obj << /Type /Pages /Count 6 /Parent 7351 0 R /Kids [4455 0 R 4476 0 R 4485 0 R 4496 0 R 4508 0 R 4529 0 R] >> endobj 4556 0 obj << /Type /Pages /Count 6 /Parent 7351 0 R /Kids [4549 0 R 4566 0 R 4591 0 R 4646 0 R 4701 0 R 4721 0 R] >> endobj 4749 0 obj << /Type /Pages /Count 6 /Parent 7352 0 R /Kids [4743 0 R 4767 0 R 4785 0 R 4807 0 R 4860 0 R 4911 0 R] >> endobj 4971 0 obj << /Type /Pages /Count 6 /Parent 7352 0 R /Kids [4967 0 R 5008 0 R 5043 0 R 5073 0 R 5097 0 R 5118 0 R] >> endobj 5139 0 obj << /Type /Pages /Count 6 /Parent 7352 0 R /Kids [5135 0 R 5155 0 R 5170 0 R 5200 0 R 5209 0 R 5221 0 R] >> endobj 5237 0 obj << /Type /Pages /Count 6 /Parent 7352 0 R /Kids [5233 0 R 5263 0 R 5290 0 R 5307 0 R 5317 0 R 5331 0 R] >> endobj 5343 0 obj << /Type /Pages /Count 6 /Parent 7352 0 R /Kids [5339 0 R 5352 0 R 5380 0 R 5412 0 R 5429 0 R 5456 0 R] >> endobj 5469 0 obj << /Type /Pages /Count 6 /Parent 7352 0 R /Kids [5462 0 R 5475 0 R 5509 0 R 5549 0 R 5612 0 R 5649 0 R] >> endobj 5674 0 obj << /Type /Pages /Count 6 /Parent 7353 0 R /Kids [5670 0 R 5677 0 R 5685 0 R 5690 0 R 5703 0 R 5715 0 R] >> endobj 5734 0 obj << /Type /Pages /Count 6 /Parent 7353 0 R /Kids [5728 0 R 5736 0 R 5800 0 R 5870 0 R 5929 0 R 6005 0 R] >> endobj 6071 0 obj << /Type /Pages /Count 6 /Parent 7353 0 R /Kids [6068 0 R 6151 0 R 6214 0 R 6298 0 R 6396 0 R 6469 0 R] >> endobj 6553 0 obj << /Type /Pages /Count 6 /Parent 7353 0 R /Kids [6550 0 R 6645 0 R 6726 0 R 6795 0 R 6879 0 R 6958 0 R] >> endobj 7041 0 obj << /Type /Pages /Count 5 /Parent 7353 0 R /Kids [7038 0 R 7134 0 R 7226 0 R 7294 0 R 7302 0 R] >> endobj 7348 0 obj << /Type /Pages /Count 36 /Parent 7354 0 R /Kids [596 0 R 859 0 R 1181 0 R 1335 0 R 1486 0 R 1682 0 R] >> endobj 7349 0 obj << /Type /Pages /Count 36 /Parent 7354 0 R /Kids [1860 0 R 2134 0 R 2241 0 R 2418 0 R 2546 0 R 2728 0 R] >> endobj 7350 0 obj << /Type /Pages /Count 36 /Parent 7354 0 R /Kids [2892 0 R 3206 0 R 3329 0 R 3473 0 R 3643 0 R 3718 0 R] >> endobj 7351 0 obj << /Type /Pages /Count 36 /Parent 7354 0 R /Kids [3803 0 R 3960 0 R 4130 0 R 4336 0 R 4462 0 R 4556 0 R] >> endobj 7352 0 obj << /Type /Pages /Count 36 /Parent 7354 0 R /Kids [4749 0 R 4971 0 R 5139 0 R 5237 0 R 5343 0 R 5469 0 R] >> endobj 7353 0 obj << /Type /Pages /Count 29 /Parent 7354 0 R /Kids [5674 0 R 5734 0 R 6071 0 R 6553 0 R 7041 0 R] >> endobj 7354 0 obj << /Type /Pages /Count 209 /Kids [7348 0 R 7349 0 R 7350 0 R 7351 0 R 7352 0 R 7353 0 R] >> endobj 7355 0 obj << /Type /Outlines /First 7 0 R /Last 199 0 R /Count 6 >> endobj 587 0 obj << /Title 588 0 R /A 585 0 R /Parent 579 0 R /Prev 583 0 R >> endobj 583 0 obj << /Title 584 0 R /A 581 0 R /Parent 579 0 R /Next 587 0 R >> endobj 579 0 obj << /Title 580 0 R /A 577 0 R /Parent 199 0 R /Prev 555 0 R /First 583 0 R /Last 587 0 R /Count -2 >> endobj 575 0 obj << /Title 576 0 R /A 573 0 R /Parent 555 0 R /Prev 571 0 R >> endobj 571 0 obj << /Title 572 0 R /A 569 0 R /Parent 555 0 R /Prev 567 0 R /Next 575 0 R >> endobj 567 0 obj << /Title 568 0 R /A 565 0 R /Parent 555 0 R /Prev 563 0 R /Next 571 0 R >> endobj 563 0 obj << /Title 564 0 R /A 561 0 R /Parent 555 0 R /Prev 559 0 R /Next 567 0 R >> endobj 559 0 obj << /Title 560 0 R /A 557 0 R /Parent 555 0 R /Next 563 0 R >> endobj 555 0 obj << /Title 556 0 R /A 553 0 R /Parent 199 0 R /Prev 539 0 R /Next 579 0 R /First 559 0 R /Last 575 0 R /Count -5 >> endobj 551 0 obj << /Title 552 0 R /A 549 0 R /Parent 539 0 R /Prev 547 0 R >> endobj 547 0 obj << /Title 548 0 R /A 545 0 R /Parent 539 0 R /Prev 543 0 R /Next 551 0 R >> endobj 543 0 obj << /Title 544 0 R /A 541 0 R /Parent 539 0 R /Next 547 0 R >> endobj 539 0 obj << /Title 540 0 R /A 537 0 R /Parent 199 0 R /Prev 523 0 R /Next 555 0 R /First 543 0 R /Last 551 0 R /Count -3 >> endobj 535 0 obj << /Title 536 0 R /A 533 0 R /Parent 523 0 R /Prev 531 0 R >> endobj 531 0 obj << /Title 532 0 R /A 529 0 R /Parent 523 0 R /Prev 527 0 R /Next 535 0 R >> endobj 527 0 obj << /Title 528 0 R /A 525 0 R /Parent 523 0 R /Next 531 0 R >> endobj 523 0 obj << /Title 524 0 R /A 521 0 R /Parent 199 0 R /Prev 511 0 R /Next 539 0 R /First 527 0 R /Last 535 0 R /Count -3 >> endobj 519 0 obj << /Title 520 0 R /A 517 0 R /Parent 511 0 R /Prev 515 0 R >> endobj 515 0 obj << /Title 516 0 R /A 513 0 R /Parent 511 0 R /Next 519 0 R >> endobj 511 0 obj << /Title 512 0 R /A 509 0 R /Parent 199 0 R /Prev 503 0 R /Next 523 0 R /First 515 0 R /Last 519 0 R /Count -2 >> endobj 507 0 obj << /Title 508 0 R /A 505 0 R /Parent 503 0 R >> endobj 503 0 obj << /Title 504 0 R /A 501 0 R /Parent 199 0 R /Prev 479 0 R /Next 511 0 R /First 507 0 R /Last 507 0 R /Count -1 >> endobj 499 0 obj << /Title 500 0 R /A 497 0 R /Parent 479 0 R /Prev 495 0 R >> endobj 495 0 obj << /Title 496 0 R /A 493 0 R /Parent 479 0 R /Prev 491 0 R /Next 499 0 R >> endobj 491 0 obj << /Title 492 0 R /A 489 0 R /Parent 479 0 R /Prev 487 0 R /Next 495 0 R >> endobj 487 0 obj << /Title 488 0 R /A 485 0 R /Parent 479 0 R /Prev 483 0 R /Next 491 0 R >> endobj 483 0 obj << /Title 484 0 R /A 481 0 R /Parent 479 0 R /Next 487 0 R >> endobj 479 0 obj << /Title 480 0 R /A 477 0 R /Parent 199 0 R /Prev 455 0 R /Next 503 0 R /First 483 0 R /Last 499 0 R /Count -5 >> endobj 475 0 obj << /Title 476 0 R /A 473 0 R /Parent 455 0 R /Prev 471 0 R >> endobj 471 0 obj << /Title 472 0 R /A 469 0 R /Parent 455 0 R /Prev 467 0 R /Next 475 0 R >> endobj 467 0 obj << /Title 468 0 R /A 465 0 R /Parent 455 0 R /Prev 463 0 R /Next 471 0 R >> endobj 463 0 obj << /Title 464 0 R /A 461 0 R /Parent 455 0 R /Prev 459 0 R /Next 467 0 R >> endobj 459 0 obj << /Title 460 0 R /A 457 0 R /Parent 455 0 R /Next 463 0 R >> endobj 455 0 obj << /Title 456 0 R /A 453 0 R /Parent 199 0 R /Prev 439 0 R /Next 479 0 R /First 459 0 R /Last 475 0 R /Count -5 >> endobj 451 0 obj << /Title 452 0 R /A 449 0 R /Parent 439 0 R /Prev 447 0 R >> endobj 447 0 obj << /Title 448 0 R /A 445 0 R /Parent 439 0 R /Prev 443 0 R /Next 451 0 R >> endobj 443 0 obj << /Title 444 0 R /A 441 0 R /Parent 439 0 R /Next 447 0 R >> endobj 439 0 obj << /Title 440 0 R /A 437 0 R /Parent 199 0 R /Prev 415 0 R /Next 455 0 R /First 443 0 R /Last 451 0 R /Count -3 >> endobj 435 0 obj << /Title 436 0 R /A 433 0 R /Parent 415 0 R /Prev 431 0 R >> endobj 431 0 obj << /Title 432 0 R /A 429 0 R /Parent 415 0 R /Prev 427 0 R /Next 435 0 R >> endobj 427 0 obj << /Title 428 0 R /A 425 0 R /Parent 415 0 R /Prev 423 0 R /Next 431 0 R >> endobj 423 0 obj << /Title 424 0 R /A 421 0 R /Parent 415 0 R /Prev 419 0 R /Next 427 0 R >> endobj 419 0 obj << /Title 420 0 R /A 417 0 R /Parent 415 0 R /Next 423 0 R >> endobj 415 0 obj << /Title 416 0 R /A 413 0 R /Parent 199 0 R /Prev 391 0 R /Next 439 0 R /First 419 0 R /Last 435 0 R /Count -5 >> endobj 411 0 obj << /Title 412 0 R /A 409 0 R /Parent 391 0 R /Prev 407 0 R >> endobj 407 0 obj << /Title 408 0 R /A 405 0 R /Parent 391 0 R /Prev 403 0 R /Next 411 0 R >> endobj 403 0 obj << /Title 404 0 R /A 401 0 R /Parent 391 0 R /Prev 399 0 R /Next 407 0 R >> endobj 399 0 obj << /Title 400 0 R /A 397 0 R /Parent 391 0 R /Prev 395 0 R /Next 403 0 R >> endobj 395 0 obj << /Title 396 0 R /A 393 0 R /Parent 391 0 R /Next 399 0 R >> endobj 391 0 obj << /Title 392 0 R /A 389 0 R /Parent 199 0 R /Prev 367 0 R /Next 415 0 R /First 395 0 R /Last 411 0 R /Count -5 >> endobj 387 0 obj << /Title 388 0 R /A 385 0 R /Parent 367 0 R /Prev 383 0 R >> endobj 383 0 obj << /Title 384 0 R /A 381 0 R /Parent 367 0 R /Prev 379 0 R /Next 387 0 R >> endobj 379 0 obj << /Title 380 0 R /A 377 0 R /Parent 367 0 R /Prev 375 0 R /Next 383 0 R >> endobj 375 0 obj << /Title 376 0 R /A 373 0 R /Parent 367 0 R /Prev 371 0 R /Next 379 0 R >> endobj 371 0 obj << /Title 372 0 R /A 369 0 R /Parent 367 0 R /Next 375 0 R >> endobj 367 0 obj << /Title 368 0 R /A 365 0 R /Parent 199 0 R /Prev 355 0 R /Next 391 0 R /First 371 0 R /Last 387 0 R /Count -5 >> endobj 363 0 obj << /Title 364 0 R /A 361 0 R /Parent 355 0 R /Prev 359 0 R >> endobj 359 0 obj << /Title 360 0 R /A 357 0 R /Parent 355 0 R /Next 363 0 R >> endobj 355 0 obj << /Title 356 0 R /A 353 0 R /Parent 199 0 R /Prev 331 0 R /Next 367 0 R /First 359 0 R /Last 363 0 R /Count -2 >> endobj 351 0 obj << /Title 352 0 R /A 349 0 R /Parent 331 0 R /Prev 347 0 R >> endobj 347 0 obj << /Title 348 0 R /A 345 0 R /Parent 331 0 R /Prev 343 0 R /Next 351 0 R >> endobj 343 0 obj << /Title 344 0 R /A 341 0 R /Parent 331 0 R /Prev 339 0 R /Next 347 0 R >> endobj 339 0 obj << /Title 340 0 R /A 337 0 R /Parent 331 0 R /Prev 335 0 R /Next 343 0 R >> endobj 335 0 obj << /Title 336 0 R /A 333 0 R /Parent 331 0 R /Next 339 0 R >> endobj 331 0 obj << /Title 332 0 R /A 329 0 R /Parent 199 0 R /Prev 307 0 R /Next 355 0 R /First 335 0 R /Last 351 0 R /Count -5 >> endobj 327 0 obj << /Title 328 0 R /A 325 0 R /Parent 307 0 R /Prev 323 0 R >> endobj 323 0 obj << /Title 324 0 R /A 321 0 R /Parent 307 0 R /Prev 319 0 R /Next 327 0 R >> endobj 319 0 obj << /Title 320 0 R /A 317 0 R /Parent 307 0 R /Prev 315 0 R /Next 323 0 R >> endobj 315 0 obj << /Title 316 0 R /A 313 0 R /Parent 307 0 R /Prev 311 0 R /Next 319 0 R >> endobj 311 0 obj << /Title 312 0 R /A 309 0 R /Parent 307 0 R /Next 315 0 R >> endobj 307 0 obj << /Title 308 0 R /A 305 0 R /Parent 199 0 R /Prev 287 0 R /Next 331 0 R /First 311 0 R /Last 327 0 R /Count -5 >> endobj 303 0 obj << /Title 304 0 R /A 301 0 R /Parent 287 0 R /Prev 299 0 R >> endobj 299 0 obj << /Title 300 0 R /A 297 0 R /Parent 287 0 R /Prev 295 0 R /Next 303 0 R >> endobj 295 0 obj << /Title 296 0 R /A 293 0 R /Parent 287 0 R /Prev 291 0 R /Next 299 0 R >> endobj 291 0 obj << /Title 292 0 R /A 289 0 R /Parent 287 0 R /Next 295 0 R >> endobj 287 0 obj << /Title 288 0 R /A 285 0 R /Parent 199 0 R /Prev 263 0 R /Next 307 0 R /First 291 0 R /Last 303 0 R /Count -4 >> endobj 283 0 obj << /Title 284 0 R /A 281 0 R /Parent 263 0 R /Prev 279 0 R >> endobj 279 0 obj << /Title 280 0 R /A 277 0 R /Parent 263 0 R /Prev 275 0 R /Next 283 0 R >> endobj 275 0 obj << /Title 276 0 R /A 273 0 R /Parent 263 0 R /Prev 271 0 R /Next 279 0 R >> endobj 271 0 obj << /Title 272 0 R /A 269 0 R /Parent 263 0 R /Prev 267 0 R /Next 275 0 R >> endobj 267 0 obj << /Title 268 0 R /A 265 0 R /Parent 263 0 R /Next 271 0 R >> endobj 263 0 obj << /Title 264 0 R /A 261 0 R /Parent 199 0 R /Prev 251 0 R /Next 287 0 R /First 267 0 R /Last 283 0 R /Count -5 >> endobj 259 0 obj << /Title 260 0 R /A 257 0 R /Parent 251 0 R /Prev 255 0 R >> endobj 255 0 obj << /Title 256 0 R /A 253 0 R /Parent 251 0 R /Next 259 0 R >> endobj 251 0 obj << /Title 252 0 R /A 249 0 R /Parent 199 0 R /Prev 227 0 R /Next 263 0 R /First 255 0 R /Last 259 0 R /Count -2 >> endobj 247 0 obj << /Title 248 0 R /A 245 0 R /Parent 227 0 R /Prev 243 0 R >> endobj 243 0 obj << /Title 244 0 R /A 241 0 R /Parent 227 0 R /Prev 239 0 R /Next 247 0 R >> endobj 239 0 obj << /Title 240 0 R /A 237 0 R /Parent 227 0 R /Prev 235 0 R /Next 243 0 R >> endobj 235 0 obj << /Title 236 0 R /A 233 0 R /Parent 227 0 R /Prev 231 0 R /Next 239 0 R >> endobj 231 0 obj << /Title 232 0 R /A 229 0 R /Parent 227 0 R /Next 235 0 R >> endobj 227 0 obj << /Title 228 0 R /A 225 0 R /Parent 199 0 R /Prev 203 0 R /Next 251 0 R /First 231 0 R /Last 247 0 R /Count -5 >> endobj 223 0 obj << /Title 224 0 R /A 221 0 R /Parent 203 0 R /Prev 219 0 R >> endobj 219 0 obj << /Title 220 0 R /A 217 0 R /Parent 203 0 R /Prev 215 0 R /Next 223 0 R >> endobj 215 0 obj << /Title 216 0 R /A 213 0 R /Parent 203 0 R /Prev 211 0 R /Next 219 0 R >> endobj 211 0 obj << /Title 212 0 R /A 209 0 R /Parent 203 0 R /Prev 207 0 R /Next 215 0 R >> endobj 207 0 obj << /Title 208 0 R /A 205 0 R /Parent 203 0 R /Next 211 0 R >> endobj 203 0 obj << /Title 204 0 R /A 201 0 R /Parent 199 0 R /Next 227 0 R /First 207 0 R /Last 223 0 R /Count -5 >> endobj 199 0 obj << /Title 200 0 R /A 197 0 R /Parent 7355 0 R /Prev 39 0 R /First 203 0 R /Last 579 0 R /Count -20 >> endobj 195 0 obj << /Title 196 0 R /A 193 0 R /Parent 187 0 R /Prev 191 0 R >> endobj 191 0 obj << /Title 192 0 R /A 189 0 R /Parent 187 0 R /Next 195 0 R >> endobj 187 0 obj << /Title 188 0 R /A 185 0 R /Parent 39 0 R /Prev 175 0 R /First 191 0 R /Last 195 0 R /Count -2 >> endobj 183 0 obj << /Title 184 0 R /A 181 0 R /Parent 175 0 R /Prev 179 0 R >> endobj 179 0 obj << /Title 180 0 R /A 177 0 R /Parent 175 0 R /Next 183 0 R >> endobj 175 0 obj << /Title 176 0 R /A 173 0 R /Parent 39 0 R /Prev 163 0 R /Next 187 0 R /First 179 0 R /Last 183 0 R /Count -2 >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R /Parent 163 0 R /Prev 167 0 R >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R /Parent 163 0 R /Next 171 0 R >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R /Parent 39 0 R /Prev 151 0 R /Next 175 0 R /First 167 0 R /Last 171 0 R /Count -2 >> endobj 159 0 obj << /Title 160 0 R /A 157 0 R /Parent 151 0 R /Prev 155 0 R >> endobj 155 0 obj << /Title 156 0 R /A 153 0 R /Parent 151 0 R /Next 159 0 R >> endobj 151 0 obj << /Title 152 0 R /A 149 0 R /Parent 39 0 R /Prev 139 0 R /Next 163 0 R /First 155 0 R /Last 159 0 R /Count -2 >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R /Parent 139 0 R /Prev 143 0 R >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R /Parent 139 0 R /Next 147 0 R >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R /Parent 39 0 R /Prev 127 0 R /Next 151 0 R /First 143 0 R /Last 147 0 R /Count -2 >> endobj 135 0 obj << /Title 136 0 R /A 133 0 R /Parent 127 0 R /Prev 131 0 R >> endobj 131 0 obj << /Title 132 0 R /A 129 0 R /Parent 127 0 R /Next 135 0 R >> endobj 127 0 obj << /Title 128 0 R /A 125 0 R /Parent 39 0 R /Prev 115 0 R /Next 139 0 R /First 131 0 R /Last 135 0 R /Count -2 >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R /Parent 115 0 R /Prev 119 0 R >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R /Parent 115 0 R /Next 123 0 R >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R /Parent 39 0 R /Prev 103 0 R /Next 127 0 R /First 119 0 R /Last 123 0 R /Count -2 >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R /Parent 103 0 R /Prev 107 0 R >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 103 0 R /Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R /Parent 39 0 R /Prev 91 0 R /Next 115 0 R /First 107 0 R /Last 111 0 R /Count -2 >> endobj 99 0 obj << /Title 100 0 R /A 97 0 R /Parent 91 0 R /Prev 95 0 R >> endobj 95 0 obj << /Title 96 0 R /A 93 0 R /Parent 91 0 R /Next 99 0 R >> endobj 91 0 obj << /Title 92 0 R /A 89 0 R /Parent 39 0 R /Prev 79 0 R /Next 103 0 R /First 95 0 R /Last 99 0 R /Count -2 >> endobj 87 0 obj << /Title 88 0 R /A 85 0 R /Parent 79 0 R /Prev 83 0 R >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 79 0 R /Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 39 0 R /Prev 67 0 R /Next 91 0 R /First 83 0 R /Last 87 0 R /Count -2 >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R /Parent 67 0 R /Prev 71 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 67 0 R /Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R /Parent 39 0 R /Prev 55 0 R /Next 79 0 R /First 71 0 R /Last 75 0 R /Count -2 >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R /Parent 55 0 R /Prev 59 0 R >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 55 0 R /Next 63 0 R >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 39 0 R /Prev 43 0 R /Next 67 0 R /First 59 0 R /Last 63 0 R /Count -2 >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 43 0 R /Prev 47 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 43 0 R /Next 51 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 39 0 R /Next 55 0 R /First 47 0 R /Last 51 0 R /Count -2 >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 7355 0 R /Prev 31 0 R /Next 199 0 R /First 43 0 R /Last 187 0 R /Count -13 >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 31 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 7355 0 R /Prev 23 0 R /Next 39 0 R /First 35 0 R /Last 35 0 R /Count -1 >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 7355 0 R /Prev 19 0 R /Next 31 0 R /First 27 0 R /Last 27 0 R /Count -1 >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 7355 0 R /Prev 7 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 7 0 R /Prev 11 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 7355 0 R /Next 19 0 R /First 11 0 R /Last 15 0 R /Count -2 >> endobj 7356 0 obj << /Names [(Doc-Start) 594 0 R (Item.1) 2512 0 R (Item.10) 2521 0 R (Item.11) 2522 0 R (Item.12) 2523 0 R (Item.13) 2524 0 R] /Limits [(Doc-Start) (Item.13)] >> endobj 7357 0 obj << /Names [(Item.14) 5173 0 R (Item.15) 5174 0 R (Item.16) 5175 0 R (Item.17) 5176 0 R (Item.18) 5177 0 R (Item.19) 5178 0 R] /Limits [(Item.14) (Item.19)] >> endobj 7358 0 obj << /Names [(Item.2) 2513 0 R (Item.20) 5179 0 R (Item.21) 5180 0 R (Item.22) 5236 0 R (Item.23) 5266 0 R (Item.24) 5267 0 R] /Limits [(Item.2) (Item.24)] >> endobj 7359 0 obj << /Names [(Item.25) 5268 0 R (Item.26) 5693 0 R (Item.27) 5694 0 R (Item.28) 5695 0 R (Item.29) 5696 0 R (Item.3) 2514 0 R] /Limits [(Item.25) (Item.3)] >> endobj 7360 0 obj << /Names [(Item.4) 2515 0 R (Item.5) 2516 0 R (Item.6) 2517 0 R (Item.7) 2518 0 R (Item.8) 2519 0 R (Item.9) 2520 0 R] /Limits [(Item.4) (Item.9)] >> endobj 7361 0 obj << /Names [(cel_8h) 1030 0 R (cel_8h_0474e3e2d6c39249acbe58cedd573e84) 860 0 R (cel_8h_055ad88aa219a0207e221d62e03d2e23) 2304 0 R (cel_8h_1fe1b137ade45ea28e61f44d4708fb77) 2350 0 R (cel_8h_1fe7f134670262eb54b6049c0275a27b) 2353 0 R (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) 861 0 R] /Limits [(cel_8h) (cel_8h_2ac33dbe3aa2efff60543213b0a691f5)] >> endobj 7362 0 obj << /Names [(cel_8h_2fe5a30084717036a54e7f0a920da105) 863 0 R (cel_8h_39bb7bf8e545c200191d51884ecfb89b) 2351 0 R (cel_8h_6661c05703158b0808038b7d551f1ea1) 2354 0 R (cel_8h_9e188b582ee4eb815466e86bb684fc82) 862 0 R (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) 1133 0 R (cel_8h_b20292954fb236dafb2cd78aee121c31) 2342 0 R] /Limits [(cel_8h_2fe5a30084717036a54e7f0a920da105) (cel_8h_b20292954fb236dafb2cd78aee121c31)] >> endobj 7363 0 obj << /Names [(cel_8h_b20292954fb236dafb2cd78aee121c3133a743bdcdd17bae9c6961234ed6b642) 2345 0 R (cel_8h_b20292954fb236dafb2cd78aee121c31367cf89b74764f9462bfa50c2eb50fb6) 2346 0 R (cel_8h_b20292954fb236dafb2cd78aee121c3144042efc5a9894182447dfcbcd24e1d4) 2348 0 R (cel_8h_b20292954fb236dafb2cd78aee121c314ca7a593593157772f3788801138dd12) 2343 0 R (cel_8h_b20292954fb236dafb2cd78aee121c317fa1e5cb9c23e5f138638dad3f938e1e) 2344 0 R (cel_8h_b20292954fb236dafb2cd78aee121c31ac8beaf37d754d1a7a7aab5307a2140b) 2349 0 R] /Limits [(cel_8h_b20292954fb236dafb2cd78aee121c3133a743bdcdd17bae9c6961234ed6b642) (cel_8h_b20292954fb236dafb2cd78aee121c31ac8beaf37d754d1a7a7aab5307a2140b)] >> endobj 7364 0 obj << /Names [(cel_8h_b20292954fb236dafb2cd78aee121c31cb1dec1ea393b198b93a26425ee901a2) 2347 0 R (cel_8h_c398f2bea2deac6d86c10a7b3efca966) 865 0 R (cel_8h_db2e4565f61a9de5fe278d9035850dc3) 2352 0 R (cel_8h_f72e24d2f169c3c343c55c880a74050f) 864 0 R (deprecated) 839 0 R (deprecated__deprecated000001) 840 0 R] /Limits [(cel_8h_b20292954fb236dafb2cd78aee121c31cb1dec1ea393b198b93a26425ee901a2) (deprecated__deprecated000001)] >> endobj 7365 0 obj << /Names [(deprecated__deprecated000002) 841 0 R (deprecated__deprecated000003) 842 0 R (deprecated__deprecated000004) 843 0 R (deprecated__deprecated000005) 844 0 R (deprecated__deprecated000006) 845 0 R (deprecated__deprecated000007) 847 0 R] /Limits [(deprecated__deprecated000002) (deprecated__deprecated000007)] >> endobj 7366 0 obj << /Names [(deprecated__deprecated000008) 848 0 R (deprecated__deprecated000009) 849 0 R (deprecated__deprecated000010) 850 0 R (deprecated__deprecated000011) 851 0 R (deprecated__deprecated000012) 852 0 R (deprecated__deprecated000013) 853 0 R] /Limits [(deprecated__deprecated000008) (deprecated__deprecated000013)] >> endobj 7367 0 obj << /Names [(deprecated__deprecated000014) 854 0 R (deprecated__deprecated000015) 855 0 R (deprecated__deprecated000016) 856 0 R (deprecated__deprecated000017) 857 0 R (deprecated__deprecated000018) 858 0 R (deprecated__deprecated000019) 918 0 R] /Limits [(deprecated__deprecated000014) (deprecated__deprecated000019)] >> endobj 7368 0 obj << /Names [(deprecated__deprecated000020) 919 0 R (deprecated__deprecated000021) 920 0 R (deprecated__deprecated000022) 921 0 R (deprecated__deprecated000023) 922 0 R (deprecated__deprecated000024) 923 0 R (deprecated__deprecated000025) 924 0 R] /Limits [(deprecated__deprecated000020) (deprecated__deprecated000025)] >> endobj 7369 0 obj << /Names [(deprecated__deprecated000026) 925 0 R (deprecated__deprecated000027) 926 0 R (deprecated__deprecated000028) 927 0 R (deprecated__deprecated000029) 928 0 R (deprecated__deprecated000030) 929 0 R (deprecated__deprecated000031) 930 0 R] /Limits [(deprecated__deprecated000026) (deprecated__deprecated000031)] >> endobj 7370 0 obj << /Names [(deprecated__deprecated000032) 931 0 R (deprecated__deprecated000033) 932 0 R (deprecated__deprecated000034) 933 0 R (deprecated__deprecated000035) 934 0 R (deprecated__deprecated000036) 935 0 R (deprecated__deprecated000037) 936 0 R] /Limits [(deprecated__deprecated000032) (deprecated__deprecated000037)] >> endobj 7371 0 obj << /Names [(deprecated__deprecated000038) 937 0 R (deprecated__deprecated000039) 938 0 R (deprecated__deprecated000040) 939 0 R (diagnostics) 786 0 R (fitshdr_8h) 1031 0 R (fitshdr_8h_23868c17c44dc94add97438092d3058c) 2462 0 R] /Limits [(deprecated__deprecated000038) (fitshdr_8h_23868c17c44dc94add97438092d3058c)] >> endobj 7372 0 obj << /Names [(fitshdr_8h_42bdf2e2f36d1dee9e06732c75a8ff89) 2457 0 R (fitshdr_8h_5077485c3de4b7bca55698eb66110a76) 2458 0 R (fitshdr_8h_6400ad537ecfd565fb39a574831edf41) 2459 0 R (fitshdr_8h_705c7c2c9700367e0e8b82d5033e6fa3) 866 0 R (fitshdr_8h_8393f26f643097bb78326a85b4e2e7a4) 2461 0 R (fitshdr_8h_88ab82d73e5c2607f0a40af8917fffe1) 1185 0 R] /Limits [(fitshdr_8h_42bdf2e2f36d1dee9e06732c75a8ff89) (fitshdr_8h_88ab82d73e5c2607f0a40af8917fffe1)] >> endobj 7373 0 obj << /Names [(fitshdr_8h_9361fbafbbbba777da623fc3b9e96d2e) 2460 0 R (fitshdr_8h_d966ed3fefd26c9546ec078171e3940b) 2487 0 R (fitshdr_8h_e6ae55940dfdf1155736df656d83a7cd) 2463 0 R (fitshdr_8h_ebb4607327b6db35b468517328f67878) 1194 0 R (fortran) 790 0 R (getwcstab_8h) 1032 0 R] /Limits [(fitshdr_8h_9361fbafbbbba777da623fc3b9e96d2e) (getwcstab_8h)] >> endobj 7374 0 obj << /Names [(getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) 2544 0 R (index) 777 0 R (index_contents) 778 0 R (index_copyright) 779 0 R (intro) 781 0 R (lin_8h) 1033 0 R] /Limits [(getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) (lin_8h)] >> endobj 7375 0 obj << /Names [(lin_8h_5490027e9699680dfefe370c28691243) 2628 0 R (lin_8h_58c2822debf5b36daa18fe8711d724f2) 869 0 R (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) 1315 0 R (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f) 2619 0 R (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f2544660be2086b8225623e8a7b534dfb) 2620 0 R (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f28004da63d882a7df754d49047ea7f2d) 2622 0 R] /Limits [(lin_8h_5490027e9699680dfefe370c28691243) (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f28004da63d882a7df754d49047ea7f2d)] >> endobj 7376 0 obj << /Names [(lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f84e4dcf5e518ba3dce985ef7c9687513) 2621 0 R (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1fd2248fa36c9d85c91187179ae95207e8) 2623 0 R (lin_8h_7232df93295216e063c438671652c2b4) 874 0 R (lin_8h_7bdf034bd750df1e518db9feeebf7a79) 868 0 R (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) 1316 0 R (lin_8h_8970e09d61fde987211f8e64061e1fa1) 871 0 R] /Limits [(lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f84e4dcf5e518ba3dce985ef7c9687513) (lin_8h_8970e09d61fde987211f8e64061e1fa1)] >> endobj 7377 0 obj << /Names [(lin_8h_946005b038f5c584691630b5d39369e3) 2626 0 R (lin_8h_a6d3f59059c532b0217f570f2b4f50df) 870 0 R (lin_8h_a78f202b20674909aab523018106546e) 872 0 R (lin_8h_b8fc0ef6b34eb3327b13a00de78232b1) 2624 0 R (lin_8h_cb8c02645d7cc3d42e3db6ebf74de192) 873 0 R (lin_8h_cc7d26efba3ca08d36047253a9315dcc) 2629 0 R] /Limits [(lin_8h_946005b038f5c584691630b5d39369e3) (lin_8h_cc7d26efba3ca08d36047253a9315dcc)] >> endobj 7378 0 obj << /Names [(lin_8h_e4947608476c198ad27759d1e562d655) 2627 0 R (lin_8h_ef9ead7c6ea6ab08f3ba3fc6a1c30303) 2625 0 R (lin_8h_fce62bec193631f6e6b58c5b786cd660) 2574 0 R (lin_8h_ffec8a2c0650ebd2168d7772b2ecec19) 867 0 R (log_8h) 1034 0 R (log_8h_239e115e583af4e67e60de4a4f95f09e) 2764 0 R] /Limits [(lin_8h_e4947608476c198ad27759d1e562d655) (log_8h_239e115e583af4e67e60de4a4f95f09e)] >> endobj 7379 0 obj << /Names [(log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36) 2757 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c3605b7fdbe8fcf799db114f90f04083273) 2763 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c361f9859b85143e5ddc55744beff6d433c) 2759 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c3685932a7f3c52c3090c1a1c5e82ed1c22) 2762 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36a1df3b688a38178c3bb75225c8921259) 2760 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36fd604876bd42694c1a04cdae2be719e6) 2761 0 R] /Limits [(log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36) (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36fd604876bd42694c1a04cdae2be719e6)] >> endobj 7380 0 obj << /Names [(log_8h_8b8e0a071c9539f4be52eaf789f385ea) 2766 0 R (log_8h_c80fd753e48873cdbd9a332609de150a) 2765 0 R (memory) 785 0 R (overview) 783 0 R (page.1) 593 0 R (page.10) 1222 0 R] /Limits [(log_8h_8b8e0a071c9539f4be52eaf789f385ea) (page.10)] >> endobj 7381 0 obj << /Names [(page.100) 3733 0 R (page.101) 3749 0 R (page.102) 3758 0 R (page.103) 3772 0 R (page.104) 3800 0 R (page.105) 3842 0 R] /Limits [(page.100) (page.105)] >> endobj 7382 0 obj << /Names [(page.106) 3889 0 R (page.107) 3894 0 R (page.108) 3920 0 R (page.109) 3934 0 R (page.11) 1245 0 R (page.110) 3953 0 R] /Limits [(page.106) (page.110)] >> endobj 7383 0 obj << /Names [(page.111) 3970 0 R (page.112) 3998 0 R (page.113) 4042 0 R (page.114) 4082 0 R (page.115) 4105 0 R (page.116) 4127 0 R] /Limits [(page.111) (page.116)] >> endobj 7384 0 obj << /Names [(page.117) 4150 0 R (page.118) 4163 0 R (page.119) 4181 0 R (page.12) 1278 0 R (page.120) 4226 0 R (page.121) 4275 0 R] /Limits [(page.117) (page.121)] >> endobj 7385 0 obj << /Names [(page.122) 4334 0 R (page.123) 4354 0 R (page.124) 4382 0 R (page.125) 4398 0 R (page.126) 4423 0 R (page.127) 4436 0 R] /Limits [(page.122) (page.127)] >> endobj 7386 0 obj << /Names [(page.128) 4457 0 R (page.129) 4478 0 R (page.13) 1310 0 R (page.130) 4487 0 R (page.131) 4498 0 R (page.132) 4510 0 R] /Limits [(page.128) (page.132)] >> endobj 7387 0 obj << /Names [(page.133) 4531 0 R (page.134) 4551 0 R (page.135) 4568 0 R (page.136) 4593 0 R (page.137) 4648 0 R (page.138) 4703 0 R] /Limits [(page.133) (page.138)] >> endobj 7388 0 obj << /Names [(page.139) 4723 0 R (page.14) 1322 0 R (page.140) 4745 0 R (page.141) 4769 0 R (page.142) 4787 0 R (page.143) 4809 0 R] /Limits [(page.139) (page.143)] >> endobj 7389 0 obj << /Names [(page.144) 4862 0 R (page.145) 4913 0 R (page.146) 4969 0 R (page.147) 5010 0 R (page.148) 5045 0 R (page.149) 5075 0 R] /Limits [(page.144) (page.149)] >> endobj 7390 0 obj << /Names [(page.15) 1365 0 R (page.150) 5099 0 R (page.151) 5120 0 R (page.152) 5137 0 R (page.153) 5157 0 R (page.154) 5172 0 R] /Limits [(page.15) (page.154)] >> endobj 7391 0 obj << /Names [(page.155) 5202 0 R (page.156) 5211 0 R (page.157) 5223 0 R (page.158) 5235 0 R (page.159) 5265 0 R (page.16) 1398 0 R] /Limits [(page.155) (page.16)] >> endobj 7392 0 obj << /Names [(page.160) 5292 0 R (page.161) 5309 0 R (page.162) 5319 0 R (page.163) 5333 0 R (page.164) 5341 0 R (page.165) 5354 0 R] /Limits [(page.160) (page.165)] >> endobj 7393 0 obj << /Names [(page.166) 5382 0 R (page.167) 5414 0 R (page.168) 5431 0 R (page.169) 5458 0 R (page.17) 1410 0 R (page.170) 5464 0 R] /Limits [(page.166) (page.170)] >> endobj 7394 0 obj << /Names [(page.171) 5477 0 R (page.172) 5511 0 R (page.173) 5551 0 R (page.174) 5614 0 R (page.175) 5651 0 R (page.176) 5672 0 R] /Limits [(page.171) (page.176)] >> endobj 7395 0 obj << /Names [(page.177) 5679 0 R (page.178) 5687 0 R (page.179) 5692 0 R (page.18) 1421 0 R (page.180) 5705 0 R (page.181) 5717 0 R] /Limits [(page.177) (page.181)] >> endobj 7396 0 obj << /Names [(page.182) 5730 0 R (page.183) 5738 0 R (page.184) 5802 0 R (page.185) 5872 0 R (page.186) 5931 0 R (page.187) 6007 0 R] /Limits [(page.182) (page.187)] >> endobj 7397 0 obj << /Names [(page.188) 6070 0 R (page.189) 6153 0 R (page.19) 1446 0 R (page.190) 6216 0 R (page.191) 6300 0 R (page.192) 6398 0 R] /Limits [(page.188) (page.192)] >> endobj 7398 0 obj << /Names [(page.193) 6471 0 R (page.194) 6552 0 R (page.195) 6647 0 R (page.196) 6728 0 R (page.197) 6797 0 R (page.198) 6881 0 R] /Limits [(page.193) (page.198)] >> endobj 7399 0 obj << /Names [(page.199) 6960 0 R (page.2) 838 0 R (page.20) 1481 0 R (page.200) 7040 0 R (page.201) 7136 0 R (page.202) 7228 0 R] /Limits [(page.199) (page.202)] >> endobj 7400 0 obj << /Names [(page.203) 7296 0 R (page.204) 7304 0 R (page.21) 1513 0 R (page.22) 1529 0 R (page.23) 1578 0 R (page.24) 1629 0 R] /Limits [(page.203) (page.24)] >> endobj 7401 0 obj << /Names [(page.25) 1651 0 R (page.26) 1668 0 R (page.27) 1688 0 R (page.28) 1735 0 R (page.29) 1776 0 R (page.3) 917 0 R] /Limits [(page.25) (page.3)] >> endobj 7402 0 obj << /Names [(page.30) 1799 0 R (page.31) 1817 0 R (page.32) 1853 0 R (page.33) 1940 0 R (page.34) 2021 0 R (page.35) 2055 0 R] /Limits [(page.30) (page.35)] >> endobj 7403 0 obj << /Names [(page.36) 2070 0 R (page.37) 2106 0 R (page.38) 2130 0 R (page.39) 2140 0 R (page.4) 1016 0 R (page.40) 2152 0 R] /Limits [(page.36) (page.40)] >> endobj 7404 0 obj << /Names [(page.41) 2176 0 R (page.42) 2195 0 R (page.43) 2211 0 R (page.44) 2229 0 R (page.45) 2264 0 R (page.46) 2295 0 R] /Limits [(page.41) (page.46)] >> endobj 7405 0 obj << /Names [(page.47) 2338 0 R (page.48) 2381 0 R (page.49) 2397 0 R (page.5) 1075 0 R (page.50) 2414 0 R (page.51) 2430 0 R] /Limits [(page.47) (page.51)] >> endobj 7406 0 obj << /Names [(page.52) 2452 0 R (page.53) 2477 0 R (page.54) 2502 0 R (page.55) 2511 0 R (page.56) 2540 0 R (page.57) 2571 0 R] /Limits [(page.52) (page.57)] >> endobj 7407 0 obj << /Names [(page.58) 2615 0 R (page.59) 2655 0 R (page.6) 1120 0 R (page.60) 2675 0 R (page.61) 2702 0 R (page.62) 2724 0 R] /Limits [(page.58) (page.62)] >> endobj 7408 0 obj << /Names [(page.63) 2736 0 R (page.64) 2753 0 R (page.65) 2770 0 R (page.66) 2799 0 R (page.67) 2839 0 R (page.68) 2891 0 R] /Limits [(page.63) (page.68)] >> endobj 7409 0 obj << /Names [(page.69) 2939 0 R (page.7) 1142 0 R (page.70) 2989 0 R (page.71) 3036 0 R (page.72) 3076 0 R (page.73) 3152 0 R] /Limits [(page.69) (page.73)] >> endobj 7410 0 obj << /Names [(page.74) 3205 0 R (page.75) 3221 0 R (page.76) 3240 0 R (page.77) 3260 0 R (page.78) 3277 0 R (page.79) 3296 0 R] /Limits [(page.74) (page.79)] >> endobj 7411 0 obj << /Names [(page.8) 1172 0 R (page.80) 3320 0 R (page.81) 3345 0 R (page.82) 3368 0 R (page.83) 3392 0 R (page.84) 3416 0 R] /Limits [(page.8) (page.84)] >> endobj 7412 0 obj << /Names [(page.85) 3440 0 R (page.86) 3464 0 R (page.87) 3489 0 R (page.88) 3512 0 R (page.89) 3549 0 R (page.9) 1200 0 R] /Limits [(page.85) (page.9)] >> endobj 7413 0 obj << /Names [(page.90) 3587 0 R (page.91) 3629 0 R (page.92) 3640 0 R (page.93) 3658 0 R (page.94) 3680 0 R (page.95) 3693 0 R] /Limits [(page.90) (page.95)] >> endobj 7414 0 obj << /Names [(page.96) 3700 0 R (page.97) 3708 0 R (page.98) 3716 0 R (page.99) 3722 0 R (page.i) 634 0 R (page.ii) 676 0 R] /Limits [(page.96) (page.ii)] >> endobj 7415 0 obj << /Names [(page.iii) 716 0 R (page.iv) 756 0 R (paragraph.5.1.2.1) 1121 0 R (paragraph.5.1.2.10) 1148 0 R (paragraph.5.1.2.11) 1149 0 R (paragraph.5.1.2.2) 1122 0 R] /Limits [(page.iii) (paragraph.5.1.2.2)] >> endobj 7416 0 obj << /Names [(paragraph.5.1.2.3) 1125 0 R (paragraph.5.1.2.4) 1126 0 R (paragraph.5.1.2.5) 1127 0 R (paragraph.5.1.2.6) 1143 0 R (paragraph.5.1.2.7) 1144 0 R (paragraph.5.1.2.8) 1146 0 R] /Limits [(paragraph.5.1.2.3) (paragraph.5.1.2.8)] >> endobj 7417 0 obj << /Names [(paragraph.5.1.2.9) 1147 0 R (paragraph.5.10.2.1) 1738 0 R (paragraph.5.10.2.10) 1803 0 R (paragraph.5.10.2.11) 1804 0 R (paragraph.5.10.2.12) 1805 0 R (paragraph.5.10.2.13) 1806 0 R] /Limits [(paragraph.5.1.2.9) (paragraph.5.10.2.13)] >> endobj 7418 0 obj << /Names [(paragraph.5.10.2.14) 1807 0 R (paragraph.5.10.2.15) 1808 0 R (paragraph.5.10.2.16) 1818 0 R (paragraph.5.10.2.17) 1819 0 R (paragraph.5.10.2.18) 1820 0 R (paragraph.5.10.2.19) 1821 0 R] /Limits [(paragraph.5.10.2.14) (paragraph.5.10.2.19)] >> endobj 7419 0 obj << /Names [(paragraph.5.10.2.2) 1777 0 R (paragraph.5.10.2.20) 1822 0 R (paragraph.5.10.2.21) 1823 0 R (paragraph.5.10.2.22) 1824 0 R (paragraph.5.10.2.23) 1825 0 R (paragraph.5.10.2.24) 1826 0 R] /Limits [(paragraph.5.10.2.2) (paragraph.5.10.2.24)] >> endobj 7420 0 obj << /Names [(paragraph.5.10.2.3) 1778 0 R (paragraph.5.10.2.4) 1779 0 R (paragraph.5.10.2.5) 1780 0 R (paragraph.5.10.2.6) 1781 0 R (paragraph.5.10.2.7) 1800 0 R (paragraph.5.10.2.8) 1801 0 R] /Limits [(paragraph.5.10.2.3) (paragraph.5.10.2.8)] >> endobj 7421 0 obj << /Names [(paragraph.5.10.2.9) 1802 0 R (paragraph.5.11.2.1) 1854 0 R (paragraph.5.11.2.2) 1855 0 R (paragraph.5.11.2.3) 1856 0 R (paragraph.5.11.2.4) 1857 0 R (paragraph.5.11.2.5) 1858 0 R] /Limits [(paragraph.5.10.2.9) (paragraph.5.11.2.5)] >> endobj 7422 0 obj << /Names [(paragraph.5.12.2.1) 2022 0 R (paragraph.5.12.2.10) 2107 0 R (paragraph.5.12.2.11) 2108 0 R (paragraph.5.12.2.12) 2109 0 R (paragraph.5.12.2.13) 2110 0 R (paragraph.5.12.2.14) 2111 0 R] /Limits [(paragraph.5.12.2.1) (paragraph.5.12.2.14)] >> endobj 7423 0 obj << /Names [(paragraph.5.12.2.15) 2112 0 R (paragraph.5.12.2.16) 2113 0 R (paragraph.5.12.2.17) 2114 0 R (paragraph.5.12.2.18) 2115 0 R (paragraph.5.12.2.19) 2131 0 R (paragraph.5.12.2.2) 2056 0 R] /Limits [(paragraph.5.12.2.15) (paragraph.5.12.2.2)] >> endobj 7424 0 obj << /Names [(paragraph.5.12.2.20) 2132 0 R (paragraph.5.12.2.21) 2133 0 R (paragraph.5.12.2.22) 2141 0 R (paragraph.5.12.2.23) 2142 0 R (paragraph.5.12.2.24) 2143 0 R (paragraph.5.12.2.25) 2144 0 R] /Limits [(paragraph.5.12.2.20) (paragraph.5.12.2.25)] >> endobj 7425 0 obj << /Names [(paragraph.5.12.2.26) 2145 0 R (paragraph.5.12.2.27) 2146 0 R (paragraph.5.12.2.28) 2147 0 R (paragraph.5.12.2.29) 2153 0 R (paragraph.5.12.2.3) 2057 0 R (paragraph.5.12.2.30) 2154 0 R] /Limits [(paragraph.5.12.2.26) (paragraph.5.12.2.30)] >> endobj 7426 0 obj << /Names [(paragraph.5.12.2.31) 2155 0 R (paragraph.5.12.2.32) 2156 0 R (paragraph.5.12.2.33) 2157 0 R (paragraph.5.12.2.34) 2158 0 R (paragraph.5.12.2.35) 2159 0 R (paragraph.5.12.2.36) 2160 0 R] /Limits [(paragraph.5.12.2.31) (paragraph.5.12.2.36)] >> endobj 7427 0 obj << /Names [(paragraph.5.12.2.37) 2161 0 R (paragraph.5.12.2.38) 2162 0 R (paragraph.5.12.2.39) 2163 0 R (paragraph.5.12.2.4) 2058 0 R (paragraph.5.12.2.40) 2177 0 R (paragraph.5.12.2.41) 2178 0 R] /Limits [(paragraph.5.12.2.37) (paragraph.5.12.2.41)] >> endobj 7428 0 obj << /Names [(paragraph.5.12.2.42) 2179 0 R (paragraph.5.12.2.43) 2180 0 R (paragraph.5.12.2.44) 2181 0 R (paragraph.5.12.2.45) 2182 0 R (paragraph.5.12.2.46) 2183 0 R (paragraph.5.12.2.47) 2184 0 R] /Limits [(paragraph.5.12.2.42) (paragraph.5.12.2.47)] >> endobj 7429 0 obj << /Names [(paragraph.5.12.2.48) 2185 0 R (paragraph.5.12.2.49) 2196 0 R (paragraph.5.12.2.5) 2071 0 R (paragraph.5.12.2.50) 2197 0 R (paragraph.5.12.2.51) 2198 0 R (paragraph.5.12.2.52) 2199 0 R] /Limits [(paragraph.5.12.2.48) (paragraph.5.12.2.52)] >> endobj 7430 0 obj << /Names [(paragraph.5.12.2.53) 2200 0 R (paragraph.5.12.2.54) 2212 0 R (paragraph.5.12.2.55) 2213 0 R (paragraph.5.12.2.56) 2214 0 R (paragraph.5.12.2.57) 2215 0 R (paragraph.5.12.2.58) 2216 0 R] /Limits [(paragraph.5.12.2.53) (paragraph.5.12.2.58)] >> endobj 7431 0 obj << /Names [(paragraph.5.12.2.59) 2217 0 R (paragraph.5.12.2.6) 2072 0 R (paragraph.5.12.2.60) 2218 0 R (paragraph.5.12.2.61) 2219 0 R (paragraph.5.12.2.62) 2220 0 R (paragraph.5.12.2.63) 2221 0 R] /Limits [(paragraph.5.12.2.59) (paragraph.5.12.2.63)] >> endobj 7432 0 obj << /Names [(paragraph.5.12.2.64) 2222 0 R (paragraph.5.12.2.65) 2223 0 R (paragraph.5.12.2.66) 2224 0 R (paragraph.5.12.2.67) 2230 0 R (paragraph.5.12.2.68) 2231 0 R (paragraph.5.12.2.69) 2232 0 R] /Limits [(paragraph.5.12.2.64) (paragraph.5.12.2.69)] >> endobj 7433 0 obj << /Names [(paragraph.5.12.2.7) 2073 0 R (paragraph.5.12.2.70) 2233 0 R (paragraph.5.12.2.71) 2234 0 R (paragraph.5.12.2.72) 2235 0 R (paragraph.5.12.2.73) 2236 0 R (paragraph.5.12.2.74) 2237 0 R] /Limits [(paragraph.5.12.2.7) (paragraph.5.12.2.74)] >> endobj 7434 0 obj << /Names [(paragraph.5.12.2.75) 2238 0 R (paragraph.5.12.2.76) 2239 0 R (paragraph.5.12.2.77) 2240 0 R (paragraph.5.12.2.8) 2074 0 R (paragraph.5.12.2.9) 2075 0 R (paragraph.5.13.2.1) 2267 0 R] /Limits [(paragraph.5.12.2.75) (paragraph.5.13.2.1)] >> endobj 7435 0 obj << /Names [(paragraph.5.13.2.10) 2300 0 R (paragraph.5.13.2.11) 2301 0 R (paragraph.5.13.2.2) 2269 0 R (paragraph.5.13.2.3) 2271 0 R (paragraph.5.13.2.4) 2273 0 R (paragraph.5.13.2.5) 2275 0 R] /Limits [(paragraph.5.13.2.10) (paragraph.5.13.2.5)] >> endobj 7436 0 obj << /Names [(paragraph.5.13.2.6) 2296 0 R (paragraph.5.13.2.7) 2297 0 R (paragraph.5.13.2.8) 2298 0 R (paragraph.5.13.2.9) 2299 0 R (paragraph.5.2.2.1) 1175 0 R (paragraph.5.2.2.10) 1227 0 R] /Limits [(paragraph.5.13.2.6) (paragraph.5.2.2.10)] >> endobj 7437 0 obj << /Names [(paragraph.5.2.2.11) 1228 0 R (paragraph.5.2.2.12) 1229 0 R (paragraph.5.2.2.13) 1246 0 R (paragraph.5.2.2.14) 1247 0 R (paragraph.5.2.2.15) 1248 0 R (paragraph.5.2.2.2) 1177 0 R] /Limits [(paragraph.5.2.2.11) (paragraph.5.2.2.2)] >> endobj 7438 0 obj << /Names [(paragraph.5.2.2.3) 1179 0 R (paragraph.5.2.2.4) 1201 0 R (paragraph.5.2.2.5) 1202 0 R (paragraph.5.2.2.6) 1223 0 R (paragraph.5.2.2.7) 1224 0 R (paragraph.5.2.2.8) 1225 0 R] /Limits [(paragraph.5.2.2.3) (paragraph.5.2.2.8)] >> endobj 7439 0 obj << /Names [(paragraph.5.2.2.9) 1226 0 R (paragraph.5.3.2.1) 1251 0 R (paragraph.5.3.2.2) 1279 0 R (paragraph.5.3.2.3) 1280 0 R (paragraph.5.4.2.1) 1311 0 R (paragraph.5.4.2.10) 1328 0 R] /Limits [(paragraph.5.2.2.9) (paragraph.5.4.2.10)] >> endobj 7440 0 obj << /Names [(paragraph.5.4.2.11) 1329 0 R (paragraph.5.4.2.12) 1330 0 R (paragraph.5.4.2.13) 1331 0 R (paragraph.5.4.2.14) 1332 0 R (paragraph.5.4.2.15) 1333 0 R (paragraph.5.4.2.16) 1334 0 R] /Limits [(paragraph.5.4.2.11) (paragraph.5.4.2.16)] >> endobj 7441 0 obj << /Names [(paragraph.5.4.2.17) 1366 0 R (paragraph.5.4.2.18) 1367 0 R (paragraph.5.4.2.2) 1312 0 R (paragraph.5.4.2.3) 1313 0 R (paragraph.5.4.2.4) 1314 0 R (paragraph.5.4.2.5) 1323 0 R] /Limits [(paragraph.5.4.2.17) (paragraph.5.4.2.5)] >> endobj 7442 0 obj << /Names [(paragraph.5.4.2.6) 1324 0 R (paragraph.5.4.2.7) 1325 0 R (paragraph.5.4.2.8) 1326 0 R (paragraph.5.4.2.9) 1327 0 R (paragraph.5.5.2.1) 1399 0 R (paragraph.5.5.2.10) 1413 0 R] /Limits [(paragraph.5.4.2.6) (paragraph.5.5.2.10)] >> endobj 7443 0 obj << /Names [(paragraph.5.5.2.11) 1414 0 R (paragraph.5.5.2.12) 1415 0 R (paragraph.5.5.2.13) 1416 0 R (paragraph.5.5.2.14) 1422 0 R (paragraph.5.5.2.15) 1423 0 R (paragraph.5.5.2.16) 1424 0 R] /Limits [(paragraph.5.5.2.11) (paragraph.5.5.2.16)] >> endobj 7444 0 obj << /Names [(paragraph.5.5.2.17) 1425 0 R (paragraph.5.5.2.18) 1426 0 R (paragraph.5.5.2.19) 1427 0 R (paragraph.5.5.2.2) 1400 0 R (paragraph.5.5.2.20) 1428 0 R (paragraph.5.5.2.21) 1429 0 R] /Limits [(paragraph.5.5.2.17) (paragraph.5.5.2.21)] >> endobj 7445 0 obj << /Names [(paragraph.5.5.2.22) 1430 0 R (paragraph.5.5.2.23) 1431 0 R (paragraph.5.5.2.24) 1432 0 R (paragraph.5.5.2.3) 1401 0 R (paragraph.5.5.2.4) 1402 0 R (paragraph.5.5.2.5) 1403 0 R] /Limits [(paragraph.5.5.2.22) (paragraph.5.5.2.5)] >> endobj 7446 0 obj << /Names [(paragraph.5.5.2.6) 1404 0 R (paragraph.5.5.2.7) 1405 0 R (paragraph.5.5.2.8) 1411 0 R (paragraph.5.5.2.9) 1412 0 R (paragraph.5.6.2.1) 1449 0 R (paragraph.5.6.2.2) 1451 0 R] /Limits [(paragraph.5.5.2.6) (paragraph.5.6.2.2)] >> endobj 7447 0 obj << /Names [(paragraph.5.6.2.3) 1453 0 R (paragraph.5.7.2.1) 1482 0 R (paragraph.5.7.2.2) 1483 0 R (paragraph.5.7.2.3) 1484 0 R (paragraph.5.8.2.1) 1514 0 R (paragraph.5.8.2.10) 1532 0 R] /Limits [(paragraph.5.6.2.3) (paragraph.5.8.2.10)] >> endobj 7448 0 obj << /Names [(paragraph.5.8.2.11) 1533 0 R (paragraph.5.8.2.12) 1534 0 R (paragraph.5.8.2.13) 1535 0 R (paragraph.5.8.2.14) 1536 0 R (paragraph.5.8.2.15) 1579 0 R (paragraph.5.8.2.16) 1580 0 R] /Limits [(paragraph.5.8.2.11) (paragraph.5.8.2.16)] >> endobj 7449 0 obj << /Names [(paragraph.5.8.2.2) 1515 0 R (paragraph.5.8.2.3) 1516 0 R (paragraph.5.8.2.4) 1517 0 R (paragraph.5.8.2.5) 1518 0 R (paragraph.5.8.2.6) 1519 0 R (paragraph.5.8.2.7) 1520 0 R] /Limits [(paragraph.5.8.2.2) (paragraph.5.8.2.7)] >> endobj 7450 0 obj << /Names [(paragraph.5.8.2.8) 1530 0 R (paragraph.5.8.2.9) 1531 0 R (paragraph.5.9.2.1) 1630 0 R (paragraph.5.9.2.10) 1654 0 R (paragraph.5.9.2.11) 1655 0 R (paragraph.5.9.2.12) 1656 0 R] /Limits [(paragraph.5.8.2.8) (paragraph.5.9.2.12)] >> endobj 7451 0 obj << /Names [(paragraph.5.9.2.13) 1657 0 R (paragraph.5.9.2.14) 1658 0 R (paragraph.5.9.2.15) 1659 0 R (paragraph.5.9.2.16) 1660 0 R (paragraph.5.9.2.17) 1661 0 R (paragraph.5.9.2.18) 1662 0 R] /Limits [(paragraph.5.9.2.13) (paragraph.5.9.2.18)] >> endobj 7452 0 obj << /Names [(paragraph.5.9.2.19) 1663 0 R (paragraph.5.9.2.2) 1631 0 R (paragraph.5.9.2.20) 1664 0 R (paragraph.5.9.2.21) 1669 0 R (paragraph.5.9.2.22) 1670 0 R (paragraph.5.9.2.23) 1671 0 R] /Limits [(paragraph.5.9.2.19) (paragraph.5.9.2.23)] >> endobj 7453 0 obj << /Names [(paragraph.5.9.2.24) 1672 0 R (paragraph.5.9.2.25) 1673 0 R (paragraph.5.9.2.26) 1674 0 R (paragraph.5.9.2.27) 1675 0 R (paragraph.5.9.2.28) 1676 0 R (paragraph.5.9.2.29) 1677 0 R] /Limits [(paragraph.5.9.2.24) (paragraph.5.9.2.29)] >> endobj 7454 0 obj << /Names [(paragraph.5.9.2.3) 1632 0 R (paragraph.5.9.2.30) 1678 0 R (paragraph.5.9.2.31) 1679 0 R (paragraph.5.9.2.32) 1680 0 R (paragraph.5.9.2.33) 1681 0 R (paragraph.5.9.2.34) 1689 0 R] /Limits [(paragraph.5.9.2.3) (paragraph.5.9.2.34)] >> endobj 7455 0 obj << /Names [(paragraph.5.9.2.35) 1690 0 R (paragraph.5.9.2.36) 1691 0 R (paragraph.5.9.2.37) 1692 0 R (paragraph.5.9.2.38) 1693 0 R (paragraph.5.9.2.39) 1694 0 R (paragraph.5.9.2.4) 1633 0 R] /Limits [(paragraph.5.9.2.35) (paragraph.5.9.2.4)] >> endobj 7456 0 obj << /Names [(paragraph.5.9.2.40) 1695 0 R (paragraph.5.9.2.41) 1696 0 R (paragraph.5.9.2.42) 1697 0 R (paragraph.5.9.2.43) 1698 0 R (paragraph.5.9.2.5) 1634 0 R (paragraph.5.9.2.6) 1635 0 R] /Limits [(paragraph.5.9.2.40) (paragraph.5.9.2.6)] >> endobj 7457 0 obj << /Names [(paragraph.5.9.2.7) 1636 0 R (paragraph.5.9.2.8) 1652 0 R (paragraph.5.9.2.9) 1653 0 R (paragraph.6.1.2.1) 2382 0 R (paragraph.6.1.2.2) 2383 0 R (paragraph.6.1.2.3) 2384 0 R] /Limits [(paragraph.5.9.2.7) (paragraph.6.1.2.3)] >> endobj 7458 0 obj << /Names [(paragraph.6.1.2.4) 2385 0 R (paragraph.6.1.2.5) 2386 0 R (paragraph.6.1.2.6) 2398 0 R (paragraph.6.1.3.1) 2399 0 R (paragraph.6.1.4.1) 2401 0 R (paragraph.6.1.4.2) 2402 0 R] /Limits [(paragraph.6.1.2.4) (paragraph.6.1.4.2)] >> endobj 7459 0 obj << /Names [(paragraph.6.1.4.3) 2415 0 R (paragraph.6.1.4.4) 2416 0 R (paragraph.6.1.4.5) 2417 0 R (paragraph.6.1.4.6) 2431 0 R (paragraph.6.1.5.1) 2432 0 R (paragraph.6.10.2.1) 4083 0 R] /Limits [(paragraph.6.1.4.3) (paragraph.6.10.2.1)] >> endobj 7460 0 obj << /Names [(paragraph.6.10.2.2) 4084 0 R (paragraph.6.10.2.3) 4085 0 R (paragraph.6.10.2.4) 4086 0 R (paragraph.6.10.2.5) 4087 0 R (paragraph.6.10.2.6) 4106 0 R (paragraph.6.10.2.7) 4107 0 R] /Limits [(paragraph.6.10.2.2) (paragraph.6.10.2.7)] >> endobj 7461 0 obj << /Names [(paragraph.6.10.2.8) 4108 0 R (paragraph.6.10.3.1) 4109 0 R (paragraph.6.10.4.1) 4110 0 R (paragraph.6.10.4.2) 4128 0 R (paragraph.6.10.4.3) 4129 0 R (paragraph.6.10.4.4) 4151 0 R] /Limits [(paragraph.6.10.2.8) (paragraph.6.10.4.4)] >> endobj 7462 0 obj << /Names [(paragraph.6.10.4.5) 4152 0 R (paragraph.6.10.4.6) 4153 0 R (paragraph.6.10.4.7) 4164 0 R (paragraph.6.10.4.8) 4165 0 R (paragraph.6.10.5.1) 4182 0 R (paragraph.6.11.2.1) 4355 0 R] /Limits [(paragraph.6.10.4.5) (paragraph.6.11.2.1)] >> endobj 7463 0 obj << /Names [(paragraph.6.11.2.10) 4364 0 R (paragraph.6.11.2.11) 4383 0 R (paragraph.6.11.2.12) 4384 0 R (paragraph.6.11.2.13) 4385 0 R (paragraph.6.11.2.14) 4386 0 R (paragraph.6.11.2.15) 4387 0 R] /Limits [(paragraph.6.11.2.10) (paragraph.6.11.2.15)] >> endobj 7464 0 obj << /Names [(paragraph.6.11.2.16) 4388 0 R (paragraph.6.11.2.17) 4389 0 R (paragraph.6.11.2.2) 4356 0 R (paragraph.6.11.2.3) 4357 0 R (paragraph.6.11.2.4) 4358 0 R (paragraph.6.11.2.5) 4359 0 R] /Limits [(paragraph.6.11.2.16) (paragraph.6.11.2.5)] >> endobj 7465 0 obj << /Names [(paragraph.6.11.2.6) 4360 0 R (paragraph.6.11.2.7) 4361 0 R (paragraph.6.11.2.8) 4362 0 R (paragraph.6.11.2.9) 4363 0 R (paragraph.6.11.3.1) 4399 0 R (paragraph.6.11.4.1) 4400 0 R] /Limits [(paragraph.6.11.2.6) (paragraph.6.11.4.1)] >> endobj 7466 0 obj << /Names [(paragraph.6.11.4.10) 4488 0 R (paragraph.6.11.4.11) 4499 0 R (paragraph.6.11.4.12) 4511 0 R (paragraph.6.11.4.2) 4401 0 R (paragraph.6.11.4.3) 4424 0 R (paragraph.6.11.4.4) 4425 0 R] /Limits [(paragraph.6.11.4.10) (paragraph.6.11.4.4)] >> endobj 7467 0 obj << /Names [(paragraph.6.11.4.5) 4458 0 R (paragraph.6.11.4.6) 4459 0 R (paragraph.6.11.4.7) 4460 0 R (paragraph.6.11.4.8) 4479 0 R (paragraph.6.11.4.9) 4480 0 R (paragraph.6.11.5.1) 4532 0 R] /Limits [(paragraph.6.11.4.5) (paragraph.6.11.5.1)] >> endobj 7468 0 obj << /Names [(paragraph.6.12.2.1) 4552 0 R (paragraph.6.12.2.2) 4553 0 R (paragraph.6.12.2.3) 4554 0 R (paragraph.6.12.3.1) 4555 0 R (paragraph.6.12.3.2) 4569 0 R (paragraph.6.12.3.3) 4570 0 R] /Limits [(paragraph.6.12.2.1) (paragraph.6.12.3.3)] >> endobj 7469 0 obj << /Names [(paragraph.6.12.3.4) 4571 0 R (paragraph.6.12.3.5) 4594 0 R (paragraph.6.13.2.1) 4724 0 R (paragraph.6.13.2.2) 4725 0 R (paragraph.6.13.2.3) 4726 0 R (paragraph.6.13.2.4) 4727 0 R] /Limits [(paragraph.6.12.3.4) (paragraph.6.13.2.4)] >> endobj 7470 0 obj << /Names [(paragraph.6.13.2.5) 4728 0 R (paragraph.6.13.2.6) 4729 0 R (paragraph.6.13.2.7) 4730 0 R (paragraph.6.13.2.8) 4731 0 R (paragraph.6.13.3.1) 4732 0 R (paragraph.6.13.4.1) 4746 0 R] /Limits [(paragraph.6.13.2.5) (paragraph.6.13.4.1)] >> endobj 7471 0 obj << /Names [(paragraph.6.13.4.2) 4747 0 R (paragraph.6.13.4.3) 4748 0 R (paragraph.6.13.4.4) 4770 0 R (paragraph.6.13.4.5) 4771 0 R (paragraph.6.13.4.6) 4788 0 R (paragraph.6.13.4.7) 4789 0 R] /Limits [(paragraph.6.13.4.2) (paragraph.6.13.4.7)] >> endobj 7472 0 obj << /Names [(paragraph.6.13.4.8) 4810 0 R (paragraph.6.13.5.1) 4811 0 R (paragraph.6.14.2.1) 5011 0 R (paragraph.6.14.2.10) 5049 0 R (paragraph.6.14.2.11) 5050 0 R (paragraph.6.14.2.12) 5051 0 R] /Limits [(paragraph.6.13.4.8) (paragraph.6.14.2.12)] >> endobj 7473 0 obj << /Names [(paragraph.6.14.2.13) 5052 0 R (paragraph.6.14.2.14) 5053 0 R (paragraph.6.14.2.15) 5054 0 R (paragraph.6.14.2.16) 5076 0 R (paragraph.6.14.2.17) 5077 0 R (paragraph.6.14.2.18) 5078 0 R] /Limits [(paragraph.6.14.2.13) (paragraph.6.14.2.18)] >> endobj 7474 0 obj << /Names [(paragraph.6.14.2.19) 5079 0 R (paragraph.6.14.2.2) 5012 0 R (paragraph.6.14.2.20) 5080 0 R (paragraph.6.14.2.21) 5081 0 R (paragraph.6.14.2.22) 5082 0 R (paragraph.6.14.2.23) 5083 0 R] /Limits [(paragraph.6.14.2.19) (paragraph.6.14.2.23)] >> endobj 7475 0 obj << /Names [(paragraph.6.14.2.24) 5084 0 R (paragraph.6.14.2.25) 5100 0 R (paragraph.6.14.2.26) 5101 0 R (paragraph.6.14.2.27) 5102 0 R (paragraph.6.14.2.28) 5103 0 R (paragraph.6.14.2.3) 5013 0 R] /Limits [(paragraph.6.14.2.24) (paragraph.6.14.2.3)] >> endobj 7476 0 obj << /Names [(paragraph.6.14.2.4) 5014 0 R (paragraph.6.14.2.5) 5015 0 R (paragraph.6.14.2.6) 5016 0 R (paragraph.6.14.2.7) 5046 0 R (paragraph.6.14.2.8) 5047 0 R (paragraph.6.14.2.9) 5048 0 R] /Limits [(paragraph.6.14.2.4) (paragraph.6.14.2.9)] >> endobj 7477 0 obj << /Names [(paragraph.6.14.3.1) 5104 0 R (paragraph.6.14.4.1) 5105 0 R (paragraph.6.14.4.2) 5138 0 R (paragraph.6.14.4.3) 5269 0 R (paragraph.6.14.4.4) 5293 0 R (paragraph.6.14.4.5) 5310 0 R] /Limits [(paragraph.6.14.3.1) (paragraph.6.14.4.5)] >> endobj 7478 0 obj << /Names [(paragraph.6.14.4.6) 5311 0 R (paragraph.6.14.4.7) 5320 0 R (paragraph.6.14.5.1) 5342 0 R (paragraph.6.16.2.1) 5357 0 R (paragraph.6.16.2.2) 5383 0 R (paragraph.6.16.2.3) 5384 0 R] /Limits [(paragraph.6.14.4.6) (paragraph.6.16.2.3)] >> endobj 7479 0 obj << /Names [(paragraph.6.16.2.4) 5385 0 R (paragraph.6.16.2.5) 5386 0 R (paragraph.6.16.2.6) 5387 0 R (paragraph.6.16.2.7) 5388 0 R (paragraph.6.17.2.1) 5415 0 R (paragraph.6.17.3.1) 5416 0 R] /Limits [(paragraph.6.16.2.4) (paragraph.6.17.3.1)] >> endobj 7480 0 obj << /Names [(paragraph.6.17.3.2) 5417 0 R (paragraph.6.17.3.3) 5432 0 R (paragraph.6.18.2.1) 5459 0 R (paragraph.6.18.3.1) 5460 0 R (paragraph.6.18.3.2) 5465 0 R (paragraph.6.18.3.3) 5466 0 R] /Limits [(paragraph.6.17.3.2) (paragraph.6.18.3.3)] >> endobj 7481 0 obj << /Names [(paragraph.6.18.3.4) 5467 0 R (paragraph.6.18.3.5) 5468 0 R (paragraph.6.18.3.6) 5478 0 R (paragraph.6.18.3.7) 5479 0 R (paragraph.6.18.3.8) 5480 0 R (paragraph.6.19.2.1) 5615 0 R] /Limits [(paragraph.6.18.3.4) (paragraph.6.19.2.1)] >> endobj 7482 0 obj << /Names [(paragraph.6.19.2.10) 5626 0 R (paragraph.6.19.2.11) 5652 0 R (paragraph.6.19.2.12) 5654 0 R (paragraph.6.19.2.13) 5656 0 R (paragraph.6.19.2.14) 5657 0 R (paragraph.6.19.2.15) 5658 0 R] /Limits [(paragraph.6.19.2.10) (paragraph.6.19.2.15)] >> endobj 7483 0 obj << /Names [(paragraph.6.19.2.16) 5660 0 R (paragraph.6.19.2.17) 5661 0 R (paragraph.6.19.2.18) 5662 0 R (paragraph.6.19.2.2) 5616 0 R (paragraph.6.19.2.3) 5617 0 R (paragraph.6.19.2.4) 5618 0 R] /Limits [(paragraph.6.19.2.16) (paragraph.6.19.2.4)] >> endobj 7484 0 obj << /Names [(paragraph.6.19.2.5) 5619 0 R (paragraph.6.19.2.6) 5620 0 R (paragraph.6.19.2.7) 5621 0 R (paragraph.6.19.2.8) 5623 0 R (paragraph.6.19.2.9) 5624 0 R (paragraph.6.19.3.1) 5663 0 R] /Limits [(paragraph.6.19.2.5) (paragraph.6.19.3.1)] >> endobj 7485 0 obj << /Names [(paragraph.6.19.4.1) 5673 0 R (paragraph.6.19.4.2) 5680 0 R (paragraph.6.19.4.3) 5688 0 R (paragraph.6.19.4.4) 5697 0 R (paragraph.6.19.4.5) 5698 0 R (paragraph.6.19.4.6) 5699 0 R] /Limits [(paragraph.6.19.4.1) (paragraph.6.19.4.6)] >> endobj 7486 0 obj << /Names [(paragraph.6.19.5.1) 5700 0 R (paragraph.6.19.5.2) 5706 0 R (paragraph.6.19.5.3) 5707 0 R (paragraph.6.2.2.1) 2479 0 R (paragraph.6.2.2.2) 2480 0 R (paragraph.6.2.2.3) 2481 0 R] /Limits [(paragraph.6.19.5.1) (paragraph.6.2.2.3)] >> endobj 7487 0 obj << /Names [(paragraph.6.2.2.4) 2482 0 R (paragraph.6.2.2.5) 2483 0 R (paragraph.6.2.2.6) 2484 0 R (paragraph.6.2.2.7) 2485 0 R (paragraph.6.2.2.8) 2486 0 R (paragraph.6.2.3.1) 2503 0 R] /Limits [(paragraph.6.2.2.4) (paragraph.6.2.3.1)] >> endobj 7488 0 obj << /Names [(paragraph.6.2.4.1) 2504 0 R (paragraph.6.2.5.1) 2541 0 R (paragraph.6.20.2.1) 5720 0 R (paragraph.6.20.2.2) 5731 0 R (paragraph.6.20.2.3) 5732 0 R (paragraph.6.20.2.4) 5733 0 R] /Limits [(paragraph.6.2.4.1) (paragraph.6.20.2.4)] >> endobj 7489 0 obj << /Names [(paragraph.6.20.2.5) 5739 0 R (paragraph.6.20.2.6) 5740 0 R (paragraph.6.20.2.7) 5741 0 R (paragraph.6.3.2.1) 2545 0 R (paragraph.6.4.2.1) 2657 0 R (paragraph.6.4.2.2) 2658 0 R] /Limits [(paragraph.6.20.2.5) (paragraph.6.4.2.2)] >> endobj 7490 0 obj << /Names [(paragraph.6.4.2.3) 2659 0 R (paragraph.6.4.2.4) 2660 0 R (paragraph.6.4.2.5) 2676 0 R (paragraph.6.4.2.6) 2677 0 R (paragraph.6.4.2.7) 2678 0 R (paragraph.6.4.2.8) 2679 0 R] /Limits [(paragraph.6.4.2.3) (paragraph.6.4.2.8)] >> endobj 7491 0 obj << /Names [(paragraph.6.4.3.1) 2680 0 R (paragraph.6.4.4.1) 2681 0 R (paragraph.6.4.4.2) 2703 0 R (paragraph.6.4.4.3) 2704 0 R (paragraph.6.4.4.4) 2725 0 R (paragraph.6.4.4.5) 2726 0 R] /Limits [(paragraph.6.4.3.1) (paragraph.6.4.4.5)] >> endobj 7492 0 obj << /Names [(paragraph.6.4.4.6) 2727 0 R (paragraph.6.4.4.7) 2737 0 R (paragraph.6.4.4.8) 2738 0 R (paragraph.6.4.5.1) 2739 0 R (paragraph.6.5.2.1) 2758 0 R (paragraph.6.5.3.1) 2771 0 R] /Limits [(paragraph.6.4.4.6) (paragraph.6.5.3.1)] >> endobj 7493 0 obj << /Names [(paragraph.6.5.3.2) 2772 0 R (paragraph.6.5.4.1) 2800 0 R (paragraph.6.6.2.1) 3222 0 R (paragraph.6.6.2.2) 3223 0 R (paragraph.6.6.2.3) 3224 0 R (paragraph.6.6.2.4) 3225 0 R] /Limits [(paragraph.6.5.3.2) (paragraph.6.6.2.4)] >> endobj 7494 0 obj << /Names [(paragraph.6.6.2.5) 3226 0 R (paragraph.6.6.2.6) 3227 0 R (paragraph.6.6.2.7) 3228 0 R (paragraph.6.6.2.8) 3229 0 R (paragraph.6.6.2.9) 3241 0 R (paragraph.6.6.3.1) 3242 0 R] /Limits [(paragraph.6.6.2.5) (paragraph.6.6.3.1)] >> endobj 7495 0 obj << /Names [(paragraph.6.6.4.1) 3243 0 R (paragraph.6.6.4.10) 3298 0 R (paragraph.6.6.4.11) 3299 0 R (paragraph.6.6.4.12) 3300 0 R (paragraph.6.6.4.13) 3301 0 R (paragraph.6.6.4.14) 3302 0 R] /Limits [(paragraph.6.6.4.1) (paragraph.6.6.4.14)] >> endobj 7496 0 obj << /Names [(paragraph.6.6.4.15) 3303 0 R (paragraph.6.6.4.16) 3304 0 R (paragraph.6.6.4.17) 3305 0 R (paragraph.6.6.4.18) 3321 0 R (paragraph.6.6.4.19) 3322 0 R (paragraph.6.6.4.2) 3244 0 R] /Limits [(paragraph.6.6.4.15) (paragraph.6.6.4.2)] >> endobj 7497 0 obj << /Names [(paragraph.6.6.4.20) 3323 0 R (paragraph.6.6.4.21) 3324 0 R (paragraph.6.6.4.22) 3325 0 R (paragraph.6.6.4.23) 3326 0 R (paragraph.6.6.4.24) 3327 0 R (paragraph.6.6.4.25) 3328 0 R] /Limits [(paragraph.6.6.4.20) (paragraph.6.6.4.25)] >> endobj 7498 0 obj << /Names [(paragraph.6.6.4.26) 3346 0 R (paragraph.6.6.4.27) 3347 0 R (paragraph.6.6.4.28) 3348 0 R (paragraph.6.6.4.29) 3349 0 R (paragraph.6.6.4.3) 3261 0 R (paragraph.6.6.4.30) 3350 0 R] /Limits [(paragraph.6.6.4.26) (paragraph.6.6.4.30)] >> endobj 7499 0 obj << /Names [(paragraph.6.6.4.31) 3351 0 R (paragraph.6.6.4.32) 3352 0 R (paragraph.6.6.4.33) 3353 0 R (paragraph.6.6.4.34) 3354 0 R (paragraph.6.6.4.35) 3369 0 R (paragraph.6.6.4.36) 3370 0 R] /Limits [(paragraph.6.6.4.31) (paragraph.6.6.4.36)] >> endobj 7500 0 obj << /Names [(paragraph.6.6.4.37) 3371 0 R (paragraph.6.6.4.38) 3372 0 R (paragraph.6.6.4.39) 3373 0 R (paragraph.6.6.4.4) 3262 0 R (paragraph.6.6.4.40) 3374 0 R (paragraph.6.6.4.41) 3375 0 R] /Limits [(paragraph.6.6.4.37) (paragraph.6.6.4.41)] >> endobj 7501 0 obj << /Names [(paragraph.6.6.4.42) 3376 0 R (paragraph.6.6.4.43) 3393 0 R (paragraph.6.6.4.44) 3394 0 R (paragraph.6.6.4.45) 3395 0 R (paragraph.6.6.4.46) 3396 0 R (paragraph.6.6.4.47) 3397 0 R] /Limits [(paragraph.6.6.4.42) (paragraph.6.6.4.47)] >> endobj 7502 0 obj << /Names [(paragraph.6.6.4.48) 3398 0 R (paragraph.6.6.4.49) 3399 0 R (paragraph.6.6.4.5) 3263 0 R (paragraph.6.6.4.50) 3400 0 R (paragraph.6.6.4.51) 3401 0 R (paragraph.6.6.4.52) 3417 0 R] /Limits [(paragraph.6.6.4.48) (paragraph.6.6.4.52)] >> endobj 7503 0 obj << /Names [(paragraph.6.6.4.53) 3418 0 R (paragraph.6.6.4.54) 3419 0 R (paragraph.6.6.4.55) 3420 0 R (paragraph.6.6.4.56) 3421 0 R (paragraph.6.6.4.57) 3422 0 R (paragraph.6.6.4.58) 3423 0 R] /Limits [(paragraph.6.6.4.53) (paragraph.6.6.4.58)] >> endobj 7504 0 obj << /Names [(paragraph.6.6.4.59) 3424 0 R (paragraph.6.6.4.6) 3278 0 R (paragraph.6.6.4.60) 3441 0 R (paragraph.6.6.4.61) 3442 0 R (paragraph.6.6.4.62) 3443 0 R (paragraph.6.6.4.63) 3444 0 R] /Limits [(paragraph.6.6.4.59) (paragraph.6.6.4.63)] >> endobj 7505 0 obj << /Names [(paragraph.6.6.4.64) 3445 0 R (paragraph.6.6.4.65) 3446 0 R (paragraph.6.6.4.66) 3447 0 R (paragraph.6.6.4.67) 3448 0 R (paragraph.6.6.4.68) 3449 0 R (paragraph.6.6.4.69) 3465 0 R] /Limits [(paragraph.6.6.4.64) (paragraph.6.6.4.69)] >> endobj 7506 0 obj << /Names [(paragraph.6.6.4.7) 3279 0 R (paragraph.6.6.4.70) 3466 0 R (paragraph.6.6.4.71) 3467 0 R (paragraph.6.6.4.72) 3468 0 R (paragraph.6.6.4.73) 3469 0 R (paragraph.6.6.4.74) 3470 0 R] /Limits [(paragraph.6.6.4.7) (paragraph.6.6.4.74)] >> endobj 7507 0 obj << /Names [(paragraph.6.6.4.75) 3471 0 R (paragraph.6.6.4.76) 3472 0 R (paragraph.6.6.4.77) 3490 0 R (paragraph.6.6.4.78) 3491 0 R (paragraph.6.6.4.79) 3492 0 R (paragraph.6.6.4.8) 3280 0 R] /Limits [(paragraph.6.6.4.75) (paragraph.6.6.4.8)] >> endobj 7508 0 obj << /Names [(paragraph.6.6.4.80) 3493 0 R (paragraph.6.6.4.81) 3494 0 R (paragraph.6.6.4.82) 3495 0 R (paragraph.6.6.4.83) 3496 0 R (paragraph.6.6.4.84) 3497 0 R (paragraph.6.6.4.85) 3498 0 R] /Limits [(paragraph.6.6.4.80) (paragraph.6.6.4.85)] >> endobj 7509 0 obj << /Names [(paragraph.6.6.4.86) 3513 0 R (paragraph.6.6.4.87) 3514 0 R (paragraph.6.6.4.9) 3297 0 R (paragraph.6.6.5.1) 3515 0 R (paragraph.6.6.5.10) 3550 0 R (paragraph.6.6.5.11) 3551 0 R] /Limits [(paragraph.6.6.4.86) (paragraph.6.6.5.11)] >> endobj 7510 0 obj << /Names [(paragraph.6.6.5.12) 3552 0 R (paragraph.6.6.5.2) 3516 0 R (paragraph.6.6.5.3) 3517 0 R (paragraph.6.6.5.4) 3518 0 R (paragraph.6.6.5.5) 3519 0 R (paragraph.6.6.5.6) 3520 0 R] /Limits [(paragraph.6.6.5.12) (paragraph.6.6.5.6)] >> endobj 7511 0 obj << /Names [(paragraph.6.6.5.7) 3521 0 R (paragraph.6.6.5.8) 3522 0 R (paragraph.6.6.5.9) 3523 0 R (paragraph.6.7.2.1) 3641 0 R (paragraph.6.7.2.2) 3642 0 R (paragraph.6.7.2.3) 3659 0 R] /Limits [(paragraph.6.6.5.7) (paragraph.6.7.2.3)] >> endobj 7512 0 obj << /Names [(paragraph.6.7.2.4) 3660 0 R (paragraph.6.7.2.5) 3661 0 R (paragraph.6.7.2.6) 3662 0 R (paragraph.6.7.3.1) 3663 0 R (paragraph.6.7.4.1) 3664 0 R (paragraph.6.7.4.10) 3717 0 R] /Limits [(paragraph.6.7.2.4) (paragraph.6.7.4.10)] >> endobj 7513 0 obj << /Names [(paragraph.6.7.4.11) 3723 0 R (paragraph.6.7.4.12) 3734 0 R (paragraph.6.7.4.13) 3735 0 R (paragraph.6.7.4.14) 3736 0 R (paragraph.6.7.4.15) 3737 0 R (paragraph.6.7.4.2) 3681 0 R] /Limits [(paragraph.6.7.4.11) (paragraph.6.7.4.2)] >> endobj 7514 0 obj << /Names [(paragraph.6.7.4.3) 3682 0 R (paragraph.6.7.4.4) 3683 0 R (paragraph.6.7.4.5) 3694 0 R (paragraph.6.7.4.6) 3695 0 R (paragraph.6.7.4.7) 3701 0 R (paragraph.6.7.4.8) 3709 0 R] /Limits [(paragraph.6.7.4.3) (paragraph.6.7.4.8)] >> endobj 7515 0 obj << /Names [(paragraph.6.7.4.9) 3710 0 R (paragraph.6.7.5.1) 3738 0 R (paragraph.6.8.2.1) 3750 0 R (paragraph.6.8.2.2) 3751 0 R (paragraph.6.8.2.3) 3759 0 R (paragraph.6.8.2.4) 3773 0 R] /Limits [(paragraph.6.7.4.9) (paragraph.6.8.2.4)] >> endobj 7516 0 obj << /Names [(paragraph.6.9.2.1) 3895 0 R (paragraph.6.9.2.2) 3896 0 R (paragraph.6.9.3.1) 3897 0 R (paragraph.6.9.4.1) 3898 0 R (paragraph.6.9.4.10) 3942 0 R (paragraph.6.9.4.11) 3943 0 R] /Limits [(paragraph.6.9.2.1) (paragraph.6.9.4.11)] >> endobj 7517 0 obj << /Names [(paragraph.6.9.4.12) 3944 0 R (paragraph.6.9.4.13) 3954 0 R (paragraph.6.9.4.14) 3955 0 R (paragraph.6.9.4.15) 3956 0 R (paragraph.6.9.4.16) 3957 0 R (paragraph.6.9.4.17) 3958 0 R] /Limits [(paragraph.6.9.4.12) (paragraph.6.9.4.17)] >> endobj 7518 0 obj << /Names [(paragraph.6.9.4.18) 3959 0 R (paragraph.6.9.4.19) 3971 0 R (paragraph.6.9.4.2) 3921 0 R (paragraph.6.9.4.20) 3972 0 R (paragraph.6.9.4.21) 3973 0 R (paragraph.6.9.4.22) 3974 0 R] /Limits [(paragraph.6.9.4.18) (paragraph.6.9.4.22)] >> endobj 7519 0 obj << /Names [(paragraph.6.9.4.23) 3975 0 R (paragraph.6.9.4.24) 3976 0 R (paragraph.6.9.4.25) 3999 0 R (paragraph.6.9.4.26) 4000 0 R (paragraph.6.9.4.27) 4001 0 R (paragraph.6.9.4.3) 3935 0 R] /Limits [(paragraph.6.9.4.23) (paragraph.6.9.4.3)] >> endobj 7520 0 obj << /Names [(paragraph.6.9.4.4) 3936 0 R (paragraph.6.9.4.5) 3937 0 R (paragraph.6.9.4.6) 3938 0 R (paragraph.6.9.4.7) 3939 0 R (paragraph.6.9.4.8) 3940 0 R (paragraph.6.9.4.9) 3941 0 R] /Limits [(paragraph.6.9.4.4) (paragraph.6.9.4.9)] >> endobj 7521 0 obj << /Names [(paragraph.6.9.5.1) 4002 0 R (pgsbox) 791 0 R (prj_8h) 1035 0 R (prj_8h_025adf8a63b5d4a8d2a4de804e0707be) 2940 0 R (prj_8h_105e2bf177120eb34f41e6af768f855d) 3037 0 R (prj_8h_13e0f81e1fd4bdc46847ab4c634ad346) 2945 0 R] /Limits [(paragraph.6.9.5.1) (prj_8h_13e0f81e1fd4bdc46847ab4c634ad346)] >> endobj 7522 0 obj << /Names [(prj_8h_151140d870ed4f490317938bd6260a6a) 2994 0 R (prj_8h_167a49d730bca43483aef311f7114ae4) 3050 0 R (prj_8h_17be11269d86b3308fd925949877718e) 2992 0 R (prj_8h_1f1714691f99f11640dccdc74eadfb49) 3047 0 R (prj_8h_28b623c88d38ab711fc61f36a97d0b27) 3046 0 R (prj_8h_28ddb923a52cb597ca9c7dd03ceeb4fe) 2948 0 R] /Limits [(prj_8h_151140d870ed4f490317938bd6260a6a) (prj_8h_28ddb923a52cb597ca9c7dd03ceeb4fe)] >> endobj 7523 0 obj << /Names [(prj_8h_2ac22403e59a9e8d2b2f53f6d0574305) 2842 0 R (prj_8h_2ac22403e59a9e8d2b2f53f6d05743050d15cd17822bea2f7fc0209a180cc998) 2847 0 R (prj_8h_2ac22403e59a9e8d2b2f53f6d057430560d6a804ddfa2f2d0f25f397d653695b) 2844 0 R (prj_8h_2ac22403e59a9e8d2b2f53f6d05743056a0f63e2f52f594637a12db14e5814e6) 2845 0 R (prj_8h_2ac22403e59a9e8d2b2f53f6d05743056f3a73d3c0a7dc7d15ceb00e00714bea) 2843 0 R (prj_8h_2ac22403e59a9e8d2b2f53f6d0574305d33460ba0b865ff7580e6d2cebd92c74) 2846 0 R] /Limits [(prj_8h_2ac22403e59a9e8d2b2f53f6d0574305) (prj_8h_2ac22403e59a9e8d2b2f53f6d0574305d33460ba0b865ff7580e6d2cebd92c74)] >> endobj 7524 0 obj << /Names [(prj_8h_2c87fbf68277f03051d3eaae3db785e9) 2941 0 R (prj_8h_2cdabd9dfe78fe18b9e6597881d8ed92) 2806 0 R (prj_8h_2d30db5685dd1faa18680a0e69bc5854) 3154 0 R (prj_8h_2da3bbd3c42c6ad324117cc5f249a834) 2998 0 R (prj_8h_2f42dcec4ea56bbb25b563859228b02e) 3040 0 R (prj_8h_2fe67a5ecf17729881efa24c83482611) 2856 0 R] /Limits [(prj_8h_2c87fbf68277f03051d3eaae3db785e9) (prj_8h_2fe67a5ecf17729881efa24c83482611)] >> endobj 7525 0 obj << /Names [(prj_8h_310444979f8f0e62db2bcbe39b0e3d35) 2956 0 R (prj_8h_3229533df20718c0d5671cc9eb5316fe) 2906 0 R (prj_8h_33f92621800eb880b75611c439526d19) 2997 0 R (prj_8h_344308a1d96a93f9bc682141f3df1a14) 3039 0 R (prj_8h_34d303d7ae44a6aca43c1a81bfaac10f) 2858 0 R (prj_8h_3672afec3db0f850d67404814ebdbc64) 879 0 R] /Limits [(prj_8h_310444979f8f0e62db2bcbe39b0e3d35) (prj_8h_3672afec3db0f850d67404814ebdbc64)] >> endobj 7526 0 obj << /Names [(prj_8h_36ccae7b426311614a4e80432a2b62c3) 2949 0 R (prj_8h_36cf447dee9f2e90e42d43d7adc5a0a1) 2943 0 R (prj_8h_37ad31c5d2926862d211db0d14f401f0) 2804 0 R (prj_8h_3b4cda48838c613460bff00c76fceb44) 3044 0 R (prj_8h_4089618a84e11369bf9e5fd7c11c7368) 3155 0 R (prj_8h_4b25d630b7590f31fa0aa6d5861c9bfd) 3091 0 R] /Limits [(prj_8h_36ccae7b426311614a4e80432a2b62c3) (prj_8h_4b25d630b7590f31fa0aa6d5861c9bfd)] >> endobj 7527 0 obj << /Names [(prj_8h_4ff298fcdc6e7e23dfb4971fbd26ebe7) 3083 0 R (prj_8h_50db1538981df162709b81be0b2961ab) 2848 0 R (prj_8h_53315ef8d3bd4002d1e98142fcf62566) 3043 0 R (prj_8h_5380727f9aeff5aa57f8545d6b54a8f8) 2953 0 R (prj_8h_5517fccc15882e298ac9433f44d1ae4c) 2990 0 R (prj_8h_574e44daea81568a6d5e324a6f339d6f) 2904 0 R] /Limits [(prj_8h_4ff298fcdc6e7e23dfb4971fbd26ebe7) (prj_8h_574e44daea81568a6d5e324a6f339d6f)] >> endobj 7528 0 obj << /Names [(prj_8h_588e9a86fc4dcd1195f867f718ce5429) 3001 0 R (prj_8h_5a2f80bed69a84464e5654f91ed4fb63) 3089 0 R (prj_8h_666322bfe8c4b8e73f00afeb47283f97) 2901 0 R (prj_8h_66b51f10624b6c17a84b5b54058dd72b) 2894 0 R (prj_8h_68ce41ad199c3385bed7e7d4ded2bd8a) 2946 0 R (prj_8h_6d1f0504f9b864d4aed4a59d60bab819) 3079 0 R] /Limits [(prj_8h_588e9a86fc4dcd1195f867f718ce5429) (prj_8h_6d1f0504f9b864d4aed4a59d60bab819)] >> endobj 7529 0 obj << /Names [(prj_8h_6e2db45f219ba5732ddca43a9fc17408) 3092 0 R (prj_8h_6f3cbaaf367984579aad5ec7eb00f397) 2996 0 R (prj_8h_70b750ec65eb4a277057200c7fbb251f) 2857 0 R (prj_8h_749605599f1bf2b883c5c88b6cc9c06b) 3090 0 R (prj_8h_75b6b1cb0a748e9b5d3a4cd31129ace6) 2942 0 R (prj_8h_77283589634cc9a054f3a7c7fc91d38d) 3002 0 R] /Limits [(prj_8h_6e2db45f219ba5732ddca43a9fc17408) (prj_8h_77283589634cc9a054f3a7c7fc91d38d)] >> endobj 7530 0 obj << /Names [(prj_8h_7b60d7992bf9c671cb4191f0ec2e0c90) 2905 0 R (prj_8h_7c719c0387d23c53b0ceb3ee161de66a) 2955 0 R (prj_8h_7f080405538ea2ddd2882c991e25bd2f) 875 0 R (prj_8h_847b7c3f5b7361596912d3d876b4f4fe) 3081 0 R (prj_8h_849a1bbd679d0c193e8be96a8b9ed534) 2907 0 R (prj_8h_853c1df5e8327d83e9cfdde9455355f5) 2995 0 R] /Limits [(prj_8h_7b60d7992bf9c671cb4191f0ec2e0c90) (prj_8h_853c1df5e8327d83e9cfdde9455355f5)] >> endobj 7531 0 obj << /Names [(prj_8h_86e25219d2169702c7db6508750097cf) 3087 0 R (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) 2849 0 R (prj_8h_88c15d0b6f789cbbd7c5d323ef131360) 2895 0 R (prj_8h_8bc552f12260f944e0b8f9b714804983) 3051 0 R (prj_8h_8cca776751549082521a72a743d6b937) 2999 0 R (prj_8h_8ebb4c79b635cef463b4e7242ff23c25) 2853 0 R] /Limits [(prj_8h_86e25219d2169702c7db6508750097cf) (prj_8h_8ebb4c79b635cef463b4e7242ff23c25)] >> endobj 7532 0 obj << /Names [(prj_8h_94f59295c312536ce66482b3d9bebec4) 878 0 R (prj_8h_9a387f05414e7b59487fdcb03ff79ced) 2850 0 R (prj_8h_9bceed17f625eb88a0826871dc8296b5) 3153 0 R (prj_8h_9d3358bed907342e3309e54bd2ab89da) 2893 0 R (prj_8h_a2167e62576d36eae341c2583cb5d678) 3082 0 R (prj_8h_aba5ce89ae711728d8ba8105ac5fd599) 2902 0 R] /Limits [(prj_8h_94f59295c312536ce66482b3d9bebec4) (prj_8h_aba5ce89ae711728d8ba8105ac5fd599)] >> endobj 7533 0 obj << /Names [(prj_8h_abdc7abc8b7c80187770cfd12c63f700) 3045 0 R (prj_8h_acc46318c778bd844e30d6997394cc8a) 2805 0 R (prj_8h_ad75dcd0cd2fd0b6a162b5587cba9c2d) 3048 0 R (prj_8h_aec02a8e47d68e126983e9bb07a0c0aa) 3042 0 R (prj_8h_afd25a96ccc5966c04d7732ca482c0c1) 3088 0 R (prj_8h_b1264f0201113c1a8e931ad9a7630e2f) 3003 0 R] /Limits [(prj_8h_abdc7abc8b7c80187770cfd12c63f700) (prj_8h_b1264f0201113c1a8e931ad9a7630e2f)] >> endobj 7534 0 obj << /Names [(prj_8h_b4325a957786611772b90e7a080327f3) 2951 0 R (prj_8h_b46a0a668f28939626287d048153863f) 2896 0 R (prj_8h_b6ce2bb75a87b1679d05f251227d2f1b) 2897 0 R (prj_8h_bbfbf3cba73850d7608765725993dfe3) 3049 0 R (prj_8h_bc26dfb2d0b0bee71f6e4541977d237f) 2854 0 R (prj_8h_bdf8c6c3ef615a01ebf8822e013d6a63) 2899 0 R] /Limits [(prj_8h_b4325a957786611772b90e7a080327f3) (prj_8h_bdf8c6c3ef615a01ebf8822e013d6a63)] >> endobj 7535 0 obj << /Names [(prj_8h_be28216295d9e7ad7dbb01bf5985df9f) 2851 0 R (prj_8h_bf6696d3455c684cb44d06da7885ce94) 2852 0 R (prj_8h_c038f2474d5d58de157554cee74a9735) 2900 0 R (prj_8h_c2f3bc42ac6e7d458364ebcf2b35814f) 3000 0 R (prj_8h_c8dfb42cf72db0c4bc690d030f75c662) 2803 0 R (prj_8h_c940da0fb0552876fb40a92f82c9625f) 3086 0 R] /Limits [(prj_8h_be28216295d9e7ad7dbb01bf5985df9f) (prj_8h_c940da0fb0552876fb40a92f82c9625f)] >> endobj 7536 0 obj << /Names [(prj_8h_c983c5a393c5b3f1041f07b2eb95a3a5) 2903 0 R (prj_8h_c9a7ed6b032cfdaba0e8caba17c6c149) 3078 0 R (prj_8h_cb157519ef498bf669298c5508492f3e) 876 0 R (prj_8h_cd4f54c072b6219242daeb6d4b9a74cb) 2859 0 R (prj_8h_cf989261fd56f1e8b4eb8941ec2c754f) 2952 0 R (prj_8h_d2a2b56c0900516dd24eebf430bcb29c) 2991 0 R] /Limits [(prj_8h_c983c5a393c5b3f1041f07b2eb95a3a5) (prj_8h_d2a2b56c0900516dd24eebf430bcb29c)] >> endobj 7537 0 obj << /Names [(prj_8h_d43dbc765c63162d0af2b9285b8a434f) 1406 0 R (prj_8h_d70968320728202aa12048162248d368) 3004 0 R (prj_8h_d994cb23871c51b20754973bef180f8a) 1134 0 R (prj_8h_d9a80b98c04b0e06d08fd84bacc58b27) 2954 0 R (prj_8h_dc4da028cde2d970e9e5e22adca22f37) 2908 0 R (prj_8h_dc97181f64d72234b8c6903b22b33df9) 3085 0 R] /Limits [(prj_8h_d43dbc765c63162d0af2b9285b8a434f) (prj_8h_dc97181f64d72234b8c6903b22b33df9)] >> endobj 7538 0 obj << /Names [(prj_8h_df9cca0265038851129d1966017cd525) 940 0 R (prj_8h_eb5951ec54b929d16ab464939a37d74f) 2993 0 R (prj_8h_eb7881cd5d7b4b5e26281a512b8f62ac) 2898 0 R (prj_8h_ed0317c8ffef248346da897568df266c) 3041 0 R (prj_8h_f363383621fb2b72243c1d6b894874d5) 2950 0 R (prj_8h_f44375ad9036898dd6d12d2cc58bf53b) 3084 0 R] /Limits [(prj_8h_df9cca0265038851129d1966017cd525) (prj_8h_f44375ad9036898dd6d12d2cc58bf53b)] >> endobj 7539 0 obj << /Names [(prj_8h_f862254dceec64a987fdaabc40e4963d) 877 0 R (prj_8h_fa8d27e481bbfffacd3e671e6715d5cb) 3005 0 R (prj_8h_faafab5c440384667d7af444b7aca750) 2855 0 R (prj_8h_fbf5f05496f1e018425e02d60a4e0b74) 3006 0 R (prj_8h_fc5276e759c799deea36271d9cafc5e9) 3080 0 R (prj_8h_fcefcb885b7d1c33e0458345cdc9f4a4) 3052 0 R] /Limits [(prj_8h_f862254dceec64a987fdaabc40e4963d) (prj_8h_fcefcb885b7d1c33e0458345cdc9f4a4)] >> endobj 7540 0 obj << /Names [(prj_8h_fedc43dc512008174ec9b87753519031) 3038 0 R (prj_8h_ff09e87b2246bdec83f6a7bb1bc0f471) 2947 0 R (prj_8h_ffdbf993ce959fce2c148c07cd0f2c0c) 2944 0 R (section*.1) 636 0 R (section*.10) 1581 0 R (section*.11) 1736 0 R] /Limits [(prj_8h_fedc43dc512008174ec9b87753519031) (section*.11)] >> endobj 7541 0 obj << /Names [(section*.12) 1827 0 R (section*.13) 1859 0 R (section*.14) 2265 0 R (section*.15) 2302 0 R (section*.16) 2303 0 R (section*.17) 2339 0 R] /Limits [(section*.12) (section*.17)] >> endobj 7542 0 obj << /Names [(section*.18) 2340 0 R (section*.19) 2341 0 R (section*.2) 1077 0 R (section*.20) 2453 0 R (section*.21) 2454 0 R (section*.22) 2455 0 R] /Limits [(section*.18) (section*.22)] >> endobj 7543 0 obj << /Names [(section*.23) 2456 0 R (section*.24) 2478 0 R (section*.25) 2542 0 R (section*.26) 2543 0 R (section*.27) 2572 0 R (section*.28) 2573 0 R] /Limits [(section*.23) (section*.28)] >> endobj 7544 0 obj << /Names [(section*.29) 2616 0 R (section*.3) 1173 0 R (section*.30) 2618 0 R (section*.31) 2656 0 R (section*.32) 2754 0 R (section*.33) 2755 0 R] /Limits [(section*.29) (section*.33)] >> endobj 7545 0 obj << /Names [(section*.34) 2756 0 R (section*.35) 2801 0 R (section*.36) 2802 0 R (section*.37) 2840 0 R (section*.38) 2841 0 R (section*.39) 3077 0 R] /Limits [(section*.34) (section*.39)] >> endobj 7546 0 obj << /Names [(section*.4) 1249 0 R (section*.40) 3553 0 R (section*.41) 3554 0 R (section*.42) 3588 0 R (section*.43) 3589 0 R (section*.44) 3630 0 R] /Limits [(section*.4) (section*.44)] >> endobj 7547 0 obj << /Names [(section*.45) 3739 0 R (section*.46) 3774 0 R (section*.47) 3775 0 R (section*.48) 3801 0 R (section*.49) 3802 0 R (section*.5) 1281 0 R] /Limits [(section*.45) (section*.5)] >> endobj 7548 0 obj << /Names [(section*.50) 3843 0 R (section*.51) 4003 0 R (section*.52) 4004 0 R (section*.53) 4043 0 R (section*.54) 4045 0 R (section*.55) 4046 0 R] /Limits [(section*.50) (section*.55)] >> endobj 7549 0 obj << /Names [(section*.56) 4183 0 R (section*.57) 4184 0 R (section*.58) 4276 0 R (section*.59) 4277 0 R (section*.6) 1368 0 R (section*.60) 4335 0 R] /Limits [(section*.56) (section*.60)] >> endobj 7550 0 obj << /Names [(section*.61) 4533 0 R (section*.62) 4534 0 R (section*.63) 4535 0 R (section*.64) 4595 0 R (section*.65) 4649 0 R (section*.66) 4652 0 R] /Limits [(section*.61) (section*.66)] >> endobj 7551 0 obj << /Names [(section*.67) 4704 0 R (section*.68) 4812 0 R (section*.69) 4914 0 R (section*.7) 1447 0 R (section*.70) 4916 0 R (section*.71) 4970 0 R] /Limits [(section*.67) (section*.71)] >> endobj 7552 0 obj << /Names [(section*.72) 5355 0 R (section*.73) 5389 0 R (section*.74) 5390 0 R (section*.75) 5433 0 R (section*.76) 5434 0 R (section*.77) 5481 0 R] /Limits [(section*.72) (section*.77)] >> endobj 7553 0 obj << /Names [(section*.78) 5552 0 R (section*.79) 5555 0 R (section*.8) 1454 0 R (section*.80) 5556 0 R (section*.81) 5718 0 R (section*.82) 5803 0 R] /Limits [(section*.78) (section*.82)] >> endobj 7554 0 obj << /Names [(section*.9) 1485 0 R (section.1) 6 0 R (section.2) 18 0 R (section.3) 22 0 R (section.4) 30 0 R (section.5) 38 0 R] /Limits [(section*.9) (section.5)] >> endobj 7555 0 obj << /Names [(section.6) 198 0 R (software) 782 0 R (spc_8h) 1036 0 R (spc_8h_2e04fc3ccd8aceebb4bfef56c5399a7d) 3598 0 R (spc_8h_300fdb21c6e53aca6749db3455e531b2) 3603 0 R (spc_8h_30c95d776068ef3cc959a50af9995fa9) 3597 0 R] /Limits [(section.6) (spc_8h_30c95d776068ef3cc959a50af9995fa9)] >> endobj 7556 0 obj << /Names [(spc_8h_49807752ce4e223d4095cf6ad13bac0a) 944 0 R (spc_8h_49f16254df0e3498ae2c1eb641f5232c) 3632 0 R (spc_8h_4d66edc63bfc8a39adc6bac9e88c8e81) 941 0 R (spc_8h_4e195ae6c61da3608692a3c7f2395599) 3555 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b) 3590 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b0653e60411a641a326492c65d257daa8) 3594 0 R] /Limits [(spc_8h_49807752ce4e223d4095cf6ad13bac0a) (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b0653e60411a641a326492c65d257daa8)] >> endobj 7557 0 obj << /Names [(spc_8h_51ba1ce5380fd2e7693c37554d18fc3b0b84f38d1e903eacda3122ce55bff741) 3592 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b3ba9183c7c3dace15eef0606980fd615) 3595 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b7c5e0d09fac9f441e39f3cf28801961f) 3593 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b7e218c5bd52bd6a45d8ad66573653007) 3596 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3be000828492cbedc0502f757d8b892606) 3591 0 R (spc_8h_615d3ef3a505a8be7da1578d9338d218) 2148 0 R] /Limits [(spc_8h_51ba1ce5380fd2e7693c37554d18fc3b0b84f38d1e903eacda3122ce55bff741) (spc_8h_615d3ef3a505a8be7da1578d9338d218)] >> endobj 7558 0 obj << /Names [(spc_8h_6f88e6f1a549bffa0d0ab2b9523d2000) 3606 0 R (spc_8h_7304d0d00bcf9d2bad1f56ba6d8322ea) 3599 0 R (spc_8h_96978fec523018fd6898301a3452c166) 942 0 R (spc_8h_96e8686daa13255e36506c3bfc213e46) 3633 0 R (spc_8h_99689938e16d737f26bf6504f2e1599a) 3604 0 R (spc_8h_ab517aed3ee9f8d5a5ca1f990d310b61) 945 0 R] /Limits [(spc_8h_6f88e6f1a549bffa0d0ab2b9523d2000) (spc_8h_ab517aed3ee9f8d5a5ca1f990d310b61)] >> endobj 7559 0 obj << /Names [(spc_8h_b9fc42d8e1d281839a0a42ac00bcd180) 3631 0 R (spc_8h_c39694faccdd56850677999d714cd14a) 943 0 R (spc_8h_cc0b7b9e5bc5495f24129492e4ff5218) 3605 0 R (spc_8h_e6e89217a5eca87a2101ae195da74347) 3601 0 R (spc_8h_e7fe86ae85a1a3bd19c2d78c3dba58f6) 3600 0 R (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a) 3602 0 R] /Limits [(spc_8h_b9fc42d8e1d281839a0a42ac00bcd180) (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a)] >> endobj 7560 0 obj << /Names [(spc_8h_f0e4274b242fd41625b6ad4f4376b8da) 946 0 R (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) 1522 0 R (sph_8h) 1037 0 R (sph_8h_5c0783d56189d48d9f52af05b64a4df6) 3741 0 R (sph_8h_8ee2e117701f434f0bffbbe52f05d118) 3743 0 R (sph_8h_bcdbd119e57482315882d849f2b04e91) 3740 0 R] /Limits [(spc_8h_f0e4274b242fd41625b6ad4f4376b8da) (sph_8h_bcdbd119e57482315882d849f2b04e91)] >> endobj 7561 0 obj << /Names [(sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) 3742 0 R (spx_8h) 1038 0 R (spx_8h_0459c65496512f270d3c569c346ce413) 3851 0 R (spx_8h_09b951b08ac818b9da44389a3ddf614a) 3846 0 R (spx_8h_16bc2fef69c592c5bcdc695633f17df0) 3820 0 R (spx_8h_192c7ea1edb2fc79d391a51bec7442e0) 1647 0 R] /Limits [(sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) (spx_8h_192c7ea1edb2fc79d391a51bec7442e0)] >> endobj 7562 0 obj << /Names [(spx_8h_286f473d94247fbd7c2485e515fee67f) 3859 0 R (spx_8h_3e86c3462619b4fdf0aeeeea9874757e) 3819 0 R (spx_8h_413fa882d2b67a792a35938738214057) 3844 0 R (spx_8h_45f0db5bb967998f070cad30e5e68180) 3776 0 R (spx_8h_51b714ff0ed788c20f1b273ec551b6f6) 3817 0 R (spx_8h_544be13048057701c37a8e9c4f761be2) 3857 0 R] /Limits [(spx_8h_286f473d94247fbd7c2485e515fee67f) (spx_8h_544be13048057701c37a8e9c4f761be2)] >> endobj 7563 0 obj << /Names [(spx_8h_56a7d77413c654541fb29f58561c16f9) 3854 0 R (spx_8h_5a497ffd57345f2f0bf1c9abc56842c4) 3821 0 R (spx_8h_5c2eb2d8649eaab21e71efcd25d9236c) 3813 0 R (spx_8h_5eed4e6f2879b4607e60b4f77e2736bd) 3816 0 R (spx_8h_61a1980ff0683231529b784af1c48eaa) 3855 0 R (spx_8h_6c79d97dcc410e1a7a3e6e26ba3dabe6) 3818 0 R] /Limits [(spx_8h_56a7d77413c654541fb29f58561c16f9) (spx_8h_6c79d97dcc410e1a7a3e6e26ba3dabe6)] >> endobj 7564 0 obj << /Names [(spx_8h_6ee182e1185978bc6e7f69e4604fe341) 3811 0 R (spx_8h_772a14e27c613ea7b63697efdb765205) 3850 0 R (spx_8h_777e5c4790da397aefcada61445a1bb3) 3804 0 R (spx_8h_89a689b848429cfa5780757a5eee9347) 3814 0 R (spx_8h_8aba8fe47efe098740991771e97fe756) 3845 0 R (spx_8h_974f799a8ee19dd23114ca01b225a02f) 3848 0 R] /Limits [(spx_8h_6ee182e1185978bc6e7f69e4604fe341) (spx_8h_974f799a8ee19dd23114ca01b225a02f)] >> endobj 7565 0 obj << /Names [(spx_8h_9eb861d7c7437c5f974ad425da8b5664) 3815 0 R (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) 3847 0 R (spx_8h_b23cb997ad699b59f91f4dfe4e8b28b0) 3856 0 R (spx_8h_cc02a893f538f5f0c0d1d9baae2b0e10) 3852 0 R (spx_8h_d0a5167b8e52a0cdc3990e35a324ba02) 3812 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf) 3805 0 R] /Limits [(spx_8h_9eb861d7c7437c5f974ad425da8b5664) (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf)] >> endobj 7566 0 obj << /Names [(spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf23753b512249d3752a74ce7497d9c852) 3808 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf45313ec670a74e7effc1bcee16cb0b56) 3806 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf6b6639fb6d3683c9d356dbd7cf705de1) 3809 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf7342349cd1dc5b4581ae9c39f31d055e) 3807 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecafe795e388e346496b34e57864af841ae2) 3810 0 R (spx_8h_da5d4cf3e8791d64da68575da692e3f3) 3858 0 R] /Limits [(spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf23753b512249d3752a74ce7497d9c852) (spx_8h_da5d4cf3e8791d64da68575da692e3f3)] >> endobj 7567 0 obj << /Names [(spx_8h_f4784a764fd0f36c82548ef755c470bd) 3849 0 R (spx_8h_f7a2d05c2db901488d68576343aad873) 3853 0 R (structcelprm) 1017 0 R (structcelprm_011e38b3a5505fdc13855348571bfad1) 1093 0 R (structcelprm_07d1785f7d7a8793555147140757956d) 1100 0 R (structcelprm_1b9cbfd7cfa2306464d57dc4acd03b06) 1099 0 R] /Limits [(spx_8h_f4784a764fd0f36c82548ef755c470bd) (structcelprm_1b9cbfd7cfa2306464d57dc4acd03b06)] >> endobj 7568 0 obj << /Names [(structcelprm_3f9ae993e97f0e73e3f59117929eeda6) 1094 0 R (structcelprm_408a39c1d060d5b32f884f8a8c60aaa2) 1090 0 R (structcelprm_74585275b64c292b394b74f2f19a8048) 1091 0 R (structcelprm_756c8f0991a748ab47361b0215c4577b) 1097 0 R (structcelprm_7bb5e1ff4d73c884d73eeb0f8f2677d7) 1098 0 R (structcelprm_80ea2023638ededd2760cc9a260c456b) 1096 0 R] /Limits [(structcelprm_3f9ae993e97f0e73e3f59117929eeda6) (structcelprm_80ea2023638ededd2760cc9a260c456b)] >> endobj 7569 0 obj << /Names [(structcelprm_b034f85dc785113c396c9864cdddfe52) 1092 0 R (structcelprm_be1991f17c0ecb857d5bd30a6a689b84) 1095 0 R (structfitskey) 1018 0 R (structfitskey_413484cd565be07b4adc75ed53c4ace7) 1189 0 R (structfitskey_42413fd1f1f3117a4bc4c0599c2c3889) 1183 0 R (structfitskey_43de42050c7e0232c9f7c5a28bfede4b) 1174 0 R] /Limits [(structcelprm_b034f85dc785113c396c9864cdddfe52) (structfitskey_43de42050c7e0232c9f7c5a28bfede4b)] >> endobj 7570 0 obj << /Names [(structfitskey_48b4ff24100b6ada4fd184d5c3d55eec) 1180 0 R (structfitskey_4fe936ed7df47a073c049f4fe1528ba2) 1193 0 R (structfitskey_68ab074cc13a9e0be1583ee93aa0db6b) 1187 0 R (structfitskey_88e62afbb23808ae484b8734bb1685b9) 1184 0 R (structfitskey_935a63ff3aa2c0403ed8eee1a94662e7) 1178 0 R (structfitskey_a914a7430a2746de8ceb641321842784) 1191 0 R] /Limits [(structfitskey_48b4ff24100b6ada4fd184d5c3d55eec) (structfitskey_a914a7430a2746de8ceb641321842784)] >> endobj 7571 0 obj << /Names [(structfitskey_aa0b63820fb73086d2f55ea9687d8126) 1190 0 R (structfitskey_d50ff3c9166c43e1fe0542b18a216ee1) 1192 0 R (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) 1182 0 R (structfitskey_e6f81da89b09d92db5258191a1a9354b) 1188 0 R (structfitskey_f1a8fb88bc5d4ba60f9f12d0885c360e) 1186 0 R (structfitskey_f5bd77eb6d318c562bfe650f6784eb5f) 1176 0 R] /Limits [(structfitskey_aa0b63820fb73086d2f55ea9687d8126) (structfitskey_f5bd77eb6d318c562bfe650f6784eb5f)] >> endobj 7572 0 obj << /Names [(structfitskeyid) 1019 0 R (structfitskeyid_8c8c5a6be67ef57333e80e71f320b62e) 1253 0 R (structfitskeyid_9c19a56e7a92c1728bebd92e5370b9c7) 1250 0 R (structfitskeyid_b20aa3220d9994d02a1791e35dc91a56) 1252 0 R (structlinprm) 1020 0 R (structlinprm_091103ceb860eeed1a280effa0df28df) 1296 0 R] /Limits [(structfitskeyid) (structlinprm_091103ceb860eeed1a280effa0df28df)] >> endobj 7573 0 obj << /Names [(structlinprm_162762d02eaade6a53d63d70b8827caa) 1286 0 R (structlinprm_28a705f744a32cd05dd3aa86ca58998b) 1288 0 R (structlinprm_2975830d4214bb6b35cb1ca922875057) 1291 0 R (structlinprm_3691ff3f40a0ba087637d30ffc87e6d0) 1284 0 R (structlinprm_4c40bec32ec40035b8c1ef13db652270) 1285 0 R (structlinprm_596f68ff17fce142f36530d72dd838c4) 1292 0 R] /Limits [(structlinprm_162762d02eaade6a53d63d70b8827caa) (structlinprm_596f68ff17fce142f36530d72dd838c4)] >> endobj 7574 0 obj << /Names [(structlinprm_5ac85757a7a46247e353a089374eb128) 1298 0 R (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) 1282 0 R (structlinprm_5ef7cce6307f640aca1080d0d5ad9ba1) 1293 0 R (structlinprm_7036b8527bc8b220ad8a863442631f48) 1297 0 R (structlinprm_7f40c88135117b07a7767082ef24aba9) 1290 0 R (structlinprm_b73e780d0792b3570fcf2cf55651f22c) 1295 0 R] /Limits [(structlinprm_5ac85757a7a46247e353a089374eb128) (structlinprm_b73e780d0792b3570fcf2cf55651f22c)] >> endobj 7575 0 obj << /Names [(structlinprm_b7a8cacb1454446f9b5a521703fcca75) 1299 0 R (structlinprm_e281f0f7ebeaf5038cc13c13946641b1) 1283 0 R (structlinprm_eaaf26fd243da58fee173b075bed1de7) 1287 0 R (structlinprm_eefcacedf2989970f0df2c246d84bfb7) 1294 0 R (structlinprm_f0a5cac7b1d2d3a0feb6905c05b122c2) 1289 0 R (structprjprm) 1021 0 R] /Limits [(structlinprm_b7a8cacb1454446f9b5a521703fcca75) (structprjprm)] >> endobj 7576 0 obj << /Names [(structprjprm_164706f09314c493c7e9d2c7325f8372) 1380 0 R (structprjprm_30e78bb110dc7a8ad0303370ce20762c) 1381 0 R (structprjprm_36fa82794133f84373606b1f692ce8c4) 1382 0 R (structprjprm_3894c2e551929b29adce50cd637fa351) 1129 0 R (structprjprm_3b40a2df3b436c4ffcf5be6814993278) 1383 0 R (structprjprm_46d6928a9026e7b3376dcf0d3f91db64) 1130 0 R] /Limits [(structprjprm_164706f09314c493c7e9d2c7325f8372) (structprjprm_46d6928a9026e7b3376dcf0d3f91db64)] >> endobj 7577 0 obj << /Names [(structprjprm_4f3c364f16d0b6498d7e11e6bb67239c) 1128 0 R (structprjprm_62e88bd3c9e02f38193a800035b83918) 1378 0 R (structprjprm_699ad609ff7c1935d8fb6a457a5b8164) 1131 0 R (structprjprm_ab36c6218a33025ac4c5025de7c67d42) 1385 0 R (structprjprm_ae2c61d85c72e87f4b2b77a14c8eb316) 1379 0 R (structprjprm_b165b11d417700de0a4187f133050a2b) 1371 0 R] /Limits [(structprjprm_4f3c364f16d0b6498d7e11e6bb67239c) (structprjprm_b165b11d417700de0a4187f133050a2b)] >> endobj 7578 0 obj << /Names [(structprjprm_b3e207e26d1c9db06cedba2cf4460340) 1375 0 R (structprjprm_b8dd3d8b1e462a2b261fc9e304885943) 1370 0 R (structprjprm_bcd2a3ee9f61b930d23bf741cea63bf3) 1373 0 R (structprjprm_d304d66b3f3aa64fe9c7251d3c420d02) 1369 0 R (structprjprm_d7a41e3d03cb739c2a9aa1f8aabf54f9) 1376 0 R (structprjprm_e634b0747fe55f77e65b6909c94227d9) 1377 0 R] /Limits [(structprjprm_b3e207e26d1c9db06cedba2cf4460340) (structprjprm_e634b0747fe55f77e65b6909c94227d9)] >> endobj 7579 0 obj << /Names [(structprjprm_e699a5fb02198777343057972e1452d0) 1387 0 R (structprjprm_e91fa3ff034b1c6de3ec98d8fb9e0ab1) 1132 0 R (structprjprm_eef644ffeafea16e82b2b995a470a345) 1386 0 R (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) 1372 0 R (structprjprm_fb805c40a4d37c195074c1305874d615) 1384 0 R (structprjprm_fecdd175932cbf29fcfac575b1a5cb9b) 1374 0 R] /Limits [(structprjprm_e699a5fb02198777343057972e1452d0) (structprjprm_fecdd175932cbf29fcfac575b1a5cb9b)] >> endobj 7580 0 obj << /Names [(structpscard) 1022 0 R (structpscard_37a06c885cf73736f2eb5e78bd1034a1) 1448 0 R (structpscard_71912f084bc3cadeb0758756a723071a) 1450 0 R (structpscard_9986f2ace84978f6cc543224b57592c9) 1452 0 R (structpvcard) 1023 0 R (structpvcard_5c97562bbadb55b8a2db59d9c7878059) 1458 0 R] /Limits [(structpscard) (structpvcard_5c97562bbadb55b8a2db59d9c7878059)] >> endobj 7581 0 obj << /Names [(structpvcard_88fa516543184eaffe6bd2c57946d9a7) 1456 0 R (structpvcard_f011f1972d6d345540f36a5c08a30d1f) 1457 0 R (structs) 784 0 R (structspcprm) 1024 0 R (structspcprm_20db4194170d78054908acf94b41d9d9) 1499 0 R (structspcprm_2c5c2d97e6c5f617272834b1516c84de) 1490 0 R] /Limits [(structpvcard_88fa516543184eaffe6bd2c57946d9a7) (structspcprm_2c5c2d97e6c5f617272834b1516c84de)] >> endobj 7582 0 obj << /Names [(structspcprm_387d74de3215763d7e22c222b19a2c44) 1488 0 R (structspcprm_4dbc8c7064ae790483017b6c81e7ded2) 1492 0 R (structspcprm_55316470e5591401576ba3c5c384df0b) 1498 0 R (structspcprm_5f9a48a52144f8ced93baaffc107a3a6) 1489 0 R (structspcprm_6727d3a30592e54c7361e0434a795832) 1502 0 R (structspcprm_6d4124d4db8f7addcbfee99a8634522e) 1497 0 R] /Limits [(structspcprm_387d74de3215763d7e22c222b19a2c44) (structspcprm_6d4124d4db8f7addcbfee99a8634522e)] >> endobj 7583 0 obj << /Names [(structspcprm_74433ae0e7e1ec426777bafb402b50c4) 1491 0 R (structspcprm_844792d006c308f465ce8ca593a37df3) 1496 0 R (structspcprm_8ef0c963f1b0ee957f3403da7559a81c) 1494 0 R (structspcprm_dd01b70b4a074a7bdccff378ab61a948) 1500 0 R (structspcprm_e11db8d7ff8b605eed87298a32fd094d) 1493 0 R (structspcprm_ec5d37c00d382a84a090d4f52d9a4346) 1495 0 R] /Limits [(structspcprm_74433ae0e7e1ec426777bafb402b50c4) (structspcprm_ec5d37c00d382a84a090d4f52d9a4346)] >> endobj 7584 0 obj << /Names [(structspcprm_fb6a33994ad13f402efb68d20a97eee1) 1501 0 R (structspcprm_feeb5f4056f271fd37291a712a7b6791) 1487 0 R (structspxprm) 1025 0 R (structspxprm_1d7633da24d461d6f791e003be2a508a) 1643 0 R (structspxprm_1d7fd26e54e3b253a9e26163445cbfc8) 1592 0 R (structspxprm_1f9bd735b5ffa618aa0713616a3b2b87) 1604 0 R] /Limits [(structspcprm_fb6a33994ad13f402efb68d20a97eee1) (structspxprm_1f9bd735b5ffa618aa0713616a3b2b87)] >> endobj 7585 0 obj << /Names [(structspxprm_203c7de3b62de030e721e99cc0a5799b) 1613 0 R (structspxprm_25de138f15027a948887f59f79b59d91) 1609 0 R (structspxprm_2c20a26fe559feacc85e6e76c31bbbc3) 1584 0 R (structspxprm_2d4ca3a63bb8871faec7928c8f713484) 1600 0 R (structspxprm_307491e5045c959ed5212c54b6e300e9) 1611 0 R (structspxprm_34e6a4ba58cd67ef619ab48a58c8b808) 1602 0 R] /Limits [(structspxprm_203c7de3b62de030e721e99cc0a5799b) (structspxprm_34e6a4ba58cd67ef619ab48a58c8b808)] >> endobj 7586 0 obj << /Names [(structspxprm_41ee038d00742dcf8cae9b6ed45a699b) 1590 0 R (structspxprm_51aa1b37a464c53a5c07a9a407c4b96c) 1595 0 R (structspxprm_533847a7e77e2bba8ce886289d31abdb) 1582 0 R (structspxprm_5ab73474c2a6e92885c805cc017f6fbe) 1642 0 R (structspxprm_5f4248299fb8a02ff1df6ed3d1baaa1b) 1587 0 R (structspxprm_6300648f1270fbd6f45fefaac054db70) 1610 0 R] /Limits [(structspxprm_41ee038d00742dcf8cae9b6ed45a699b) (structspxprm_6300648f1270fbd6f45fefaac054db70)] >> endobj 7587 0 obj << /Names [(structspxprm_678577f6866727419716361586fe34bb) 1598 0 R (structspxprm_6d41ec682a058f4028032bf6934f7fc0) 1596 0 R (structspxprm_709e6f9fd2c706705a019d865280526f) 1612 0 R (structspxprm_75c591192f69d3e284d037d0216c2179) 1639 0 R (structspxprm_78d8a2235f18250cfa97a32625ab72a0) 1638 0 R (structspxprm_7ba88553a468a9ef696c0c1eeda6864f) 1591 0 R] /Limits [(structspxprm_678577f6866727419716361586fe34bb) (structspxprm_7ba88553a468a9ef696c0c1eeda6864f)] >> endobj 7588 0 obj << /Names [(structspxprm_7e1e561ce26f9be86978783bbd0dd496) 1641 0 R (structspxprm_84d43f663df39a476b33a9516f3662eb) 1614 0 R (structspxprm_90656bb22c7fdb8c750ee5a16745334c) 1606 0 R (structspxprm_968cf3d8e4b0d082c6d617f5a38344f7) 1593 0 R (structspxprm_9c60b90b7911b9846b353991dbf38084) 1603 0 R (structspxprm_9cab306f378116a9b9388bd215a98c0b) 1605 0 R] /Limits [(structspxprm_7e1e561ce26f9be86978783bbd0dd496) (structspxprm_9cab306f378116a9b9388bd215a98c0b)] >> endobj 7589 0 obj << /Names [(structspxprm_a37e50cd66795673d6bd43883a1be540) 1589 0 R (structspxprm_a419711bf0079fff37d4adbae3278f5c) 1599 0 R (structspxprm_a6ef9cc07973932f19c48062199e6689) 1607 0 R (structspxprm_a75c986198c4673e2caa30bd4ac73a30) 1597 0 R (structspxprm_b232cb470b7f96330512dea46791644e) 1645 0 R (structspxprm_b67c62285ad58f5f0c1a88cb15ac3408) 1588 0 R] /Limits [(structspxprm_a37e50cd66795673d6bd43883a1be540) (structspxprm_b67c62285ad58f5f0c1a88cb15ac3408)] >> endobj 7590 0 obj << /Names [(structspxprm_c0096d466fedc5ec61948044af06551d) 1601 0 R (structspxprm_c8f016fe8e911c4ffbedde63318bb3db) 1646 0 R (structspxprm_c9e44005ceadafb8158df81fe022f46e) 1608 0 R (structspxprm_cc8a46737906be2cee7cba0b2aa09d87) 1644 0 R (structspxprm_cfdb74852a20099c1cdc3b2cc8faa03b) 1640 0 R (structspxprm_d3a5b851397a50e8644aeda10b184776) 1583 0 R] /Limits [(structspxprm_c0096d466fedc5ec61948044af06551d) (structspxprm_d3a5b851397a50e8644aeda10b184776)] >> endobj 7591 0 obj << /Names [(structspxprm_e83f0b38ecd0b7b7b6afb6eb42a61fd4) 1585 0 R (structspxprm_ef53f8244101a4229518b25b08143d18) 1594 0 R (structspxprm_f252fd0c875bfe2dc99c56617ae2faa8) 1637 0 R (structspxprm_f2a797bbae7610552aa9adfe75118908) 1586 0 R (structtabprm) 1026 0 R (structtabprm_0777c3de4601874221031a8ad37eff95) 1746 0 R] /Limits [(structspxprm_e83f0b38ecd0b7b7b6afb6eb42a61fd4) (structtabprm_0777c3de4601874221031a8ad37eff95)] >> endobj 7592 0 obj << /Names [(structtabprm_1ce970a854c9976d8b3e4e26df102b3b) 1759 0 R (structtabprm_1ef3d0af652bb59fb838a6b01bb133e2) 1742 0 R (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) 1737 0 R (structtabprm_29505cdf78fb12ca5951295fc16f4819) 1741 0 R (structtabprm_36adcba673ae8ede86b80f7e5111e0ec) 1754 0 R (structtabprm_3df12930fa5f38dcfc71aece8aed816c) 1751 0 R] /Limits [(structtabprm_1ce970a854c9976d8b3e4e26df102b3b) (structtabprm_3df12930fa5f38dcfc71aece8aed816c)] >> endobj 7593 0 obj << /Names [(structtabprm_4263d73c71a9a5e77643f572c483b7ab) 1745 0 R (structtabprm_43276034ba8e0954a6e2632117cd0afd) 1760 0 R (structtabprm_48cbe51ee26f0615036308fe72768403) 1748 0 R (structtabprm_5c62c8fd3dc6e9a3c928be9a1ed81ca1) 1756 0 R (structtabprm_64b8a2eaba4116cc647a435108269be3) 1739 0 R (structtabprm_71057a73168d71019b0caaa203fe5a05) 1755 0 R] /Limits [(structtabprm_4263d73c71a9a5e77643f572c483b7ab) (structtabprm_71057a73168d71019b0caaa203fe5a05)] >> endobj 7594 0 obj << /Names [(structtabprm_77130658a6e330e0edba348d1dc7edf2) 1749 0 R (structtabprm_8572ca79676edfe06b3d1df00f93384b) 1752 0 R (structtabprm_9d2c36c4cfb17532ba5f08cbd90a5785) 1757 0 R (structtabprm_ade738f7269d71d34fdf3d52f1c61d88) 1750 0 R (structtabprm_bf7f932bcefad1f0e371167971018965) 1758 0 R (structtabprm_c05f0ad36debbabf441ca8d8aac59a96) 1761 0 R] /Limits [(structtabprm_77130658a6e330e0edba348d1dc7edf2) (structtabprm_c05f0ad36debbabf441ca8d8aac59a96)] >> endobj 7595 0 obj << /Names [(structtabprm_cee8b63d1691f1f531a1bb4854c6bf4c) 1744 0 R (structtabprm_dc7e170dba47f4e6d40afabfdaecfddd) 1747 0 R (structtabprm_e19ca756ab2190f5d5ced59ad0a1a4bc) 1753 0 R (structtabprm_f00d4a4e089737a799fb91e1a68040dc) 1740 0 R (structtabprm_fa6969fd752bb4e3823e8facf86bbd60) 1743 0 R (structwcserr) 1027 0 R] /Limits [(structtabprm_cee8b63d1691f1f531a1bb4854c6bf4c) (structwcserr)] >> endobj 7596 0 obj << /Names [(structwcserr_210814c32ace19b9d09e4774e94a3c3c) 1829 0 R (structwcserr_278b3daecfc93a28c31750e6a6dc3718) 1831 0 R (structwcserr_311c9994c1d3793b2c98d706987bcd09) 1830 0 R (structwcserr_417d725c2e5615c3fb73cc210e0ccff2) 1828 0 R (structwcserr_cf8ea013ae1dc84ed25d5ace5a0a7000) 1832 0 R (structwcsprm) 1028 0 R] /Limits [(structwcserr_210814c32ace19b9d09e4774e94a3c3c) (structwcsprm)] >> endobj 7597 0 obj << /Names [(structwcsprm_042875def8cab8354c5b2c40ab9fa374) 2027 0 R (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) 1941 0 R (structwcsprm_0730c37f09502eb364f4e7d7addb8ab8) 1958 0 R (structwcsprm_08098820949433d1336841d32d0b62b5) 1975 0 R (structwcsprm_092c11d209ecdd16bb79858c68e4d582) 2031 0 R (structwcsprm_0936d10c2ac93d13d096b1711ac639a1) 1965 0 R] /Limits [(structwcsprm_042875def8cab8354c5b2c40ab9fa374) (structwcsprm_0936d10c2ac93d13d096b1711ac639a1)] >> endobj 7598 0 obj << /Names [(structwcsprm_0d15534535c7f9308c9daa2cceff29e7) 2032 0 R (structwcsprm_0e31f1eef036258c2957da9b985945dd) 1873 0 R (structwcsprm_13fab263ca03f35844fdaca289b7dfac) 2033 0 R (structwcsprm_15485177ea8bbacefc29a5a5cba98c8f) 1954 0 R (structwcsprm_164e3852bcd2dea8b5f73e1dff79ddf5) 1988 0 R (structwcsprm_2166fb650f937d8870711d8be5986b66) 1968 0 R] /Limits [(structwcsprm_0d15534535c7f9308c9daa2cceff29e7) (structwcsprm_2166fb650f937d8870711d8be5986b66)] >> endobj 7599 0 obj << /Names [(structwcsprm_292133b2b7143b969a3af6a3f2cf3709) 1971 0 R (structwcsprm_3224bd06f8f4d2d7d398533eb44a49e8) 1981 0 R (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) 1864 0 R (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) 1861 0 R (structwcsprm_42052d557bdef2c5640a6d19b6d9ed8b) 1943 0 R (structwcsprm_42e0ff2da3b0c1ca0a9509f787ed1951) 1990 0 R] /Limits [(structwcsprm_292133b2b7143b969a3af6a3f2cf3709) (structwcsprm_42e0ff2da3b0c1ca0a9509f787ed1951)] >> endobj 7600 0 obj << /Names [(structwcsprm_49eee6450b1a646d3fe01b8965a63af4) 1953 0 R (structwcsprm_4c89dafecd036e169f96cb84d53ace65) 1942 0 R (structwcsprm_4ed527b90d49e8365c1b727f7bec29c7) 2030 0 R (structwcsprm_5072893bd9beddb33967697d501acdce) 2023 0 R (structwcsprm_5444415c94c7ab0226788f5efe93221d) 2029 0 R (structwcsprm_5780880281f2f9d085d2e06919b7647a) 1986 0 R] /Limits [(structwcsprm_49eee6450b1a646d3fe01b8965a63af4) (structwcsprm_5780880281f2f9d085d2e06919b7647a)] >> endobj 7601 0 obj << /Names [(structwcsprm_5b56e1b378a6ae9f8dfff5c364f0653c) 1973 0 R (structwcsprm_5d0b60efc55a61525b9beb26ead4859e) 1872 0 R (structwcsprm_5e04127eb71da6e1350467a7a6d236f5) 1870 0 R (structwcsprm_5ed753e401cda620a04adfb4ebfb8e0d) 1987 0 R (structwcsprm_603ef3ab7f3bc42cf8d8bf99b79b63ac) 1985 0 R (structwcsprm_65801f93622504672ee3faf8f2110e48) 1961 0 R] /Limits [(structwcsprm_5b56e1b378a6ae9f8dfff5c364f0653c) (structwcsprm_65801f93622504672ee3faf8f2110e48)] >> endobj 7602 0 obj << /Names [(structwcsprm_6778d31ec5a2ee643dc5f0a8af630b03) 1989 0 R (structwcsprm_6a3fa7adc304567271c5cc0eda3ac986) 2026 0 R (structwcsprm_6a88e64207df5007151c2c25028ce3eb) 1960 0 R (structwcsprm_70cac2976524a5f0a6aeb2b3fcb95834) 1862 0 R (structwcsprm_7320fc64e7705cc7495eba07482b5c55) 1951 0 R (structwcsprm_7a0a1ce2432cef9377f70367ea1fd18c) 1866 0 R] /Limits [(structwcsprm_6778d31ec5a2ee643dc5f0a8af630b03) (structwcsprm_7a0a1ce2432cef9377f70367ea1fd18c)] >> endobj 7603 0 obj << /Names [(structwcsprm_7a88af56c4c978c6d4213ae1f4bec87a) 2028 0 R (structwcsprm_8625c0a6ff99c754566c46c2372df801) 1970 0 R (structwcsprm_8715975565c8bbd0c562a32eee40fd20) 1966 0 R (structwcsprm_88b55f6c8d122f3ff63532de85698864) 1957 0 R (structwcsprm_8b3a65921acc0dabfa4efd19a003ea6e) 1947 0 R (structwcsprm_9063e8d0c956e9eae7f7d6f3608b9ed2) 1972 0 R] /Limits [(structwcsprm_7a88af56c4c978c6d4213ae1f4bec87a) (structwcsprm_9063e8d0c956e9eae7f7d6f3608b9ed2)] >> endobj 7604 0 obj << /Names [(structwcsprm_912eed291f15134e8cfb8750acc6c4bc) 1874 0 R (structwcsprm_922f0f57b8c35cad3d01ceedeba01d4b) 1952 0 R (structwcsprm_94c26ce331cc876d63baeeada9820241) 1969 0 R (structwcsprm_9eac54f497e1244c8106dd3ebba12223) 1963 0 R (structwcsprm_9eca2fcc30058310d020181ae16bf256) 1944 0 R (structwcsprm_9ee8fb568ca75874bab00825b768f8ca) 1950 0 R] /Limits [(structwcsprm_912eed291f15134e8cfb8750acc6c4bc) (structwcsprm_9ee8fb568ca75874bab00825b768f8ca)] >> endobj 7605 0 obj << /Names [(structwcsprm_9fd60ce9e6bc31df07ed02ce64b48be4) 1967 0 R (structwcsprm_a0ae3f3605566be2e85e51e5b52c3b52) 1867 0 R (structwcsprm_ad387ccbd7847672b5dc2223d9124120) 1956 0 R (structwcsprm_adad828f07e3affd1511e533b00da19f) 1863 0 R (structwcsprm_b253d36f0dc1716952285c6078622e66) 1980 0 R (structwcsprm_b63cdcf6ff8febd1b40d0e044ca7d7ef) 1979 0 R] /Limits [(structwcsprm_9fd60ce9e6bc31df07ed02ce64b48be4) (structwcsprm_b63cdcf6ff8febd1b40d0e044ca7d7ef)] >> endobj 7606 0 obj << /Names [(structwcsprm_b7f7173e6d2b1b8028a3275bdd751e79) 1976 0 R (structwcsprm_b9729795155b8f37afd80784fb70068b) 1977 0 R (structwcsprm_c089e5d0e3191255ceaea7f8591b27ea) 1962 0 R (structwcsprm_c0cb013b1505fb7abd4167ac0db0e0aa) 1959 0 R (structwcsprm_c3c9c869bef4e4850dfd9762b33ce908) 1948 0 R (structwcsprm_c8391dd770637dbb841067996b7777ba) 1982 0 R] /Limits [(structwcsprm_b7f7173e6d2b1b8028a3275bdd751e79) (structwcsprm_c8391dd770637dbb841067996b7777ba)] >> endobj 7607 0 obj << /Names [(structwcsprm_ce7e0986c79d73bd3a0613034b71974f) 2035 0 R (structwcsprm_da1b98589c0127d34766b4c6b5d6cb41) 1871 0 R (structwcsprm_de355cdce054938cfa36e06ef9c51446) 1865 0 R (structwcsprm_de8495d3ca5047eeadba5934d0bb2708) 1978 0 R (structwcsprm_e09d5bf005e3bd7ee880353e8816ceb8) 2034 0 R (structwcsprm_e1f462606974e1324cd38f143eda691e) 1868 0 R] /Limits [(structwcsprm_ce7e0986c79d73bd3a0613034b71974f) (structwcsprm_e1f462606974e1324cd38f143eda691e)] >> endobj 7608 0 obj << /Names [(structwcsprm_e352318ce3202dab1b5db8b9ceec7703) 1974 0 R (structwcsprm_e6b40e2adeb31414871c7cae68619d63) 1955 0 R (structwcsprm_e7609283351ea46484690f873f8ea9c3) 1949 0 R (structwcsprm_e83952aec7c1ac76c090bc89bf4eeea7) 1983 0 R (structwcsprm_ee7f71c872491b25e1d1440e5dfa8153) 2025 0 R (structwcsprm_f124a4259475ea355ced38e73a05363a) 1946 0 R] /Limits [(structwcsprm_e352318ce3202dab1b5db8b9ceec7703) (structwcsprm_f124a4259475ea355ced38e73a05363a)] >> endobj 7609 0 obj << /Names [(structwcsprm_f1cb3e68560d1ac42c620cfe3900af95) 2024 0 R (structwcsprm_f300da5a94594a9769ab312bb56dde83) 1964 0 R (structwcsprm_f54ce939604be183231f0ee006e2f8ed) 1984 0 R (structwcsprm_f8f679749574250cb9ba09e1f05fab5d) 1869 0 R (structwcsprm_fd2f31d782b3becce4ca2f9b495ec0b1) 1945 0 R (structwtbarr) 1029 0 R] /Limits [(structwcsprm_f1cb3e68560d1ac42c620cfe3900af95) (structwtbarr)] >> endobj 7610 0 obj << /Names [(structwtbarr_10c8dba85b62e2794071dd50a41c4bb1) 2276 0 R (structwtbarr_1e88ad32570534a006e96cba721489b5) 2268 0 R (structwtbarr_24487eda7b17800f41bd4a452c6306d5) 2274 0 R (structwtbarr_2ff7c235353320c6dd98951484012ee7) 2278 0 R (structwtbarr_41c30234dbdf18ac094872cf39562172) 2281 0 R (structwtbarr_750832793167bbeebd1074e29844415d) 2277 0 R] /Limits [(structwtbarr_10c8dba85b62e2794071dd50a41c4bb1) (structwtbarr_750832793167bbeebd1074e29844415d)] >> endobj 7611 0 obj << /Names [(structwtbarr_8743b84c99b4b5e7ab7bf0653507a180) 2266 0 R (structwtbarr_901403d05f985d4a1fbd2fdc9585bd50) 2280 0 R (structwtbarr_9f1fcad814aa3da08dfa75ede2a07deb) 2272 0 R (structwtbarr_f862b4f90b0406ed8dd0c240768d4bd3) 2279 0 R (structwtbarr_f8ea7b15992ab7a86be63ff83318be41) 2270 0 R (subsection.1.1) 10 0 R] /Limits [(structwtbarr_8743b84c99b4b5e7ab7bf0653507a180) (subsection.1.1)] >> endobj 7612 0 obj << /Names [(subsection.1.2) 14 0 R (subsection.3.1) 26 0 R (subsection.4.1) 34 0 R (subsection.5.1) 42 0 R (subsection.5.10) 150 0 R (subsection.5.11) 162 0 R] /Limits [(subsection.1.2) (subsection.5.11)] >> endobj 7613 0 obj << /Names [(subsection.5.12) 174 0 R (subsection.5.13) 186 0 R (subsection.5.2) 54 0 R (subsection.5.3) 66 0 R (subsection.5.4) 78 0 R (subsection.5.5) 90 0 R] /Limits [(subsection.5.12) (subsection.5.5)] >> endobj 7614 0 obj << /Names [(subsection.5.6) 102 0 R (subsection.5.7) 114 0 R (subsection.5.8) 126 0 R (subsection.5.9) 138 0 R (subsection.6.1) 202 0 R (subsection.6.10) 390 0 R] /Limits [(subsection.5.6) (subsection.6.10)] >> endobj 7615 0 obj << /Names [(subsection.6.11) 414 0 R (subsection.6.12) 438 0 R (subsection.6.13) 454 0 R (subsection.6.14) 478 0 R (subsection.6.15) 502 0 R (subsection.6.16) 510 0 R] /Limits [(subsection.6.11) (subsection.6.16)] >> endobj 7616 0 obj << /Names [(subsection.6.17) 522 0 R (subsection.6.18) 538 0 R (subsection.6.19) 554 0 R (subsection.6.2) 226 0 R (subsection.6.20) 578 0 R (subsection.6.3) 250 0 R] /Limits [(subsection.6.17) (subsection.6.3)] >> endobj 7617 0 obj << /Names [(subsection.6.4) 262 0 R (subsection.6.5) 286 0 R (subsection.6.6) 306 0 R (subsection.6.7) 330 0 R (subsection.6.8) 354 0 R (subsection.6.9) 366 0 R] /Limits [(subsection.6.4) (subsection.6.9)] >> endobj 7618 0 obj << /Names [(subsubsection.5.1.1) 46 0 R (subsubsection.5.1.2) 50 0 R (subsubsection.5.10.1) 154 0 R (subsubsection.5.10.2) 158 0 R (subsubsection.5.11.1) 166 0 R (subsubsection.5.11.2) 170 0 R] /Limits [(subsubsection.5.1.1) (subsubsection.5.11.2)] >> endobj 7619 0 obj << /Names [(subsubsection.5.12.1) 178 0 R (subsubsection.5.12.2) 182 0 R (subsubsection.5.13.1) 190 0 R (subsubsection.5.13.2) 194 0 R (subsubsection.5.2.1) 58 0 R (subsubsection.5.2.2) 62 0 R] /Limits [(subsubsection.5.12.1) (subsubsection.5.2.2)] >> endobj 7620 0 obj << /Names [(subsubsection.5.3.1) 70 0 R (subsubsection.5.3.2) 74 0 R (subsubsection.5.4.1) 82 0 R (subsubsection.5.4.2) 86 0 R (subsubsection.5.5.1) 94 0 R (subsubsection.5.5.2) 98 0 R] /Limits [(subsubsection.5.3.1) (subsubsection.5.5.2)] >> endobj 7621 0 obj << /Names [(subsubsection.5.6.1) 106 0 R (subsubsection.5.6.2) 110 0 R (subsubsection.5.7.1) 118 0 R (subsubsection.5.7.2) 122 0 R (subsubsection.5.8.1) 130 0 R (subsubsection.5.8.2) 134 0 R] /Limits [(subsubsection.5.6.1) (subsubsection.5.8.2)] >> endobj 7622 0 obj << /Names [(subsubsection.5.9.1) 142 0 R (subsubsection.5.9.2) 146 0 R (subsubsection.6.1.1) 206 0 R (subsubsection.6.1.2) 210 0 R (subsubsection.6.1.3) 214 0 R (subsubsection.6.1.4) 218 0 R] /Limits [(subsubsection.5.9.1) (subsubsection.6.1.4)] >> endobj 7623 0 obj << /Names [(subsubsection.6.1.5) 222 0 R (subsubsection.6.10.1) 394 0 R (subsubsection.6.10.2) 398 0 R (subsubsection.6.10.3) 402 0 R (subsubsection.6.10.4) 406 0 R (subsubsection.6.10.5) 410 0 R] /Limits [(subsubsection.6.1.5) (subsubsection.6.10.5)] >> endobj 7624 0 obj << /Names [(subsubsection.6.11.1) 418 0 R (subsubsection.6.11.2) 422 0 R (subsubsection.6.11.3) 426 0 R (subsubsection.6.11.4) 430 0 R (subsubsection.6.11.5) 434 0 R (subsubsection.6.12.1) 442 0 R] /Limits [(subsubsection.6.11.1) (subsubsection.6.12.1)] >> endobj 7625 0 obj << /Names [(subsubsection.6.12.2) 446 0 R (subsubsection.6.12.3) 450 0 R (subsubsection.6.13.1) 458 0 R (subsubsection.6.13.2) 462 0 R (subsubsection.6.13.3) 466 0 R (subsubsection.6.13.4) 470 0 R] /Limits [(subsubsection.6.12.2) (subsubsection.6.13.4)] >> endobj 7626 0 obj << /Names [(subsubsection.6.13.5) 474 0 R (subsubsection.6.14.1) 482 0 R (subsubsection.6.14.2) 486 0 R (subsubsection.6.14.3) 490 0 R (subsubsection.6.14.4) 494 0 R (subsubsection.6.14.5) 498 0 R] /Limits [(subsubsection.6.13.5) (subsubsection.6.14.5)] >> endobj 7627 0 obj << /Names [(subsubsection.6.15.1) 506 0 R (subsubsection.6.16.1) 514 0 R (subsubsection.6.16.2) 518 0 R (subsubsection.6.17.1) 526 0 R (subsubsection.6.17.2) 530 0 R (subsubsection.6.17.3) 534 0 R] /Limits [(subsubsection.6.15.1) (subsubsection.6.17.3)] >> endobj 7628 0 obj << /Names [(subsubsection.6.18.1) 542 0 R (subsubsection.6.18.2) 546 0 R (subsubsection.6.18.3) 550 0 R (subsubsection.6.19.1) 558 0 R (subsubsection.6.19.2) 562 0 R (subsubsection.6.19.3) 566 0 R] /Limits [(subsubsection.6.18.1) (subsubsection.6.19.3)] >> endobj 7629 0 obj << /Names [(subsubsection.6.19.4) 570 0 R (subsubsection.6.19.5) 574 0 R (subsubsection.6.2.1) 230 0 R (subsubsection.6.2.2) 234 0 R (subsubsection.6.2.3) 238 0 R (subsubsection.6.2.4) 242 0 R] /Limits [(subsubsection.6.19.4) (subsubsection.6.2.4)] >> endobj 7630 0 obj << /Names [(subsubsection.6.2.5) 246 0 R (subsubsection.6.20.1) 582 0 R (subsubsection.6.20.2) 586 0 R (subsubsection.6.3.1) 254 0 R (subsubsection.6.3.2) 258 0 R (subsubsection.6.4.1) 266 0 R] /Limits [(subsubsection.6.2.5) (subsubsection.6.4.1)] >> endobj 7631 0 obj << /Names [(subsubsection.6.4.2) 270 0 R (subsubsection.6.4.3) 274 0 R (subsubsection.6.4.4) 278 0 R (subsubsection.6.4.5) 282 0 R (subsubsection.6.5.1) 290 0 R (subsubsection.6.5.2) 294 0 R] /Limits [(subsubsection.6.4.2) (subsubsection.6.5.2)] >> endobj 7632 0 obj << /Names [(subsubsection.6.5.3) 298 0 R (subsubsection.6.5.4) 302 0 R (subsubsection.6.6.1) 310 0 R (subsubsection.6.6.2) 314 0 R (subsubsection.6.6.3) 318 0 R (subsubsection.6.6.4) 322 0 R] /Limits [(subsubsection.6.5.3) (subsubsection.6.6.4)] >> endobj 7633 0 obj << /Names [(subsubsection.6.6.5) 326 0 R (subsubsection.6.7.1) 334 0 R (subsubsection.6.7.2) 338 0 R (subsubsection.6.7.3) 342 0 R (subsubsection.6.7.4) 346 0 R (subsubsection.6.7.5) 350 0 R] /Limits [(subsubsection.6.6.5) (subsubsection.6.7.5)] >> endobj 7634 0 obj << /Names [(subsubsection.6.8.1) 358 0 R (subsubsection.6.8.2) 362 0 R (subsubsection.6.9.1) 370 0 R (subsubsection.6.9.2) 374 0 R (subsubsection.6.9.3) 378 0 R (subsubsection.6.9.4) 382 0 R] /Limits [(subsubsection.6.8.1) (subsubsection.6.9.4)] >> endobj 7635 0 obj << /Names [(subsubsection.6.9.5) 386 0 R (tab_8h) 1079 0 R (tab_8h_006d6e8cb373e0dc3e9ccf128adb9411) 1784 0 R (tab_8h_0f3501cc592c78e0f2cb9922466589f2) 4056 0 R (tab_8h_141c3365f0364c01237aeeb93ddb717e) 953 0 R (tab_8h_27460f165fb03a075a1c6c6a48f33c62) 949 0 R] /Limits [(subsubsection.6.9.5) (tab_8h_27460f165fb03a075a1c6c6a48f33c62)] >> endobj 7636 0 obj << /Names [(tab_8h_49872082d67e357c5c68a633824133ae) 954 0 R (tab_8h_4abf39ca4cfc2ea073bffdbb98caa46d) 952 0 R (tab_8h_519e8e4503f7c41c0f99e8597171c97f) 1782 0 R (tab_8h_6b3768349e9a5e925aab24effddc584f) 4057 0 R (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) 948 0 R (tab_8h_87b3a2a84bab396a528af8382ce9ad04) 4055 0 R] /Limits [(tab_8h_49872082d67e357c5c68a633824133ae) (tab_8h_87b3a2a84bab396a528af8382ce9ad04)] >> endobj 7637 0 obj << /Names [(tab_8h_8b57d9bacbabd2b516d77220cdb6167d) 947 0 R (tab_8h_9c80120944556169d230d4cd051d88cb) 4005 0 R (tab_8h_aded7db92aa2758198b33f35f5f18d6e) 1785 0 R (tab_8h_bb7920acdfb83179d3bac65035144c02) 1783 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed) 4047 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed09c02b9ffff721d3f2dd64c318d7c38b) 4051 0 R] /Limits [(tab_8h_8b57d9bacbabd2b516d77220cdb6167d) (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed09c02b9ffff721d3f2dd64c318d7c38b)] >> endobj 7638 0 obj << /Names [(tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed1e503c059ddfe8f4aca37d335f7271f8) 4050 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed42a664a8df3b0a485f49eb0e7c8108cd) 4048 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed9d77712eeed3ab7d2bf25e5251c9451b) 4053 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2eda0705873598b9fa5bf3b9afbc598a6bc) 4049 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2edc6f6b4c9eca2bd36b0bf2f89309f9297) 4052 0 R (tab_8h_bf96fe5488df6796ec2606b974f330fe) 950 0 R] /Limits [(tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed1e503c059ddfe8f4aca37d335f7271f8) (tab_8h_bf96fe5488df6796ec2606b974f330fe)] >> endobj 7639 0 obj << /Names [(tab_8h_e2ee098afabb7a7d225f930276ffb441) 951 0 R (tab_8h_e403ff0b740916989c7386728df001c8) 4054 0 R (testing) 789 0 R (threads) 788 0 R (vector) 787 0 R (wcs_8h) 1080 0 R] /Limits [(tab_8h_e2ee098afabb7a7d225f930276ffb441) (wcs_8h)] >> endobj 7640 0 obj << /Names [(wcs_8h_0653c98b8a1bee5755740ae3f4854094) 4185 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f) 4278 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f03824b7b5c22e5f0cc91363eb695a804) 4288 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f08306533cf0c7555dad662e82e8a4a69) 4287 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f2904278d916c820236347783312a7ce0) 4282 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f37c8aa0aedc12c63df08f39cb7177ff7) 4292 0 R] /Limits [(wcs_8h_0653c98b8a1bee5755740ae3f4854094) (wcs_8h_158615aa1622d8feedd228795ff9a25f37c8aa0aedc12c63df08f39cb7177ff7)] >> endobj 7641 0 obj << /Names [(wcs_8h_158615aa1622d8feedd228795ff9a25f598db0fcc4961aa3c5e0a296bec2b313) 4283 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f5c58d5530bc7577a70185376c15180af) 4281 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f5d662102c172495df1f9bb03cedd701d) 4289 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f71cb7eaa633d9e0f560555a016f1f007) 4285 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f832122bb304560f92df91e391d55948a) 4290 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f88e600163f719a759d3569bf1548109e) 4291 0 R] /Limits [(wcs_8h_158615aa1622d8feedd228795ff9a25f598db0fcc4961aa3c5e0a296bec2b313) (wcs_8h_158615aa1622d8feedd228795ff9a25f88e600163f719a759d3569bf1548109e)] >> endobj 7642 0 obj << /Names [(wcs_8h_158615aa1622d8feedd228795ff9a25f8b87c21d4a2cab41d4eea0a95378fca8) 4279 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25fc51c733d8a719dd698f9e96e9a4fa83f) 4280 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25fdfa2a8cf8021827378091315b8e0a020) 4286 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25ffe9ed842ea8f525c7b8fed2f60015dd9) 4284 0 R (wcs_8h_1bcf49cfe1ed1bb2bc4c930f98d808fa) 955 0 R (wcs_8h_22bbac394b025c4cfc7bd73b6d6e3962) 4227 0 R] /Limits [(wcs_8h_158615aa1622d8feedd228795ff9a25f8b87c21d4a2cab41d4eea0a95378fca8) (wcs_8h_22bbac394b025c4cfc7bd73b6d6e3962)] >> endobj 7643 0 obj << /Names [(wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) 2201 0 R (wcs_8h_2afc8255fde0965dddaa374463666d45) 2037 0 R (wcs_8h_37c4884cf58baf25b2984ec3bccb80a5) 963 0 R (wcs_8h_3d64b57cec404114c75bd25a562e8053) 959 0 R (wcs_8h_42b2578d76ace7ca6114d82b7ae46a89) 2116 0 R (wcs_8h_465ef3c77aaf546324dae0692e6de7fe) 957 0 R] /Limits [(wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) (wcs_8h_465ef3c77aaf546324dae0692e6de7fe)] >> endobj 7644 0 obj << /Names [(wcs_8h_4ab38bc642c4656f62c43acf84a849f1) 4293 0 R (wcs_8h_4b2dfca2e80fe80ba85dc830cd9c377b) 4229 0 R (wcs_8h_57975833fe0588eb7c7b6d79f13a7693) 4337 0 R (wcs_8h_5d377c202850ee0eaf44b3e989d0736e) 4187 0 R (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) 2202 0 R (wcs_8h_6852f6dd2883c82296f1108b897d337e) 4231 0 R] /Limits [(wcs_8h_4ab38bc642c4656f62c43acf84a849f1) (wcs_8h_6852f6dd2883c82296f1108b897d337e)] >> endobj 7645 0 obj << /Names [(wcs_8h_6ba6d2640572b12a11e3558fa75a01ed) 4230 0 R (wcs_8h_84a67c964e212bbf004c264b3ca70fee) 961 0 R (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) 4186 0 R (wcs_8h_8f5c31a6983b17abbe2fead61550d55c) 960 0 R (wcs_8h_8fe5dcd9927240dc0348b850ee662367) 4295 0 R (wcs_8h_b9885b02031ff7aa7b094f4a1edee2cd) 4228 0 R] /Limits [(wcs_8h_6ba6d2640572b12a11e3558fa75a01ed) (wcs_8h_b9885b02031ff7aa7b094f4a1edee2cd)] >> endobj 7646 0 obj << /Names [(wcs_8h_b9aeb8cf1afb1bfb22e989580d90fca8) 4294 0 R (wcs_8h_c55946dadc53ac592cb686275902ae7b) 4232 0 R (wcs_8h_cfbadc770489b6b5186b95eaa35467f1) 964 0 R (wcs_8h_d16bd8db875ee05b014429efdc1f3471) 956 0 R (wcs_8h_de3959355dc9d0987e7ccc4070795c38) 962 0 R (wcs_8h_e1738854472218541bda531653ef2709) 958 0 R] /Limits [(wcs_8h_b9aeb8cf1afb1bfb22e989580d90fca8) (wcs_8h_e1738854472218541bda531653ef2709)] >> endobj 7647 0 obj << /Names [(wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) 1455 0 R (wcs_8h_e790c9ce6c9b7a4845cf1c3c97b1e97a) 2117 0 R (wcs_8h_f3f00b876c8212d43f32a51feeadaa81) 2203 0 R (wcserr_8h) 1081 0 R (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) 1150 0 R (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) 4463 0 R] /Limits [(wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9)] >> endobj 7648 0 obj << /Names [(wcserr_8h_7b46d9cbaea3241d91e40d03a2725fd7) 4537 0 R (wcserr_8h_a3843f24df9351294fa4847eaff672bc) 4539 0 R (wcserr_8h_b0945d3588b604205b9c1b3d661a794f) 4557 0 R (wcserr_8h_cfa8a447539633296d50e67c7ab466c2) 4538 0 R (wcserr_8h_d53f2d5e6a70e53cb3decc6c7b42ad96) 4536 0 R (wcserr_8h_d970e4ae584d3052b7bec2f1afb4689d) 4558 0 R] /Limits [(wcserr_8h_7b46d9cbaea3241d91e40d03a2725fd7) (wcserr_8h_d970e4ae584d3052b7bec2f1afb4689d)] >> endobj 7649 0 obj << /Names [(wcsfix_8h) 1082 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183) 4656 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518315a9e5f9cbb559ef53018e9aade43e88) 4671 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b251831e255b3aa269ff0c251ada8a6c3f9602) 4659 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b251831e4cf4eeb3cd2f4d8c2c1f040aa62f6c) 4663 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b251831edfc4a839295befd132ce460d253311) 4657 0 R] /Limits [(wcsfix_8h) (wcsfix_8h_0399bbea1e28abad3259a8ea05b251831edfc4a839295befd132ce460d253311)] >> endobj 7650 0 obj << /Names [(wcsfix_8h_0399bbea1e28abad3259a8ea05b2518326d787caed068586fbef3d3c0fbce41f) 4666 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b251833f4b7a9a303943f6c12ea51cce2240cf) 4669 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183421fc9b9a2aac54bc832b3c1180f8f07) 4665 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b251835dd410d6f1a55543c4f7d0f82435eb40) 4667 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b251837906f35912dd0fb39954bfd5140672a7) 4658 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518381b5390b4f770515ae950d9e382b2885) 4668 0 R] /Limits [(wcsfix_8h_0399bbea1e28abad3259a8ea05b2518326d787caed068586fbef3d3c0fbce41f) (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518381b5390b4f770515ae950d9e382b2885)] >> endobj 7651 0 obj << /Names [(wcsfix_8h_0399bbea1e28abad3259a8ea05b251838553bf40509263e3c3a198810f83d26e) 4664 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183d6bf7801d043f41f67c54677d6cfcb75) 4670 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183ec3fdc50ed9f4ca8d80d7ce7751ef0e3) 4660 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183ee9fbc64e56bb6d307d06d8ef8e8b244) 4661 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183f574a836e251e8a0257da97580bb9354) 4662 0 R (wcsfix_8h_07281faacbec1df800a417bf157751d7) 4654 0 R] /Limits [(wcsfix_8h_0399bbea1e28abad3259a8ea05b251838553bf40509263e3c3a198810f83d26e) (wcsfix_8h_07281faacbec1df800a417bf157751d7)] >> endobj 7652 0 obj << /Names [(wcsfix_8h_0816c5f2354ee6c0044e11867d7558ea) 4603 0 R (wcsfix_8h_0ed13e54c3eacb9325afbae78ef33b61) 4655 0 R (wcsfix_8h_256ce6281894f65dd15396cc0994e875) 966 0 R (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) 4597 0 R (wcsfix_8h_3229b126ed844da0a2d4f7abff1de7d0) 965 0 R (wcsfix_8h_4d37e0274dff84649cba075b8761b3fa) 4653 0 R] /Limits [(wcsfix_8h_0816c5f2354ee6c0044e11867d7558ea) (wcsfix_8h_4d37e0274dff84649cba075b8761b3fa)] >> endobj 7653 0 obj << /Names [(wcsfix_8h_62298e0fb06332a282d9daab718a1286) 4672 0 R (wcsfix_8h_7181ebe5e9f0a4058642c56dc848bd5c) 4599 0 R (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) 4600 0 R (wcsfix_8h_883167275c4d3855ba453364db3d8d66) 4602 0 R (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) 4598 0 R (wcsfix_8h_8f4a947e2605b35ffa92f08b113d60b2) 4601 0 R] /Limits [(wcsfix_8h_62298e0fb06332a282d9daab718a1286) (wcsfix_8h_8f4a947e2605b35ffa92f08b113d60b2)] >> endobj 7654 0 obj << /Names [(wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) 4606 0 R (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) 4604 0 R (wcsfix_8h_f1b99efe520fbd2d4bd0e5a35f87e186) 4605 0 R (wcsfix_8h_f23e7b02522c40fa5dfbf3d569348844) 4596 0 R (wcshdr_8h) 1083 0 R (wcshdr_8h_017f1e817bdb2114ba765e7a9ef73bac) 4863 0 R] /Limits [(wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) (wcshdr_8h_017f1e817bdb2114ba765e7a9ef73bac)] >> endobj 7655 0 obj << /Names [(wcshdr_8h_06cd9297f8315235ba1cf13d1cc115e1) 4975 0 R (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) 2036 0 R (wcshdr_8h_0b9b53e5cfd05653cbca75cf1aa8b2ed) 4814 0 R (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) 4874 0 R (wcshdr_8h_16e35904c64fe6b0aab144bd022c722f) 4973 0 R (wcshdr_8h_1b66d50d7f1927222a170bc88f9db51e) 4870 0 R] /Limits [(wcshdr_8h_06cd9297f8315235ba1cf13d1cc115e1) (wcshdr_8h_1b66d50d7f1927222a170bc88f9db51e)] >> endobj 7656 0 obj << /Names [(wcshdr_8h_1d506ef2ad493a963426e0732a6328ca) 4869 0 R (wcshdr_8h_222a5bd7659f3e1ea1a9ed21f54c50ef) 4922 0 R (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) 4974 0 R (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) 4875 0 R (wcshdr_8h_3dea9d7548bdbc9a7cc8d0a04cdd46fb) 4867 0 R (wcshdr_8h_446914676e0b3f55ac6a080015a52b43) 4919 0 R] /Limits [(wcshdr_8h_1d506ef2ad493a963426e0732a6328ca) (wcshdr_8h_446914676e0b3f55ac6a080015a52b43)] >> endobj 7657 0 obj << /Names [(wcshdr_8h_54634ed49425e8842874e9e2b77899df) 4917 0 R (wcshdr_8h_5592649ee4c25e118559c6d283c51930) 4918 0 R (wcshdr_8h_5feeef18919b1cbb79729bbfa75976ec) 4864 0 R (wcshdr_8h_6174a483baad91dae3fa1c30b0e4cde5) 4972 0 R (wcshdr_8h_63eb554461f3df5dc64a25f71891b9f1) 4866 0 R (wcshdr_8h_6779d48001260a0011b3dcffdcb64cb6) 4920 0 R] /Limits [(wcshdr_8h_54634ed49425e8842874e9e2b77899df) (wcshdr_8h_6779d48001260a0011b3dcffdcb64cb6)] >> endobj 7658 0 obj << /Names [(wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) 2186 0 R (wcshdr_8h_7bf13ab87b23ecdbbb4b4847d4944070) 4878 0 R (wcshdr_8h_92a0007f672a5498ab1b6ccc6a4a002b) 4813 0 R (wcshdr_8h_95325b53ebd8d7d0a371a65b27b3d04a) 4924 0 R (wcshdr_8h_96b787f84207faa42599e50e6e078d21) 4921 0 R (wcshdr_8h_9a70ad2a355a9736711d8017535bf72b) 4925 0 R] /Limits [(wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) (wcshdr_8h_9a70ad2a355a9736711d8017535bf72b)] >> endobj 7659 0 obj << /Names [(wcshdr_8h_a7c5021293b0db20ece0e82c3702a159) 4877 0 R (wcshdr_8h_ace96fb8c1499616dd1333af3e8340b0) 4923 0 R (wcshdr_8h_b65e929c7d525d735ae240046d4f0d9c) 4876 0 R (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) 2038 0 R (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) 2488 0 R (wcshdr_8h_df57a609a5c3f7288452cce86210260e) 4873 0 R] /Limits [(wcshdr_8h_a7c5021293b0db20ece0e82c3702a159) (wcshdr_8h_df57a609a5c3f7288452cce86210260e)] >> endobj 7660 0 obj << /Names [(wcshdr_8h_dff9a101a373a634f3a1baab29e92534) 4871 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae) 4926 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae0a858638ef0dd0dc9b529f98b14cc46f) 4929 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae0c926e2cc98a8c39585aa0e212423459) 4930 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae218297c7a2a4d405c251e9ed239e615b) 4931 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae99dd31e274ec97542e650ff89357cded) 4928 0 R] /Limits [(wcshdr_8h_dff9a101a373a634f3a1baab29e92534) (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae99dd31e274ec97542e650ff89357cded)] >> endobj 7661 0 obj << /Names [(wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdaebfe69dd9e4c486f856a5dc44b02e79a1) 4927 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdaeeae58359638c0c631e6c7c573a343508) 4932 0 R (wcshdr_8h_e8a768f544fe3ae81436b73dca3099fb) 4872 0 R (wcshdr_8h_ee4fe41274945f9e34009d2eb309c922) 4868 0 R (wcshdr_8h_fc0a5a6b475a8e50b77d4be099790985) 4865 0 R (wcshdr_8h_fd6d52bed79bd48230f651ac48eb5ca6) 4815 0 R] /Limits [(wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdaebfe69dd9e4c486f856a5dc44b02e79a1) (wcshdr_8h_fd6d52bed79bd48230f651ac48eb5ca6)] >> endobj 7662 0 obj << /Names [(wcslib_8h) 1084 0 R (wcsmath_8h) 1085 0 R (wcsmath_8h_01d44d9782a85952a48ed76bf105351b) 5361 0 R (wcsmath_8h_0a3cc1d5cde549e408f825ddd7f5853d) 5358 0 R (wcsmath_8h_2dc3870be25a19efa2940150507aaf71) 5362 0 R (wcsmath_8h_39c663074332446065723e9be9350139) 5359 0 R] /Limits [(wcslib_8h) (wcsmath_8h_39c663074332446065723e9be9350139)] >> endobj 7663 0 obj << /Names [(wcsmath_8h_514396dd60fa0621c83072091fb2a0cd) 5360 0 R (wcsmath_8h_598a3330b3c21701223ee0ca14316eca) 5356 0 R (wcsmath_8h_dea646bef24ac88b544d7094860127ff) 5363 0 R (wcsprintf_8h) 1086 0 R (wcsprintf_8h_46950abaf5a27347da8160741f98f973) 2419 0 R (wcsprintf_8h_5c6f91916a0b8f8c2d85274c0ba130f6) 5392 0 R] /Limits [(wcsmath_8h_514396dd60fa0621c83072091fb2a0cd) (wcsprintf_8h_5c6f91916a0b8f8c2d85274c0ba130f6)] >> endobj 7664 0 obj << /Names [(wcsprintf_8h_7af03fe3aabc25673cc012adc1e3f8cc) 5391 0 R (wcsprintf_8h_b8a869f35385b17a26cb5070ab63e5d5) 5393 0 R (wcstrig_8h) 1087 0 R (wcstrig_8h_2b83ceb814c90ebfa042a26d884ac159) 5439 0 R (wcstrig_8h_42ae26d339f06986ca7f12ba02abcd32) 5438 0 R (wcstrig_8h_666bbac788099d5bc6d88e685f2713a3) 5441 0 R] /Limits [(wcsprintf_8h_7af03fe3aabc25673cc012adc1e3f8cc) (wcstrig_8h_666bbac788099d5bc6d88e685f2713a3)] >> endobj 7665 0 obj << /Names [(wcstrig_8h_7a2ae59365f19adb4af90f4df3074e50) 5443 0 R (wcstrig_8h_872bdab5707df527946ecbad24ee03ab) 5444 0 R (wcstrig_8h_b4e520246350c50275f899c9b97c68d3) 5442 0 R (wcstrig_8h_d029e98723548c7236e805c7b48c7c90) 5445 0 R (wcstrig_8h_dd1b8466211aa6885bed0619f32b35c7) 5437 0 R (wcstrig_8h_ee847369fa66666bfe1e72e7872499b6) 5440 0 R] /Limits [(wcstrig_8h_7a2ae59365f19adb4af90f4df3074e50) (wcstrig_8h_ee847369fa66666bfe1e72e7872499b6)] >> endobj 7666 0 obj << /Names [(wcsunits_8h) 1088 0 R (wcsunits_8h_0967644d30d7f98f21b6bb0e68a637c0) 5514 0 R (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) 5574 0 R (wcsunits_8h_11a1284e63c7515fd0240ca8f85fc111) 5518 0 R (wcsunits_8h_25ba0f0129e88c6e7c74d4562cf796cd) 5572 0 R (wcsunits_8h_27df51b1593f3642bfd9833e71c73a34) 5521 0 R] /Limits [(wcsunits_8h) (wcsunits_8h_27df51b1593f3642bfd9833e71c73a34)] >> endobj 7667 0 obj << /Names [(wcsunits_8h_2cf5fc976d2663fed07f1f837245f36b) 5523 0 R (wcsunits_8h_347b88663166b66404cbb2f8aac211bb) 5517 0 R (wcsunits_8h_45b2d15aa5504b7e7e8b7b345d090f32) 5484 0 R (wcsunits_8h_47aa4e0a54f11d7ed5146c00906a3984) 5571 0 R (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) 2076 0 R (wcsunits_8h_59e3354bb9908a4841aa478f2dbd3973) 5516 0 R] /Limits [(wcsunits_8h_2cf5fc976d2663fed07f1f837245f36b) (wcsunits_8h_59e3354bb9908a4841aa478f2dbd3973)] >> endobj 7668 0 obj << /Names [(wcsunits_8h_69241e398126a72e5d095ed3aff156c3) 5483 0 R (wcsunits_8h_6ef9e3ba449b38275c422e454abe3601) 5482 0 R (wcsunits_8h_7332ce1c3c715011599d4b9d13e7b760) 5520 0 R (wcsunits_8h_7daf2b3a5c7e96f2823bca916554cc4b) 5526 0 R (wcsunits_8h_807ef7c93e34207776303badf177fa41) 5512 0 R (wcsunits_8h_8217718f8c515151dc33ceba922b39ba) 5575 0 R] /Limits [(wcsunits_8h_69241e398126a72e5d095ed3aff156c3) (wcsunits_8h_8217718f8c515151dc33ceba922b39ba)] >> endobj 7669 0 obj << /Names [(wcsunits_8h_84fdca1d2c8647a2f33a760578de62c6) 5519 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef) 5557 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef0c9333946c5918c15c376f12e9afb086) 5563 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef116bc901282cf346621b9e56e4676b24) 5567 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef367f21cd3b49b178d4fdadaf74f2618d) 5564 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef49231fa8fbeeca036424cd7df0d5a3a8) 5565 0 R] /Limits [(wcsunits_8h_84fdca1d2c8647a2f33a760578de62c6) (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef49231fa8fbeeca036424cd7df0d5a3a8)] >> endobj 7670 0 obj << /Names [(wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef4ad61420ee56456d08647b222c4aa8af) 5559 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef599ff63ed46928ffb2f5edc07de3ddcc) 5569 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef5b8db327b9d6bf09e93e7e0fed910792) 5566 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef5ceed55803deb4a34266f23cf6d47274) 5560 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef67b504a215f2d34d1be4956b1e9e55b7) 5562 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3efc00b91a489f7273d2733f58201b6a723) 5558 0 R] /Limits [(wcsunits_8h_864e6b966575a8c42eb333ba9f14a3ef4ad61420ee56456d08647b222c4aa8af) (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3efc00b91a489f7273d2733f58201b6a723)] >> endobj 7671 0 obj << /Names [(wcsunits_8h_864e6b966575a8c42eb333ba9f14a3efe9b1b29365d17b25452562f770d44975) 5568 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3eff6fc9ca59d14a8889809c050c01154ff) 5570 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3eff7a5cd4ed90aeef7598875cb5bf57a11) 5561 0 R (wcsunits_8h_8bb521a40223ec7358f85d719834ad7f) 5513 0 R (wcsunits_8h_8f84e63b1fa2003f3438e7cd21231b92) 5515 0 R (wcsunits_8h_946bca82ae3fb279ad3d86dbc793be07) 5525 0 R] /Limits [(wcsunits_8h_864e6b966575a8c42eb333ba9f14a3efe9b1b29365d17b25452562f770d44975) (wcsunits_8h_946bca82ae3fb279ad3d86dbc793be07)] >> endobj 7672 0 obj << /Names [(wcsunits_8h_b622892a80194a6a432510665156e4fb) 5524 0 R (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) 5577 0 R (wcsunits_8h_ce657c3f971b4ac9004a2639d142f636) 5522 0 R (wcsunits_8h_ec5892437858120d456503fe38f4031b) 5576 0 R (wcsunits_8h_ef5d64e333f758458b1edaa617911513) 2077 0 R (wcsunits_8h_f2c6e7c95fd6741183b2b74dd24d59ce) 5573 0 R] /Limits [(wcsunits_8h_b622892a80194a6a432510665156e4fb) (wcsunits_8h_f2c6e7c95fd6741183b2b74dd24d59ce)] >> endobj 7673 0 obj << /Names [(wcsutil_8h) 1089 0 R (wcsutil_8h_0d982911e7f694a751f2887ea38890e4) 5725 0 R (wcsutil_8h_38322fa65b3bad54552d374d873ad037) 5719 0 R (wcsutil_8h_4c7c5a686aaa39f511598b32e944ac68) 5722 0 R (wcsutil_8h_9bc774de065f8937aa9bbffa2df6089c) 5726 0 R (wcsutil_8h_9d96f343fc444f8c6f1fa01367c4d765) 5721 0 R] /Limits [(wcsutil_8h) (wcsutil_8h_9d96f343fc444f8c6f1fa01367c4d765)] >> endobj 7674 0 obj << /Names [(wcsutil_8h_b32722081f8cda184d7ada6d734c637c) 5724 0 R (wcsutil_8h_fe7f963c2038673015bbce204c4a8171) 5723 0 R] /Limits [(wcsutil_8h_b32722081f8cda184d7ada6d734c637c) (wcsutil_8h_fe7f963c2038673015bbce204c4a8171)] >> endobj 7675 0 obj << /Kids [7356 0 R 7357 0 R 7358 0 R 7359 0 R 7360 0 R 7361 0 R] /Limits [(Doc-Start) (cel_8h_2ac33dbe3aa2efff60543213b0a691f5)] >> endobj 7676 0 obj << /Kids [7362 0 R 7363 0 R 7364 0 R 7365 0 R 7366 0 R 7367 0 R] /Limits [(cel_8h_2fe5a30084717036a54e7f0a920da105) (deprecated__deprecated000019)] >> endobj 7677 0 obj << /Kids [7368 0 R 7369 0 R 7370 0 R 7371 0 R 7372 0 R 7373 0 R] /Limits [(deprecated__deprecated000020) (getwcstab_8h)] >> endobj 7678 0 obj << /Kids [7374 0 R 7375 0 R 7376 0 R 7377 0 R 7378 0 R 7379 0 R] /Limits [(getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36fd604876bd42694c1a04cdae2be719e6)] >> endobj 7679 0 obj << /Kids [7380 0 R 7381 0 R 7382 0 R 7383 0 R 7384 0 R 7385 0 R] /Limits [(log_8h_8b8e0a071c9539f4be52eaf789f385ea) (page.127)] >> endobj 7680 0 obj << /Kids [7386 0 R 7387 0 R 7388 0 R 7389 0 R 7390 0 R 7391 0 R] /Limits [(page.128) (page.16)] >> endobj 7681 0 obj << /Kids [7392 0 R 7393 0 R 7394 0 R 7395 0 R 7396 0 R 7397 0 R] /Limits [(page.160) (page.192)] >> endobj 7682 0 obj << /Kids [7398 0 R 7399 0 R 7400 0 R 7401 0 R 7402 0 R 7403 0 R] /Limits [(page.193) (page.40)] >> endobj 7683 0 obj << /Kids [7404 0 R 7405 0 R 7406 0 R 7407 0 R 7408 0 R 7409 0 R] /Limits [(page.41) (page.73)] >> endobj 7684 0 obj << /Kids [7410 0 R 7411 0 R 7412 0 R 7413 0 R 7414 0 R 7415 0 R] /Limits [(page.74) (paragraph.5.1.2.2)] >> endobj 7685 0 obj << /Kids [7416 0 R 7417 0 R 7418 0 R 7419 0 R 7420 0 R 7421 0 R] /Limits [(paragraph.5.1.2.3) (paragraph.5.11.2.5)] >> endobj 7686 0 obj << /Kids [7422 0 R 7423 0 R 7424 0 R 7425 0 R 7426 0 R 7427 0 R] /Limits [(paragraph.5.12.2.1) (paragraph.5.12.2.41)] >> endobj 7687 0 obj << /Kids [7428 0 R 7429 0 R 7430 0 R 7431 0 R 7432 0 R 7433 0 R] /Limits [(paragraph.5.12.2.42) (paragraph.5.12.2.74)] >> endobj 7688 0 obj << /Kids [7434 0 R 7435 0 R 7436 0 R 7437 0 R 7438 0 R 7439 0 R] /Limits [(paragraph.5.12.2.75) (paragraph.5.4.2.10)] >> endobj 7689 0 obj << /Kids [7440 0 R 7441 0 R 7442 0 R 7443 0 R 7444 0 R 7445 0 R] /Limits [(paragraph.5.4.2.11) (paragraph.5.5.2.5)] >> endobj 7690 0 obj << /Kids [7446 0 R 7447 0 R 7448 0 R 7449 0 R 7450 0 R 7451 0 R] /Limits [(paragraph.5.5.2.6) (paragraph.5.9.2.18)] >> endobj 7691 0 obj << /Kids [7452 0 R 7453 0 R 7454 0 R 7455 0 R 7456 0 R 7457 0 R] /Limits [(paragraph.5.9.2.19) (paragraph.6.1.2.3)] >> endobj 7692 0 obj << /Kids [7458 0 R 7459 0 R 7460 0 R 7461 0 R 7462 0 R 7463 0 R] /Limits [(paragraph.6.1.2.4) (paragraph.6.11.2.15)] >> endobj 7693 0 obj << /Kids [7464 0 R 7465 0 R 7466 0 R 7467 0 R 7468 0 R 7469 0 R] /Limits [(paragraph.6.11.2.16) (paragraph.6.13.2.4)] >> endobj 7694 0 obj << /Kids [7470 0 R 7471 0 R 7472 0 R 7473 0 R 7474 0 R 7475 0 R] /Limits [(paragraph.6.13.2.5) (paragraph.6.14.2.3)] >> endobj 7695 0 obj << /Kids [7476 0 R 7477 0 R 7478 0 R 7479 0 R 7480 0 R 7481 0 R] /Limits [(paragraph.6.14.2.4) (paragraph.6.19.2.1)] >> endobj 7696 0 obj << /Kids [7482 0 R 7483 0 R 7484 0 R 7485 0 R 7486 0 R 7487 0 R] /Limits [(paragraph.6.19.2.10) (paragraph.6.2.3.1)] >> endobj 7697 0 obj << /Kids [7488 0 R 7489 0 R 7490 0 R 7491 0 R 7492 0 R 7493 0 R] /Limits [(paragraph.6.2.4.1) (paragraph.6.6.2.4)] >> endobj 7698 0 obj << /Kids [7494 0 R 7495 0 R 7496 0 R 7497 0 R 7498 0 R 7499 0 R] /Limits [(paragraph.6.6.2.5) (paragraph.6.6.4.36)] >> endobj 7699 0 obj << /Kids [7500 0 R 7501 0 R 7502 0 R 7503 0 R 7504 0 R 7505 0 R] /Limits [(paragraph.6.6.4.37) (paragraph.6.6.4.69)] >> endobj 7700 0 obj << /Kids [7506 0 R 7507 0 R 7508 0 R 7509 0 R 7510 0 R 7511 0 R] /Limits [(paragraph.6.6.4.7) (paragraph.6.7.2.3)] >> endobj 7701 0 obj << /Kids [7512 0 R 7513 0 R 7514 0 R 7515 0 R 7516 0 R 7517 0 R] /Limits [(paragraph.6.7.2.4) (paragraph.6.9.4.17)] >> endobj 7702 0 obj << /Kids [7518 0 R 7519 0 R 7520 0 R 7521 0 R 7522 0 R 7523 0 R] /Limits [(paragraph.6.9.4.18) (prj_8h_2ac22403e59a9e8d2b2f53f6d0574305d33460ba0b865ff7580e6d2cebd92c74)] >> endobj 7703 0 obj << /Kids [7524 0 R 7525 0 R 7526 0 R 7527 0 R 7528 0 R 7529 0 R] /Limits [(prj_8h_2c87fbf68277f03051d3eaae3db785e9) (prj_8h_77283589634cc9a054f3a7c7fc91d38d)] >> endobj 7704 0 obj << /Kids [7530 0 R 7531 0 R 7532 0 R 7533 0 R 7534 0 R 7535 0 R] /Limits [(prj_8h_7b60d7992bf9c671cb4191f0ec2e0c90) (prj_8h_c940da0fb0552876fb40a92f82c9625f)] >> endobj 7705 0 obj << /Kids [7536 0 R 7537 0 R 7538 0 R 7539 0 R 7540 0 R 7541 0 R] /Limits [(prj_8h_c983c5a393c5b3f1041f07b2eb95a3a5) (section*.17)] >> endobj 7706 0 obj << /Kids [7542 0 R 7543 0 R 7544 0 R 7545 0 R 7546 0 R 7547 0 R] /Limits [(section*.18) (section*.5)] >> endobj 7707 0 obj << /Kids [7548 0 R 7549 0 R 7550 0 R 7551 0 R 7552 0 R 7553 0 R] /Limits [(section*.50) (section*.82)] >> endobj 7708 0 obj << /Kids [7554 0 R 7555 0 R 7556 0 R 7557 0 R 7558 0 R 7559 0 R] /Limits [(section*.9) (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a)] >> endobj 7709 0 obj << /Kids [7560 0 R 7561 0 R 7562 0 R 7563 0 R 7564 0 R 7565 0 R] /Limits [(spc_8h_f0e4274b242fd41625b6ad4f4376b8da) (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf)] >> endobj 7710 0 obj << /Kids [7566 0 R 7567 0 R 7568 0 R 7569 0 R 7570 0 R 7571 0 R] /Limits [(spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf23753b512249d3752a74ce7497d9c852) (structfitskey_f5bd77eb6d318c562bfe650f6784eb5f)] >> endobj 7711 0 obj << /Kids [7572 0 R 7573 0 R 7574 0 R 7575 0 R 7576 0 R 7577 0 R] /Limits [(structfitskeyid) (structprjprm_b165b11d417700de0a4187f133050a2b)] >> endobj 7712 0 obj << /Kids [7578 0 R 7579 0 R 7580 0 R 7581 0 R 7582 0 R 7583 0 R] /Limits [(structprjprm_b3e207e26d1c9db06cedba2cf4460340) (structspcprm_ec5d37c00d382a84a090d4f52d9a4346)] >> endobj 7713 0 obj << /Kids [7584 0 R 7585 0 R 7586 0 R 7587 0 R 7588 0 R 7589 0 R] /Limits [(structspcprm_fb6a33994ad13f402efb68d20a97eee1) (structspxprm_b67c62285ad58f5f0c1a88cb15ac3408)] >> endobj 7714 0 obj << /Kids [7590 0 R 7591 0 R 7592 0 R 7593 0 R 7594 0 R 7595 0 R] /Limits [(structspxprm_c0096d466fedc5ec61948044af06551d) (structwcserr)] >> endobj 7715 0 obj << /Kids [7596 0 R 7597 0 R 7598 0 R 7599 0 R 7600 0 R 7601 0 R] /Limits [(structwcserr_210814c32ace19b9d09e4774e94a3c3c) (structwcsprm_65801f93622504672ee3faf8f2110e48)] >> endobj 7716 0 obj << /Kids [7602 0 R 7603 0 R 7604 0 R 7605 0 R 7606 0 R 7607 0 R] /Limits [(structwcsprm_6778d31ec5a2ee643dc5f0a8af630b03) (structwcsprm_e1f462606974e1324cd38f143eda691e)] >> endobj 7717 0 obj << /Kids [7608 0 R 7609 0 R 7610 0 R 7611 0 R 7612 0 R 7613 0 R] /Limits [(structwcsprm_e352318ce3202dab1b5db8b9ceec7703) (subsection.5.5)] >> endobj 7718 0 obj << /Kids [7614 0 R 7615 0 R 7616 0 R 7617 0 R 7618 0 R 7619 0 R] /Limits [(subsection.5.6) (subsubsection.5.2.2)] >> endobj 7719 0 obj << /Kids [7620 0 R 7621 0 R 7622 0 R 7623 0 R 7624 0 R 7625 0 R] /Limits [(subsubsection.5.3.1) (subsubsection.6.13.4)] >> endobj 7720 0 obj << /Kids [7626 0 R 7627 0 R 7628 0 R 7629 0 R 7630 0 R 7631 0 R] /Limits [(subsubsection.6.13.5) (subsubsection.6.5.2)] >> endobj 7721 0 obj << /Kids [7632 0 R 7633 0 R 7634 0 R 7635 0 R 7636 0 R 7637 0 R] /Limits [(subsubsection.6.5.3) (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed09c02b9ffff721d3f2dd64c318d7c38b)] >> endobj 7722 0 obj << /Kids [7638 0 R 7639 0 R 7640 0 R 7641 0 R 7642 0 R 7643 0 R] /Limits [(tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed1e503c059ddfe8f4aca37d335f7271f8) (wcs_8h_465ef3c77aaf546324dae0692e6de7fe)] >> endobj 7723 0 obj << /Kids [7644 0 R 7645 0 R 7646 0 R 7647 0 R 7648 0 R 7649 0 R] /Limits [(wcs_8h_4ab38bc642c4656f62c43acf84a849f1) (wcsfix_8h_0399bbea1e28abad3259a8ea05b251831edfc4a839295befd132ce460d253311)] >> endobj 7724 0 obj << /Kids [7650 0 R 7651 0 R 7652 0 R 7653 0 R 7654 0 R 7655 0 R] /Limits [(wcsfix_8h_0399bbea1e28abad3259a8ea05b2518326d787caed068586fbef3d3c0fbce41f) (wcshdr_8h_1b66d50d7f1927222a170bc88f9db51e)] >> endobj 7725 0 obj << /Kids [7656 0 R 7657 0 R 7658 0 R 7659 0 R 7660 0 R 7661 0 R] /Limits [(wcshdr_8h_1d506ef2ad493a963426e0732a6328ca) (wcshdr_8h_fd6d52bed79bd48230f651ac48eb5ca6)] >> endobj 7726 0 obj << /Kids [7662 0 R 7663 0 R 7664 0 R 7665 0 R 7666 0 R 7667 0 R] /Limits [(wcslib_8h) (wcsunits_8h_59e3354bb9908a4841aa478f2dbd3973)] >> endobj 7727 0 obj << /Kids [7668 0 R 7669 0 R 7670 0 R 7671 0 R 7672 0 R 7673 0 R] /Limits [(wcsunits_8h_69241e398126a72e5d095ed3aff156c3) (wcsutil_8h_9d96f343fc444f8c6f1fa01367c4d765)] >> endobj 7728 0 obj << /Kids [7674 0 R] /Limits [(wcsutil_8h_b32722081f8cda184d7ada6d734c637c) (wcsutil_8h_fe7f963c2038673015bbce204c4a8171)] >> endobj 7729 0 obj << /Kids [7675 0 R 7676 0 R 7677 0 R 7678 0 R 7679 0 R 7680 0 R] /Limits [(Doc-Start) (page.16)] >> endobj 7730 0 obj << /Kids [7681 0 R 7682 0 R 7683 0 R 7684 0 R 7685 0 R 7686 0 R] /Limits [(page.160) (paragraph.5.12.2.41)] >> endobj 7731 0 obj << /Kids [7687 0 R 7688 0 R 7689 0 R 7690 0 R 7691 0 R 7692 0 R] /Limits [(paragraph.5.12.2.42) (paragraph.6.11.2.15)] >> endobj 7732 0 obj << /Kids [7693 0 R 7694 0 R 7695 0 R 7696 0 R 7697 0 R 7698 0 R] /Limits [(paragraph.6.11.2.16) (paragraph.6.6.4.36)] >> endobj 7733 0 obj << /Kids [7699 0 R 7700 0 R 7701 0 R 7702 0 R 7703 0 R 7704 0 R] /Limits [(paragraph.6.6.4.37) (prj_8h_c940da0fb0552876fb40a92f82c9625f)] >> endobj 7734 0 obj << /Kids [7705 0 R 7706 0 R 7707 0 R 7708 0 R 7709 0 R 7710 0 R] /Limits [(prj_8h_c983c5a393c5b3f1041f07b2eb95a3a5) (structfitskey_f5bd77eb6d318c562bfe650f6784eb5f)] >> endobj 7735 0 obj << /Kids [7711 0 R 7712 0 R 7713 0 R 7714 0 R 7715 0 R 7716 0 R] /Limits [(structfitskeyid) (structwcsprm_e1f462606974e1324cd38f143eda691e)] >> endobj 7736 0 obj << /Kids [7717 0 R 7718 0 R 7719 0 R 7720 0 R 7721 0 R 7722 0 R] /Limits [(structwcsprm_e352318ce3202dab1b5db8b9ceec7703) (wcs_8h_465ef3c77aaf546324dae0692e6de7fe)] >> endobj 7737 0 obj << /Kids [7723 0 R 7724 0 R 7725 0 R 7726 0 R 7727 0 R 7728 0 R] /Limits [(wcs_8h_4ab38bc642c4656f62c43acf84a849f1) (wcsutil_8h_fe7f963c2038673015bbce204c4a8171)] >> endobj 7738 0 obj << /Kids [7729 0 R 7730 0 R 7731 0 R 7732 0 R 7733 0 R 7734 0 R] /Limits [(Doc-Start) (structfitskey_f5bd77eb6d318c562bfe650f6784eb5f)] >> endobj 7739 0 obj << /Kids [7735 0 R 7736 0 R 7737 0 R] /Limits [(structfitskeyid) (wcsutil_8h_fe7f963c2038673015bbce204c4a8171)] >> endobj 7740 0 obj << /Kids [7738 0 R 7739 0 R] /Limits [(Doc-Start) (wcsutil_8h_fe7f963c2038673015bbce204c4a8171)] >> endobj 7741 0 obj << /Dests 7740 0 R >> endobj 7742 0 obj << /Type /Catalog /Pages 7354 0 R /Outlines 7355 0 R /Names 7741 0 R /PageMode/UseOutlines/PageLabels << /Nums [0 << /S /D >> 1 << /S /r >> 5 << /S /D >> ] >> /OpenAction 589 0 R >> endobj 7743 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords() /CreationDate (D:20120206104214+11'00') /ModDate (D:20120206104214+11'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6) >> endobj xref 0 7744 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000004 00000 f 0000000000 00000 f 0000000015 00000 n 0000061879 00000 n 0001455351 00000 n 0000000060 00000 n 0000000233 00000 n 0000062048 00000 n 0001455279 00000 n 0000000283 00000 n 0000000350 00000 n 0000062161 00000 n 0001455206 00000 n 0000000401 00000 n 0000000473 00000 n 0000069523 00000 n 0001455118 00000 n 0000000519 00000 n 0000000624 00000 n 0000090225 00000 n 0001454992 00000 n 0000000670 00000 n 0000000803 00000 n 0000090282 00000 n 0001454931 00000 n 0000000854 00000 n 0000000959 00000 n 0000090339 00000 n 0001454805 00000 n 0000001005 00000 n 0000001085 00000 n 0000090396 00000 n 0001454744 00000 n 0000001136 00000 n 0000001211 00000 n 0000098130 00000 n 0001454615 00000 n 0000001257 00000 n 0000001430 00000 n 0000098246 00000 n 0001454504 00000 n 0000001481 00000 n 0000001629 00000 n 0000098362 00000 n 0001454430 00000 n 0000001685 00000 n 0000001815 00000 n 0000104238 00000 n 0001454356 00000 n 0000001871 00000 n 0000001996 00000 n 0000109328 00000 n 0001454232 00000 n 0000002047 00000 n 0000002200 00000 n 0000115056 00000 n 0001454158 00000 n 0000002256 00000 n 0000002386 00000 n 0000115113 00000 n 0001454084 00000 n 0000002442 00000 n 0000002567 00000 n 0000128887 00000 n 0001453960 00000 n 0000002618 00000 n 0000002781 00000 n 0000129003 00000 n 0001453886 00000 n 0000002837 00000 n 0000002967 00000 n 0000129060 00000 n 0001453812 00000 n 0000003023 00000 n 0000003148 00000 n 0000135385 00000 n 0001453688 00000 n 0000003199 00000 n 0000003347 00000 n 0000135501 00000 n 0001453614 00000 n 0000003403 00000 n 0000003533 00000 n 0000139135 00000 n 0001453540 00000 n 0000003589 00000 n 0000003714 00000 n 0000149936 00000 n 0001453415 00000 n 0000003765 00000 n 0000003913 00000 n 0000150052 00000 n 0001453341 00000 n 0000003969 00000 n 0000004099 00000 n 0000154256 00000 n 0001453266 00000 n 0000004155 00000 n 0000004281 00000 n 0000164239 00000 n 0001453136 00000 n 0000004333 00000 n 0000004482 00000 n 0000164356 00000 n 0001453057 00000 n 0000004539 00000 n 0000004670 00000 n 0000164413 00000 n 0001452978 00000 n 0000004727 00000 n 0000004853 00000 n 0000164897 00000 n 0001452847 00000 n 0000004905 00000 n 0000005054 00000 n 0000165012 00000 n 0001452768 00000 n 0000005111 00000 n 0000005242 00000 n 0000170372 00000 n 0001452689 00000 n 0000005299 00000 n 0000005425 00000 n 0000170857 00000 n 0001452558 00000 n 0000005477 00000 n 0000005626 00000 n 0000170974 00000 n 0001452479 00000 n 0000005683 00000 n 0000005814 00000 n 0000174686 00000 n 0001452400 00000 n 0000005871 00000 n 0000005997 00000 n 0000187478 00000 n 0001452269 00000 n 0000006049 00000 n 0000006198 00000 n 0000192180 00000 n 0001452190 00000 n 0000006255 00000 n 0000006386 00000 n 0000192238 00000 n 0001452111 00000 n 0000006443 00000 n 0000006569 00000 n 0000202264 00000 n 0001451980 00000 n 0000006622 00000 n 0000006771 00000 n 0000210144 00000 n 0001451901 00000 n 0000006829 00000 n 0000006960 00000 n 0000210202 00000 n 0001451822 00000 n 0000007018 00000 n 0000007144 00000 n 0000225133 00000 n 0001451691 00000 n 0000007197 00000 n 0000007346 00000 n 0000229651 00000 n 0001451612 00000 n 0000007404 00000 n 0000007535 00000 n 0000229709 00000 n 0001451533 00000 n 0000007593 00000 n 0000007719 00000 n 0000230429 00000 n 0001451402 00000 n 0000007772 00000 n 0000007921 00000 n 0000251604 00000 n 0001451323 00000 n 0000007979 00000 n 0000008110 00000 n 0000251662 00000 n 0001451244 00000 n 0000008168 00000 n 0000008294 00000 n 0000297465 00000 n 0001451127 00000 n 0000008347 00000 n 0000008496 00000 n 0000303201 00000 n 0001451048 00000 n 0000008554 00000 n 0000008685 00000 n 0000303259 00000 n 0001450969 00000 n 0000008743 00000 n 0000008869 00000 n 0000307682 00000 n 0001450850 00000 n 0000008916 00000 n 0000009037 00000 n 0000307799 00000 n 0001450732 00000 n 0000009089 00000 n 0000009223 00000 n 0000321616 00000 n 0001450653 00000 n 0000009280 00000 n 0000009411 00000 n 0000321674 00000 n 0001450560 00000 n 0000009468 00000 n 0000009599 00000 n 0000325142 00000 n 0001450467 00000 n 0000009656 00000 n 0000009840 00000 n 0000325766 00000 n 0001450374 00000 n 0000009897 00000 n 0000010038 00000 n 0000333513 00000 n 0001450295 00000 n 0000010095 00000 n 0000010236 00000 n 0000338127 00000 n 0001450163 00000 n 0000010288 00000 n 0000010442 00000 n 0000342293 00000 n 0001450084 00000 n 0000010499 00000 n 0000010630 00000 n 0000342351 00000 n 0001449991 00000 n 0000010687 00000 n 0000010818 00000 n 0000347680 00000 n 0001449898 00000 n 0000010875 00000 n 0000011011 00000 n 0000347856 00000 n 0001449805 00000 n 0000011068 00000 n 0000011209 00000 n 0000356887 00000 n 0001449726 00000 n 0000011266 00000 n 0000011407 00000 n 0000357126 00000 n 0001449594 00000 n 0000011459 00000 n 0000011623 00000 n 0000357302 00000 n 0001449515 00000 n 0000011680 00000 n 0000011811 00000 n 0000357359 00000 n 0001449436 00000 n 0000011868 00000 n 0000012009 00000 n 0000363899 00000 n 0001449304 00000 n 0000012061 00000 n 0000012195 00000 n 0000378802 00000 n 0001449225 00000 n 0000012252 00000 n 0000012383 00000 n 0000378860 00000 n 0001449132 00000 n 0000012440 00000 n 0000012571 00000 n 0000383857 00000 n 0001449039 00000 n 0000012628 00000 n 0000012812 00000 n 0000384289 00000 n 0001448946 00000 n 0000012869 00000 n 0000013010 00000 n 0000398602 00000 n 0001448867 00000 n 0000013067 00000 n 0000013208 00000 n 0000403127 00000 n 0001448735 00000 n 0000013260 00000 n 0000013394 00000 n 0000403361 00000 n 0001448656 00000 n 0000013451 00000 n 0000013582 00000 n 0000403419 00000 n 0001448563 00000 n 0000013639 00000 n 0000013823 00000 n 0000405565 00000 n 0001448470 00000 n 0000013880 00000 n 0000014021 00000 n 0000410300 00000 n 0001448391 00000 n 0000014078 00000 n 0000014219 00000 n 0000410539 00000 n 0001448259 00000 n 0000014271 00000 n 0000014405 00000 n 0000460930 00000 n 0001448180 00000 n 0000014462 00000 n 0000014593 00000 n 0000477773 00000 n 0001448087 00000 n 0000014650 00000 n 0000014781 00000 n 0000481572 00000 n 0001447994 00000 n 0000014838 00000 n 0000015022 00000 n 0000482068 00000 n 0001447901 00000 n 0000015079 00000 n 0000015220 00000 n 0000540204 00000 n 0001447822 00000 n 0000015277 00000 n 0000015418 00000 n 0000545950 00000 n 0001447690 00000 n 0000015470 00000 n 0000015604 00000 n 0000561644 00000 n 0001447611 00000 n 0000015661 00000 n 0000015792 00000 n 0000565743 00000 n 0001447518 00000 n 0000015849 00000 n 0000015980 00000 n 0000569881 00000 n 0001447425 00000 n 0000016037 00000 n 0000016221 00000 n 0000570439 00000 n 0001447332 00000 n 0000016278 00000 n 0000016419 00000 n 0000596643 00000 n 0001447253 00000 n 0000016476 00000 n 0000016617 00000 n 0000596881 00000 n 0001447121 00000 n 0000016669 00000 n 0000016803 00000 n 0000599902 00000 n 0001447042 00000 n 0000016860 00000 n 0000016991 00000 n 0000599960 00000 n 0001446963 00000 n 0000017048 00000 n 0000017189 00000 n 0000608080 00000 n 0001446831 00000 n 0000017241 00000 n 0000017375 00000 n 0000624982 00000 n 0001446752 00000 n 0000017432 00000 n 0000017563 00000 n 0000627693 00000 n 0001446659 00000 n 0000017620 00000 n 0000017751 00000 n 0000627991 00000 n 0001446566 00000 n 0000017808 00000 n 0000017992 00000 n 0000628487 00000 n 0001446473 00000 n 0000018049 00000 n 0000018190 00000 n 0000649922 00000 n 0001446394 00000 n 0000018247 00000 n 0000018388 00000 n 0000650157 00000 n 0001446262 00000 n 0000018441 00000 n 0000018575 00000 n 0000664819 00000 n 0001446183 00000 n 0000018633 00000 n 0000018764 00000 n 0000664877 00000 n 0001446090 00000 n 0000018822 00000 n 0000018953 00000 n 0000669588 00000 n 0001445997 00000 n 0000019011 00000 n 0000019195 00000 n 0000670143 00000 n 0001445904 00000 n 0000019253 00000 n 0000019394 00000 n 0000687919 00000 n 0001445825 00000 n 0000019452 00000 n 0000019593 00000 n 0000688157 00000 n 0001445693 00000 n 0000019646 00000 n 0000019780 00000 n 0000714710 00000 n 0001445614 00000 n 0000019838 00000 n 0000019969 00000 n 0000719729 00000 n 0001445521 00000 n 0000020027 00000 n 0000020158 00000 n 0000727243 00000 n 0001445428 00000 n 0000020216 00000 n 0000020400 00000 n 0000728314 00000 n 0001445335 00000 n 0000020458 00000 n 0000020599 00000 n 0000766950 00000 n 0001445256 00000 n 0000020657 00000 n 0000020798 00000 n 0000767186 00000 n 0001445124 00000 n 0000020851 00000 n 0000021000 00000 n 0000771612 00000 n 0001445045 00000 n 0000021058 00000 n 0000021189 00000 n 0000771670 00000 n 0001444952 00000 n 0000021247 00000 n 0000021378 00000 n 0000772082 00000 n 0001444873 00000 n 0000021436 00000 n 0000021577 00000 n 0000780824 00000 n 0001444741 00000 n 0000021630 00000 n 0000021779 00000 n 0000800335 00000 n 0001444662 00000 n 0000021837 00000 n 0000021968 00000 n 0000804536 00000 n 0001444569 00000 n 0000022026 00000 n 0000022157 00000 n 0000805570 00000 n 0001444476 00000 n 0000022215 00000 n 0000022399 00000 n 0000810855 00000 n 0001444383 00000 n 0000022457 00000 n 0000022598 00000 n 0000825839 00000 n 0001444304 00000 n 0000022656 00000 n 0000022797 00000 n 0000826077 00000 n 0001444172 00000 n 0000022850 00000 n 0000022999 00000 n 0000853494 00000 n 0001444093 00000 n 0000023057 00000 n 0000023188 00000 n 0000861812 00000 n 0001444000 00000 n 0000023246 00000 n 0000023377 00000 n 0000881311 00000 n 0001443907 00000 n 0000023435 00000 n 0000023619 00000 n 0000881871 00000 n 0001443814 00000 n 0000023677 00000 n 0000023818 00000 n 0000958517 00000 n 0001443735 00000 n 0000023876 00000 n 0000024017 00000 n 0000958757 00000 n 0001443603 00000 n 0000024070 00000 n 0000024219 00000 n 0000961509 00000 n 0001443538 00000 n 0000024277 00000 n 0000024408 00000 n 0000961626 00000 n 0001443406 00000 n 0000024461 00000 n 0000024615 00000 n 0000961743 00000 n 0001443327 00000 n 0000024673 00000 n 0000024804 00000 n 0000961801 00000 n 0001443248 00000 n 0000024862 00000 n 0000024993 00000 n 0000967565 00000 n 0001443116 00000 n 0000025046 00000 n 0000025210 00000 n 0000967741 00000 n 0001443037 00000 n 0000025268 00000 n 0000025399 00000 n 0000973316 00000 n 0001442944 00000 n 0000025457 00000 n 0000025588 00000 n 0000973492 00000 n 0001442865 00000 n 0000025646 00000 n 0000025787 00000 n 0000977760 00000 n 0001442733 00000 n 0000025840 00000 n 0000025994 00000 n 0000981954 00000 n 0001442654 00000 n 0000026052 00000 n 0000026183 00000 n 0000982012 00000 n 0001442561 00000 n 0000026241 00000 n 0000026372 00000 n 0000982188 00000 n 0001442482 00000 n 0000026430 00000 n 0000026571 00000 n 0000986775 00000 n 0001442350 00000 n 0000026624 00000 n 0000026783 00000 n 0000999884 00000 n 0001442271 00000 n 0000026841 00000 n 0000026972 00000 n 0001007958 00000 n 0001442178 00000 n 0000027030 00000 n 0000027161 00000 n 0001017207 00000 n 0001442085 00000 n 0000027219 00000 n 0000027403 00000 n 0001020992 00000 n 0001441992 00000 n 0000027461 00000 n 0000027602 00000 n 0001031307 00000 n 0001441913 00000 n 0000027660 00000 n 0000027801 00000 n 0001036149 00000 n 0001441795 00000 n 0000027854 00000 n 0000028008 00000 n 0001036266 00000 n 0001441716 00000 n 0000028066 00000 n 0000028197 00000 n 0001036324 00000 n 0001441637 00000 n 0000028255 00000 n 0000028396 00000 n 0000028702 00000 n 0000028935 00000 n 0000028448 00000 n 0000028821 00000 n 0000028878 00000 n 0001435994 00000 n 0001436350 00000 n 0000030384 00000 n 0000030534 00000 n 0000030690 00000 n 0000030847 00000 n 0000030998 00000 n 0000031148 00000 n 0000031305 00000 n 0000031455 00000 n 0000031612 00000 n 0000031763 00000 n 0000031919 00000 n 0000032081 00000 n 0000032243 00000 n 0000032400 00000 n 0000032562 00000 n 0000032724 00000 n 0000032880 00000 n 0000033041 00000 n 0000033203 00000 n 0000033360 00000 n 0000033522 00000 n 0000033684 00000 n 0000033841 00000 n 0000034002 00000 n 0000034164 00000 n 0000034321 00000 n 0000034483 00000 n 0000034644 00000 n 0000034801 00000 n 0000034963 00000 n 0000035125 00000 n 0000035282 00000 n 0000035444 00000 n 0000037196 00000 n 0000035717 00000 n 0000029989 00000 n 0000029007 00000 n 0000035603 00000 n 0001435637 00000 n 0000035660 00000 n 0000037353 00000 n 0000037515 00000 n 0000037677 00000 n 0000037835 00000 n 0000037998 00000 n 0000038161 00000 n 0000038318 00000 n 0000038481 00000 n 0000038644 00000 n 0000038802 00000 n 0000038965 00000 n 0000039128 00000 n 0000039286 00000 n 0000039449 00000 n 0000039612 00000 n 0000039763 00000 n 0000039920 00000 n 0000040082 00000 n 0000040244 00000 n 0000040406 00000 n 0000040566 00000 n 0000040728 00000 n 0000040885 00000 n 0000041047 00000 n 0000041209 00000 n 0000041370 00000 n 0000041531 00000 n 0000041693 00000 n 0000041850 00000 n 0000042012 00000 n 0000042174 00000 n 0000042331 00000 n 0000042492 00000 n 0000042654 00000 n 0000042816 00000 n 0000044443 00000 n 0000043034 00000 n 0000036777 00000 n 0000035802 00000 n 0000042977 00000 n 0000044604 00000 n 0000044761 00000 n 0000044923 00000 n 0000045085 00000 n 0000045247 00000 n 0000045409 00000 n 0000045565 00000 n 0000045727 00000 n 0000045889 00000 n 0000046051 00000 n 0000046213 00000 n 0000046375 00000 n 0000046531 00000 n 0000046693 00000 n 0000046855 00000 n 0000047017 00000 n 0000047178 00000 n 0000047340 00000 n 0000047497 00000 n 0000047659 00000 n 0000047821 00000 n 0000047978 00000 n 0000048139 00000 n 0000048301 00000 n 0000048463 00000 n 0000048625 00000 n 0000048787 00000 n 0000048945 00000 n 0000049107 00000 n 0000049269 00000 n 0000049432 00000 n 0000049595 00000 n 0000049757 00000 n 0000049915 00000 n 0000050078 00000 n 0000051705 00000 n 0000050298 00000 n 0000044024 00000 n 0000043119 00000 n 0000050241 00000 n 0000051868 00000 n 0000052031 00000 n 0000052194 00000 n 0000052352 00000 n 0000052515 00000 n 0000052678 00000 n 0000052840 00000 n 0000052998 00000 n 0000053161 00000 n 0000053324 00000 n 0000053487 00000 n 0000053650 00000 n 0000053813 00000 n 0000053971 00000 n 0000054134 00000 n 0000054297 00000 n 0000054460 00000 n 0000054623 00000 n 0000054786 00000 n 0000054944 00000 n 0000055107 00000 n 0000055265 00000 n 0000055427 00000 n 0000055590 00000 n 0000055748 00000 n 0000055911 00000 n 0000056074 00000 n 0000056237 00000 n 0000056394 00000 n 0000056556 00000 n 0000056719 00000 n 0000056882 00000 n 0000057039 00000 n 0000057202 00000 n 0000057365 00000 n 0000059431 00000 n 0000057585 00000 n 0000051286 00000 n 0000050383 00000 n 0000057528 00000 n 0000059593 00000 n 0000059756 00000 n 0000059914 00000 n 0000060077 00000 n 0000060240 00000 n 0000060387 00000 n 0000060537 00000 n 0000060687 00000 n 0000060836 00000 n 0000060984 00000 n 0000061137 00000 n 0000061284 00000 n 0000061433 00000 n 0000061582 00000 n 0000061731 00000 n 0000063471 00000 n 0000063651 00000 n 0000062217 00000 n 0000059172 00000 n 0000057670 00000 n 0000061934 00000 n 0000061991 00000 n 0000062104 00000 n 0001435463 00000 n 0001303586 00000 n 0001303554 00000 n 0001303522 00000 n 0001303490 00000 n 0001303458 00000 n 0001303426 00000 n 0001303394 00000 n 0001303362 00000 n 0001303330 00000 n 0001303298 00000 n 0001303266 00000 n 0000063832 00000 n 0000064014 00000 n 0000064195 00000 n 0000064377 00000 n 0000064559 00000 n 0000064740 00000 n 0000064922 00000 n 0000065103 00000 n 0000065284 00000 n 0000065470 00000 n 0000065651 00000 n 0000065832 00000 n 0000066014 00000 n 0000066194 00000 n 0000066376 00000 n 0000066558 00000 n 0000066740 00000 n 0000066922 00000 n 0000067103 00000 n 0000067285 00000 n 0000067467 00000 n 0000067649 00000 n 0000067830 00000 n 0000068012 00000 n 0000068194 00000 n 0000068376 00000 n 0000068558 00000 n 0000068740 00000 n 0000068922 00000 n 0000069104 00000 n 0000069285 00000 n 0000072014 00000 n 0000072196 00000 n 0000072378 00000 n 0000072560 00000 n 0000072742 00000 n 0000072923 00000 n 0000073104 00000 n 0000073285 00000 n 0000073467 00000 n 0000073649 00000 n 0000073829 00000 n 0000074011 00000 n 0000070657 00000 n 0000063076 00000 n 0000062315 00000 n 0000069466 00000 n 0000069579 00000 n 0000069636 00000 n 0000069693 00000 n 0000069750 00000 n 0000069807 00000 n 0000069864 00000 n 0000069921 00000 n 0001436170 00000 n 0000069978 00000 n 0000070035 00000 n 0000070092 00000 n 0000070149 00000 n 0000070206 00000 n 0000070263 00000 n 0000070320 00000 n 0000070373 00000 n 0000070430 00000 n 0000070487 00000 n 0000070544 00000 n 0000070601 00000 n 0001436468 00000 n 0000321850 00000 n 0000333571 00000 n 0000321972 00000 n 0000322089 00000 n 0000322206 00000 n 0000322323 00000 n 0000342894 00000 n 0000379036 00000 n 0000398660 00000 n 0000379158 00000 n 0000379275 00000 n 0000379391 00000 n 0000383506 00000 n 0000383623 00000 n 0000383740 00000 n 0000478316 00000 n 0000540262 00000 n 0000478438 00000 n 0000478555 00000 n 0000478672 00000 n 0000074193 00000 n 0000074375 00000 n 0000074557 00000 n 0000074739 00000 n 0000074920 00000 n 0000075102 00000 n 0000075284 00000 n 0000075466 00000 n 0000075647 00000 n 0000075828 00000 n 0000076010 00000 n 0000076192 00000 n 0000076374 00000 n 0000076555 00000 n 0000076737 00000 n 0000076919 00000 n 0000077100 00000 n 0000077282 00000 n 0000077463 00000 n 0000077644 00000 n 0000077825 00000 n 0000078007 00000 n 0000078188 00000 n 0000078370 00000 n 0000078550 00000 n 0000078732 00000 n 0000078914 00000 n 0000079096 00000 n 0000079278 00000 n 0000079460 00000 n 0000079642 00000 n 0000079824 00000 n 0000080004 00000 n 0000080185 00000 n 0000081676 00000 n 0000071515 00000 n 0000070755 00000 n 0000080368 00000 n 0000080425 00000 n 0000080482 00000 n 0000080539 00000 n 0000080596 00000 n 0000080652 00000 n 0000080709 00000 n 0000080766 00000 n 0000080823 00000 n 0000080880 00000 n 0000080937 00000 n 0000080994 00000 n 0000081051 00000 n 0000081108 00000 n 0000081165 00000 n 0000081221 00000 n 0000081278 00000 n 0000081335 00000 n 0000081391 00000 n 0000081448 00000 n 0000081505 00000 n 0000081562 00000 n 0000081619 00000 n 0000478789 00000 n 0000565919 00000 n 0000596701 00000 n 0000569413 00000 n 0000569530 00000 n 0000569647 00000 n 0000569764 00000 n 0000665053 00000 n 0000687977 00000 n 0000665175 00000 n 0000665292 00000 n 0000665409 00000 n 0000665526 00000 n 0000669354 00000 n 0000669471 00000 n 0000720760 00000 n 0000767008 00000 n 0000720882 00000 n 0000720999 00000 n 0000724595 00000 n 0000724712 00000 n 0000724829 00000 n 0000724946 00000 n 0000725063 00000 n 0000725180 00000 n 0000805448 00000 n 0000825897 00000 n 0000083339 00000 n 0000083494 00000 n 0000083651 00000 n 0000083807 00000 n 0000083964 00000 n 0000084122 00000 n 0000084279 00000 n 0000084434 00000 n 0000084591 00000 n 0000084745 00000 n 0000084902 00000 n 0000085057 00000 n 0000085214 00000 n 0000085369 00000 n 0000085526 00000 n 0000085681 00000 n 0000085837 00000 n 0000085992 00000 n 0000086149 00000 n 0000086303 00000 n 0000086460 00000 n 0000086615 00000 n 0000086773 00000 n 0000086928 00000 n 0000087086 00000 n 0000087241 00000 n 0000087398 00000 n 0000087547 00000 n 0000087704 00000 n 0000087857 00000 n 0000088014 00000 n 0000088169 00000 n 0000088326 00000 n 0000088475 00000 n 0000088633 00000 n 0000088783 00000 n 0000088941 00000 n 0000089090 00000 n 0000089247 00000 n 0000089397 00000 n 0000089555 00000 n 0000089705 00000 n 0000089862 00000 n 0000090011 00000 n 0000092267 00000 n 0000092416 00000 n 0000090452 00000 n 0000082842 00000 n 0000081761 00000 n 0000090166 00000 n 0000098187 00000 n 0000109270 00000 n 0000128823 00000 n 0000135321 00000 n 0000149877 00000 n 0000160728 00000 n 0000164835 00000 n 0000170793 00000 n 0000187414 00000 n 0000202205 00000 n 0000225069 00000 n 0000230365 00000 n 0000297401 00000 n 0000307740 00000 n 0000333688 00000 n 0000357063 00000 n 0000363835 00000 n 0000398777 00000 n 0000410476 00000 n 0000545886 00000 n 0000596818 00000 n 0000608017 00000 n 0000092574 00000 n 0000092724 00000 n 0000092882 00000 n 0000093034 00000 n 0000093191 00000 n 0000093344 00000 n 0000093502 00000 n 0000093655 00000 n 0000093813 00000 n 0000093966 00000 n 0000094124 00000 n 0000094278 00000 n 0000094436 00000 n 0000094592 00000 n 0000094750 00000 n 0000094904 00000 n 0000095062 00000 n 0000095217 00000 n 0000095375 00000 n 0000095529 00000 n 0000095687 00000 n 0000095875 00000 n 0000096064 00000 n 0000096253 00000 n 0000096441 00000 n 0000096629 00000 n 0000096785 00000 n 0000096974 00000 n 0000097163 00000 n 0000097350 00000 n 0000097539 00000 n 0000097694 00000 n 0000097882 00000 n 0000098419 00000 n 0000091818 00000 n 0000090551 00000 n 0000098071 00000 n 0001434153 00000 n 0000098303 00000 n 0001435026 00000 n 0000650098 00000 n 0000688094 00000 n 0000767123 00000 n 0000780765 00000 n 0000826014 00000 n 0000958693 00000 n 0000961567 00000 n 0000967501 00000 n 0000977702 00000 n 0000986716 00000 n 0001032912 00000 n 0000104295 00000 n 0000104413 00000 n 0000104535 00000 n 0000104658 00000 n 0000104781 00000 n 0000108540 00000 n 0000108661 00000 n 0000108784 00000 n 0000108907 00000 n 0000109025 00000 n 0000109148 00000 n 0000101228 00000 n 0000101416 00000 n 0000101603 00000 n 0000101791 00000 n 0000101978 00000 n 0000102165 00000 n 0000102354 00000 n 0000102543 00000 n 0000102731 00000 n 0000102920 00000 n 0000103109 00000 n 0000103290 00000 n 0000103472 00000 n 0000103661 00000 n 0000103844 00000 n 0000104027 00000 n 0000104903 00000 n 0000100950 00000 n 0000098559 00000 n 0000104179 00000 n 0000104354 00000 n 0000104476 00000 n 0001434592 00000 n 0001434737 00000 n 0000104599 00000 n 0000104722 00000 n 0000104844 00000 n 0000154431 00000 n 0000154554 00000 n 0000154677 00000 n 0000154800 00000 n 0000154923 00000 n 0000330088 00000 n 0000482126 00000 n 0000107958 00000 n 0000108146 00000 n 0000108295 00000 n 0000111351 00000 n 0000109385 00000 n 0000107797 00000 n 0000105055 00000 n 0000108481 00000 n 0000108602 00000 n 0000108725 00000 n 0001435172 00000 n 0000108848 00000 n 0000108966 00000 n 0000109089 00000 n 0000109211 00000 n 0000772140 00000 n 0000111541 00000 n 0000111729 00000 n 0000111919 00000 n 0000112108 00000 n 0000112298 00000 n 0000112487 00000 n 0000112677 00000 n 0000112864 00000 n 0000113053 00000 n 0000113243 00000 n 0000113433 00000 n 0000113623 00000 n 0000113813 00000 n 0000114002 00000 n 0000114191 00000 n 0000114380 00000 n 0000114566 00000 n 0000114753 00000 n 0000115596 00000 n 0000111045 00000 n 0000109552 00000 n 0000114938 00000 n 0000114997 00000 n 0000115170 00000 n 0000115228 00000 n 0000115286 00000 n 0000115350 00000 n 0000115409 00000 n 0000115473 00000 n 0000115532 00000 n 0001436590 00000 n 0000117950 00000 n 0000123141 00000 n 0000123259 00000 n 0000347738 00000 n 0000123382 00000 n 0000123505 00000 n 0000123626 00000 n 0000123749 00000 n 0000123871 00000 n 0000123994 00000 n 0000128578 00000 n 0000128701 00000 n 0000347914 00000 n 0000117455 00000 n 0000117642 00000 n 0000118073 00000 n 0000117302 00000 n 0000115695 00000 n 0000117832 00000 n 0000117891 00000 n 0000118014 00000 n 0000120054 00000 n 0000120243 00000 n 0000120430 00000 n 0000120620 00000 n 0000120810 00000 n 0000121000 00000 n 0000121188 00000 n 0000121377 00000 n 0000121567 00000 n 0000121756 00000 n 0000121946 00000 n 0000122136 00000 n 0000122326 00000 n 0000122516 00000 n 0000122706 00000 n 0000122894 00000 n 0000124057 00000 n 0000119775 00000 n 0000118199 00000 n 0000123082 00000 n 0000123200 00000 n 0000123323 00000 n 0000123446 00000 n 0000123567 00000 n 0000123690 00000 n 0000123812 00000 n 0000123935 00000 n 0000126187 00000 n 0000126376 00000 n 0000126565 00000 n 0000126754 00000 n 0000126942 00000 n 0000127131 00000 n 0000127320 00000 n 0000127512 00000 n 0000127704 00000 n 0000127896 00000 n 0000128082 00000 n 0000128274 00000 n 0000129298 00000 n 0000125944 00000 n 0000124183 00000 n 0000128460 00000 n 0000128519 00000 n 0000128642 00000 n 0000128765 00000 n 0000128944 00000 n 0000129117 00000 n 0000129176 00000 n 0000129235 00000 n 0000135198 00000 n 0000131189 00000 n 0000131346 00000 n 0000131533 00000 n 0000131722 00000 n 0000131910 00000 n 0000132099 00000 n 0000132287 00000 n 0000132476 00000 n 0000132665 00000 n 0000132853 00000 n 0000133042 00000 n 0000133231 00000 n 0000133385 00000 n 0000133572 00000 n 0000133761 00000 n 0000133949 00000 n 0000134138 00000 n 0000134326 00000 n 0000134515 00000 n 0000134703 00000 n 0000134892 00000 n 0000135558 00000 n 0000130865 00000 n 0000129424 00000 n 0000135080 00000 n 0000135139 00000 n 0000135262 00000 n 0000135442 00000 n 0000139192 00000 n 0000139310 00000 n 0000139433 00000 n 0000139556 00000 n 0000139679 00000 n 0000141704 00000 n 0000141822 00000 n 0000141944 00000 n 0000142067 00000 n 0000142190 00000 n 0000142313 00000 n 0000142435 00000 n 0000142558 00000 n 0000142681 00000 n 0000142804 00000 n 0000142927 00000 n 0000143050 00000 n 0000149755 00000 n 0000137785 00000 n 0000137973 00000 n 0000138161 00000 n 0000138349 00000 n 0000138532 00000 n 0000138713 00000 n 0000138895 00000 n 0000139742 00000 n 0000137587 00000 n 0000135698 00000 n 0000139076 00000 n 0000139251 00000 n 0000139374 00000 n 0000139497 00000 n 0000139620 00000 n 0000394869 00000 n 0000384347 00000 n 0000141211 00000 n 0000141400 00000 n 0000143114 00000 n 0000141058 00000 n 0000139868 00000 n 0000141586 00000 n 0000141645 00000 n 0000141763 00000 n 0000141885 00000 n 0000142008 00000 n 0000142131 00000 n 0000142254 00000 n 0000142376 00000 n 0000142499 00000 n 0000142622 00000 n 0000142745 00000 n 0000142868 00000 n 0000142991 00000 n 0001436715 00000 n 0000144960 00000 n 0000145149 00000 n 0000145338 00000 n 0000145527 00000 n 0000145716 00000 n 0000145905 00000 n 0000146092 00000 n 0000146281 00000 n 0000146470 00000 n 0000146659 00000 n 0000146847 00000 n 0000147036 00000 n 0000147225 00000 n 0000147412 00000 n 0000147600 00000 n 0000147789 00000 n 0000147978 00000 n 0000148166 00000 n 0000148321 00000 n 0000148509 00000 n 0000148698 00000 n 0000148885 00000 n 0000149074 00000 n 0000149262 00000 n 0000149450 00000 n 0000152703 00000 n 0000150109 00000 n 0000144600 00000 n 0000143240 00000 n 0000149637 00000 n 0000149696 00000 n 0000149818 00000 n 0000149993 00000 n 0000154313 00000 n 0000155046 00000 n 0000155168 00000 n 0000156821 00000 n 0000156944 00000 n 0000157067 00000 n 0000157190 00000 n 0000157313 00000 n 0000157436 00000 n 0000159509 00000 n 0000159632 00000 n 0000159755 00000 n 0000159878 00000 n 0000160001 00000 n 0000160124 00000 n 0000160241 00000 n 0000160364 00000 n 0000160482 00000 n 0000160605 00000 n 0000152891 00000 n 0000153079 00000 n 0000153267 00000 n 0000153455 00000 n 0000153642 00000 n 0000153825 00000 n 0000154014 00000 n 0000155231 00000 n 0000152496 00000 n 0000150249 00000 n 0000154197 00000 n 0000154372 00000 n 0000154495 00000 n 0000154618 00000 n 0000154741 00000 n 0000154864 00000 n 0000154987 00000 n 0000155109 00000 n 0000487168 00000 n 0000157499 00000 n 0000156580 00000 n 0000155397 00000 n 0000156703 00000 n 0000156762 00000 n 0000156885 00000 n 0000157008 00000 n 0000157131 00000 n 0000157254 00000 n 0000157377 00000 n 0000159205 00000 n 0000160792 00000 n 0000159061 00000 n 0000157611 00000 n 0000159391 00000 n 0000159450 00000 n 0000159573 00000 n 0000159696 00000 n 0000159819 00000 n 0000159942 00000 n 0000160065 00000 n 0000160182 00000 n 0000160305 00000 n 0000160423 00000 n 0000160546 00000 n 0000160669 00000 n 0000162373 00000 n 0000162562 00000 n 0000162751 00000 n 0000162939 00000 n 0000163122 00000 n 0000163278 00000 n 0000163466 00000 n 0000163655 00000 n 0000163844 00000 n 0000164025 00000 n 0000165070 00000 n 0000162148 00000 n 0000160958 00000 n 0000164180 00000 n 0000164297 00000 n 0000164471 00000 n 0000164530 00000 n 0000164589 00000 n 0000164653 00000 n 0000164712 00000 n 0000164776 00000 n 0000164955 00000 n 0000750709 00000 n 0000170430 00000 n 0000170548 00000 n 0000170670 00000 n 0000166960 00000 n 0000167142 00000 n 0000167331 00000 n 0000167520 00000 n 0000167708 00000 n 0000167897 00000 n 0000168086 00000 n 0000168275 00000 n 0000168464 00000 n 0000168653 00000 n 0000168842 00000 n 0000169031 00000 n 0000169186 00000 n 0000169374 00000 n 0000169563 00000 n 0000169751 00000 n 0000169938 00000 n 0000170125 00000 n 0000173136 00000 n 0000171031 00000 n 0000166663 00000 n 0000165196 00000 n 0000170313 00000 n 0000170489 00000 n 0000170611 00000 n 0000170734 00000 n 0000170915 00000 n 0001436840 00000 n 0000174744 00000 n 0000174862 00000 n 0000174985 00000 n 0000175107 00000 n 0000175230 00000 n 0000175353 00000 n 0000175476 00000 n 0000178148 00000 n 0000178271 00000 n 0000178394 00000 n 0000178512 00000 n 0000178635 00000 n 0000178758 00000 n 0000178876 00000 n 0000178999 00000 n 0000187291 00000 n 0000173324 00000 n 0000173512 00000 n 0000173700 00000 n 0000173888 00000 n 0000174076 00000 n 0000174263 00000 n 0000174446 00000 n 0000175599 00000 n 0000172929 00000 n 0000171171 00000 n 0000174627 00000 n 0000174803 00000 n 0000174926 00000 n 0000175049 00000 n 0000175171 00000 n 0000175294 00000 n 0000175417 00000 n 0000175540 00000 n 0001434300 00000 n 0000574548 00000 n 0000177576 00000 n 0000177758 00000 n 0000177941 00000 n 0000179062 00000 n 0000177414 00000 n 0000175739 00000 n 0000178089 00000 n 0000178212 00000 n 0000178335 00000 n 0000178453 00000 n 0000178576 00000 n 0000178699 00000 n 0000178817 00000 n 0000178940 00000 n 0001435317 00000 n 0000180801 00000 n 0000180950 00000 n 0000181139 00000 n 0000181328 00000 n 0000181516 00000 n 0000181705 00000 n 0000181894 00000 n 0000182082 00000 n 0000182271 00000 n 0000182459 00000 n 0000182648 00000 n 0000182836 00000 n 0000183024 00000 n 0000183213 00000 n 0000183401 00000 n 0000183590 00000 n 0000183778 00000 n 0000183967 00000 n 0000184156 00000 n 0000184345 00000 n 0000184534 00000 n 0000184723 00000 n 0000184912 00000 n 0000185101 00000 n 0000185290 00000 n 0000185479 00000 n 0000185668 00000 n 0000185857 00000 n 0000186045 00000 n 0000186234 00000 n 0000186422 00000 n 0000186611 00000 n 0000186799 00000 n 0000186986 00000 n 0000189523 00000 n 0000189711 00000 n 0000189900 00000 n 0000187595 00000 n 0000180360 00000 n 0000179244 00000 n 0000187173 00000 n 0000187232 00000 n 0000187355 00000 n 0000187536 00000 n 0000192296 00000 n 0000192414 00000 n 0000192536 00000 n 0000192659 00000 n 0000192782 00000 n 0000192905 00000 n 0000193028 00000 n 0000193151 00000 n 0000194749 00000 n 0000194872 00000 n 0000194995 00000 n 0000195118 00000 n 0000195241 00000 n 0000195364 00000 n 0000195487 00000 n 0000195608 00000 n 0000195729 00000 n 0000195852 00000 n 0000195974 00000 n 0000196096 00000 n 0000196219 00000 n 0000197567 00000 n 0000197689 00000 n 0000197812 00000 n 0000197935 00000 n 0000198058 00000 n 0000198181 00000 n 0000198304 00000 n 0000198427 00000 n 0000198550 00000 n 0000198673 00000 n 0000198795 00000 n 0000198918 00000 n 0000190088 00000 n 0000190277 00000 n 0000190466 00000 n 0000190655 00000 n 0000190844 00000 n 0000191033 00000 n 0000191188 00000 n 0000191376 00000 n 0000191564 00000 n 0000191746 00000 n 0000191934 00000 n 0000193214 00000 n 0000189262 00000 n 0000187749 00000 n 0000192121 00000 n 0000192355 00000 n 0000192478 00000 n 0000192600 00000 n 0000192723 00000 n 0000192846 00000 n 0000192969 00000 n 0000193092 00000 n 0000199041 00000 n 0000201099 00000 n 0000201222 00000 n 0000201345 00000 n 0000201468 00000 n 0000201591 00000 n 0000201714 00000 n 0000201837 00000 n 0000201960 00000 n 0000202083 00000 n 0000628545 00000 n 0000196282 00000 n 0000194508 00000 n 0000193327 00000 n 0000194631 00000 n 0000194690 00000 n 0000194813 00000 n 0000194936 00000 n 0000195059 00000 n 0000195182 00000 n 0000195305 00000 n 0000195428 00000 n 0000195551 00000 n 0000195672 00000 n 0000195793 00000 n 0000195915 00000 n 0000196038 00000 n 0000196160 00000 n 0000199105 00000 n 0000197326 00000 n 0000196408 00000 n 0000197449 00000 n 0000197508 00000 n 0000197631 00000 n 0000197753 00000 n 0000197876 00000 n 0000197999 00000 n 0000198122 00000 n 0000198245 00000 n 0000198368 00000 n 0000198491 00000 n 0000198614 00000 n 0000198736 00000 n 0000198859 00000 n 0000198982 00000 n 0001436965 00000 n 0000200795 00000 n 0000204219 00000 n 0000202322 00000 n 0000200651 00000 n 0000199231 00000 n 0000200981 00000 n 0000201040 00000 n 0000201163 00000 n 0000201286 00000 n 0000201409 00000 n 0000201532 00000 n 0000201655 00000 n 0000201778 00000 n 0000201901 00000 n 0000202024 00000 n 0000202146 00000 n 0000204408 00000 n 0000204595 00000 n 0000204784 00000 n 0000204973 00000 n 0000205161 00000 n 0000205350 00000 n 0000205539 00000 n 0000205728 00000 n 0000205916 00000 n 0000206105 00000 n 0000206294 00000 n 0000206483 00000 n 0000206672 00000 n 0000206827 00000 n 0000207015 00000 n 0000207203 00000 n 0000207391 00000 n 0000207580 00000 n 0000207768 00000 n 0000207957 00000 n 0000208145 00000 n 0000208334 00000 n 0000208523 00000 n 0000208711 00000 n 0000208900 00000 n 0000209086 00000 n 0000209274 00000 n 0000209462 00000 n 0000209650 00000 n 0000209838 00000 n 0000213345 00000 n 0000213528 00000 n 0000213710 00000 n 0000210378 00000 n 0000203805 00000 n 0000202475 00000 n 0000210026 00000 n 0000210085 00000 n 0000210260 00000 n 0000210319 00000 n 0000215937 00000 n 0000216060 00000 n 0000216182 00000 n 0000216305 00000 n 0000216428 00000 n 0000216550 00000 n 0000220874 00000 n 0000220997 00000 n 0000221120 00000 n 0000221243 00000 n 0000221366 00000 n 0000221489 00000 n 0000221612 00000 n 0000221735 00000 n 0000221856 00000 n 0000224087 00000 n 0000224210 00000 n 0000224333 00000 n 0000224456 00000 n 0000224579 00000 n 0000224702 00000 n 0000224825 00000 n 0000224946 00000 n 0000213893 00000 n 0000214075 00000 n 0000214231 00000 n 0000214420 00000 n 0000214602 00000 n 0000214758 00000 n 0000214947 00000 n 0000215130 00000 n 0000215312 00000 n 0000215500 00000 n 0000215689 00000 n 0000216608 00000 n 0000213084 00000 n 0000210491 00000 n 0000215878 00000 n 0000216001 00000 n 0000216123 00000 n 0000216246 00000 n 0000216369 00000 n 0000216492 00000 n 0000681392 00000 n 0000670201 00000 n 0000684258 00000 n 0000684375 00000 n 0000218880 00000 n 0000219068 00000 n 0000219256 00000 n 0000219445 00000 n 0000219634 00000 n 0000219823 00000 n 0000220012 00000 n 0000220201 00000 n 0000220389 00000 n 0000220571 00000 n 0000221920 00000 n 0000218655 00000 n 0000216788 00000 n 0000220756 00000 n 0000220815 00000 n 0000220938 00000 n 0000221061 00000 n 0000221184 00000 n 0000221307 00000 n 0000221430 00000 n 0000221553 00000 n 0000221676 00000 n 0000221797 00000 n 0000223029 00000 n 0000223218 00000 n 0000223406 00000 n 0000223593 00000 n 0000223781 00000 n 0000225250 00000 n 0000222849 00000 n 0000222100 00000 n 0000223969 00000 n 0000224028 00000 n 0000224151 00000 n 0000224274 00000 n 0000224397 00000 n 0000224520 00000 n 0000224643 00000 n 0000224766 00000 n 0000224889 00000 n 0000225010 00000 n 0000225191 00000 n 0000229767 00000 n 0000229885 00000 n 0000230007 00000 n 0000230130 00000 n 0000230247 00000 n 0000226955 00000 n 0000227144 00000 n 0000227333 00000 n 0000227521 00000 n 0000227710 00000 n 0000227899 00000 n 0000228086 00000 n 0000228275 00000 n 0000228464 00000 n 0000228653 00000 n 0000228840 00000 n 0000229029 00000 n 0000229218 00000 n 0000229405 00000 n 0000232306 00000 n 0000232462 00000 n 0000232651 00000 n 0000230546 00000 n 0000226694 00000 n 0000225377 00000 n 0000229592 00000 n 0000229826 00000 n 0000229948 00000 n 0000230071 00000 n 0000230189 00000 n 0000230306 00000 n 0000230487 00000 n 0001437090 00000 n 0000251720 00000 n 0000256648 00000 n 0000256771 00000 n 0000256894 00000 n 0000261213 00000 n 0000261336 00000 n 0000261459 00000 n 0000261582 00000 n 0000261705 00000 n 0000261828 00000 n 0000268897 00000 n 0000269020 00000 n 0000269142 00000 n 0000269265 00000 n 0000232840 00000 n 0000233028 00000 n 0000233184 00000 n 0000233373 00000 n 0000233562 00000 n 0000233751 00000 n 0000233939 00000 n 0000234128 00000 n 0000234317 00000 n 0000234505 00000 n 0000234694 00000 n 0000234882 00000 n 0000235071 00000 n 0000235260 00000 n 0000235449 00000 n 0000235637 00000 n 0000235826 00000 n 0000236013 00000 n 0000236202 00000 n 0000236391 00000 n 0000236579 00000 n 0000236768 00000 n 0000236957 00000 n 0000237145 00000 n 0000237333 00000 n 0000237522 00000 n 0000237711 00000 n 0000237898 00000 n 0000238087 00000 n 0000238276 00000 n 0000238432 00000 n 0000238621 00000 n 0000238777 00000 n 0000238966 00000 n 0000239155 00000 n 0000239343 00000 n 0000239532 00000 n 0000239721 00000 n 0000239910 00000 n 0000240099 00000 n 0000240287 00000 n 0000240476 00000 n 0000240630 00000 n 0000240819 00000 n 0000240975 00000 n 0000241164 00000 n 0000241319 00000 n 0000241507 00000 n 0000241662 00000 n 0000241850 00000 n 0000242039 00000 n 0000242227 00000 n 0000242416 00000 n 0000242605 00000 n 0000242792 00000 n 0000245712 00000 n 0000245901 00000 n 0000246090 00000 n 0000246279 00000 n 0000246435 00000 n 0000246624 00000 n 0000246780 00000 n 0000243038 00000 n 0000231649 00000 n 0000230673 00000 n 0000242979 00000 n 0000269388 00000 n 0000269511 00000 n 0000269634 00000 n 0000269757 00000 n 0000273963 00000 n 0000274081 00000 n 0000274204 00000 n 0000278245 00000 n 0000278368 00000 n 0000278490 00000 n 0000278613 00000 n 0000278735 00000 n 0000278858 00000 n 0000278981 00000 n 0000279104 00000 n 0000281311 00000 n 0000281433 00000 n 0000281556 00000 n 0000281674 00000 n 0000281797 00000 n 0000281920 00000 n 0000282041 00000 n 0000282164 00000 n 0000282287 00000 n 0000282410 00000 n 0000282533 00000 n 0000286758 00000 n 0000286881 00000 n 0000287004 00000 n 0000287127 00000 n 0000287250 00000 n 0000287373 00000 n 0000287495 00000 n 0000287617 00000 n 0000287740 00000 n 0000290914 00000 n 0000291037 00000 n 0000291160 00000 n 0000291283 00000 n 0000291406 00000 n 0000293502 00000 n 0000293620 00000 n 0000293743 00000 n 0000293864 00000 n 0000293987 00000 n 0000294109 00000 n 0000294227 00000 n 0000294350 00000 n 0000294472 00000 n 0000294595 00000 n 0000246969 00000 n 0000247157 00000 n 0000247345 00000 n 0000247534 00000 n 0000247723 00000 n 0000247912 00000 n 0000248101 00000 n 0000248256 00000 n 0000248444 00000 n 0000248600 00000 n 0000248789 00000 n 0000248975 00000 n 0000249158 00000 n 0000249344 00000 n 0000249495 00000 n 0000249677 00000 n 0000249860 00000 n 0000250048 00000 n 0000250236 00000 n 0000250423 00000 n 0000250610 00000 n 0000250797 00000 n 0000250985 00000 n 0000251172 00000 n 0000251359 00000 n 0000253859 00000 n 0000254047 00000 n 0000251838 00000 n 0000245289 00000 n 0000243138 00000 n 0000251545 00000 n 0000251779 00000 n 0000294718 00000 n 0000294840 00000 n 0000294963 00000 n 0000296174 00000 n 0000296297 00000 n 0000296420 00000 n 0000296543 00000 n 0000296666 00000 n 0000296789 00000 n 0000296912 00000 n 0000297033 00000 n 0000297156 00000 n 0000297279 00000 n 0000946452 00000 n 0000728608 00000 n 0000881929 00000 n 0000254235 00000 n 0000254423 00000 n 0000254611 00000 n 0000254799 00000 n 0000254986 00000 n 0000255174 00000 n 0000255362 00000 n 0000255549 00000 n 0000255732 00000 n 0000255888 00000 n 0000256070 00000 n 0000256253 00000 n 0000256434 00000 n 0000257017 00000 n 0000253589 00000 n 0000251951 00000 n 0000256589 00000 n 0000256712 00000 n 0000256835 00000 n 0000256958 00000 n 0000259709 00000 n 0000259897 00000 n 0000260051 00000 n 0000260232 00000 n 0000260415 00000 n 0000260602 00000 n 0000260785 00000 n 0000260972 00000 n 0000261892 00000 n 0000259502 00000 n 0000257143 00000 n 0000261154 00000 n 0000261277 00000 n 0000261400 00000 n 0000261523 00000 n 0000261646 00000 n 0000261769 00000 n 0001031071 00000 n 0001030953 00000 n 0000264626 00000 n 0000264809 00000 n 0000264997 00000 n 0000265180 00000 n 0000265363 00000 n 0000265552 00000 n 0000265741 00000 n 0000265922 00000 n 0000266111 00000 n 0000266294 00000 n 0000266450 00000 n 0000266631 00000 n 0000266812 00000 n 0000266968 00000 n 0000267150 00000 n 0000267333 00000 n 0000267521 00000 n 0000267710 00000 n 0000267893 00000 n 0000268082 00000 n 0000268263 00000 n 0000268418 00000 n 0000268598 00000 n 0000272810 00000 n 0000272966 00000 n 0000269880 00000 n 0000264284 00000 n 0000262045 00000 n 0000268779 00000 n 0000268838 00000 n 0000268961 00000 n 0000269084 00000 n 0000269206 00000 n 0000269329 00000 n 0000269452 00000 n 0000269575 00000 n 0000269698 00000 n 0000269821 00000 n 0000728372 00000 n 0000728490 00000 n 0000273148 00000 n 0000273337 00000 n 0000273526 00000 n 0000273715 00000 n 0000276890 00000 n 0000277079 00000 n 0000277268 00000 n 0000277450 00000 n 0000277633 00000 n 0000274327 00000 n 0000272621 00000 n 0000270033 00000 n 0000273904 00000 n 0000274022 00000 n 0000274145 00000 n 0000274268 00000 n 0001437215 00000 n 0000277822 00000 n 0000278004 00000 n 0000279167 00000 n 0000276692 00000 n 0000274453 00000 n 0000278186 00000 n 0000278309 00000 n 0000278431 00000 n 0000278554 00000 n 0000278677 00000 n 0000278799 00000 n 0000278922 00000 n 0000279045 00000 n 0000592858 00000 n 0000282596 00000 n 0000281070 00000 n 0000279293 00000 n 0000281193 00000 n 0000281252 00000 n 0000281374 00000 n 0000281497 00000 n 0000281615 00000 n 0000281738 00000 n 0000281861 00000 n 0000281983 00000 n 0000282105 00000 n 0000282228 00000 n 0000282351 00000 n 0000282474 00000 n 0000285049 00000 n 0000285237 00000 n 0000285426 00000 n 0000285582 00000 n 0000285769 00000 n 0000285955 00000 n 0000286109 00000 n 0000286265 00000 n 0000286454 00000 n 0000287803 00000 n 0000284833 00000 n 0000282708 00000 n 0000286640 00000 n 0000286699 00000 n 0000286822 00000 n 0000286945 00000 n 0000287068 00000 n 0000287191 00000 n 0000287314 00000 n 0000287436 00000 n 0000287559 00000 n 0000287681 00000 n 0000935091 00000 n 0000289942 00000 n 0000290125 00000 n 0000290307 00000 n 0000290490 00000 n 0000290640 00000 n 0000291469 00000 n 0000289762 00000 n 0000287929 00000 n 0000290796 00000 n 0000290855 00000 n 0000290978 00000 n 0000291101 00000 n 0000291224 00000 n 0000291347 00000 n 0000750827 00000 n 0000754071 00000 n 0000757952 00000 n 0000292750 00000 n 0000292900 00000 n 0000293050 00000 n 0000293198 00000 n 0000295027 00000 n 0000292579 00000 n 0000291595 00000 n 0000293384 00000 n 0000293443 00000 n 0000293561 00000 n 0000293684 00000 n 0000293807 00000 n 0000293928 00000 n 0000294050 00000 n 0000294168 00000 n 0000294291 00000 n 0000294414 00000 n 0000294536 00000 n 0000294659 00000 n 0000294781 00000 n 0000294904 00000 n 0000299502 00000 n 0000297523 00000 n 0000295933 00000 n 0000295153 00000 n 0000296056 00000 n 0000296115 00000 n 0000296238 00000 n 0000296361 00000 n 0000296484 00000 n 0000296607 00000 n 0000296730 00000 n 0000296853 00000 n 0000296976 00000 n 0000297097 00000 n 0000297220 00000 n 0000297342 00000 n 0001437340 00000 n 0000299691 00000 n 0000299878 00000 n 0000300067 00000 n 0000300256 00000 n 0000300445 00000 n 0000300634 00000 n 0000300823 00000 n 0000301011 00000 n 0000301199 00000 n 0000301388 00000 n 0000301577 00000 n 0000301762 00000 n 0000301948 00000 n 0000302103 00000 n 0000302259 00000 n 0000302445 00000 n 0000302631 00000 n 0000302784 00000 n 0000302934 00000 n 0000303982 00000 n 0000299187 00000 n 0000297650 00000 n 0000303083 00000 n 0000303142 00000 n 0000303317 00000 n 0000303376 00000 n 0000303435 00000 n 0000303498 00000 n 0000303557 00000 n 0000303620 00000 n 0000303679 00000 n 0000303738 00000 n 0000303797 00000 n 0000303861 00000 n 0000303918 00000 n 0000307068 00000 n 0000307191 00000 n 0000307314 00000 n 0000307437 00000 n 0000307560 00000 n 0000305569 00000 n 0000305725 00000 n 0000305907 00000 n 0000306063 00000 n 0000306218 00000 n 0000306401 00000 n 0000306584 00000 n 0000306767 00000 n 0000309717 00000 n 0000309900 00000 n 0000307975 00000 n 0000305362 00000 n 0000304095 00000 n 0000306950 00000 n 0000307009 00000 n 0000307132 00000 n 0000307255 00000 n 0000307378 00000 n 0000307501 00000 n 0000307623 00000 n 0000307857 00000 n 0000307916 00000 n 0000321732 00000 n 0000310083 00000 n 0000310265 00000 n 0000310447 00000 n 0000310630 00000 n 0000310813 00000 n 0000310995 00000 n 0000311209 00000 n 0000311420 00000 n 0000311635 00000 n 0000311849 00000 n 0000312063 00000 n 0000312278 00000 n 0000312493 00000 n 0000312675 00000 n 0000312831 00000 n 0000312987 00000 n 0000313169 00000 n 0000313324 00000 n 0000313480 00000 n 0000313662 00000 n 0000313817 00000 n 0000313972 00000 n 0000314155 00000 n 0000314309 00000 n 0000314465 00000 n 0000314648 00000 n 0000314804 00000 n 0000314987 00000 n 0000315143 00000 n 0000317757 00000 n 0000315560 00000 n 0000309303 00000 n 0000308101 00000 n 0000315324 00000 n 0000315383 00000 n 0000315442 00000 n 0000315501 00000 n 0000325200 00000 n 0000325318 00000 n 0000325382 00000 n 0000325446 00000 n 0000325510 00000 n 0000325574 00000 n 0000325638 00000 n 0000325702 00000 n 0000325824 00000 n 0000325940 00000 n 0000326058 00000 n 0000330206 00000 n 0000333395 00000 n 0000317913 00000 n 0000318096 00000 n 0000318252 00000 n 0000318435 00000 n 0000318617 00000 n 0000318800 00000 n 0000318956 00000 n 0000319139 00000 n 0000319328 00000 n 0000319510 00000 n 0000319693 00000 n 0000319843 00000 n 0000319992 00000 n 0000320147 00000 n 0000320318 00000 n 0000320500 00000 n 0000320671 00000 n 0000320853 00000 n 0000321023 00000 n 0000321204 00000 n 0000321375 00000 n 0000323892 00000 n 0000324063 00000 n 0000322380 00000 n 0000317424 00000 n 0000315673 00000 n 0000321557 00000 n 0000321791 00000 n 0000321913 00000 n 0000322030 00000 n 0000322147 00000 n 0000322264 00000 n 0000324245 00000 n 0000324401 00000 n 0000324557 00000 n 0000324713 00000 n 0000324869 00000 n 0000328234 00000 n 0000328390 00000 n 0000326116 00000 n 0000323694 00000 n 0000322479 00000 n 0000325024 00000 n 0000325083 00000 n 0000325259 00000 n 0001435813 00000 n 0000325882 00000 n 0000325999 00000 n 0000328579 00000 n 0000328735 00000 n 0000328891 00000 n 0000329071 00000 n 0000329252 00000 n 0000329439 00000 n 0000329595 00000 n 0000329784 00000 n 0000330324 00000 n 0000328009 00000 n 0000326230 00000 n 0000329970 00000 n 0000330029 00000 n 0000330147 00000 n 0000330265 00000 n 0001437465 00000 n 0000973668 00000 n 0000332274 00000 n 0000332430 00000 n 0000332619 00000 n 0000332805 00000 n 0000332961 00000 n 0000333150 00000 n 0000335259 00000 n 0000333747 00000 n 0000332085 00000 n 0000330465 00000 n 0000333336 00000 n 0000333454 00000 n 0000333629 00000 n 0000335418 00000 n 0000335575 00000 n 0000335762 00000 n 0000335947 00000 n 0000336134 00000 n 0000336319 00000 n 0000336506 00000 n 0000336693 00000 n 0000336880 00000 n 0000337038 00000 n 0000337225 00000 n 0000337382 00000 n 0000337567 00000 n 0000337754 00000 n 0000337912 00000 n 0000340140 00000 n 0000338421 00000 n 0000334980 00000 n 0000333888 00000 n 0000338068 00000 n 0000338185 00000 n 0000338244 00000 n 0000338303 00000 n 0000338362 00000 n 0000342409 00000 n 0000342527 00000 n 0000342650 00000 n 0000342773 00000 n 0000343016 00000 n 0000343134 00000 n 0000343256 00000 n 0000340326 00000 n 0000340512 00000 n 0000340698 00000 n 0000340884 00000 n 0000341070 00000 n 0000341257 00000 n 0000341444 00000 n 0000341631 00000 n 0000341818 00000 n 0000341989 00000 n 0000343374 00000 n 0000339906 00000 n 0000338547 00000 n 0000342175 00000 n 0000342234 00000 n 0000342468 00000 n 0000342591 00000 n 0000342714 00000 n 0000342836 00000 n 0000342957 00000 n 0000343075 00000 n 0000343197 00000 n 0000343315 00000 n 0000356945 00000 n 0000893771 00000 n 0000345885 00000 n 0000346039 00000 n 0000346228 00000 n 0000346385 00000 n 0000346544 00000 n 0000346736 00000 n 0000346928 00000 n 0000347119 00000 n 0000347308 00000 n 0000347465 00000 n 0000348032 00000 n 0000345660 00000 n 0000343487 00000 n 0000347621 00000 n 0000347797 00000 n 0000347973 00000 n 0000351513 00000 n 0000351670 00000 n 0000351860 00000 n 0000352875 00000 n 0000351351 00000 n 0000348159 00000 n 0000352050 00000 n 0000352109 00000 n 0000352168 00000 n 0000352227 00000 n 0000352286 00000 n 0000352344 00000 n 0000352403 00000 n 0000352462 00000 n 0000352521 00000 n 0000352580 00000 n 0000352639 00000 n 0000352698 00000 n 0000352757 00000 n 0000352816 00000 n 0000355145 00000 n 0000355299 00000 n 0000355487 00000 n 0000355642 00000 n 0000355830 00000 n 0000355986 00000 n 0000356174 00000 n 0000356330 00000 n 0000356486 00000 n 0000356642 00000 n 0000360463 00000 n 0000360619 00000 n 0000357535 00000 n 0000354920 00000 n 0000352961 00000 n 0000356828 00000 n 0000357004 00000 n 0000357184 00000 n 0000357243 00000 n 0000357417 00000 n 0000357476 00000 n 0001437590 00000 n 0000360769 00000 n 0000360924 00000 n 0000361074 00000 n 0000361223 00000 n 0000361379 00000 n 0000361534 00000 n 0000361684 00000 n 0000361840 00000 n 0000361996 00000 n 0000362152 00000 n 0000362308 00000 n 0000362458 00000 n 0000362607 00000 n 0000362763 00000 n 0000362917 00000 n 0000363100 00000 n 0000363256 00000 n 0000363412 00000 n 0000363594 00000 n 0000365794 00000 n 0000365976 00000 n 0000364075 00000 n 0000360139 00000 n 0000357689 00000 n 0000363776 00000 n 0000363957 00000 n 0000364016 00000 n 0000378918 00000 n 0000366158 00000 n 0000366341 00000 n 0000366524 00000 n 0000366706 00000 n 0000366888 00000 n 0000367070 00000 n 0000367252 00000 n 0000367435 00000 n 0000367618 00000 n 0000367799 00000 n 0000367980 00000 n 0000368163 00000 n 0000368378 00000 n 0000368593 00000 n 0000369021 00000 n 0000369236 00000 n 0000369419 00000 n 0000369574 00000 n 0000369730 00000 n 0000369913 00000 n 0000370069 00000 n 0000370225 00000 n 0000370381 00000 n 0000370563 00000 n 0000370718 00000 n 0000370874 00000 n 0000371057 00000 n 0000371213 00000 n 0000371368 00000 n 0000371551 00000 n 0000371707 00000 n 0000371863 00000 n 0000372045 00000 n 0000372200 00000 n 0000372383 00000 n 0000372539 00000 n 0000375000 00000 n 0000372899 00000 n 0000365308 00000 n 0000364201 00000 n 0000372722 00000 n 0000372781 00000 n 0000368807 00000 n 0000372840 00000 n 0000383915 00000 n 0000384033 00000 n 0000384097 00000 n 0000384161 00000 n 0000384225 00000 n 0000390119 00000 n 0000390237 00000 n 0000390355 00000 n 0000394987 00000 n 0000398366 00000 n 0000398484 00000 n 0000375180 00000 n 0000375336 00000 n 0000375518 00000 n 0000375699 00000 n 0000375882 00000 n 0000376038 00000 n 0000376218 00000 n 0000376401 00000 n 0000376557 00000 n 0000376739 00000 n 0000376928 00000 n 0000377108 00000 n 0000377288 00000 n 0000377471 00000 n 0000377627 00000 n 0000377798 00000 n 0000377980 00000 n 0000378151 00000 n 0000378333 00000 n 0000378503 00000 n 0000381322 00000 n 0000381493 00000 n 0000379449 00000 n 0000374676 00000 n 0000373012 00000 n 0000378684 00000 n 0000378743 00000 n 0000378977 00000 n 0000379099 00000 n 0000379216 00000 n 0000379333 00000 n 0000381675 00000 n 0000381845 00000 n 0000382026 00000 n 0000382197 00000 n 0000382379 00000 n 0000382550 00000 n 0000382732 00000 n 0000382888 00000 n 0000383044 00000 n 0000383233 00000 n 0000386912 00000 n 0000384465 00000 n 0000381079 00000 n 0000379562 00000 n 0000383388 00000 n 0000383447 00000 n 0000383564 00000 n 0000383681 00000 n 0000383798 00000 n 0000383974 00000 n 0000384406 00000 n 0000387100 00000 n 0000387256 00000 n 0000387445 00000 n 0000387631 00000 n 0000387786 00000 n 0000387967 00000 n 0000388149 00000 n 0000388338 00000 n 0000388494 00000 n 0000388683 00000 n 0000388869 00000 n 0000389024 00000 n 0000389206 00000 n 0000389388 00000 n 0000389570 00000 n 0000389724 00000 n 0000389905 00000 n 0000390413 00000 n 0000386615 00000 n 0000384579 00000 n 0000390060 00000 n 0000390178 00000 n 0000390296 00000 n 0000392447 00000 n 0000392603 00000 n 0000392791 00000 n 0000392947 00000 n 0000393135 00000 n 0000393322 00000 n 0000393477 00000 n 0000393666 00000 n 0000393849 00000 n 0000394032 00000 n 0000394220 00000 n 0000394376 00000 n 0000394565 00000 n 0000397246 00000 n 0000397402 00000 n 0000397591 00000 n 0000395105 00000 n 0000392195 00000 n 0000390541 00000 n 0000394751 00000 n 0000394810 00000 n 0000394928 00000 n 0000395046 00000 n 0001437715 00000 n 0000397777 00000 n 0000397932 00000 n 0000398121 00000 n 0000400901 00000 n 0000398840 00000 n 0000397057 00000 n 0000395246 00000 n 0000398307 00000 n 0000398425 00000 n 0000398543 00000 n 0000398718 00000 n 0000401084 00000 n 0000401298 00000 n 0000401513 00000 n 0000401728 00000 n 0000401942 00000 n 0000402156 00000 n 0000402339 00000 n 0000402522 00000 n 0000402703 00000 n 0000402885 00000 n 0000403786 00000 n 0000400667 00000 n 0000398994 00000 n 0000403068 00000 n 0000403185 00000 n 0000403244 00000 n 0000403303 00000 n 0000403477 00000 n 0000403536 00000 n 0000403595 00000 n 0000403659 00000 n 0000403723 00000 n 0000405437 00000 n 0000405501 00000 n 0000405623 00000 n 0000405741 00000 n 0000410358 00000 n 0000405859 00000 n 0000405255 00000 n 0000403913 00000 n 0000405378 00000 n 0000405682 00000 n 0000405800 00000 n 0000407219 00000 n 0000407375 00000 n 0000407558 00000 n 0000407740 00000 n 0000407923 00000 n 0000408105 00000 n 0000408261 00000 n 0000408417 00000 n 0000408600 00000 n 0000408783 00000 n 0000408966 00000 n 0000409149 00000 n 0000409332 00000 n 0000409515 00000 n 0000409696 00000 n 0000409877 00000 n 0000410059 00000 n 0000412442 00000 n 0000412625 00000 n 0000412839 00000 n 0000413054 00000 n 0000413268 00000 n 0000413482 00000 n 0000410715 00000 n 0000406931 00000 n 0000405986 00000 n 0000410241 00000 n 0000410417 00000 n 0000410597 00000 n 0000410656 00000 n 0000477831 00000 n 0000477949 00000 n 0000478072 00000 n 0000478195 00000 n 0000413696 00000 n 0000413879 00000 n 0000414035 00000 n 0000414191 00000 n 0000414374 00000 n 0000414530 00000 n 0000414685 00000 n 0000414868 00000 n 0000415024 00000 n 0000415180 00000 n 0000415362 00000 n 0000415518 00000 n 0000415673 00000 n 0000415855 00000 n 0000416037 00000 n 0000416218 00000 n 0000416373 00000 n 0000416529 00000 n 0000416711 00000 n 0000416893 00000 n 0000417076 00000 n 0000417232 00000 n 0000417388 00000 n 0000417571 00000 n 0000417754 00000 n 0000417935 00000 n 0000418088 00000 n 0000418243 00000 n 0000420136 00000 n 0000418600 00000 n 0000412001 00000 n 0000410841 00000 n 0000418423 00000 n 0000418482 00000 n 0000418541 00000 n 0000481630 00000 n 0000481748 00000 n 0000481812 00000 n 0000481876 00000 n 0000481940 00000 n 0000482004 00000 n 0000482244 00000 n 0000482362 00000 n 0000487286 00000 n 0000491214 00000 n 0000491332 00000 n 0000491450 00000 n 0000491573 00000 n 0000495605 00000 n 0000495728 00000 n 0000495851 00000 n 0000495974 00000 n 0000496097 00000 n 0000420319 00000 n 0000420502 00000 n 0000420658 00000 n 0000420814 00000 n 0000420997 00000 n 0000421180 00000 n 0000421363 00000 n 0000421519 00000 n 0000421675 00000 n 0000421858 00000 n 0000422039 00000 n 0000422222 00000 n 0000422376 00000 n 0000422532 00000 n 0000422715 00000 n 0000422898 00000 n 0000423081 00000 n 0000423237 00000 n 0000423393 00000 n 0000423576 00000 n 0000423758 00000 n 0000423939 00000 n 0000424093 00000 n 0000424249 00000 n 0000424432 00000 n 0000426310 00000 n 0000426493 00000 n 0000426649 00000 n 0000424674 00000 n 0000419767 00000 n 0000418726 00000 n 0000424615 00000 n 0001437840 00000 n 0000496219 00000 n 0000496342 00000 n 0000496464 00000 n 0000500570 00000 n 0000500693 00000 n 0000500815 00000 n 0000500938 00000 n 0000501061 00000 n 0000501184 00000 n 0000501307 00000 n 0000501430 00000 n 0000501553 00000 n 0000505599 00000 n 0000505722 00000 n 0000505845 00000 n 0000505968 00000 n 0000426805 00000 n 0000426988 00000 n 0000427169 00000 n 0000427352 00000 n 0000427508 00000 n 0000427664 00000 n 0000427846 00000 n 0000428028 00000 n 0000428211 00000 n 0000428367 00000 n 0000428523 00000 n 0000428706 00000 n 0000428889 00000 n 0000429072 00000 n 0000429226 00000 n 0000429382 00000 n 0000429565 00000 n 0000429748 00000 n 0000429931 00000 n 0000430087 00000 n 0000430243 00000 n 0000430426 00000 n 0000430609 00000 n 0000430792 00000 n 0000430947 00000 n 0000431103 00000 n 0000432965 00000 n 0000431345 00000 n 0000425914 00000 n 0000424800 00000 n 0000431286 00000 n 0000506091 00000 n 0000506214 00000 n 0000506337 00000 n 0000506459 00000 n 0000510452 00000 n 0000510575 00000 n 0000510697 00000 n 0000510820 00000 n 0000510943 00000 n 0000511066 00000 n 0000511189 00000 n 0000511312 00000 n 0000511435 00000 n 0000515433 00000 n 0000515556 00000 n 0000515679 00000 n 0000515802 00000 n 0000433148 00000 n 0000433331 00000 n 0000433487 00000 n 0000433642 00000 n 0000433825 00000 n 0000434008 00000 n 0000434191 00000 n 0000434347 00000 n 0000434503 00000 n 0000434686 00000 n 0000434869 00000 n 0000435052 00000 n 0000435208 00000 n 0000435364 00000 n 0000435547 00000 n 0000435729 00000 n 0000435912 00000 n 0000436068 00000 n 0000436224 00000 n 0000436407 00000 n 0000436590 00000 n 0000436771 00000 n 0000436926 00000 n 0000437081 00000 n 0000437262 00000 n 0000437444 00000 n 0000437625 00000 n 0000439418 00000 n 0000439574 00000 n 0000437838 00000 n 0000432578 00000 n 0000431471 00000 n 0000437779 00000 n 0000515925 00000 n 0000516047 00000 n 0000516170 00000 n 0000516293 00000 n 0000520393 00000 n 0000520516 00000 n 0000520639 00000 n 0000520762 00000 n 0000520885 00000 n 0000521008 00000 n 0000521131 00000 n 0000521254 00000 n 0000521377 00000 n 0000525316 00000 n 0000525439 00000 n 0000525562 00000 n 0000525685 00000 n 0000439757 00000 n 0000439940 00000 n 0000440123 00000 n 0000440279 00000 n 0000440435 00000 n 0000440618 00000 n 0000440801 00000 n 0000440983 00000 n 0000441138 00000 n 0000441293 00000 n 0000441474 00000 n 0000441657 00000 n 0000441840 00000 n 0000441996 00000 n 0000442152 00000 n 0000442335 00000 n 0000442518 00000 n 0000442700 00000 n 0000442856 00000 n 0000443012 00000 n 0000443194 00000 n 0000443373 00000 n 0000443556 00000 n 0000443712 00000 n 0000443868 00000 n 0000445675 00000 n 0000444110 00000 n 0000439040 00000 n 0000437964 00000 n 0000444051 00000 n 0000525808 00000 n 0000525930 00000 n 0000526053 00000 n 0000526175 00000 n 0000530281 00000 n 0000530404 00000 n 0000530526 00000 n 0000530649 00000 n 0000530772 00000 n 0000530895 00000 n 0000531018 00000 n 0000531141 00000 n 0000531264 00000 n 0000535263 00000 n 0000535386 00000 n 0000535509 00000 n 0000445858 00000 n 0000446041 00000 n 0000446197 00000 n 0000446353 00000 n 0000446536 00000 n 0000446719 00000 n 0000446902 00000 n 0000447058 00000 n 0000447214 00000 n 0000447397 00000 n 0000447579 00000 n 0000447761 00000 n 0000447944 00000 n 0000448127 00000 n 0000448310 00000 n 0000448493 00000 n 0000448675 00000 n 0000448858 00000 n 0000449041 00000 n 0000452274 00000 n 0000449341 00000 n 0000445360 00000 n 0000444236 00000 n 0000449223 00000 n 0000449282 00000 n 0000535632 00000 n 0000535755 00000 n 0000535878 00000 n 0000536001 00000 n 0000536123 00000 n 0000539959 00000 n 0000540082 00000 n 0000540379 00000 n 0000540500 00000 n 0000540623 00000 n 0000540746 00000 n 0000540869 00000 n 0000540992 00000 n 0000541114 00000 n 0000541237 00000 n 0000452457 00000 n 0000452640 00000 n 0000452823 00000 n 0000452979 00000 n 0000453162 00000 n 0000453318 00000 n 0000453500 00000 n 0000453683 00000 n 0000453839 00000 n 0000454027 00000 n 0000454210 00000 n 0000454393 00000 n 0000454576 00000 n 0000454732 00000 n 0000454914 00000 n 0000455068 00000 n 0000455249 00000 n 0000455404 00000 n 0000455586 00000 n 0000455769 00000 n 0000455951 00000 n 0000456133 00000 n 0000456316 00000 n 0000456499 00000 n 0000456680 00000 n 0000456862 00000 n 0000457044 00000 n 0000457225 00000 n 0000457408 00000 n 0000457591 00000 n 0000457772 00000 n 0000457954 00000 n 0000458136 00000 n 0000458318 00000 n 0000458501 00000 n 0000458684 00000 n 0000458865 00000 n 0000459048 00000 n 0000459231 00000 n 0000459413 00000 n 0000459596 00000 n 0000459779 00000 n 0000459961 00000 n 0000460144 00000 n 0000460327 00000 n 0000460508 00000 n 0000460690 00000 n 0000464663 00000 n 0000464845 00000 n 0000465028 00000 n 0000465211 00000 n 0000465393 00000 n 0000465576 00000 n 0000465759 00000 n 0000465940 00000 n 0000466123 00000 n 0000460988 00000 n 0000451707 00000 n 0000449467 00000 n 0000460871 00000 n 0000541359 00000 n 0000545641 00000 n 0000545764 00000 n 0000466306 00000 n 0000466486 00000 n 0000466667 00000 n 0000466847 00000 n 0000467029 00000 n 0000467211 00000 n 0000467394 00000 n 0000467576 00000 n 0000467759 00000 n 0000467942 00000 n 0000468124 00000 n 0000468307 00000 n 0000468489 00000 n 0000468671 00000 n 0000468854 00000 n 0000469037 00000 n 0000469218 00000 n 0000469400 00000 n 0000469582 00000 n 0000469764 00000 n 0000469947 00000 n 0000470129 00000 n 0000470311 00000 n 0000470494 00000 n 0000470677 00000 n 0000470859 00000 n 0000471042 00000 n 0000471225 00000 n 0000471406 00000 n 0000471589 00000 n 0000471772 00000 n 0000471954 00000 n 0000472137 00000 n 0000472320 00000 n 0000472502 00000 n 0000472685 00000 n 0000472868 00000 n 0000473050 00000 n 0000473233 00000 n 0000473416 00000 n 0000473598 00000 n 0000473781 00000 n 0000473964 00000 n 0000474145 00000 n 0000474328 00000 n 0000474511 00000 n 0000474759 00000 n 0000464033 00000 n 0000461087 00000 n 0000474700 00000 n 0001437965 00000 n 0000476148 00000 n 0000476303 00000 n 0000476474 00000 n 0000476656 00000 n 0000476827 00000 n 0000477009 00000 n 0000477180 00000 n 0000477362 00000 n 0000477533 00000 n 0000480322 00000 n 0000480493 00000 n 0000478846 00000 n 0000475932 00000 n 0000474900 00000 n 0000477714 00000 n 0000477890 00000 n 0000478013 00000 n 0000478136 00000 n 0000478257 00000 n 0000478379 00000 n 0000478496 00000 n 0000478613 00000 n 0000478730 00000 n 0000480675 00000 n 0000480831 00000 n 0000480987 00000 n 0000481143 00000 n 0000481298 00000 n 0000484635 00000 n 0000484791 00000 n 0000482420 00000 n 0000480124 00000 n 0000478958 00000 n 0000481454 00000 n 0000481513 00000 n 0000481689 00000 n 0000482185 00000 n 0000482303 00000 n 0000484979 00000 n 0000485135 00000 n 0000485291 00000 n 0000485474 00000 n 0000485657 00000 n 0000485812 00000 n 0000485968 00000 n 0000486151 00000 n 0000486334 00000 n 0000486489 00000 n 0000486677 00000 n 0000486861 00000 n 0000487404 00000 n 0000484374 00000 n 0000482534 00000 n 0000487050 00000 n 0000487109 00000 n 0000487227 00000 n 0000487345 00000 n 0000489392 00000 n 0000489548 00000 n 0000489736 00000 n 0000489920 00000 n 0000490109 00000 n 0000490265 00000 n 0000490453 00000 n 0000490637 00000 n 0000490793 00000 n 0000490975 00000 n 0000491636 00000 n 0000489167 00000 n 0000487545 00000 n 0000491155 00000 n 0000491273 00000 n 0000491391 00000 n 0000491514 00000 n 0000493565 00000 n 0000493747 00000 n 0000493903 00000 n 0000494085 00000 n 0000494266 00000 n 0000494448 00000 n 0000494604 00000 n 0000494786 00000 n 0000494967 00000 n 0000495149 00000 n 0000495305 00000 n 0000498407 00000 n 0000496586 00000 n 0000493331 00000 n 0000491790 00000 n 0000495487 00000 n 0000495546 00000 n 0000495669 00000 n 0000495792 00000 n 0000495915 00000 n 0000496038 00000 n 0000496161 00000 n 0000496283 00000 n 0000496405 00000 n 0000496528 00000 n 0000498589 00000 n 0000498771 00000 n 0000498927 00000 n 0000499108 00000 n 0000499290 00000 n 0000499472 00000 n 0000499628 00000 n 0000499809 00000 n 0000499991 00000 n 0000500173 00000 n 0000500329 00000 n 0000501617 00000 n 0000498164 00000 n 0000496740 00000 n 0000500511 00000 n 0000500634 00000 n 0000500757 00000 n 0000500879 00000 n 0000501002 00000 n 0000501125 00000 n 0000501248 00000 n 0000501371 00000 n 0000501494 00000 n 0001438090 00000 n 0000503563 00000 n 0000503745 00000 n 0000503926 00000 n 0000504082 00000 n 0000504263 00000 n 0000504445 00000 n 0000504627 00000 n 0000504782 00000 n 0000504963 00000 n 0000505145 00000 n 0000505327 00000 n 0000508444 00000 n 0000506582 00000 n 0000503329 00000 n 0000501771 00000 n 0000505481 00000 n 0000505540 00000 n 0000505663 00000 n 0000505786 00000 n 0000505909 00000 n 0000506032 00000 n 0000506155 00000 n 0000506278 00000 n 0000506400 00000 n 0000506523 00000 n 0000508626 00000 n 0000508808 00000 n 0000508990 00000 n 0000509145 00000 n 0000509327 00000 n 0000509509 00000 n 0000509691 00000 n 0000509847 00000 n 0000510029 00000 n 0000510211 00000 n 0000511499 00000 n 0000508210 00000 n 0000506736 00000 n 0000510393 00000 n 0000510516 00000 n 0000510639 00000 n 0000510761 00000 n 0000510884 00000 n 0000511007 00000 n 0000511130 00000 n 0000511253 00000 n 0000511376 00000 n 0000513394 00000 n 0000513550 00000 n 0000513732 00000 n 0000513914 00000 n 0000514095 00000 n 0000514251 00000 n 0000514433 00000 n 0000514615 00000 n 0000514796 00000 n 0000514951 00000 n 0000515133 00000 n 0000518230 00000 n 0000516415 00000 n 0000513160 00000 n 0000511653 00000 n 0000515315 00000 n 0000515374 00000 n 0000515497 00000 n 0000515620 00000 n 0000515743 00000 n 0000515866 00000 n 0000515989 00000 n 0000516111 00000 n 0000516234 00000 n 0000516357 00000 n 0000518412 00000 n 0000518568 00000 n 0000518750 00000 n 0000518931 00000 n 0000519113 00000 n 0000519269 00000 n 0000519451 00000 n 0000519632 00000 n 0000519814 00000 n 0000519970 00000 n 0000520152 00000 n 0000521441 00000 n 0000517987 00000 n 0000516569 00000 n 0000520334 00000 n 0000520457 00000 n 0000520580 00000 n 0000520703 00000 n 0000520826 00000 n 0000520949 00000 n 0000521072 00000 n 0000521195 00000 n 0000521318 00000 n 0000523276 00000 n 0000523458 00000 n 0000523614 00000 n 0000523796 00000 n 0000523977 00000 n 0000524159 00000 n 0000524315 00000 n 0000524497 00000 n 0000524678 00000 n 0000524860 00000 n 0000525016 00000 n 0000528118 00000 n 0000526297 00000 n 0000523042 00000 n 0000521595 00000 n 0000525198 00000 n 0000525257 00000 n 0000525380 00000 n 0000525503 00000 n 0000525626 00000 n 0000525749 00000 n 0000525872 00000 n 0000525994 00000 n 0000526116 00000 n 0000526239 00000 n 0000528300 00000 n 0000528482 00000 n 0000528638 00000 n 0000528819 00000 n 0000529001 00000 n 0000529183 00000 n 0000529339 00000 n 0000529520 00000 n 0000529702 00000 n 0000529884 00000 n 0000530040 00000 n 0000531328 00000 n 0000527875 00000 n 0000526451 00000 n 0000530222 00000 n 0000530345 00000 n 0000530468 00000 n 0000530590 00000 n 0000530713 00000 n 0000530836 00000 n 0000530959 00000 n 0000531082 00000 n 0000531205 00000 n 0001438215 00000 n 0000533228 00000 n 0000533410 00000 n 0000533591 00000 n 0000533746 00000 n 0000533927 00000 n 0000534109 00000 n 0000534291 00000 n 0000534446 00000 n 0000534627 00000 n 0000534809 00000 n 0000534991 00000 n 0000537846 00000 n 0000536246 00000 n 0000532994 00000 n 0000531482 00000 n 0000535145 00000 n 0000535204 00000 n 0000535327 00000 n 0000535450 00000 n 0000535573 00000 n 0000535696 00000 n 0000535819 00000 n 0000535942 00000 n 0000536064 00000 n 0000536187 00000 n 0000538028 00000 n 0000538210 00000 n 0000538392 00000 n 0000538581 00000 n 0000538770 00000 n 0000538958 00000 n 0000539147 00000 n 0000539336 00000 n 0000539524 00000 n 0000539713 00000 n 0000541422 00000 n 0000537612 00000 n 0000536400 00000 n 0000539900 00000 n 0000540023 00000 n 0000540146 00000 n 0000540320 00000 n 0000540441 00000 n 0000540564 00000 n 0000540687 00000 n 0000540810 00000 n 0000540933 00000 n 0000541055 00000 n 0000541178 00000 n 0000541301 00000 n 0000542862 00000 n 0000543045 00000 n 0000543200 00000 n 0000543383 00000 n 0000543539 00000 n 0000543695 00000 n 0000543878 00000 n 0000544061 00000 n 0000544244 00000 n 0000544427 00000 n 0000544609 00000 n 0000544791 00000 n 0000544974 00000 n 0000545157 00000 n 0000545340 00000 n 0000548378 00000 n 0000548561 00000 n 0000548775 00000 n 0000548990 00000 n 0000549205 00000 n 0000549418 00000 n 0000549632 00000 n 0000546126 00000 n 0000542592 00000 n 0000541562 00000 n 0000545523 00000 n 0000545582 00000 n 0000545705 00000 n 0000545828 00000 n 0000546008 00000 n 0000546067 00000 n 0000565801 00000 n 0000549846 00000 n 0000550029 00000 n 0000550185 00000 n 0000550341 00000 n 0000550524 00000 n 0000550680 00000 n 0000550836 00000 n 0000551019 00000 n 0000551175 00000 n 0000551331 00000 n 0000551514 00000 n 0000551670 00000 n 0000551826 00000 n 0000552009 00000 n 0000552165 00000 n 0000552348 00000 n 0000552504 00000 n 0000552686 00000 n 0000552841 00000 n 0000553024 00000 n 0000553179 00000 n 0000553362 00000 n 0000553518 00000 n 0000553701 00000 n 0000553857 00000 n 0000554040 00000 n 0000557810 00000 n 0000557993 00000 n 0000554400 00000 n 0000547946 00000 n 0000546238 00000 n 0000554223 00000 n 0000554282 00000 n 0000554341 00000 n 0000569938 00000 n 0000570056 00000 n 0000570120 00000 n 0000570184 00000 n 0000570248 00000 n 0000570312 00000 n 0000570376 00000 n 0000570497 00000 n 0000570613 00000 n 0000574430 00000 n 0000574666 00000 n 0000577628 00000 n 0000577746 00000 n 0000581352 00000 n 0000585604 00000 n 0000589612 00000 n 0000596173 00000 n 0000558176 00000 n 0000558358 00000 n 0000558539 00000 n 0000558693 00000 n 0000558874 00000 n 0000559029 00000 n 0000559211 00000 n 0000559393 00000 n 0000559574 00000 n 0000559729 00000 n 0000559912 00000 n 0000560100 00000 n 0000560282 00000 n 0000560465 00000 n 0000560614 00000 n 0000560796 00000 n 0000560979 00000 n 0000561162 00000 n 0000561345 00000 n 0000561702 00000 n 0000557486 00000 n 0000554526 00000 n 0000561526 00000 n 0000561585 00000 n 0000596291 00000 n 0000596409 00000 n 0000596526 00000 n 0000565177 00000 n 0000565333 00000 n 0000565504 00000 n 0000566041 00000 n 0000565015 00000 n 0000561842 00000 n 0000565684 00000 n 0000565860 00000 n 0000565982 00000 n 0001438340 00000 n 0000567485 00000 n 0000567655 00000 n 0000567836 00000 n 0000568007 00000 n 0000568188 00000 n 0000568359 00000 n 0000568540 00000 n 0000568711 00000 n 0000568892 00000 n 0000569048 00000 n 0000569204 00000 n 0000570671 00000 n 0000567251 00000 n 0000566167 00000 n 0000569354 00000 n 0000569471 00000 n 0000569588 00000 n 0000569705 00000 n 0000569822 00000 n 0000569997 00000 n 0000570555 00000 n 0000572271 00000 n 0000572427 00000 n 0000572579 00000 n 0000572734 00000 n 0000572923 00000 n 0000573074 00000 n 0000573230 00000 n 0000573413 00000 n 0000573596 00000 n 0000573785 00000 n 0000573937 00000 n 0000574126 00000 n 0000574725 00000 n 0000572028 00000 n 0000570785 00000 n 0000574312 00000 n 0000574371 00000 n 0000574489 00000 n 0000574607 00000 n 0000576460 00000 n 0000576612 00000 n 0000576801 00000 n 0000576987 00000 n 0000577139 00000 n 0000577326 00000 n 0000577804 00000 n 0000576271 00000 n 0000574853 00000 n 0000577510 00000 n 0000577569 00000 n 0000577687 00000 n 0000581051 00000 n 0000581411 00000 n 0000580907 00000 n 0000577932 00000 n 0000581234 00000 n 0000581293 00000 n 0000584937 00000 n 0000585120 00000 n 0000585303 00000 n 0000585722 00000 n 0000584775 00000 n 0000581552 00000 n 0000585486 00000 n 0000585545 00000 n 0000585663 00000 n 0000589187 00000 n 0000589370 00000 n 0000589730 00000 n 0000589034 00000 n 0000585863 00000 n 0000589553 00000 n 0000589671 00000 n 0001438465 00000 n 0000592976 00000 n 0000592676 00000 n 0000589871 00000 n 0000592799 00000 n 0000592917 00000 n 0000595385 00000 n 0000595568 00000 n 0000595748 00000 n 0000595931 00000 n 0000599113 00000 n 0000599296 00000 n 0000596998 00000 n 0000595214 00000 n 0000593117 00000 n 0000596114 00000 n 0000596232 00000 n 0000596350 00000 n 0000596468 00000 n 0000596584 00000 n 0000596759 00000 n 0000596939 00000 n 0000600018 00000 n 0000600136 00000 n 0000603614 00000 n 0000607894 00000 n 0000599478 00000 n 0000599661 00000 n 0000600254 00000 n 0000598942 00000 n 0000597138 00000 n 0000599843 00000 n 0000600077 00000 n 0000600195 00000 n 0000603008 00000 n 0000603191 00000 n 0000603373 00000 n 0000603731 00000 n 0000602846 00000 n 0000600395 00000 n 0000603555 00000 n 0000603673 00000 n 0000606458 00000 n 0000606641 00000 n 0000606823 00000 n 0000607006 00000 n 0000607188 00000 n 0000607344 00000 n 0000607526 00000 n 0000607681 00000 n 0000609820 00000 n 0000608256 00000 n 0000606251 00000 n 0000603925 00000 n 0000607835 00000 n 0000607958 00000 n 0000608138 00000 n 0000608197 00000 n 0000627751 00000 n 0000610003 00000 n 0000610185 00000 n 0000610398 00000 n 0000610612 00000 n 0000610823 00000 n 0000611037 00000 n 0000611251 00000 n 0000611434 00000 n 0000611588 00000 n 0000611769 00000 n 0000611951 00000 n 0000612134 00000 n 0000612317 00000 n 0000612500 00000 n 0000612683 00000 n 0000612866 00000 n 0000613048 00000 n 0000613230 00000 n 0000613413 00000 n 0000614997 00000 n 0000613772 00000 n 0000609505 00000 n 0000608450 00000 n 0000613595 00000 n 0000613654 00000 n 0000613713 00000 n 0001438590 00000 n 0000627869 00000 n 0000628049 00000 n 0000628167 00000 n 0000628231 00000 n 0000628295 00000 n 0000628359 00000 n 0000628423 00000 n 0000634367 00000 n 0000634489 00000 n 0000637438 00000 n 0000637561 00000 n 0000637684 00000 n 0000637806 00000 n 0000637929 00000 n 0000638052 00000 n 0000638173 00000 n 0000638296 00000 n 0000638419 00000 n 0000615179 00000 n 0000615362 00000 n 0000615545 00000 n 0000615727 00000 n 0000615909 00000 n 0000616092 00000 n 0000616274 00000 n 0000616457 00000 n 0000616640 00000 n 0000616823 00000 n 0000617006 00000 n 0000617189 00000 n 0000617372 00000 n 0000617554 00000 n 0000617737 00000 n 0000620048 00000 n 0000620230 00000 n 0000618035 00000 n 0000614718 00000 n 0000613885 00000 n 0000617917 00000 n 0000617976 00000 n 0000641145 00000 n 0000641267 00000 n 0000641390 00000 n 0000641513 00000 n 0000641636 00000 n 0000641754 00000 n 0000641877 00000 n 0000644430 00000 n 0000644553 00000 n 0000644671 00000 n 0000644794 00000 n 0000644917 00000 n 0000645040 00000 n 0000649676 00000 n 0000649799 00000 n 0000649980 00000 n 0000620386 00000 n 0000620567 00000 n 0000620748 00000 n 0000620928 00000 n 0000621108 00000 n 0000621290 00000 n 0000621472 00000 n 0000621654 00000 n 0000621836 00000 n 0000622018 00000 n 0000622200 00000 n 0000622381 00000 n 0000622563 00000 n 0000622745 00000 n 0000622927 00000 n 0000623107 00000 n 0000623289 00000 n 0000623471 00000 n 0000623653 00000 n 0000623835 00000 n 0000624017 00000 n 0000624199 00000 n 0000624381 00000 n 0000624562 00000 n 0000624744 00000 n 0000627296 00000 n 0000625040 00000 n 0000619670 00000 n 0000618148 00000 n 0000624923 00000 n 0000627478 00000 n 0000628663 00000 n 0000627143 00000 n 0000625153 00000 n 0000627634 00000 n 0000627810 00000 n 0000627933 00000 n 0000628108 00000 n 0000628604 00000 n 0000631219 00000 n 0000631374 00000 n 0000631563 00000 n 0000631749 00000 n 0000631931 00000 n 0000632114 00000 n 0000632297 00000 n 0000632480 00000 n 0000632663 00000 n 0000632846 00000 n 0000633029 00000 n 0000633212 00000 n 0000633395 00000 n 0000633577 00000 n 0000633760 00000 n 0000633942 00000 n 0000634125 00000 n 0000635687 00000 n 0000634548 00000 n 0000630931 00000 n 0000628830 00000 n 0000634308 00000 n 0000634430 00000 n 0000635869 00000 n 0000636050 00000 n 0000636232 00000 n 0000636414 00000 n 0000636595 00000 n 0000636776 00000 n 0000636958 00000 n 0000637139 00000 n 0000639997 00000 n 0000638542 00000 n 0000635471 00000 n 0000634676 00000 n 0000637320 00000 n 0000637379 00000 n 0000637502 00000 n 0000637625 00000 n 0000637747 00000 n 0000637870 00000 n 0000637993 00000 n 0000638114 00000 n 0000638237 00000 n 0000638360 00000 n 0000638483 00000 n 0000640179 00000 n 0000640361 00000 n 0000640543 00000 n 0000640725 00000 n 0000640906 00000 n 0000641940 00000 n 0000639808 00000 n 0000638628 00000 n 0000641086 00000 n 0000641209 00000 n 0000641331 00000 n 0000641454 00000 n 0000641577 00000 n 0000641695 00000 n 0000641818 00000 n 0001438715 00000 n 0000643405 00000 n 0000643587 00000 n 0000643768 00000 n 0000643950 00000 n 0000644132 00000 n 0000646537 00000 n 0000645104 00000 n 0000643225 00000 n 0000642054 00000 n 0000644312 00000 n 0000644371 00000 n 0000644494 00000 n 0000644612 00000 n 0000644735 00000 n 0000644858 00000 n 0000644981 00000 n 0000646719 00000 n 0000646900 00000 n 0000647082 00000 n 0000647238 00000 n 0000647421 00000 n 0000647576 00000 n 0000647732 00000 n 0000647914 00000 n 0000648096 00000 n 0000648278 00000 n 0000648460 00000 n 0000648643 00000 n 0000648826 00000 n 0000649009 00000 n 0000649192 00000 n 0000649375 00000 n 0000652110 00000 n 0000652293 00000 n 0000650333 00000 n 0000646249 00000 n 0000645218 00000 n 0000649558 00000 n 0000649617 00000 n 0000649740 00000 n 0000649863 00000 n 0000650039 00000 n 0000650215 00000 n 0000650274 00000 n 0000664935 00000 n 0000652476 00000 n 0000652658 00000 n 0000652840 00000 n 0000653022 00000 n 0000653236 00000 n 0000653451 00000 n 0000653666 00000 n 0000654095 00000 n 0000654309 00000 n 0000654524 00000 n 0000654707 00000 n 0000654863 00000 n 0000655019 00000 n 0000655202 00000 n 0000655358 00000 n 0000655540 00000 n 0000655695 00000 n 0000655850 00000 n 0000656006 00000 n 0000656187 00000 n 0000656342 00000 n 0000656497 00000 n 0000656680 00000 n 0000656836 00000 n 0000656992 00000 n 0000657175 00000 n 0000657331 00000 n 0000657486 00000 n 0000657669 00000 n 0000657825 00000 n 0000658008 00000 n 0000658164 00000 n 0000660893 00000 n 0000658580 00000 n 0000651660 00000 n 0000650459 00000 n 0000658345 00000 n 0000658404 00000 n 0000653881 00000 n 0000658463 00000 n 0000658522 00000 n 0000669646 00000 n 0000669764 00000 n 0000669827 00000 n 0000669890 00000 n 0000669953 00000 n 0000670016 00000 n 0000670079 00000 n 0000675823 00000 n 0000675941 00000 n 0000681156 00000 n 0000681274 00000 n 0000661049 00000 n 0000661231 00000 n 0000661414 00000 n 0000661597 00000 n 0000661779 00000 n 0000661935 00000 n 0000662118 00000 n 0000662301 00000 n 0000662457 00000 n 0000662640 00000 n 0000662829 00000 n 0000663011 00000 n 0000663194 00000 n 0000663349 00000 n 0000663520 00000 n 0000663702 00000 n 0000663873 00000 n 0000664055 00000 n 0000664226 00000 n 0000664408 00000 n 0000664579 00000 n 0000665583 00000 n 0000660560 00000 n 0000658693 00000 n 0000664760 00000 n 0000664994 00000 n 0000665116 00000 n 0000665233 00000 n 0000665350 00000 n 0000665467 00000 n 0000667554 00000 n 0000667725 00000 n 0000667907 00000 n 0000668078 00000 n 0000668260 00000 n 0000668431 00000 n 0000668613 00000 n 0000668769 00000 n 0000668925 00000 n 0000669081 00000 n 0000673034 00000 n 0000673190 00000 n 0000673346 00000 n 0000673502 00000 n 0000670317 00000 n 0000667329 00000 n 0000665682 00000 n 0000669236 00000 n 0000669295 00000 n 0000669412 00000 n 0000669529 00000 n 0000669705 00000 n 0000670259 00000 n 0000673685 00000 n 0000673874 00000 n 0000674030 00000 n 0000674218 00000 n 0000674403 00000 n 0000674558 00000 n 0000674714 00000 n 0000674903 00000 n 0000675089 00000 n 0000675243 00000 n 0000675426 00000 n 0000675609 00000 n 0000678152 00000 n 0000676059 00000 n 0000672755 00000 n 0000670431 00000 n 0000675764 00000 n 0000675882 00000 n 0000676000 00000 n 0001438840 00000 n 0000678340 00000 n 0000678496 00000 n 0000678685 00000 n 0000678871 00000 n 0000679027 00000 n 0000679210 00000 n 0000679393 00000 n 0000679548 00000 n 0000679731 00000 n 0000679887 00000 n 0000680043 00000 n 0000680232 00000 n 0000680387 00000 n 0000680543 00000 n 0000680726 00000 n 0000680908 00000 n 0000681510 00000 n 0000677864 00000 n 0000676227 00000 n 0000681097 00000 n 0000681215 00000 n 0000681333 00000 n 0000681451 00000 n 0000683141 00000 n 0000683297 00000 n 0000683484 00000 n 0000683668 00000 n 0000683824 00000 n 0000684013 00000 n 0000684493 00000 n 0000682952 00000 n 0000681638 00000 n 0000684199 00000 n 0000684316 00000 n 0000684434 00000 n 0000686160 00000 n 0000686315 00000 n 0000686504 00000 n 0000686690 00000 n 0000686846 00000 n 0000687002 00000 n 0000687158 00000 n 0000687314 00000 n 0000687497 00000 n 0000687679 00000 n 0000689748 00000 n 0000689931 00000 n 0000688333 00000 n 0000685935 00000 n 0000684621 00000 n 0000687860 00000 n 0000688035 00000 n 0000688215 00000 n 0000688274 00000 n 0000719787 00000 n 0000736045 00000 n 0000719905 00000 n 0000690113 00000 n 0000690296 00000 n 0000690479 00000 n 0000690662 00000 n 0000690844 00000 n 0000691027 00000 n 0000691209 00000 n 0000691392 00000 n 0000691574 00000 n 0000691729 00000 n 0000691885 00000 n 0000692067 00000 n 0000692222 00000 n 0000692404 00000 n 0000692586 00000 n 0000692767 00000 n 0000692949 00000 n 0000693131 00000 n 0000693313 00000 n 0000693496 00000 n 0000693679 00000 n 0000693862 00000 n 0000694044 00000 n 0000694227 00000 n 0000694409 00000 n 0000694589 00000 n 0000694770 00000 n 0000694949 00000 n 0000695129 00000 n 0000695312 00000 n 0000697777 00000 n 0000697960 00000 n 0000698174 00000 n 0000698389 00000 n 0000698604 00000 n 0000695554 00000 n 0000689325 00000 n 0000688473 00000 n 0000695495 00000 n 0000720028 00000 n 0000720150 00000 n 0000720268 00000 n 0000720391 00000 n 0000720514 00000 n 0000720637 00000 n 0000698818 00000 n 0000699032 00000 n 0000699247 00000 n 0000699462 00000 n 0000699676 00000 n 0000699889 00000 n 0000700103 00000 n 0000700317 00000 n 0000700532 00000 n 0000700745 00000 n 0000700960 00000 n 0000701142 00000 n 0000701325 00000 n 0000701508 00000 n 0000701664 00000 n 0000701820 00000 n 0000702003 00000 n 0000702159 00000 n 0000702315 00000 n 0000702470 00000 n 0000702653 00000 n 0000702808 00000 n 0000702964 00000 n 0000703146 00000 n 0000703301 00000 n 0000703457 00000 n 0000703640 00000 n 0000703795 00000 n 0000703949 00000 n 0000704132 00000 n 0000704288 00000 n 0000704442 00000 n 0000704625 00000 n 0000704781 00000 n 0000704964 00000 n 0000705120 00000 n 0000705303 00000 n 0000708895 00000 n 0000709078 00000 n 0000705635 00000 n 0000697264 00000 n 0000695666 00000 n 0000705458 00000 n 0000705517 00000 n 0000705576 00000 n 0000727301 00000 n 0000727419 00000 n 0000727483 00000 n 0000727547 00000 n 0000727611 00000 n 0000727675 00000 n 0000727738 00000 n 0000727802 00000 n 0000727866 00000 n 0000727930 00000 n 0000727994 00000 n 0000728058 00000 n 0000728122 00000 n 0000728186 00000 n 0000728250 00000 n 0000745891 00000 n 0000746012 00000 n 0000746130 00000 n 0000709234 00000 n 0000709415 00000 n 0000709571 00000 n 0000709754 00000 n 0000709937 00000 n 0000710120 00000 n 0000710276 00000 n 0000710458 00000 n 0000710614 00000 n 0000710797 00000 n 0000710953 00000 n 0000711136 00000 n 0000711318 00000 n 0000711474 00000 n 0000711630 00000 n 0000711786 00000 n 0000711942 00000 n 0000712097 00000 n 0000712253 00000 n 0000712436 00000 n 0000712592 00000 n 0000712774 00000 n 0000712962 00000 n 0000713144 00000 n 0000713327 00000 n 0000713477 00000 n 0000713627 00000 n 0000713777 00000 n 0000713927 00000 n 0000714074 00000 n 0000714256 00000 n 0000714437 00000 n 0000716825 00000 n 0000717008 00000 n 0000717191 00000 n 0000714767 00000 n 0000708454 00000 n 0000705761 00000 n 0000714592 00000 n 0000714651 00000 n 0001438965 00000 n 0000762412 00000 n 0000717374 00000 n 0000717557 00000 n 0000717740 00000 n 0000717922 00000 n 0000718105 00000 n 0000718288 00000 n 0000718470 00000 n 0000718626 00000 n 0000718782 00000 n 0000718965 00000 n 0000719136 00000 n 0000719318 00000 n 0000719489 00000 n 0000721056 00000 n 0000716546 00000 n 0000714893 00000 n 0000719670 00000 n 0000719846 00000 n 0000719969 00000 n 0000720091 00000 n 0000720209 00000 n 0000720332 00000 n 0000720455 00000 n 0000720578 00000 n 0000720701 00000 n 0000720823 00000 n 0000720940 00000 n 0000722009 00000 n 0000722180 00000 n 0000722362 00000 n 0000722533 00000 n 0000722715 00000 n 0000722886 00000 n 0000723068 00000 n 0000723238 00000 n 0000723419 00000 n 0000723590 00000 n 0000723772 00000 n 0000723943 00000 n 0000724125 00000 n 0000724296 00000 n 0000725295 00000 n 0000721748 00000 n 0000721168 00000 n 0000724477 00000 n 0000724536 00000 n 0000724653 00000 n 0000724770 00000 n 0000724887 00000 n 0000725004 00000 n 0000725121 00000 n 0000725237 00000 n 0000726821 00000 n 0000727001 00000 n 0000732343 00000 n 0000732499 00000 n 0000732680 00000 n 0000728666 00000 n 0000726668 00000 n 0000725381 00000 n 0000727184 00000 n 0000727360 00000 n 0000728431 00000 n 0000728549 00000 n 0000732863 00000 n 0000733019 00000 n 0000733207 00000 n 0000733363 00000 n 0000733552 00000 n 0000733708 00000 n 0000733896 00000 n 0000734082 00000 n 0000734238 00000 n 0000734420 00000 n 0000734603 00000 n 0000734759 00000 n 0000734914 00000 n 0000735100 00000 n 0000735255 00000 n 0000735407 00000 n 0000735563 00000 n 0000735744 00000 n 0000736163 00000 n 0000732019 00000 n 0000728807 00000 n 0000735927 00000 n 0000735986 00000 n 0000736104 00000 n 0000739088 00000 n 0000739271 00000 n 0000739427 00000 n 0000739610 00000 n 0000739799 00000 n 0000739955 00000 n 0000740142 00000 n 0000740386 00000 n 0000738890 00000 n 0000736304 00000 n 0000740327 00000 n 0000742828 00000 n 0000742984 00000 n 0000743167 00000 n 0000743350 00000 n 0000743533 00000 n 0000743689 00000 n 0000743872 00000 n 0000744028 00000 n 0000744184 00000 n 0000744373 00000 n 0000744529 00000 n 0000744685 00000 n 0000744841 00000 n 0000744996 00000 n 0000745152 00000 n 0000745307 00000 n 0000745463 00000 n 0000746248 00000 n 0000742531 00000 n 0000740527 00000 n 0000745832 00000 n 0000745954 00000 n 0000746071 00000 n 0000746189 00000 n 0000745649 00000 n 0001439090 00000 n 0000775391 00000 n 0000748725 00000 n 0000748880 00000 n 0000749036 00000 n 0000749191 00000 n 0000749380 00000 n 0000749569 00000 n 0000749752 00000 n 0000749935 00000 n 0000750122 00000 n 0000750276 00000 n 0000750464 00000 n 0000750945 00000 n 0000748491 00000 n 0000746375 00000 n 0000750650 00000 n 0000750768 00000 n 0000750886 00000 n 0000753482 00000 n 0000753638 00000 n 0000753826 00000 n 0000754189 00000 n 0000753320 00000 n 0000751073 00000 n 0000754012 00000 n 0000754130 00000 n 0000756992 00000 n 0000757147 00000 n 0000757335 00000 n 0000757521 00000 n 0000757704 00000 n 0000761184 00000 n 0000758070 00000 n 0000756812 00000 n 0000754317 00000 n 0000757893 00000 n 0000758011 00000 n 0000761340 00000 n 0000761527 00000 n 0000761712 00000 n 0000761867 00000 n 0000762022 00000 n 0000762204 00000 n 0000764313 00000 n 0000762535 00000 n 0000760986 00000 n 0000758198 00000 n 0000762353 00000 n 0000762476 00000 n 0000764469 00000 n 0000764656 00000 n 0000764841 00000 n 0000764996 00000 n 0000765182 00000 n 0000765368 00000 n 0000765524 00000 n 0000765710 00000 n 0000765896 00000 n 0000766082 00000 n 0000766238 00000 n 0000766393 00000 n 0000766579 00000 n 0000766735 00000 n 0000769874 00000 n 0000770060 00000 n 0000767421 00000 n 0000764043 00000 n 0000762676 00000 n 0000766891 00000 n 0000767065 00000 n 0000767244 00000 n 0000767303 00000 n 0000767362 00000 n 0000771728 00000 n 0000771846 00000 n 0000771964 00000 n 0000775509 00000 n 0000770216 00000 n 0000770402 00000 n 0000770557 00000 n 0000770713 00000 n 0000770869 00000 n 0000771025 00000 n 0000771211 00000 n 0000771397 00000 n 0000772258 00000 n 0000769649 00000 n 0000767548 00000 n 0000771553 00000 n 0000771787 00000 n 0000771905 00000 n 0000772023 00000 n 0000772199 00000 n 0001439215 00000 n 0000775627 00000 n 0000780647 00000 n 0000774342 00000 n 0000774496 00000 n 0000774682 00000 n 0000774837 00000 n 0000774992 00000 n 0000775177 00000 n 0000775745 00000 n 0000774153 00000 n 0000772398 00000 n 0000775332 00000 n 0000775450 00000 n 0000775568 00000 n 0000775686 00000 n 0000777809 00000 n 0000777995 00000 n 0000778179 00000 n 0000778364 00000 n 0000778550 00000 n 0000778735 00000 n 0000778920 00000 n 0000779105 00000 n 0000779291 00000 n 0000779477 00000 n 0000779663 00000 n 0000779849 00000 n 0000780035 00000 n 0000780221 00000 n 0000780404 00000 n 0000783166 00000 n 0000783352 00000 n 0000783537 00000 n 0000780941 00000 n 0000777539 00000 n 0000775859 00000 n 0000780588 00000 n 0000780706 00000 n 0000780882 00000 n 0000804594 00000 n 0000811154 00000 n 0000810913 00000 n 0000804712 00000 n 0000816245 00000 n 0000804835 00000 n 0000816363 00000 n 0000804957 00000 n 0000816486 00000 n 0000805080 00000 n 0000821432 00000 n 0000783723 00000 n 0000783909 00000 n 0000784095 00000 n 0000784281 00000 n 0000784467 00000 n 0000784653 00000 n 0000784870 00000 n 0000785088 00000 n 0000785306 00000 n 0000785523 00000 n 0000785740 00000 n 0000785958 00000 n 0000786175 00000 n 0000786610 00000 n 0000786827 00000 n 0000787045 00000 n 0000787263 00000 n 0000787480 00000 n 0000787697 00000 n 0000787915 00000 n 0000788350 00000 n 0000788535 00000 n 0000788690 00000 n 0000788876 00000 n 0000789032 00000 n 0000789187 00000 n 0000789373 00000 n 0000789529 00000 n 0000789715 00000 n 0000789871 00000 n 0000790057 00000 n 0000790213 00000 n 0000790399 00000 n 0000790555 00000 n 0000790741 00000 n 0000790897 00000 n 0000791083 00000 n 0000795195 00000 n 0000791416 00000 n 0000782653 00000 n 0000781081 00000 n 0000791239 00000 n 0000791298 00000 n 0000786393 00000 n 0000788133 00000 n 0000791357 00000 n 0000805203 00000 n 0000821550 00000 n 0000805326 00000 n 0000805628 00000 n 0000805746 00000 n 0000805810 00000 n 0000805874 00000 n 0000805938 00000 n 0000806002 00000 n 0000806066 00000 n 0000806130 00000 n 0000806194 00000 n 0000810407 00000 n 0000810471 00000 n 0000810535 00000 n 0000810599 00000 n 0000810663 00000 n 0000810727 00000 n 0000810791 00000 n 0000811031 00000 n 0000795380 00000 n 0000795563 00000 n 0000795717 00000 n 0000795900 00000 n 0000796089 00000 n 0000796244 00000 n 0000796431 00000 n 0000796587 00000 n 0000796776 00000 n 0000796965 00000 n 0000797154 00000 n 0000797310 00000 n 0000797499 00000 n 0000797687 00000 n 0000797872 00000 n 0000798061 00000 n 0000798249 00000 n 0000798432 00000 n 0000798588 00000 n 0000798740 00000 n 0000798925 00000 n 0000799111 00000 n 0000799295 00000 n 0000799480 00000 n 0000799664 00000 n 0000799849 00000 n 0000800034 00000 n 0000800393 00000 n 0000794808 00000 n 0000791542 00000 n 0000800217 00000 n 0000800276 00000 n 0000801708 00000 n 0000801894 00000 n 0000802080 00000 n 0000802265 00000 n 0000802450 00000 n 0000802636 00000 n 0000802822 00000 n 0000803008 00000 n 0000803194 00000 n 0000803380 00000 n 0000803565 00000 n 0000803751 00000 n 0000803937 00000 n 0000804123 00000 n 0000804293 00000 n 0000806257 00000 n 0000801438 00000 n 0000800533 00000 n 0000804477 00000 n 0000804653 00000 n 0000804776 00000 n 0000804898 00000 n 0000805021 00000 n 0000805144 00000 n 0000805267 00000 n 0000805390 00000 n 0000805511 00000 n 0000805687 00000 n 0000808677 00000 n 0000808862 00000 n 0000809048 00000 n 0000809234 00000 n 0000809420 00000 n 0000809606 00000 n 0000809791 00000 n 0000809976 00000 n 0000810163 00000 n 0000811272 00000 n 0000808461 00000 n 0000806357 00000 n 0000810348 00000 n 0000810972 00000 n 0000811095 00000 n 0000811213 00000 n 0001439340 00000 n 0000813686 00000 n 0000813842 00000 n 0000814031 00000 n 0000814219 00000 n 0000814407 00000 n 0000814596 00000 n 0000814783 00000 n 0000814970 00000 n 0000815126 00000 n 0000815313 00000 n 0000815498 00000 n 0000815686 00000 n 0000815874 00000 n 0000816030 00000 n 0000818788 00000 n 0000818977 00000 n 0000816544 00000 n 0000813425 00000 n 0000811399 00000 n 0000816186 00000 n 0000816304 00000 n 0000816427 00000 n 0000819166 00000 n 0000819354 00000 n 0000819542 00000 n 0000819698 00000 n 0000819886 00000 n 0000820072 00000 n 0000820228 00000 n 0000820411 00000 n 0000820600 00000 n 0000820789 00000 n 0000820944 00000 n 0000821130 00000 n 0000821608 00000 n 0000818527 00000 n 0000816698 00000 n 0000821314 00000 n 0000821373 00000 n 0000821491 00000 n 0000823519 00000 n 0000823675 00000 n 0000823863 00000 n 0000824049 00000 n 0000824235 00000 n 0000824421 00000 n 0000824607 00000 n 0000824793 00000 n 0000824979 00000 n 0000825165 00000 n 0000825351 00000 n 0000825536 00000 n 0000828364 00000 n 0000828550 00000 n 0000828736 00000 n 0000828922 00000 n 0000826194 00000 n 0000823276 00000 n 0000821736 00000 n 0000825721 00000 n 0000825780 00000 n 0000825955 00000 n 0000826135 00000 n 0000861870 00000 n 0000861988 00000 n 0000862110 00000 n 0000829108 00000 n 0000829294 00000 n 0000829480 00000 n 0000829665 00000 n 0000829851 00000 n 0000830037 00000 n 0000830223 00000 n 0000830409 00000 n 0000830595 00000 n 0000830781 00000 n 0000830967 00000 n 0000831153 00000 n 0000831339 00000 n 0000831524 00000 n 0000831709 00000 n 0000831894 00000 n 0000832079 00000 n 0000832264 00000 n 0000832449 00000 n 0000832635 00000 n 0000832821 00000 n 0000833007 00000 n 0000833193 00000 n 0000833379 00000 n 0000833563 00000 n 0000833749 00000 n 0000833935 00000 n 0000834121 00000 n 0000834306 00000 n 0000834491 00000 n 0000834677 00000 n 0000834863 00000 n 0000835048 00000 n 0000835233 00000 n 0000835419 00000 n 0000835605 00000 n 0000835791 00000 n 0000835976 00000 n 0000836160 00000 n 0000836346 00000 n 0000838916 00000 n 0000839102 00000 n 0000839287 00000 n 0000836590 00000 n 0000827833 00000 n 0000826348 00000 n 0000836531 00000 n 0000862232 00000 n 0000862355 00000 n 0000862477 00000 n 0000862599 00000 n 0000869579 00000 n 0000869702 00000 n 0000869824 00000 n 0000869946 00000 n 0000870069 00000 n 0000870192 00000 n 0000870313 00000 n 0000870436 00000 n 0000870559 00000 n 0000875595 00000 n 0000875718 00000 n 0000875840 00000 n 0000839473 00000 n 0000839659 00000 n 0000839845 00000 n 0000840030 00000 n 0000840216 00000 n 0000840402 00000 n 0000840588 00000 n 0000840774 00000 n 0000840960 00000 n 0000841146 00000 n 0000841331 00000 n 0000841516 00000 n 0000841702 00000 n 0000841888 00000 n 0000842074 00000 n 0000842260 00000 n 0000842446 00000 n 0000842631 00000 n 0000842847 00000 n 0000843064 00000 n 0000843498 00000 n 0000843716 00000 n 0000843933 00000 n 0000844151 00000 n 0000844337 00000 n 0000844493 00000 n 0000844678 00000 n 0000844833 00000 n 0000845017 00000 n 0000848007 00000 n 0000848193 00000 n 0000845348 00000 n 0000838484 00000 n 0000836702 00000 n 0000845172 00000 n 0000845231 00000 n 0000843281 00000 n 0000845289 00000 n 0000875963 00000 n 0000876086 00000 n 0000876209 00000 n 0000876332 00000 n 0000876455 00000 n 0000876577 00000 n 0000880942 00000 n 0000881065 00000 n 0000881188 00000 n 0000881369 00000 n 0000881487 00000 n 0000881551 00000 n 0000881615 00000 n 0000881679 00000 n 0000881743 00000 n 0000881807 00000 n 0000848348 00000 n 0000848533 00000 n 0000848689 00000 n 0000848875 00000 n 0000849031 00000 n 0000849187 00000 n 0000849372 00000 n 0000849526 00000 n 0000849681 00000 n 0000849865 00000 n 0000850050 00000 n 0000850205 00000 n 0000850391 00000 n 0000850576 00000 n 0000850761 00000 n 0000850949 00000 n 0000851105 00000 n 0000851288 00000 n 0000851471 00000 n 0000851657 00000 n 0000851810 00000 n 0000851966 00000 n 0000852149 00000 n 0000852332 00000 n 0000852514 00000 n 0000852664 00000 n 0000852850 00000 n 0000853035 00000 n 0000853191 00000 n 0000855741 00000 n 0000855926 00000 n 0000856112 00000 n 0000856297 00000 n 0000853552 00000 n 0000847593 00000 n 0000845474 00000 n 0000853377 00000 n 0000853436 00000 n 0001439465 00000 n 0000941685 00000 n 0000941803 00000 n 0000946334 00000 n 0000958575 00000 n 0000856453 00000 n 0000856638 00000 n 0000856824 00000 n 0000856980 00000 n 0000857166 00000 n 0000857352 00000 n 0000857537 00000 n 0000857693 00000 n 0000857879 00000 n 0000858064 00000 n 0000858249 00000 n 0000858405 00000 n 0000858591 00000 n 0000858777 00000 n 0000858963 00000 n 0000859149 00000 n 0000859335 00000 n 0000859521 00000 n 0000859707 00000 n 0000859893 00000 n 0000860079 00000 n 0000860265 00000 n 0000860451 00000 n 0000860637 00000 n 0000860823 00000 n 0000861009 00000 n 0000861195 00000 n 0000861381 00000 n 0000861567 00000 n 0000864444 00000 n 0000864630 00000 n 0000862663 00000 n 0000855309 00000 n 0000853678 00000 n 0000861753 00000 n 0000861929 00000 n 0000862052 00000 n 0000862173 00000 n 0000862296 00000 n 0000862419 00000 n 0000862540 00000 n 0000864816 00000 n 0000865002 00000 n 0000865188 00000 n 0000865374 00000 n 0000865560 00000 n 0000865746 00000 n 0000865932 00000 n 0000866117 00000 n 0000866303 00000 n 0000866489 00000 n 0000866675 00000 n 0000866861 00000 n 0000867047 00000 n 0000867233 00000 n 0000867419 00000 n 0000867605 00000 n 0000867789 00000 n 0000867975 00000 n 0000868161 00000 n 0000868347 00000 n 0000868533 00000 n 0000868719 00000 n 0000868905 00000 n 0000869090 00000 n 0000869275 00000 n 0000870623 00000 n 0000864066 00000 n 0000862775 00000 n 0000869461 00000 n 0000869520 00000 n 0000869643 00000 n 0000869766 00000 n 0000869887 00000 n 0000870010 00000 n 0000870133 00000 n 0000870254 00000 n 0000870377 00000 n 0000870500 00000 n 0000872506 00000 n 0000872692 00000 n 0000872877 00000 n 0000873063 00000 n 0000873249 00000 n 0000873435 00000 n 0000873621 00000 n 0000873807 00000 n 0000873993 00000 n 0000874179 00000 n 0000874365 00000 n 0000874550 00000 n 0000874736 00000 n 0000874919 00000 n 0000875105 00000 n 0000875291 00000 n 0000879154 00000 n 0000876641 00000 n 0000872227 00000 n 0000870735 00000 n 0000875477 00000 n 0000875536 00000 n 0000875659 00000 n 0000875782 00000 n 0000875904 00000 n 0000876027 00000 n 0000876150 00000 n 0000876273 00000 n 0000876396 00000 n 0000876518 00000 n 0000879339 00000 n 0000879525 00000 n 0000879711 00000 n 0000879897 00000 n 0000880082 00000 n 0000880267 00000 n 0000880452 00000 n 0000880638 00000 n 0000885618 00000 n 0000885774 00000 n 0000885960 00000 n 0000882047 00000 n 0000878938 00000 n 0000876753 00000 n 0000880824 00000 n 0000880883 00000 n 0000881006 00000 n 0000881129 00000 n 0000881252 00000 n 0000881428 00000 n 0000881988 00000 n 0000886116 00000 n 0000886302 00000 n 0000886488 00000 n 0000886674 00000 n 0000886860 00000 n 0000887046 00000 n 0000887202 00000 n 0000887385 00000 n 0000887571 00000 n 0000887754 00000 n 0000887936 00000 n 0000888178 00000 n 0000885357 00000 n 0000882187 00000 n 0000888119 00000 n 0000891664 00000 n 0000891820 00000 n 0000892004 00000 n 0000892189 00000 n 0000892375 00000 n 0000892531 00000 n 0000892687 00000 n 0000892842 00000 n 0000892998 00000 n 0000893184 00000 n 0000893370 00000 n 0000893556 00000 n 0000897254 00000 n 0000893893 00000 n 0000891421 00000 n 0000888332 00000 n 0000893712 00000 n 0000893834 00000 n 0001439590 00000 n 0000897440 00000 n 0000897625 00000 n 0000897811 00000 n 0000897997 00000 n 0000898183 00000 n 0000898367 00000 n 0000898553 00000 n 0000898924 00000 n 0000899109 00000 n 0000902719 00000 n 0000902875 00000 n 0000903058 00000 n 0000903241 00000 n 0000903424 00000 n 0000899354 00000 n 0000897020 00000 n 0000894020 00000 n 0000899295 00000 n 0000898739 00000 n 0000903607 00000 n 0000903763 00000 n 0000903947 00000 n 0000904102 00000 n 0000904287 00000 n 0000904473 00000 n 0000904622 00000 n 0000908435 00000 n 0000908621 00000 n 0000908807 00000 n 0000905338 00000 n 0000902476 00000 n 0000899495 00000 n 0000904807 00000 n 0000904866 00000 n 0000904925 00000 n 0000904984 00000 n 0000905043 00000 n 0000905102 00000 n 0000905161 00000 n 0000905220 00000 n 0000905279 00000 n 0000908993 00000 n 0000909178 00000 n 0000909363 00000 n 0000909549 00000 n 0000909735 00000 n 0000909921 00000 n 0000910106 00000 n 0000910290 00000 n 0000910473 00000 n 0000910657 00000 n 0000910841 00000 n 0000911026 00000 n 0000911210 00000 n 0000911394 00000 n 0000911580 00000 n 0000911766 00000 n 0000911952 00000 n 0000912138 00000 n 0000912383 00000 n 0000908111 00000 n 0000905478 00000 n 0000912324 00000 n 0000916795 00000 n 0000916981 00000 n 0000917137 00000 n 0000917323 00000 n 0000921055 00000 n 0000917567 00000 n 0000916624 00000 n 0000912496 00000 n 0000917508 00000 n 0000921211 00000 n 0000921397 00000 n 0000921581 00000 n 0000921767 00000 n 0000921953 00000 n 0000922139 00000 n 0000922323 00000 n 0000922479 00000 n 0000922724 00000 n 0000920839 00000 n 0000917666 00000 n 0000922665 00000 n 0000926539 00000 n 0000926724 00000 n 0000926910 00000 n 0000927066 00000 n 0000927222 00000 n 0000927378 00000 n 0000927560 00000 n 0000927746 00000 n 0000928018 00000 n 0000926332 00000 n 0000922837 00000 n 0000927900 00000 n 0000927959 00000 n 0001439715 00000 n 0000931864 00000 n 0000932020 00000 n 0000932205 00000 n 0000932391 00000 n 0000932547 00000 n 0000932732 00000 n 0000932917 00000 n 0000933100 00000 n 0000933283 00000 n 0000933433 00000 n 0000933588 00000 n 0000933744 00000 n 0000933927 00000 n 0000934083 00000 n 0000934239 00000 n 0000934395 00000 n 0000934550 00000 n 0000934706 00000 n 0000937794 00000 n 0000937949 00000 n 0000938137 00000 n 0000938291 00000 n 0000938474 00000 n 0000938657 00000 n 0000935209 00000 n 0000931567 00000 n 0000928144 00000 n 0000934855 00000 n 0000934914 00000 n 0000934973 00000 n 0000935032 00000 n 0000935150 00000 n 0000938839 00000 n 0000939025 00000 n 0000939211 00000 n 0000939366 00000 n 0000939548 00000 n 0000939704 00000 n 0000939892 00000 n 0000940078 00000 n 0000940233 00000 n 0000940418 00000 n 0000940604 00000 n 0000940789 00000 n 0000940945 00000 n 0000941131 00000 n 0000941317 00000 n 0000941471 00000 n 0000944017 00000 n 0000944173 00000 n 0000944359 00000 n 0000941862 00000 n 0000937461 00000 n 0000935336 00000 n 0000941626 00000 n 0000941744 00000 n 0000944545 00000 n 0000944700 00000 n 0000944885 00000 n 0000945040 00000 n 0000945195 00000 n 0000945379 00000 n 0000945565 00000 n 0000945721 00000 n 0000945904 00000 n 0000946060 00000 n 0000949652 00000 n 0000949808 00000 n 0000946511 00000 n 0000943765 00000 n 0000942003 00000 n 0000946216 00000 n 0000946275 00000 n 0000946393 00000 n 0000949993 00000 n 0000950178 00000 n 0000950333 00000 n 0000953264 00000 n 0000950607 00000 n 0000949472 00000 n 0000946638 00000 n 0000950489 00000 n 0000950548 00000 n 0000953420 00000 n 0000953607 00000 n 0000953792 00000 n 0000953977 00000 n 0000954161 00000 n 0000954346 00000 n 0000954531 00000 n 0000954715 00000 n 0000957532 00000 n 0000954959 00000 n 0000953048 00000 n 0000950734 00000 n 0000954900 00000 n 0000957717 00000 n 0000957902 00000 n 0000958087 00000 n 0000958272 00000 n 0000958815 00000 n 0000957352 00000 n 0000955085 00000 n 0000958458 00000 n 0000958634 00000 n 0001439840 00000 n 0000960143 00000 n 0000960328 00000 n 0000960515 00000 n 0000960702 00000 n 0000960889 00000 n 0000961076 00000 n 0000961263 00000 n 0000962036 00000 n 0000959945 00000 n 0000958928 00000 n 0000961450 00000 n 0000961684 00000 n 0000961859 00000 n 0000961918 00000 n 0000961977 00000 n 0000966887 00000 n 0000967009 00000 n 0000967132 00000 n 0000967255 00000 n 0000967378 00000 n 0000963990 00000 n 0000964172 00000 n 0000964355 00000 n 0000964544 00000 n 0000964733 00000 n 0000964921 00000 n 0000965110 00000 n 0000965297 00000 n 0000965480 00000 n 0000965663 00000 n 0000965846 00000 n 0000966029 00000 n 0000966212 00000 n 0000966395 00000 n 0000966580 00000 n 0000967797 00000 n 0000963720 00000 n 0000962148 00000 n 0000966769 00000 n 0000966828 00000 n 0000966951 00000 n 0000967073 00000 n 0000967196 00000 n 0000967319 00000 n 0000967442 00000 n 0000967623 00000 n 0000967682 00000 n 0000973374 00000 n 0000973550 00000 n 0000973786 00000 n 0000970318 00000 n 0000970506 00000 n 0000970689 00000 n 0000970872 00000 n 0000971055 00000 n 0000971236 00000 n 0000971419 00000 n 0000971602 00000 n 0000971787 00000 n 0000971975 00000 n 0000972158 00000 n 0000972341 00000 n 0000972524 00000 n 0000972706 00000 n 0000972889 00000 n 0000973072 00000 n 0000975528 00000 n 0000973844 00000 n 0000970039 00000 n 0000967964 00000 n 0000973257 00000 n 0000973433 00000 n 0000973609 00000 n 0000973727 00000 n 0000975716 00000 n 0000975905 00000 n 0000976091 00000 n 0000976278 00000 n 0000976465 00000 n 0000976652 00000 n 0000976838 00000 n 0000977023 00000 n 0000977210 00000 n 0000977397 00000 n 0000977935 00000 n 0000975294 00000 n 0000973971 00000 n 0000977584 00000 n 0000977643 00000 n 0000977818 00000 n 0000977876 00000 n 0001434882 00000 n 0001434446 00000 n 0000982070 00000 n 0000982246 00000 n 0000982364 00000 n 0000983757 00000 n 0000983875 00000 n 0000983992 00000 n 0000984110 00000 n 0000986480 00000 n 0000986598 00000 n 0000980253 00000 n 0000980439 00000 n 0000980625 00000 n 0000980811 00000 n 0000980997 00000 n 0000981183 00000 n 0000981369 00000 n 0000981555 00000 n 0000981741 00000 n 0000982423 00000 n 0000980037 00000 n 0000978103 00000 n 0000981895 00000 n 0000982129 00000 n 0000982305 00000 n 0000984169 00000 n 0000983516 00000 n 0000982578 00000 n 0000983639 00000 n 0000983698 00000 n 0000983816 00000 n 0000983934 00000 n 0000984051 00000 n 0001439965 00000 n 0000985799 00000 n 0000985987 00000 n 0000986175 00000 n 0000988113 00000 n 0000986892 00000 n 0000985637 00000 n 0000984283 00000 n 0000986362 00000 n 0000986421 00000 n 0000986539 00000 n 0000986657 00000 n 0000986833 00000 n 0001008016 00000 n 0001008134 00000 n 0001008256 00000 n 0000988301 00000 n 0000988488 00000 n 0000988676 00000 n 0000988864 00000 n 0000989051 00000 n 0000989239 00000 n 0000989427 00000 n 0000989615 00000 n 0000989802 00000 n 0000989990 00000 n 0000990178 00000 n 0000990365 00000 n 0000990553 00000 n 0000990740 00000 n 0000993279 00000 n 0000993466 00000 n 0000993685 00000 n 0000993905 00000 n 0000994344 00000 n 0000994564 00000 n 0000994783 00000 n 0000995002 00000 n 0000995221 00000 n 0000990987 00000 n 0000987843 00000 n 0000987059 00000 n 0000990928 00000 n 0001008379 00000 n 0001008502 00000 n 0001008625 00000 n 0001008747 00000 n 0001008870 00000 n 0001008993 00000 n 0001009115 00000 n 0001009238 00000 n 0001016347 00000 n 0001016470 00000 n 0001016593 00000 n 0001016715 00000 n 0001016838 00000 n 0001016961 00000 n 0001017084 00000 n 0000995441 00000 n 0000995659 00000 n 0000995878 00000 n 0000996316 00000 n 0000996536 00000 n 0000996753 00000 n 0000996940 00000 n 0000997093 00000 n 0000997281 00000 n 0000997437 00000 n 0000997625 00000 n 0000997781 00000 n 0000997969 00000 n 0000998156 00000 n 0000998344 00000 n 0000998531 00000 n 0000998718 00000 n 0000998903 00000 n 0000999089 00000 n 0000999276 00000 n 0000999463 00000 n 0000999941 00000 n 0000992856 00000 n 0000991086 00000 n 0000999648 00000 n 0000999707 00000 n 0000994125 00000 n 0000996097 00000 n 0000999766 00000 n 0000999825 00000 n 0001017265 00000 n 0001017383 00000 n 0001017447 00000 n 0001017511 00000 n 0001017575 00000 n 0001017639 00000 n 0001020480 00000 n 0001020544 00000 n 0001020608 00000 n 0001020672 00000 n 0001020736 00000 n 0001020800 00000 n 0001020864 00000 n 0001020928 00000 n 0001021050 00000 n 0001021168 00000 n 0001028081 00000 n 0001031189 00000 n 0001031365 00000 n 0001031483 00000 n 0001032794 00000 n 0001001903 00000 n 0001002091 00000 n 0001002279 00000 n 0001002466 00000 n 0001002654 00000 n 0001002842 00000 n 0001003029 00000 n 0001003216 00000 n 0001003403 00000 n 0001003590 00000 n 0001003777 00000 n 0001003964 00000 n 0001004152 00000 n 0001004340 00000 n 0001004528 00000 n 0001004715 00000 n 0001004903 00000 n 0001005091 00000 n 0001005276 00000 n 0001005464 00000 n 0001005652 00000 n 0001006027 00000 n 0001006215 00000 n 0001006403 00000 n 0001006590 00000 n 0001006777 00000 n 0001006965 00000 n 0001007339 00000 n 0001007527 00000 n 0001007713 00000 n 0001011170 00000 n 0001011358 00000 n 0001011546 00000 n 0001009302 00000 n 0001001480 00000 n 0001000054 00000 n 0001007899 00000 n 0001008075 00000 n 0001008198 00000 n 0001008320 00000 n 0001008443 00000 n 0001008566 00000 n 0001008688 00000 n 0001008811 00000 n 0001005840 00000 n 0001008934 00000 n 0001009057 00000 n 0001007153 00000 n 0001009179 00000 n 0001011921 00000 n 0001012108 00000 n 0001012296 00000 n 0001012671 00000 n 0001012859 00000 n 0001013047 00000 n 0001013234 00000 n 0001013422 00000 n 0001013610 00000 n 0001013794 00000 n 0001013982 00000 n 0001014170 00000 n 0001014544 00000 n 0001014731 00000 n 0001014919 00000 n 0001015104 00000 n 0001015291 00000 n 0001015478 00000 n 0001015665 00000 n 0001015853 00000 n 0001016041 00000 n 0001017702 00000 n 0001010792 00000 n 0001009401 00000 n 0001016229 00000 n 0001016288 00000 n 0001011734 00000 n 0001016411 00000 n 0001012484 00000 n 0001016534 00000 n 0001016657 00000 n 0001016779 00000 n 0001014358 00000 n 0001016902 00000 n 0001017025 00000 n 0001017148 00000 n 0001017324 00000 n 0001019860 00000 n 0001020048 00000 n 0001020234 00000 n 0001024077 00000 n 0001024265 00000 n 0001021227 00000 n 0001019698 00000 n 0001017815 00000 n 0001020421 00000 n 0001021109 00000 n 0001440090 00000 n 0001024453 00000 n 0001024756 00000 n 0001023915 00000 n 0001021381 00000 n 0001024638 00000 n 0001024697 00000 n 0001027461 00000 n 0001027649 00000 n 0001027836 00000 n 0001028204 00000 n 0001027299 00000 n 0001024897 00000 n 0001028022 00000 n 0001028145 00000 n 0001031547 00000 n 0001030536 00000 n 0001028345 00000 n 0001030659 00000 n 0001030718 00000 n 0001030777 00000 n 0001030836 00000 n 0001030895 00000 n 0001031012 00000 n 0001031130 00000 n 0001031248 00000 n 0001031424 00000 n 0001034782 00000 n 0001032975 00000 n 0001032553 00000 n 0001031687 00000 n 0001032676 00000 n 0001032735 00000 n 0001032853 00000 n 0001034969 00000 n 0001035156 00000 n 0001035342 00000 n 0001035529 00000 n 0001035716 00000 n 0001035903 00000 n 0001036559 00000 n 0001034584 00000 n 0001033075 00000 n 0001036090 00000 n 0001036207 00000 n 0001036382 00000 n 0001036441 00000 n 0001036500 00000 n 0001038491 00000 n 0001038608 00000 n 0001040476 00000 n 0001040593 00000 n 0001040710 00000 n 0001038726 00000 n 0001038250 00000 n 0001036686 00000 n 0001038373 00000 n 0001038432 00000 n 0001038550 00000 n 0001038667 00000 n 0001440215 00000 n 0001040828 00000 n 0001040294 00000 n 0001038853 00000 n 0001040417 00000 n 0001040535 00000 n 0001040651 00000 n 0001040769 00000 n 0001042371 00000 n 0001042523 00000 n 0001042674 00000 n 0001042825 00000 n 0001042976 00000 n 0001043127 00000 n 0001043277 00000 n 0001043427 00000 n 0001043577 00000 n 0001043728 00000 n 0001043879 00000 n 0001044030 00000 n 0001044181 00000 n 0001044332 00000 n 0001044483 00000 n 0001044634 00000 n 0001044786 00000 n 0001044938 00000 n 0001045090 00000 n 0001045241 00000 n 0001045392 00000 n 0001045543 00000 n 0001045694 00000 n 0001045845 00000 n 0001045995 00000 n 0001046144 00000 n 0001046295 00000 n 0001046447 00000 n 0001046598 00000 n 0001046749 00000 n 0001046900 00000 n 0001047049 00000 n 0001047200 00000 n 0001047351 00000 n 0001047502 00000 n 0001047653 00000 n 0001047803 00000 n 0001047954 00000 n 0001048105 00000 n 0001048255 00000 n 0001048406 00000 n 0001048557 00000 n 0001048708 00000 n 0001048859 00000 n 0001049010 00000 n 0001049161 00000 n 0001049311 00000 n 0001049461 00000 n 0001049612 00000 n 0001049763 00000 n 0001049914 00000 n 0001050065 00000 n 0001050216 00000 n 0001050365 00000 n 0001050516 00000 n 0001050666 00000 n 0001052695 00000 n 0001050932 00000 n 0001041732 00000 n 0001040955 00000 n 0001050814 00000 n 0001050873 00000 n 0001052845 00000 n 0001052996 00000 n 0001053147 00000 n 0001053297 00000 n 0001053448 00000 n 0001053597 00000 n 0001053748 00000 n 0001053897 00000 n 0001054048 00000 n 0001054197 00000 n 0001054348 00000 n 0001054499 00000 n 0001054650 00000 n 0001054801 00000 n 0001054952 00000 n 0001055103 00000 n 0001055254 00000 n 0001055405 00000 n 0001055556 00000 n 0001055707 00000 n 0001055859 00000 n 0001056011 00000 n 0001056161 00000 n 0001056311 00000 n 0001056461 00000 n 0001056612 00000 n 0001056761 00000 n 0001056910 00000 n 0001057060 00000 n 0001057210 00000 n 0001057360 00000 n 0001057509 00000 n 0001057658 00000 n 0001057807 00000 n 0001057957 00000 n 0001058107 00000 n 0001058257 00000 n 0001058406 00000 n 0001058555 00000 n 0001058705 00000 n 0001058855 00000 n 0001059005 00000 n 0001059155 00000 n 0001059305 00000 n 0001059455 00000 n 0001059605 00000 n 0001059755 00000 n 0001059905 00000 n 0001060056 00000 n 0001060207 00000 n 0001060358 00000 n 0001060509 00000 n 0001060660 00000 n 0001060811 00000 n 0001060962 00000 n 0001061113 00000 n 0001061264 00000 n 0001061415 00000 n 0001061565 00000 n 0001061715 00000 n 0001061865 00000 n 0001062015 00000 n 0001062166 00000 n 0001062317 00000 n 0001062468 00000 n 0001062676 00000 n 0001051966 00000 n 0001051018 00000 n 0001062617 00000 n 0001064338 00000 n 0001064489 00000 n 0001064640 00000 n 0001064791 00000 n 0001064941 00000 n 0001065091 00000 n 0001065242 00000 n 0001065392 00000 n 0001065542 00000 n 0001065691 00000 n 0001065842 00000 n 0001065993 00000 n 0001066144 00000 n 0001066295 00000 n 0001066446 00000 n 0001066597 00000 n 0001066748 00000 n 0001066899 00000 n 0001067050 00000 n 0001067201 00000 n 0001067352 00000 n 0001067503 00000 n 0001067654 00000 n 0001067805 00000 n 0001067956 00000 n 0001068107 00000 n 0001068259 00000 n 0001068410 00000 n 0001068559 00000 n 0001068710 00000 n 0001068862 00000 n 0001069013 00000 n 0001069163 00000 n 0001069313 00000 n 0001069464 00000 n 0001069615 00000 n 0001069766 00000 n 0001069917 00000 n 0001070068 00000 n 0001070219 00000 n 0001070370 00000 n 0001070521 00000 n 0001070672 00000 n 0001070823 00000 n 0001070974 00000 n 0001071125 00000 n 0001071275 00000 n 0001071426 00000 n 0001071577 00000 n 0001071727 00000 n 0001071877 00000 n 0001072027 00000 n 0001072178 00000 n 0001072329 00000 n 0001072480 00000 n 0001072688 00000 n 0001063708 00000 n 0001062762 00000 n 0001072629 00000 n 0001074667 00000 n 0001074818 00000 n 0001074969 00000 n 0001075119 00000 n 0001075269 00000 n 0001075420 00000 n 0001075571 00000 n 0001075722 00000 n 0001075873 00000 n 0001076022 00000 n 0001076172 00000 n 0001076323 00000 n 0001076472 00000 n 0001076623 00000 n 0001076773 00000 n 0001076924 00000 n 0001077076 00000 n 0001077224 00000 n 0001077375 00000 n 0001077526 00000 n 0001077677 00000 n 0001077828 00000 n 0001077978 00000 n 0001078128 00000 n 0001078279 00000 n 0001078430 00000 n 0001078581 00000 n 0001078731 00000 n 0001078882 00000 n 0001079033 00000 n 0001079184 00000 n 0001079335 00000 n 0001079486 00000 n 0001079635 00000 n 0001079785 00000 n 0001079935 00000 n 0001080086 00000 n 0001080237 00000 n 0001080386 00000 n 0001080535 00000 n 0001080684 00000 n 0001080834 00000 n 0001080984 00000 n 0001081134 00000 n 0001081284 00000 n 0001081434 00000 n 0001081584 00000 n 0001081735 00000 n 0001081886 00000 n 0001082037 00000 n 0001082188 00000 n 0001082338 00000 n 0001082488 00000 n 0001082639 00000 n 0001082789 00000 n 0001082940 00000 n 0001083091 00000 n 0001083242 00000 n 0001083391 00000 n 0001083541 00000 n 0001083692 00000 n 0001083842 00000 n 0001083993 00000 n 0001084143 00000 n 0001084293 00000 n 0001084445 00000 n 0001084597 00000 n 0001084749 00000 n 0001084901 00000 n 0001085053 00000 n 0001085205 00000 n 0001085357 00000 n 0001085566 00000 n 0001073884 00000 n 0001072774 00000 n 0001085507 00000 n 0001087344 00000 n 0001087496 00000 n 0001087648 00000 n 0001087799 00000 n 0001087950 00000 n 0001088101 00000 n 0001088253 00000 n 0001088405 00000 n 0001088554 00000 n 0001088703 00000 n 0001088854 00000 n 0001089004 00000 n 0001089155 00000 n 0001089306 00000 n 0001089457 00000 n 0001089608 00000 n 0001089759 00000 n 0001089910 00000 n 0001090061 00000 n 0001090212 00000 n 0001090362 00000 n 0001090512 00000 n 0001090661 00000 n 0001090812 00000 n 0001090962 00000 n 0001091113 00000 n 0001091263 00000 n 0001091414 00000 n 0001091565 00000 n 0001091716 00000 n 0001091867 00000 n 0001092018 00000 n 0001092167 00000 n 0001092318 00000 n 0001092469 00000 n 0001092620 00000 n 0001092771 00000 n 0001092921 00000 n 0001093071 00000 n 0001093221 00000 n 0001093371 00000 n 0001093521 00000 n 0001093671 00000 n 0001093820 00000 n 0001093970 00000 n 0001094120 00000 n 0001094270 00000 n 0001094421 00000 n 0001094571 00000 n 0001094722 00000 n 0001094873 00000 n 0001095023 00000 n 0001095173 00000 n 0001095322 00000 n 0001095473 00000 n 0001095624 00000 n 0001095775 00000 n 0001095926 00000 n 0001098055 00000 n 0001096135 00000 n 0001086687 00000 n 0001085652 00000 n 0001096076 00000 n 0001440340 00000 n 0001098206 00000 n 0001098357 00000 n 0001098508 00000 n 0001098658 00000 n 0001098809 00000 n 0001098959 00000 n 0001099110 00000 n 0001099259 00000 n 0001099410 00000 n 0001099560 00000 n 0001099710 00000 n 0001099860 00000 n 0001100010 00000 n 0001100161 00000 n 0001100311 00000 n 0001100462 00000 n 0001100612 00000 n 0001100762 00000 n 0001100913 00000 n 0001101064 00000 n 0001101215 00000 n 0001101366 00000 n 0001101516 00000 n 0001101666 00000 n 0001101815 00000 n 0001101966 00000 n 0001102117 00000 n 0001102268 00000 n 0001102419 00000 n 0001102570 00000 n 0001102721 00000 n 0001102872 00000 n 0001103023 00000 n 0001103174 00000 n 0001103325 00000 n 0001103476 00000 n 0001103625 00000 n 0001103774 00000 n 0001103924 00000 n 0001104074 00000 n 0001104225 00000 n 0001104376 00000 n 0001104527 00000 n 0001104677 00000 n 0001104828 00000 n 0001104978 00000 n 0001105128 00000 n 0001105278 00000 n 0001105429 00000 n 0001105580 00000 n 0001105730 00000 n 0001105881 00000 n 0001106031 00000 n 0001106182 00000 n 0001106331 00000 n 0001106482 00000 n 0001106633 00000 n 0001106784 00000 n 0001106935 00000 n 0001107086 00000 n 0001107237 00000 n 0001107388 00000 n 0001107539 00000 n 0001107689 00000 n 0001107839 00000 n 0001107990 00000 n 0001108140 00000 n 0001108290 00000 n 0001108439 00000 n 0001108590 00000 n 0001108741 00000 n 0001108891 00000 n 0001109042 00000 n 0001109193 00000 n 0001109344 00000 n 0001109495 00000 n 0001109646 00000 n 0001111495 00000 n 0001109855 00000 n 0001097218 00000 n 0001096221 00000 n 0001109796 00000 n 0001111645 00000 n 0001111795 00000 n 0001111945 00000 n 0001112095 00000 n 0001112246 00000 n 0001112397 00000 n 0001112548 00000 n 0001112699 00000 n 0001112850 00000 n 0001113001 00000 n 0001113152 00000 n 0001113302 00000 n 0001113452 00000 n 0001113602 00000 n 0001113752 00000 n 0001113903 00000 n 0001114054 00000 n 0001114205 00000 n 0001114355 00000 n 0001114506 00000 n 0001114657 00000 n 0001114808 00000 n 0001114959 00000 n 0001115110 00000 n 0001115261 00000 n 0001115411 00000 n 0001115562 00000 n 0001115713 00000 n 0001115864 00000 n 0001116015 00000 n 0001116164 00000 n 0001116315 00000 n 0001116466 00000 n 0001116616 00000 n 0001116766 00000 n 0001116917 00000 n 0001117068 00000 n 0001117219 00000 n 0001117370 00000 n 0001117520 00000 n 0001117670 00000 n 0001117821 00000 n 0001117972 00000 n 0001118123 00000 n 0001118274 00000 n 0001118425 00000 n 0001118576 00000 n 0001118727 00000 n 0001118878 00000 n 0001119028 00000 n 0001119178 00000 n 0001119328 00000 n 0001119479 00000 n 0001119630 00000 n 0001119781 00000 n 0001119931 00000 n 0001120082 00000 n 0001120231 00000 n 0001120381 00000 n 0001120589 00000 n 0001110820 00000 n 0001109941 00000 n 0001120530 00000 n 0001122500 00000 n 0001122651 00000 n 0001122802 00000 n 0001122952 00000 n 0001123102 00000 n 0001123252 00000 n 0001123403 00000 n 0001123554 00000 n 0001123706 00000 n 0001123857 00000 n 0001124008 00000 n 0001124157 00000 n 0001124308 00000 n 0001124457 00000 n 0001124608 00000 n 0001124758 00000 n 0001124909 00000 n 0001125060 00000 n 0001125211 00000 n 0001125362 00000 n 0001125511 00000 n 0001125660 00000 n 0001125810 00000 n 0001125961 00000 n 0001126111 00000 n 0001126261 00000 n 0001126410 00000 n 0001126561 00000 n 0001126712 00000 n 0001126863 00000 n 0001127013 00000 n 0001127163 00000 n 0001127313 00000 n 0001127464 00000 n 0001127615 00000 n 0001127766 00000 n 0001127916 00000 n 0001128067 00000 n 0001128217 00000 n 0001128367 00000 n 0001128517 00000 n 0001128668 00000 n 0001128819 00000 n 0001128970 00000 n 0001129121 00000 n 0001129272 00000 n 0001129423 00000 n 0001129574 00000 n 0001129725 00000 n 0001129876 00000 n 0001130027 00000 n 0001130177 00000 n 0001130328 00000 n 0001130478 00000 n 0001130629 00000 n 0001130779 00000 n 0001130928 00000 n 0001131078 00000 n 0001131227 00000 n 0001131378 00000 n 0001131528 00000 n 0001131679 00000 n 0001131829 00000 n 0001131980 00000 n 0001132130 00000 n 0001132280 00000 n 0001132431 00000 n 0001132582 00000 n 0001132733 00000 n 0001132884 00000 n 0001133035 00000 n 0001133185 00000 n 0001133336 00000 n 0001133487 00000 n 0001133638 00000 n 0001133789 00000 n 0001133940 00000 n 0001134091 00000 n 0001134241 00000 n 0001136569 00000 n 0001134449 00000 n 0001121654 00000 n 0001120675 00000 n 0001134390 00000 n 0001136718 00000 n 0001136869 00000 n 0001137020 00000 n 0001137171 00000 n 0001137321 00000 n 0001137470 00000 n 0001137620 00000 n 0001137769 00000 n 0001137919 00000 n 0001138068 00000 n 0001138219 00000 n 0001138370 00000 n 0001138520 00000 n 0001138671 00000 n 0001138820 00000 n 0001138971 00000 n 0001139121 00000 n 0001139272 00000 n 0001139421 00000 n 0001139572 00000 n 0001139723 00000 n 0001139874 00000 n 0001140025 00000 n 0001140176 00000 n 0001140326 00000 n 0001140476 00000 n 0001140627 00000 n 0001140777 00000 n 0001140928 00000 n 0001141079 00000 n 0001141230 00000 n 0001141381 00000 n 0001141532 00000 n 0001141683 00000 n 0001141832 00000 n 0001141983 00000 n 0001142133 00000 n 0001142284 00000 n 0001142434 00000 n 0001142584 00000 n 0001142735 00000 n 0001142886 00000 n 0001143037 00000 n 0001143187 00000 n 0001143338 00000 n 0001143488 00000 n 0001143638 00000 n 0001143789 00000 n 0001143940 00000 n 0001144091 00000 n 0001144241 00000 n 0001144391 00000 n 0001144540 00000 n 0001144688 00000 n 0001144839 00000 n 0001144990 00000 n 0001145140 00000 n 0001145290 00000 n 0001145440 00000 n 0001145590 00000 n 0001145741 00000 n 0001145891 00000 n 0001146042 00000 n 0001146192 00000 n 0001146343 00000 n 0001146492 00000 n 0001146642 00000 n 0001146791 00000 n 0001146942 00000 n 0001147093 00000 n 0001147243 00000 n 0001147394 00000 n 0001147545 00000 n 0001147696 00000 n 0001147847 00000 n 0001147998 00000 n 0001148149 00000 n 0001148300 00000 n 0001148451 00000 n 0001148602 00000 n 0001148753 00000 n 0001148904 00000 n 0001149055 00000 n 0001149205 00000 n 0001149355 00000 n 0001149505 00000 n 0001149655 00000 n 0001149806 00000 n 0001149957 00000 n 0001150108 00000 n 0001150259 00000 n 0001150410 00000 n 0001150560 00000 n 0001152582 00000 n 0001150767 00000 n 0001135588 00000 n 0001134535 00000 n 0001150708 00000 n 0001152733 00000 n 0001152884 00000 n 0001153035 00000 n 0001153186 00000 n 0001153337 00000 n 0001153486 00000 n 0001153637 00000 n 0001153787 00000 n 0001153938 00000 n 0001154088 00000 n 0001154235 00000 n 0001154386 00000 n 0001154536 00000 n 0001154687 00000 n 0001154838 00000 n 0001154989 00000 n 0001155139 00000 n 0001155290 00000 n 0001155441 00000 n 0001155592 00000 n 0001155743 00000 n 0001155894 00000 n 0001156045 00000 n 0001156196 00000 n 0001156347 00000 n 0001156498 00000 n 0001156648 00000 n 0001156798 00000 n 0001156948 00000 n 0001157099 00000 n 0001157249 00000 n 0001157399 00000 n 0001157550 00000 n 0001157700 00000 n 0001157851 00000 n 0001158002 00000 n 0001158152 00000 n 0001158303 00000 n 0001158454 00000 n 0001158603 00000 n 0001158752 00000 n 0001158902 00000 n 0001159053 00000 n 0001159203 00000 n 0001159354 00000 n 0001159505 00000 n 0001159656 00000 n 0001159807 00000 n 0001159957 00000 n 0001160108 00000 n 0001160259 00000 n 0001160409 00000 n 0001160560 00000 n 0001160711 00000 n 0001160862 00000 n 0001161013 00000 n 0001161164 00000 n 0001161315 00000 n 0001161466 00000 n 0001161617 00000 n 0001161768 00000 n 0001161919 00000 n 0001162070 00000 n 0001162221 00000 n 0001162372 00000 n 0001162522 00000 n 0001162673 00000 n 0001162823 00000 n 0001164921 00000 n 0001163031 00000 n 0001151826 00000 n 0001150853 00000 n 0001162972 00000 n 0001165072 00000 n 0001165223 00000 n 0001165373 00000 n 0001165524 00000 n 0001165675 00000 n 0001165826 00000 n 0001165975 00000 n 0001166126 00000 n 0001166277 00000 n 0001166428 00000 n 0001166579 00000 n 0001166730 00000 n 0001166880 00000 n 0001167030 00000 n 0001167181 00000 n 0001167332 00000 n 0001167483 00000 n 0001167634 00000 n 0001167785 00000 n 0001167936 00000 n 0001168087 00000 n 0001168238 00000 n 0001168389 00000 n 0001168541 00000 n 0001168692 00000 n 0001168844 00000 n 0001168995 00000 n 0001169147 00000 n 0001169298 00000 n 0001169449 00000 n 0001169600 00000 n 0001169751 00000 n 0001169902 00000 n 0001170054 00000 n 0001170205 00000 n 0001170355 00000 n 0001170505 00000 n 0001170655 00000 n 0001170806 00000 n 0001170957 00000 n 0001171108 00000 n 0001171257 00000 n 0001171409 00000 n 0001171561 00000 n 0001171711 00000 n 0001171861 00000 n 0001172011 00000 n 0001172162 00000 n 0001172312 00000 n 0001172463 00000 n 0001172614 00000 n 0001172764 00000 n 0001172914 00000 n 0001173065 00000 n 0001173216 00000 n 0001173367 00000 n 0001173518 00000 n 0001173669 00000 n 0001173820 00000 n 0001173971 00000 n 0001174122 00000 n 0001174273 00000 n 0001174424 00000 n 0001174575 00000 n 0001174725 00000 n 0001174876 00000 n 0001175027 00000 n 0001175177 00000 n 0001175327 00000 n 0001175477 00000 n 0001175628 00000 n 0001175779 00000 n 0001175930 00000 n 0001176081 00000 n 0001176232 00000 n 0001176383 00000 n 0001178664 00000 n 0001176592 00000 n 0001164093 00000 n 0001163117 00000 n 0001176533 00000 n 0001440465 00000 n 0001178815 00000 n 0001178966 00000 n 0001179118 00000 n 0001179269 00000 n 0001179420 00000 n 0001179571 00000 n 0001179721 00000 n 0001179873 00000 n 0001180024 00000 n 0001180176 00000 n 0001180327 00000 n 0001180479 00000 n 0001180630 00000 n 0001180781 00000 n 0001180932 00000 n 0001181083 00000 n 0001181235 00000 n 0001181386 00000 n 0001181538 00000 n 0001181689 00000 n 0001181841 00000 n 0001181993 00000 n 0001182145 00000 n 0001182296 00000 n 0001182447 00000 n 0001182599 00000 n 0001182750 00000 n 0001182901 00000 n 0001183052 00000 n 0001183203 00000 n 0001183355 00000 n 0001183506 00000 n 0001183658 00000 n 0001183810 00000 n 0001183962 00000 n 0001184114 00000 n 0001184266 00000 n 0001184417 00000 n 0001184569 00000 n 0001184721 00000 n 0001184873 00000 n 0001185024 00000 n 0001185176 00000 n 0001185326 00000 n 0001185476 00000 n 0001185628 00000 n 0001185780 00000 n 0001185932 00000 n 0001186084 00000 n 0001186235 00000 n 0001186385 00000 n 0001186537 00000 n 0001186687 00000 n 0001186838 00000 n 0001186990 00000 n 0001187142 00000 n 0001187294 00000 n 0001187446 00000 n 0001187598 00000 n 0001187750 00000 n 0001187902 00000 n 0001188054 00000 n 0001188205 00000 n 0001188356 00000 n 0001188507 00000 n 0001188658 00000 n 0001188808 00000 n 0001188959 00000 n 0001189110 00000 n 0001189261 00000 n 0001189411 00000 n 0001189562 00000 n 0001189712 00000 n 0001189863 00000 n 0001190013 00000 n 0001190164 00000 n 0001190315 00000 n 0001190465 00000 n 0001190616 00000 n 0001190766 00000 n 0001190917 00000 n 0001191068 00000 n 0001191219 00000 n 0001191370 00000 n 0001191521 00000 n 0001191671 00000 n 0001191822 00000 n 0001191973 00000 n 0001192123 00000 n 0001194264 00000 n 0001192331 00000 n 0001177719 00000 n 0001176678 00000 n 0001192272 00000 n 0001194414 00000 n 0001194564 00000 n 0001194715 00000 n 0001194865 00000 n 0001195016 00000 n 0001195166 00000 n 0001195316 00000 n 0001195465 00000 n 0001195616 00000 n 0001195765 00000 n 0001195916 00000 n 0001196067 00000 n 0001196216 00000 n 0001196367 00000 n 0001196518 00000 n 0001196669 00000 n 0001196819 00000 n 0001196970 00000 n 0001197120 00000 n 0001197270 00000 n 0001197422 00000 n 0001197573 00000 n 0001197724 00000 n 0001197875 00000 n 0001198025 00000 n 0001198175 00000 n 0001198325 00000 n 0001198475 00000 n 0001198625 00000 n 0001198776 00000 n 0001198927 00000 n 0001199078 00000 n 0001199229 00000 n 0001199381 00000 n 0001199533 00000 n 0001199683 00000 n 0001199835 00000 n 0001199986 00000 n 0001200136 00000 n 0001200287 00000 n 0001200439 00000 n 0001200591 00000 n 0001200743 00000 n 0001200895 00000 n 0001201046 00000 n 0001201198 00000 n 0001201349 00000 n 0001201500 00000 n 0001201651 00000 n 0001201803 00000 n 0001201955 00000 n 0001202106 00000 n 0001202257 00000 n 0001202408 00000 n 0001202560 00000 n 0001202711 00000 n 0001202862 00000 n 0001203014 00000 n 0001203166 00000 n 0001203318 00000 n 0001203470 00000 n 0001203622 00000 n 0001203774 00000 n 0001203926 00000 n 0001204078 00000 n 0001204229 00000 n 0001204380 00000 n 0001204531 00000 n 0001204683 00000 n 0001204835 00000 n 0001204987 00000 n 0001205139 00000 n 0001205291 00000 n 0001205443 00000 n 0001205593 00000 n 0001205743 00000 n 0001207817 00000 n 0001205951 00000 n 0001193436 00000 n 0001192417 00000 n 0001205892 00000 n 0001207967 00000 n 0001208118 00000 n 0001208268 00000 n 0001208419 00000 n 0001208570 00000 n 0001208720 00000 n 0001208871 00000 n 0001209021 00000 n 0001209172 00000 n 0001209322 00000 n 0001209472 00000 n 0001209623 00000 n 0001209774 00000 n 0001209925 00000 n 0001210075 00000 n 0001210226 00000 n 0001210376 00000 n 0001210526 00000 n 0001210677 00000 n 0001210827 00000 n 0001210978 00000 n 0001211129 00000 n 0001211281 00000 n 0001211432 00000 n 0001211583 00000 n 0001211734 00000 n 0001211886 00000 n 0001212038 00000 n 0001212190 00000 n 0001212342 00000 n 0001212494 00000 n 0001212644 00000 n 0001212794 00000 n 0001212944 00000 n 0001213093 00000 n 0001213244 00000 n 0001213395 00000 n 0001213545 00000 n 0001213696 00000 n 0001213847 00000 n 0001213997 00000 n 0001214147 00000 n 0001214297 00000 n 0001214448 00000 n 0001214598 00000 n 0001214748 00000 n 0001214900 00000 n 0001215052 00000 n 0001215204 00000 n 0001215356 00000 n 0001215508 00000 n 0001215660 00000 n 0001215812 00000 n 0001215964 00000 n 0001216116 00000 n 0001216268 00000 n 0001216420 00000 n 0001216572 00000 n 0001216724 00000 n 0001216876 00000 n 0001217028 00000 n 0001217179 00000 n 0001217330 00000 n 0001217479 00000 n 0001219720 00000 n 0001217689 00000 n 0001207097 00000 n 0001206037 00000 n 0001217630 00000 n 0001219871 00000 n 0001220022 00000 n 0001220173 00000 n 0001220324 00000 n 0001220475 00000 n 0001220626 00000 n 0001220776 00000 n 0001220926 00000 n 0001221076 00000 n 0001221227 00000 n 0001221378 00000 n 0001221529 00000 n 0001221679 00000 n 0001221828 00000 n 0001221978 00000 n 0001222128 00000 n 0001222279 00000 n 0001222430 00000 n 0001222581 00000 n 0001222732 00000 n 0001222883 00000 n 0001223034 00000 n 0001223185 00000 n 0001223336 00000 n 0001223488 00000 n 0001223640 00000 n 0001223791 00000 n 0001223943 00000 n 0001224094 00000 n 0001224246 00000 n 0001224397 00000 n 0001224547 00000 n 0001224698 00000 n 0001224850 00000 n 0001225002 00000 n 0001225153 00000 n 0001225305 00000 n 0001225456 00000 n 0001225608 00000 n 0001225759 00000 n 0001225911 00000 n 0001226062 00000 n 0001226214 00000 n 0001226366 00000 n 0001226517 00000 n 0001226669 00000 n 0001226821 00000 n 0001226973 00000 n 0001227124 00000 n 0001227276 00000 n 0001227428 00000 n 0001227580 00000 n 0001227732 00000 n 0001227883 00000 n 0001228035 00000 n 0001228187 00000 n 0001228339 00000 n 0001228491 00000 n 0001228643 00000 n 0001228795 00000 n 0001228947 00000 n 0001229098 00000 n 0001229250 00000 n 0001229402 00000 n 0001229554 00000 n 0001229706 00000 n 0001229857 00000 n 0001230009 00000 n 0001230160 00000 n 0001230311 00000 n 0001230463 00000 n 0001230615 00000 n 0001230767 00000 n 0001230919 00000 n 0001231071 00000 n 0001231222 00000 n 0001231373 00000 n 0001231524 00000 n 0001231674 00000 n 0001233855 00000 n 0001231882 00000 n 0001218865 00000 n 0001217775 00000 n 0001231823 00000 n 0001234004 00000 n 0001234156 00000 n 0001234308 00000 n 0001234460 00000 n 0001234612 00000 n 0001234762 00000 n 0001234914 00000 n 0001235064 00000 n 0001235216 00000 n 0001235366 00000 n 0001235517 00000 n 0001235668 00000 n 0001235819 00000 n 0001235970 00000 n 0001236121 00000 n 0001236272 00000 n 0001236423 00000 n 0001236573 00000 n 0001236723 00000 n 0001236873 00000 n 0001237024 00000 n 0001237175 00000 n 0001237326 00000 n 0001237477 00000 n 0001237629 00000 n 0001237781 00000 n 0001237933 00000 n 0001238085 00000 n 0001238237 00000 n 0001238389 00000 n 0001238541 00000 n 0001238691 00000 n 0001238842 00000 n 0001238994 00000 n 0001239146 00000 n 0001239298 00000 n 0001239450 00000 n 0001239601 00000 n 0001239753 00000 n 0001239904 00000 n 0001240055 00000 n 0001240206 00000 n 0001240358 00000 n 0001240510 00000 n 0001240662 00000 n 0001240813 00000 n 0001240965 00000 n 0001241117 00000 n 0001241268 00000 n 0001241420 00000 n 0001241571 00000 n 0001241723 00000 n 0001241874 00000 n 0001242026 00000 n 0001242178 00000 n 0001242330 00000 n 0001242482 00000 n 0001242632 00000 n 0001242784 00000 n 0001242936 00000 n 0001243088 00000 n 0001243238 00000 n 0001243389 00000 n 0001243541 00000 n 0001243693 00000 n 0001243844 00000 n 0001243996 00000 n 0001244148 00000 n 0001244300 00000 n 0001244452 00000 n 0001244604 00000 n 0001244756 00000 n 0001244908 00000 n 0001245060 00000 n 0001245212 00000 n 0001245421 00000 n 0001233036 00000 n 0001231968 00000 n 0001245362 00000 n 0001247330 00000 n 0001247482 00000 n 0001247634 00000 n 0001247785 00000 n 0001247936 00000 n 0001248087 00000 n 0001248239 00000 n 0001248391 00000 n 0001248543 00000 n 0001248695 00000 n 0001248847 00000 n 0001248998 00000 n 0001249150 00000 n 0001249302 00000 n 0001249454 00000 n 0001249606 00000 n 0001249758 00000 n 0001249910 00000 n 0001250062 00000 n 0001250213 00000 n 0001250365 00000 n 0001250515 00000 n 0001250667 00000 n 0001250818 00000 n 0001250970 00000 n 0001251121 00000 n 0001251273 00000 n 0001251425 00000 n 0001251577 00000 n 0001251729 00000 n 0001251880 00000 n 0001252032 00000 n 0001252183 00000 n 0001252334 00000 n 0001252485 00000 n 0001252637 00000 n 0001252789 00000 n 0001252940 00000 n 0001253092 00000 n 0001253244 00000 n 0001253395 00000 n 0001253547 00000 n 0001253699 00000 n 0001253851 00000 n 0001254003 00000 n 0001254155 00000 n 0001254307 00000 n 0001254458 00000 n 0001254608 00000 n 0001254759 00000 n 0001254911 00000 n 0001255063 00000 n 0001255215 00000 n 0001255367 00000 n 0001255519 00000 n 0001255671 00000 n 0001255823 00000 n 0001255975 00000 n 0001256127 00000 n 0001256279 00000 n 0001256431 00000 n 0001256583 00000 n 0001256735 00000 n 0001256887 00000 n 0001257039 00000 n 0001257191 00000 n 0001257342 00000 n 0001257493 00000 n 0001257644 00000 n 0001257796 00000 n 0001257948 00000 n 0001258100 00000 n 0001258252 00000 n 0001258404 00000 n 0001258556 00000 n 0001260830 00000 n 0001258766 00000 n 0001246520 00000 n 0001245507 00000 n 0001258707 00000 n 0001440590 00000 n 0001260981 00000 n 0001261133 00000 n 0001261284 00000 n 0001261435 00000 n 0001261586 00000 n 0001261737 00000 n 0001261888 00000 n 0001262039 00000 n 0001262191 00000 n 0001262342 00000 n 0001262494 00000 n 0001262646 00000 n 0001262798 00000 n 0001262950 00000 n 0001263101 00000 n 0001263252 00000 n 0001263403 00000 n 0001263553 00000 n 0001263703 00000 n 0001263853 00000 n 0001264004 00000 n 0001264155 00000 n 0001264307 00000 n 0001264459 00000 n 0001264610 00000 n 0001264762 00000 n 0001264914 00000 n 0001265066 00000 n 0001265218 00000 n 0001265370 00000 n 0001265522 00000 n 0001265674 00000 n 0001265825 00000 n 0001265976 00000 n 0001266127 00000 n 0001266276 00000 n 0001266425 00000 n 0001266575 00000 n 0001266726 00000 n 0001266876 00000 n 0001267027 00000 n 0001267177 00000 n 0001267327 00000 n 0001267477 00000 n 0001267627 00000 n 0001267778 00000 n 0001267927 00000 n 0001268078 00000 n 0001268229 00000 n 0001268379 00000 n 0001268530 00000 n 0001268680 00000 n 0001268830 00000 n 0001268980 00000 n 0001269131 00000 n 0001269282 00000 n 0001269433 00000 n 0001269584 00000 n 0001269735 00000 n 0001269886 00000 n 0001270037 00000 n 0001270188 00000 n 0001270338 00000 n 0001270489 00000 n 0001270639 00000 n 0001270790 00000 n 0001270940 00000 n 0001271091 00000 n 0001271241 00000 n 0001271390 00000 n 0001271541 00000 n 0001271691 00000 n 0001271842 00000 n 0001271991 00000 n 0001272142 00000 n 0001272292 00000 n 0001272442 00000 n 0001272593 00000 n 0001272744 00000 n 0001272895 00000 n 0001273044 00000 n 0001273195 00000 n 0001273346 00000 n 0001273496 00000 n 0001273646 00000 n 0001273797 00000 n 0001273948 00000 n 0001274099 00000 n 0001274250 00000 n 0001274400 00000 n 0001276805 00000 n 0001274608 00000 n 0001259876 00000 n 0001258852 00000 n 0001274549 00000 n 0001276955 00000 n 0001277106 00000 n 0001277257 00000 n 0001277408 00000 n 0001277559 00000 n 0001277708 00000 n 0001277858 00000 n 0001278008 00000 n 0001278159 00000 n 0001278309 00000 n 0001278460 00000 n 0001278610 00000 n 0001278760 00000 n 0001278911 00000 n 0001279061 00000 n 0001279212 00000 n 0001279363 00000 n 0001279514 00000 n 0001279665 00000 n 0001279816 00000 n 0001279967 00000 n 0001280118 00000 n 0001280269 00000 n 0001280420 00000 n 0001280571 00000 n 0001280722 00000 n 0001280872 00000 n 0001281022 00000 n 0001281172 00000 n 0001281323 00000 n 0001281474 00000 n 0001281625 00000 n 0001281776 00000 n 0001281927 00000 n 0001282079 00000 n 0001282231 00000 n 0001282382 00000 n 0001282532 00000 n 0001282683 00000 n 0001282834 00000 n 0001282986 00000 n 0001283138 00000 n 0001283290 00000 n 0001283441 00000 n 0001283593 00000 n 0001283744 00000 n 0001283896 00000 n 0001284048 00000 n 0001284200 00000 n 0001284352 00000 n 0001284504 00000 n 0001284656 00000 n 0001284808 00000 n 0001284960 00000 n 0001285112 00000 n 0001285263 00000 n 0001285414 00000 n 0001285566 00000 n 0001285717 00000 n 0001285868 00000 n 0001286020 00000 n 0001286171 00000 n 0001286321 00000 n 0001286471 00000 n 0001286621 00000 n 0001286772 00000 n 0001286923 00000 n 0001287075 00000 n 0001287226 00000 n 0001287378 00000 n 0001287529 00000 n 0001287681 00000 n 0001287832 00000 n 0001287984 00000 n 0001288136 00000 n 0001288288 00000 n 0001288439 00000 n 0001288591 00000 n 0001288743 00000 n 0001288895 00000 n 0001289047 00000 n 0001289199 00000 n 0001289351 00000 n 0001289502 00000 n 0001289653 00000 n 0001289805 00000 n 0001289956 00000 n 0001291927 00000 n 0001290165 00000 n 0001275878 00000 n 0001274694 00000 n 0001290106 00000 n 0001292078 00000 n 0001292230 00000 n 0001292382 00000 n 0001292534 00000 n 0001292686 00000 n 0001292838 00000 n 0001292990 00000 n 0001293142 00000 n 0001293294 00000 n 0001293446 00000 n 0001293598 00000 n 0001293750 00000 n 0001293902 00000 n 0001294054 00000 n 0001294206 00000 n 0001294358 00000 n 0001294510 00000 n 0001294662 00000 n 0001294813 00000 n 0001294964 00000 n 0001295115 00000 n 0001295267 00000 n 0001295419 00000 n 0001295571 00000 n 0001295723 00000 n 0001295875 00000 n 0001296027 00000 n 0001296179 00000 n 0001296330 00000 n 0001296481 00000 n 0001296631 00000 n 0001296782 00000 n 0001296934 00000 n 0001297086 00000 n 0001297238 00000 n 0001297390 00000 n 0001297542 00000 n 0001297694 00000 n 0001297846 00000 n 0001297998 00000 n 0001298150 00000 n 0001298302 00000 n 0001298454 00000 n 0001298606 00000 n 0001298757 00000 n 0001298907 00000 n 0001299058 00000 n 0001299208 00000 n 0001299359 00000 n 0001299509 00000 n 0001299660 00000 n 0001299811 00000 n 0001299961 00000 n 0001300112 00000 n 0001300261 00000 n 0001300411 00000 n 0001300561 00000 n 0001300711 00000 n 0001300860 00000 n 0001301011 00000 n 0001301162 00000 n 0001301313 00000 n 0001301463 00000 n 0001302369 00000 n 0001301671 00000 n 0001291216 00000 n 0001290251 00000 n 0001301612 00000 n 0001302520 00000 n 0001302671 00000 n 0001302821 00000 n 0001302971 00000 n 0001303180 00000 n 0001302189 00000 n 0001301757 00000 n 0001303121 00000 n 0001303618 00000 n 0001304014 00000 n 0001433639 00000 n 0001304046 00000 n 0001304518 00000 n 0001304543 00000 n 0001304794 00000 n 0001305036 00000 n 0001305426 00000 n 0001306026 00000 n 0001306675 00000 n 0001307311 00000 n 0001307787 00000 n 0001308179 00000 n 0001309083 00000 n 0001309982 00000 n 0001319389 00000 n 0001319743 00000 n 0001322143 00000 n 0001322368 00000 n 0001324522 00000 n 0001324753 00000 n 0001329714 00000 n 0001330034 00000 n 0001332411 00000 n 0001332648 00000 n 0001334513 00000 n 0001334752 00000 n 0001337385 00000 n 0001337698 00000 n 0001339063 00000 n 0001339301 00000 n 0001341160 00000 n 0001341378 00000 n 0001361136 00000 n 0001361744 00000 n 0001380299 00000 n 0001380843 00000 n 0001395334 00000 n 0001395711 00000 n 0001416855 00000 n 0001417488 00000 n 0001433213 00000 n 0001440706 00000 n 0001440830 00000 n 0001440956 00000 n 0001441082 00000 n 0001441208 00000 n 0001441334 00000 n 0001441451 00000 n 0001441561 00000 n 0001455461 00000 n 0001455640 00000 n 0001455817 00000 n 0001455992 00000 n 0001456167 00000 n 0001456336 00000 n 0001456701 00000 n 0001457132 00000 n 0001457821 00000 n 0001458263 00000 n 0001458602 00000 n 0001458941 00000 n 0001459280 00000 n 0001459619 00000 n 0001459958 00000 n 0001460297 00000 n 0001460633 00000 n 0001461097 00000 n 0001461463 00000 n 0001461721 00000 n 0001462249 00000 n 0001462775 00000 n 0001463205 00000 n 0001463604 00000 n 0001464229 00000 n 0001464498 00000 n 0001464683 00000 n 0001464867 00000 n 0001465052 00000 n 0001465236 00000 n 0001465421 00000 n 0001465605 00000 n 0001465790 00000 n 0001465974 00000 n 0001466159 00000 n 0001466342 00000 n 0001466525 00000 n 0001466710 00000 n 0001466894 00000 n 0001467079 00000 n 0001467263 00000 n 0001467448 00000 n 0001467632 00000 n 0001467817 00000 n 0001467998 00000 n 0001468178 00000 n 0001468352 00000 n 0001468529 00000 n 0001468705 00000 n 0001468882 00000 n 0001469058 00000 n 0001469235 00000 n 0001469411 00000 n 0001469588 00000 n 0001469764 00000 n 0001469941 00000 n 0001470116 00000 n 0001470291 00000 n 0001470468 00000 n 0001470642 00000 n 0001470871 00000 n 0001471128 00000 n 0001471396 00000 n 0001471669 00000 n 0001471940 00000 n 0001472205 00000 n 0001472470 00000 n 0001472741 00000 n 0001473012 00000 n 0001473285 00000 n 0001473557 00000 n 0001473830 00000 n 0001474102 00000 n 0001474375 00000 n 0001474647 00000 n 0001474920 00000 n 0001475192 00000 n 0001475465 00000 n 0001475736 00000 n 0001476005 00000 n 0001476273 00000 n 0001476537 00000 n 0001476800 00000 n 0001477057 00000 n 0001477316 00000 n 0001477581 00000 n 0001477841 00000 n 0001478100 00000 n 0001478365 00000 n 0001478629 00000 n 0001478890 00000 n 0001479147 00000 n 0001479406 00000 n 0001479671 00000 n 0001479928 00000 n 0001480189 00000 n 0001480454 00000 n 0001480718 00000 n 0001480983 00000 n 0001481246 00000 n 0001481509 00000 n 0001481771 00000 n 0001482028 00000 n 0001482285 00000 n 0001482544 00000 n 0001482809 00000 n 0001483074 00000 n 0001483339 00000 n 0001483612 00000 n 0001483880 00000 n 0001484145 00000 n 0001484414 00000 n 0001484679 00000 n 0001484944 00000 n 0001485209 00000 n 0001485474 00000 n 0001485739 00000 n 0001486008 00000 n 0001486281 00000 n 0001486553 00000 n 0001486824 00000 n 0001487089 00000 n 0001487354 00000 n 0001487619 00000 n 0001487884 00000 n 0001488149 00000 n 0001488414 00000 n 0001488687 00000 n 0001488956 00000 n 0001489221 00000 n 0001489486 00000 n 0001489747 00000 n 0001490004 00000 n 0001490266 00000 n 0001490527 00000 n 0001490784 00000 n 0001491041 00000 n 0001491298 00000 n 0001491555 00000 n 0001491812 00000 n 0001492075 00000 n 0001492338 00000 n 0001492603 00000 n 0001492867 00000 n 0001493132 00000 n 0001493396 00000 n 0001493661 00000 n 0001493925 00000 n 0001494190 00000 n 0001494454 00000 n 0001494719 00000 n 0001494982 00000 n 0001495245 00000 n 0001495510 00000 n 0001495773 00000 n 0001496032 00000 n 0001496289 00000 n 0001496548 00000 n 0001496811 00000 n 0001497068 00000 n 0001497325 00000 n 0001497585 00000 n 0001497850 00000 n 0001498114 00000 n 0001498377 00000 n 0001498634 00000 n 0001498956 00000 n 0001499389 00000 n 0001500014 00000 n 0001500447 00000 n 0001500879 00000 n 0001501312 00000 n 0001501745 00000 n 0001502178 00000 n 0001502611 00000 n 0001503043 00000 n 0001503476 00000 n 0001503908 00000 n 0001504341 00000 n 0001504774 00000 n 0001505207 00000 n 0001505639 00000 n 0001506072 00000 n 0001506504 00000 n 0001506936 00000 n 0001507255 00000 n 0001507464 00000 n 0001507672 00000 n 0001507881 00000 n 0001508089 00000 n 0001508298 00000 n 0001508505 00000 n 0001508712 00000 n 0001508921 00000 n 0001509129 00000 n 0001509338 00000 n 0001509546 00000 n 0001509755 00000 n 0001509963 00000 n 0001510147 00000 n 0001510454 00000 n 0001510949 00000 n 0001511574 00000 n 0001512005 00000 n 0001512437 00000 n 0001512836 00000 n 0001513236 00000 n 0001513669 00000 n 0001514102 00000 n 0001514535 00000 n 0001514968 00000 n 0001515593 00000 n 0001516023 00000 n 0001516504 00000 n 0001516957 00000 n 0001517446 00000 n 0001517935 00000 n 0001518332 00000 n 0001518813 00000 n 0001519294 00000 n 0001519709 00000 n 0001520190 00000 n 0001520671 00000 n 0001521152 00000 n 0001521633 00000 n 0001522015 00000 n 0001522424 00000 n 0001522905 00000 n 0001523386 00000 n 0001523834 00000 n 0001524315 00000 n 0001524796 00000 n 0001525277 00000 n 0001525758 00000 n 0001526239 00000 n 0001526720 00000 n 0001527168 00000 n 0001527649 00000 n 0001528130 00000 n 0001528611 00000 n 0001529026 00000 n 0001529441 00000 n 0001529922 00000 n 0001530403 00000 n 0001530884 00000 n 0001531365 00000 n 0001531846 00000 n 0001532327 00000 n 0001532808 00000 n 0001533289 00000 n 0001533770 00000 n 0001534251 00000 n 0001534732 00000 n 0001535213 00000 n 0001535628 00000 n 0001536109 00000 n 0001536526 00000 n 0001536752 00000 n 0001536978 00000 n 0001537207 00000 n 0001537442 00000 n 0001537674 00000 n 0001537901 00000 n 0001538171 00000 n 0001538441 00000 n 0001538702 00000 n 0001538969 00000 n 0001539236 00000 n 0001539509 00000 n 0001539784 00000 n 0001540059 00000 n 0001540334 00000 n 0001540609 00000 n 0001540884 00000 n 0001541154 00000 n 0001541423 00000 n 0001541690 00000 n 0001541957 00000 n 0001542224 00000 n 0001542491 00000 n 0001542848 00000 n 0001543278 00000 n 0001543774 00000 n 0001544398 00000 n 0001544664 00000 n 0001545257 00000 n 0001545946 00000 n 0001546538 00000 n 0001546968 00000 n 0001547401 00000 n 0001547832 00000 n 0001548261 00000 n 0001548673 00000 n 0001549130 00000 n 0001549681 00000 n 0001550394 00000 n 0001551043 00000 n 0001551498 00000 n 0001551955 00000 n 0001552379 00000 n 0001552836 00000 n 0001553293 00000 n 0001553750 00000 n 0001554207 00000 n 0001554664 00000 n 0001555281 00000 n 0001555834 00000 n 0001556198 00000 n 0001556638 00000 n 0001557076 00000 n 0001557541 00000 n 0001557948 00000 n 0001558421 00000 n 0001558894 00000 n 0001559527 00000 n 0001560256 00000 n 0001560857 00000 n 0001561330 00000 n 0001561729 00000 n 0001561974 00000 n 0001562124 00000 n 0001562293 00000 n 0001562435 00000 n 0001562653 00000 n 0001562802 00000 n 0001562919 00000 n 0001563037 00000 n 0001563154 00000 n 0001563270 00000 n 0001563396 00000 n 0001563533 00000 n 0001563672 00000 n 0001563812 00000 n 0001563951 00000 n 0001564088 00000 n 0001564225 00000 n 0001564362 00000 n 0001564500 00000 n 0001564639 00000 n 0001564777 00000 n 0001564915 00000 n 0001565053 00000 n 0001565189 00000 n 0001565326 00000 n 0001565464 00000 n 0001565600 00000 n 0001565737 00000 n 0001565928 00000 n 0001566108 00000 n 0001566288 00000 n 0001566440 00000 n 0001566563 00000 n 0001566687 00000 n 0001566838 00000 n 0001567018 00000 n 0001567237 00000 n 0001567399 00000 n 0001567591 00000 n 0001567783 00000 n 0001567942 00000 n 0001568134 00000 n 0001568326 00000 n 0001568487 00000 n 0001568622 00000 n 0001568763 00000 n 0001568904 00000 n 0001569096 00000 n 0001569308 00000 n 0001569523 00000 n 0001569741 00000 n 0001569927 00000 n 0001570082 00000 n 0001570271 00000 n 0001570414 00000 n 0001570532 00000 n 0001570661 00000 n 0001570801 00000 n 0001570940 00000 n 0001571099 00000 n 0001571286 00000 n 0001571448 00000 n 0001571634 00000 n 0001571818 00000 n 0001571975 00000 n 0001572108 00000 n 0001572226 00000 n 0001572266 00000 n 0001572466 00000 n trailer << /Size 7744 /Root 7742 0 R /Info 7743 0 R /ID [ ] >> startxref 1572798 %%EOF